home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c082_122 / 7.ddi / WINCLUDE.ZIP / MMSYSTEM.H < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-10  |  78.3 KB  |  1,924 lines

  1. /****************************************************************************/
  2. /*                                                                          */
  3. /*        MMSYSTEM.H - Include file for Multimedia APIs                     */
  4. /*                                                                          */
  5. /****************************************************************************/
  6.  
  7.  
  8. /*    If defined, the following flags inhibit inclusion
  9.  *    of the indicated items:
  10.  *
  11.  *      MMNODRV          - Installable driver support
  12.  *      MMNOSOUND        - Sound support
  13.  *      MMNOWAVE         - Waveform support
  14.  *      MMNOMIDI         - MIDI support
  15.  *      MMNOAUX          - Auxiliary audio support
  16.  *      MMNOTIMER        - Timer support
  17.  *      MMNOJOY          - Joystick support
  18.  *      MMNOMCI          - MCI support
  19.  *      MMNOMMIO         - Multimedia file I/O support
  20.  *      MMNOMMSYSTEM     - General MMSYSTEM functions
  21.  */
  22.  
  23. #ifndef __MMSYSTEM_H    /* prevent multiple includes */
  24. #define __MMSYSTEM_H
  25.  
  26. #ifndef __WINDOWS_H
  27. #include <windows.h>    /* <windows.h> must be included */
  28. #endif  /* __WINDOWS_H */
  29.  
  30. #if !defined(WINVER) || (WINVER < 0x030a)
  31. #error Multimedia APIs require Windows 3.1
  32. #endif
  33.  
  34. #ifndef RC_INVOKED
  35. #pragma option -a-      /* Assume byte packing throughout */
  36. #endif
  37.  
  38. #ifdef __cplusplus
  39. extern "C" {            /* Assume C declarations for C++ */
  40. #endif  /* __cplusplus */
  41.  
  42.  
  43. /****************************************************************************
  44.  
  45.                     General constants and data types
  46.  
  47. ****************************************************************************/
  48.  
  49. /* general constants */
  50. #define MAXPNAMELEN      32     /* max product name length (including NULL) */
  51. #define MAXERRORLENGTH   128    /* max error text length (including NULL) */
  52.  
  53. /* general data types */
  54. typedef WORD    VERSION;        /* major (high byte), minor (low byte) */
  55.  
  56. /* MMTIME data structure */
  57. typedef struct mmtime_tag {
  58.     UINT    wType;              /* indicates the contents of the union */
  59.     union {
  60.         DWORD ms;               /* milliseconds */
  61.         DWORD sample;           /* samples */
  62.         DWORD cb;               /* byte count */
  63.         struct {                /* SMPTE */
  64.             BYTE hour;          /* hours */
  65.             BYTE min;           /* minutes */
  66.             BYTE sec;           /* seconds */
  67.             BYTE frame;         /* frames  */
  68.             BYTE fps;           /* frames per second */
  69.             BYTE dummy;         /* pad */
  70.             } smpte;
  71.         struct {                /* MIDI */
  72.             DWORD songptrpos;   /* song pointer position */
  73.             } midi;
  74.         } u;
  75.     } MMTIME;
  76. typedef MMTIME       *PMMTIME;
  77. typedef MMTIME NEAR *NPMMTIME;
  78. typedef MMTIME FAR  *LPMMTIME;
  79.  
  80. /* types for wType field in MMTIME struct */
  81. #define TIME_MS         0x0001  /* time in milliseconds */
  82. #define TIME_SAMPLES    0x0002  /* number of wave samples */
  83. #define TIME_BYTES      0x0004  /* current byte offset */
  84. #define TIME_SMPTE      0x0008  /* SMPTE time */
  85. #define TIME_MIDI       0x0010  /* MIDI time */
  86.  
  87.  
  88. /****************************************************************************
  89.  
  90.                     Multimedia Extensions Window Messages
  91.  
  92. ****************************************************************************/
  93.  
  94. #define MM_JOY1MOVE         0x3A0           /* joystick */
  95. #define MM_JOY2MOVE         0x3A1
  96. #define MM_JOY1ZMOVE        0x3A2
  97. #define MM_JOY2ZMOVE        0x3A3
  98. #define MM_JOY1BUTTONDOWN   0x3B5
  99. #define MM_JOY2BUTTONDOWN   0x3B6
  100. #define MM_JOY1BUTTONUP     0x3B7
  101. #define MM_JOY2BUTTONUP     0x3B8
  102.  
  103. #define MM_MCINOTIFY        0x3B9           /* MCI */
  104.  
  105. #define MM_WOM_OPEN         0x3BB           /* waveform output */
  106. #define MM_WOM_CLOSE        0x3BC
  107. #define MM_WOM_DONE         0x3BD
  108.  
  109. #define MM_WIM_OPEN         0x3BE           /* waveform input */
  110. #define MM_WIM_CLOSE        0x3BF
  111. #define MM_WIM_DATA         0x3C0
  112.  
  113. #define MM_MIM_OPEN         0x3C1           /* MIDI input */
  114. #define MM_MIM_CLOSE        0x3C2
  115. #define MM_MIM_DATA         0x3C3
  116. #define MM_MIM_LONGDATA     0x3C4
  117. #define MM_MIM_ERROR        0x3C5
  118. #define MM_MIM_LONGERROR    0x3C6
  119.  
  120. #define MM_MOM_OPEN         0x3C7           /* MIDI output */
  121. #define MM_MOM_CLOSE        0x3C8
  122. #define MM_MOM_DONE         0x3C9
  123.  
  124.  
  125. /****************************************************************************
  126.  
  127.                 String resource number bases (internal use)
  128.  
  129. ****************************************************************************/
  130.  
  131. #define MMSYSERR_BASE          0
  132. #define WAVERR_BASE            32
  133. #define MIDIERR_BASE           64
  134. #define TIMERR_BASE            96
  135. #define JOYERR_BASE            160
  136. #define MCIERR_BASE            256
  137.  
  138. #define MCI_STRING_OFFSET      512
  139. #define MCI_VD_OFFSET          1024
  140. #define MCI_CD_OFFSET          1088
  141. #define MCI_WAVE_OFFSET        1152
  142. #define MCI_SEQ_OFFSET         1216
  143.  
  144. /****************************************************************************
  145.  
  146.                         General error return values
  147.  
  148. ****************************************************************************/
  149.  
  150. /* general error return values */
  151. #define MMSYSERR_NOERROR      0                    /* no error */
  152. #define MMSYSERR_ERROR        (MMSYSERR_BASE + 1)  /* unspecified error */
  153. #define MMSYSERR_BADDEVICEID  (MMSYSERR_BASE + 2)  /* device ID out of range */
  154. #define MMSYSERR_NOTENABLED   (MMSYSERR_BASE + 3)  /* driver failed enable */
  155. #define MMSYSERR_ALLOCATED    (MMSYSERR_BASE + 4)  /* device already allocated */
  156. #define MMSYSERR_INVALHANDLE  (MMSYSERR_BASE + 5)  /* device handle is invalid */
  157. #define MMSYSERR_NODRIVER     (MMSYSERR_BASE + 6)  /* no device driver present */
  158. #define MMSYSERR_NOMEM        (MMSYSERR_BASE + 7)  /* memory allocation error */
  159. #define MMSYSERR_NOTSUPPORTED (MMSYSERR_BASE + 8)  /* function isn't supported */
  160. #define MMSYSERR_BADERRNUM    (MMSYSERR_BASE + 9)  /* error value out of range */
  161. #define MMSYSERR_INVALFLAG    (MMSYSERR_BASE + 10) /* invalid flag passed */
  162. #define MMSYSERR_INVALPARAM   (MMSYSERR_BASE + 11) /* invalid parameter passed */
  163. #define MMSYSERR_LASTERROR    (MMSYSERR_BASE + 11) /* last error in range */
  164.  
  165.  
  166. /* If included with the 3.0 windows.h, define compatible aliases */
  167. #if !defined(WINVER) || (WINVER < 0x030a)
  168. DECLARE_HANDLE(HDRVR);
  169. #endif  /* WIN3.0 */
  170.  
  171. #ifndef MMNODRV
  172. /****************************************************************************
  173.  
  174.                         Installable driver support
  175.  
  176. ****************************************************************************/
  177.  
  178. /* If included with the 3.0 windows.h, define compatible aliases */
  179. #if !defined(WINVER) || (WINVER < 0x030a)
  180.  
  181. /* return values from DriverProc() function */
  182. #define DRV_CANCEL              0x0000
  183. #define DRV_OK                  0x0001
  184. #define DRV_RESTART             0x0002
  185.  
  186. /* Driver messages */
  187. #define DRV_LOAD                0x0001
  188. #define DRV_ENABLE              0x0002
  189. #define DRV_OPEN                0x0003
  190. #define DRV_CLOSE               0x0004
  191. #define DRV_DISABLE             0x0005
  192. #define DRV_FREE                0x0006
  193. #define DRV_CONFIGURE           0x0007
  194. #define DRV_QUERYCONFIGURE      0x0008
  195. #define DRV_INSTALL             0x0009
  196. #define DRV_REMOVE              0x000A
  197. #define DRV_RESERVED            0x0800
  198. #define DRV_USER                0x4000
  199.  
  200. /* LPARAM of DRV_CONFIGURE message */
  201. typedef struct tagDRVCONFIGINFO {
  202.     DWORD   dwDCISize;
  203.     LPCSTR  lpszDCISectionName;
  204.     LPCSTR  lpszDCIAliasName;
  205. } DRVCONFIGINFO;
  206. typedef DRVCONFIGINFO        *PDRVCONFIGINFO;
  207. typedef DRVCONFIGINFO  NEAR *NPDRVCONFIGINFO;
  208. typedef DRVCONFIGINFO  FAR  *LPDRVCONFIGINFO;
  209.  
  210. /* installable driver function prototypes */
  211. LRESULT   WINAPI DrvClose(HDRVR hDriver, LPARAM lParam1, LPARAM lParam2);
  212. HDRVR     WINAPI DrvOpen(LPCSTR szDriverName, LPCSTR szSectionName,
  213.     LPARAM lParam2);
  214. LRESULT   WINAPI DrvSendMessage(HDRVR hDriver, UINT uMessage,
  215.     LPARAM lParam1, LPARAM lParam2);
  216. HINSTANCE WINAPI DrvGetModuleHandle(HDRVR hDriver);
  217.  
  218. LRESULT WINAPI DrvDefDriverProc(DWORD dwDriverIdentifier, HDRVR driverID,
  219.     UINT uMessage, LPARAM lParam1, LPARAM lParam2);
  220.  
  221. #define DefDriverProc DrvDefDriverProc
  222.  
  223. #endif  /* WIN3.0 */
  224.  
  225.  
  226. #if defined(WINVER) && (WINVER >= 0x030a)
  227.  
  228. /* return values from DriverProc() function */
  229. #define DRV_CANCEL             DRVCNF_CANCEL
  230. #define DRV_OK                 DRVCNF_OK
  231. #define DRV_RESTART            DRVCNF_RESTART
  232.  
  233. #endif  /* WINVER >= 0x030a */
  234.  
  235. #define DRV_MCI_FIRST          DRV_RESERVED
  236. #define DRV_MCI_LAST           (DRV_RESERVED + 0xFFF)
  237.  
  238. #endif  /* ifndef MMNODRV */
  239.  
  240.  
  241. /****************************************************************************
  242.  
  243.                           Driver callback support
  244.  
  245. ****************************************************************************/
  246.  
  247. /* flags used with waveOutOpen(), waveInOpen(), midiInOpen(), and */
  248. /* midiOutOpen() to specify the type of the dwCallback parameter. */
  249.  
  250. #define CALLBACK_TYPEMASK   0x00070000l    /* callback type mask */
  251. #define CALLBACK_NULL       0x00000000l    /* no callback */
  252. #define CALLBACK_WINDOW     0x00010000l    /* dwCallback is a HWND */
  253. #define CALLBACK_TASK       0x00020000l    /* dwCallback is a HTASK */
  254. #define CALLBACK_FUNCTION   0x00030000l    /* dwCallback is a FARPROC */
  255.  
  256. /* driver callback prototypes */
  257. typedef void (CALLBACK DRVCALLBACK) (HDRVR h, UINT uMessage, DWORD dwUser, DWORD dw1, DWORD dw2);
  258.  
  259. typedef DRVCALLBACK FAR *LPDRVCALLBACK;
  260.  
  261. /****************************************************************************
  262.  
  263.                          Manufacturer and product IDs
  264.  
  265.     Used with wMid and wPid fields in WAVEOUTCAPS, WAVEINCAPS,
  266.     MIDIOUTCAPS, MIDIINCAPS, AUXCAPS, JOYCAPS structures.
  267.  
  268. ****************************************************************************/
  269.  
  270. /* manufacturer IDs */
  271. #define MM_MICROSOFT            1       /* Microsoft Corp. */
  272.  
  273. /* product IDs */
  274. #define MM_MIDI_MAPPER          1       /* MIDI Mapper */
  275. #define MM_WAVE_MAPPER          2       /* Wave Mapper */
  276.  
  277. #define MM_SNDBLST_MIDIOUT      3       /* Sound Blaster MIDI output port */
  278. #define MM_SNDBLST_MIDIIN       4       /* Sound Blaster MIDI input port  */
  279. #define MM_SNDBLST_SYNTH        5       /* Sound Blaster internal synthesizer */
  280. #define MM_SNDBLST_WAVEOUT      6       /* Sound Blaster waveform output */
  281. #define MM_SNDBLST_WAVEIN       7       /* Sound Blaster waveform input */
  282.  
  283. #define MM_ADLIB                9       /* Ad Lib-compatible synthesizer */
  284.  
  285. #define MM_MPU401_MIDIOUT       10      /* MPU401-compatible MIDI output port */
  286. #define MM_MPU401_MIDIIN        11      /* MPU401-compatible MIDI input port */
  287.  
  288. #define MM_PC_JOYSTICK          12      /* Joystick adapter */
  289.  
  290.  
  291. #ifndef MMNOMMSYSTEM
  292. /****************************************************************************
  293.  
  294.                     General MMSYSTEM support
  295.  
  296. ****************************************************************************/
  297.  
  298. WORD WINAPI mmsystemGetVersion(void);
  299. void WINAPI OutputDebugStr(LPCSTR);
  300.  
  301. #endif  /* ifndef MMNOMMSYSTEM */
  302.  
  303.  
  304. #ifndef MMNOSOUND
  305. /****************************************************************************
  306.  
  307.                             Sound support
  308.  
  309. ****************************************************************************/
  310.  
  311. BOOL WINAPI sndPlaySound(LPCSTR lpszSoundName, UINT uFlags);
  312.  
  313. /* flag values for wFlags parameter */
  314. #define SND_SYNC            0x0000  /* play synchronously (default) */
  315. #define SND_ASYNC           0x0001  /* play asynchronously */
  316. #define SND_NODEFAULT       0x0002  /* don't use default sound */
  317. #define SND_MEMORY          0x0004  /* lpszSoundName points to a memory file */
  318. #define SND_LOOP            0x0008  /* loop the sound until next sndPlaySound */
  319. #define SND_NOSTOP          0x0010  /* don't stop any currently playing sound */
  320.  
  321. #endif  /* ifndef MMNOSOUND */
  322.  
  323.  
  324. #ifndef MMNOWAVE
  325. /****************************************************************************
  326.  
  327.                         Waveform audio support
  328.  
  329. ****************************************************************************/
  330.  
  331. /* waveform audio error return values */
  332. #define WAVERR_BADFORMAT      (WAVERR_BASE + 0)    /* unsupported wave format */
  333. #define WAVERR_STILLPLAYING   (WAVERR_BASE + 1)    /* still something playing */
  334. #define WAVERR_UNPREPARED     (WAVERR_BASE + 2)    /* header not prepared */
  335. #define WAVERR_SYNC           (WAVERR_BASE + 3)    /* device is synchronous */
  336. #define WAVERR_LASTERROR      (WAVERR_BASE + 3)    /* last error in range */
  337.  
  338. /* waveform audio data types */
  339. DECLARE_HANDLE(HWAVE);
  340. DECLARE_HANDLE(HWAVEIN);
  341. DECLARE_HANDLE(HWAVEOUT);
  342. typedef HWAVEIN FAR *LPHWAVEIN;
  343. typedef HWAVEOUT FAR *LPHWAVEOUT;
  344. typedef DRVCALLBACK WAVECALLBACK;
  345. typedef WAVECALLBACK FAR *LPWAVECALLBACK;
  346.  
  347. /* wave callback messages */
  348. #define WOM_OPEN        MM_WOM_OPEN
  349. #define WOM_CLOSE       MM_WOM_CLOSE
  350. #define WOM_DONE        MM_WOM_DONE
  351. #define WIM_OPEN        MM_WIM_OPEN
  352. #define WIM_CLOSE       MM_WIM_CLOSE
  353. #define WIM_DATA        MM_WIM_DATA
  354.  
  355. /* device ID for wave device mapper */
  356. #define WAVE_MAPPER     (-1)
  357.  
  358. /* flags for dwFlags parameter in waveOutOpen() and waveInOpen() */
  359. #define  WAVE_FORMAT_QUERY     0x0001
  360. #define  WAVE_ALLOWSYNC        0x0002
  361.  
  362. /* wave data block header */
  363. typedef struct wavehdr_tag {
  364.     LPSTR       lpData;                 /* pointer to locked data buffer */
  365.     DWORD       dwBufferLength;         /* length of data buffer */
  366.     DWORD       dwBytesRecorded;        /* used for input only */
  367.     DWORD       dwUser;                 /* for client's use */
  368.     DWORD       dwFlags;                /* assorted flags (see defines) */
  369.     DWORD       dwLoops;                /* loop control counter */
  370.     struct wavehdr_tag far *lpNext;     /* reserved for driver */
  371.     DWORD       reserved;               /* reserved for driver */
  372. } WAVEHDR;
  373. typedef WAVEHDR       *PWAVEHDR;
  374. typedef WAVEHDR NEAR *NPWAVEHDR;
  375. typedef WAVEHDR FAR  *LPWAVEHDR;
  376.  
  377. /* flags for dwFlags field of WAVEHDR */
  378. #define WHDR_DONE       0x00000001  /* done bit */
  379. #define WHDR_PREPARED   0x00000002  /* set if this header has been prepared */
  380. #define WHDR_BEGINLOOP  0x00000004  /* loop start block */
  381. #define WHDR_ENDLOOP    0x00000008  /* loop end block */
  382. #define WHDR_INQUEUE    0x00000010  /* reserved for driver */
  383.  
  384. /* waveform output device capabilities structure */
  385. typedef struct waveoutcaps_tag {
  386.     UINT    wMid;                  /* manufacturer ID */
  387.     UINT    wPid;                  /* product ID */
  388.     VERSION vDriverVersion;        /* version of the driver */
  389.     char    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  390.     DWORD   dwFormats;             /* formats supported */
  391.     UINT    wChannels;             /* number of sources supported */
  392.     DWORD   dwSupport;             /* functionality supported by driver */
  393. } WAVEOUTCAPS;
  394. typedef WAVEOUTCAPS       *PWAVEOUTCAPS;
  395. typedef WAVEOUTCAPS NEAR *NPWAVEOUTCAPS;
  396. typedef WAVEOUTCAPS FAR  *LPWAVEOUTCAPS;
  397.  
  398. /* flags for dwSupport field of WAVEOUTCAPS */
  399. #define WAVECAPS_PITCH          0x0001   /* supports pitch control */
  400. #define WAVECAPS_PLAYBACKRATE   0x0002   /* supports playback rate control */
  401. #define WAVECAPS_VOLUME         0x0004   /* supports volume control */
  402. #define WAVECAPS_LRVOLUME       0x0008   /* separate left-right volume control */
  403. #define WAVECAPS_SYNC           0x0010
  404.  
  405. /* waveform input device capabilities structure */
  406. typedef struct waveincaps_tag {
  407.     UINT    wMid;                    /* manufacturer ID */
  408.     UINT    wPid;                    /* product ID */
  409.     VERSION vDriverVersion;          /* version of the driver */
  410.     char    szPname[MAXPNAMELEN];    /* product name (NULL terminated string) */
  411.     DWORD   dwFormats;               /* formats supported */
  412.     UINT    wChannels;               /* number of channels supported */
  413. } WAVEINCAPS;
  414. typedef WAVEINCAPS       *PWAVEINCAPS;
  415. typedef WAVEINCAPS NEAR *NPWAVEINCAPS;
  416. typedef WAVEINCAPS FAR  *LPWAVEINCAPS;
  417.  
  418. /* defines for dwFormat field of WAVEINCAPS and WAVEOUTCAPS */
  419. #define WAVE_INVALIDFORMAT     0x00000000       /* invalid format */
  420. #define WAVE_FORMAT_1M08       0x00000001       /* 11.025 kHz, Mono,   8-bit  */
  421. #define WAVE_FORMAT_1S08       0x00000002       /* 11.025 kHz, Stereo, 8-bit  */
  422. #define WAVE_FORMAT_1M16       0x00000004       /* 11.025 kHz, Mono,   16-bit */
  423. #define WAVE_FORMAT_1S16       0x00000008       /* 11.025 kHz, Stereo, 16-bit */
  424. #define WAVE_FORMAT_2M08       0x00000010       /* 22.05  kHz, Mono,   8-bit  */
  425. #define WAVE_FORMAT_2S08       0x00000020       /* 22.05  kHz, Stereo, 8-bit  */
  426. #define WAVE_FORMAT_2M16       0x00000040       /* 22.05  kHz, Mono,   16-bit */
  427. #define WAVE_FORMAT_2S16       0x00000080       /* 22.05  kHz, Stereo, 16-bit */
  428. #define WAVE_FORMAT_4M08       0x00000100       /* 44.1   kHz, Mono,   8-bit  */
  429. #define WAVE_FORMAT_4S08       0x00000200       /* 44.1   kHz, Stereo, 8-bit  */
  430. #define WAVE_FORMAT_4M16       0x00000400       /* 44.1   kHz, Mono,   16-bit */
  431. #define WAVE_FORMAT_4S16       0x00000800       /* 44.1   kHz, Stereo, 16-bit */
  432.  
  433. /* general waveform format structure (information common to all formats) */
  434. typedef struct waveformat_tag {
  435.     WORD    wFormatTag;        /* format type */
  436.     WORD    nChannels;         /* number of channels (i.e. mono, stereo, etc.) */
  437.     DWORD   nSamplesPerSec;    /* sample rate */
  438.     DWORD   nAvgBytesPerSec;   /* for buffer estimation */
  439.     WORD    nBlockAlign;       /* block size of data */
  440. } WAVEFORMAT;
  441. typedef WAVEFORMAT       *PWAVEFORMAT;
  442. typedef WAVEFORMAT NEAR *NPWAVEFORMAT;
  443. typedef WAVEFORMAT FAR  *LPWAVEFORMAT;
  444.  
  445. /* flags for wFormatTag field of WAVEFORMAT */
  446. #define WAVE_FORMAT_PCM     1
  447.  
  448. /* specific waveform format structure for PCM data */
  449. typedef struct pcmwaveformat_tag {
  450.     WAVEFORMAT  wf;
  451.     WORD        wBitsPerSample;
  452. } PCMWAVEFORMAT;
  453. typedef PCMWAVEFORMAT       *PPCMWAVEFORMAT;
  454. typedef PCMWAVEFORMAT NEAR *NPPCMWAVEFORMAT;
  455. typedef PCMWAVEFORMAT FAR  *LPPCMWAVEFORMAT;
  456.  
  457. /* waveform audio function prototypes */
  458. UINT WINAPI waveOutGetNumDevs(void);
  459. UINT WINAPI waveOutGetDevCaps(UINT uDeviceID, WAVEOUTCAPS FAR* lpCaps,
  460.     UINT uSize);
  461. UINT WINAPI waveOutGetVolume(UINT uDeviceID, DWORD FAR* lpdwVolume);
  462. UINT WINAPI waveOutSetVolume(UINT uDeviceID, DWORD dwVolume);
  463. UINT WINAPI waveOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize);
  464. UINT WINAPI waveOutOpen(HWAVEOUT FAR* lphWaveOut, UINT uDeviceID,
  465.     const WAVEFORMAT FAR* lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  466. UINT WINAPI waveOutClose(HWAVEOUT hWaveOut);
  467. UINT WINAPI waveOutPrepareHeader(HWAVEOUT hWaveOut,
  468.      WAVEHDR FAR* lpWaveOutHdr, UINT uSize);
  469. UINT WINAPI waveOutUnprepareHeader(HWAVEOUT hWaveOut,
  470.     WAVEHDR FAR* lpWaveOutHdr, UINT uSize);
  471. UINT WINAPI waveOutWrite(HWAVEOUT hWaveOut, WAVEHDR FAR* lpWaveOutHdr,
  472.     UINT uSize);
  473. UINT WINAPI waveOutPause(HWAVEOUT hWaveOut);
  474. UINT WINAPI waveOutRestart(HWAVEOUT hWaveOut);
  475. UINT WINAPI waveOutReset(HWAVEOUT hWaveOut);
  476. UINT WINAPI waveOutBreakLoop(HWAVEOUT hWaveOut);
  477. UINT WINAPI waveOutGetPosition(HWAVEOUT hWaveOut, MMTIME FAR* lpInfo,
  478.     UINT uSize);
  479. UINT WINAPI waveOutGetPitch(HWAVEOUT hWaveOut, DWORD FAR* lpdwPitch);
  480. UINT WINAPI waveOutSetPitch(HWAVEOUT hWaveOut, DWORD dwPitch);
  481. UINT WINAPI waveOutGetPlaybackRate(HWAVEOUT hWaveOut, DWORD FAR* lpdwRate);
  482. UINT WINAPI waveOutSetPlaybackRate(HWAVEOUT hWaveOut, DWORD dwRate);
  483. UINT WINAPI waveOutGetID(HWAVEOUT hWaveOut, UINT FAR* lpuDeviceID);
  484.  
  485. #if defined(WINVER) && (WINVER >= 0x030a)
  486. DWORD WINAPI waveOutMessage(HWAVEOUT hWaveOut, UINT uMessage, DWORD dw1, DWORD dw2);
  487. #endif  /* WINVER >= 0x030a */
  488.  
  489. UINT WINAPI waveInGetNumDevs(void);
  490. UINT WINAPI waveInGetDevCaps(UINT uDeviceID, WAVEINCAPS FAR* lpCaps,
  491.     UINT uSize);
  492. UINT WINAPI waveInGetErrorText(UINT uError, LPSTR lpText, UINT uSize);
  493. UINT WINAPI waveInOpen(HWAVEIN FAR* lphWaveIn, UINT uDeviceID,
  494.     const WAVEFORMAT FAR* lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  495. UINT WINAPI waveInClose(HWAVEIN hWaveIn);
  496. UINT WINAPI waveInPrepareHeader(HWAVEIN hWaveIn,
  497.     WAVEHDR FAR* lpWaveInHdr, UINT uSize);
  498. UINT WINAPI waveInUnprepareHeader(HWAVEIN hWaveIn,
  499.     WAVEHDR FAR* lpWaveInHdr, UINT uSize);
  500. UINT WINAPI waveInAddBuffer(HWAVEIN hWaveIn,
  501.     WAVEHDR FAR* lpWaveInHdr, UINT uSize);
  502. UINT WINAPI waveInStart(HWAVEIN hWaveIn);
  503. UINT WINAPI waveInStop(HWAVEIN hWaveIn);
  504. UINT WINAPI waveInReset(HWAVEIN hWaveIn);
  505. UINT WINAPI waveInGetPosition(HWAVEIN hWaveIn, MMTIME FAR* lpInfo,
  506.     UINT uSize);
  507. UINT WINAPI waveInGetID(HWAVEIN hWaveIn, UINT FAR* lpuDeviceID);
  508.  
  509. #if defined(WINVER) && (WINVER >= 0x030a)
  510. DWORD WINAPI waveInMessage(HWAVEIN hWaveIn, UINT uMessage, DWORD dw1, DWORD dw2);
  511. #endif  /* WINVER >= 0x030a */
  512.  
  513. #endif  /* ifndef MMNOWAVE */
  514.  
  515.  
  516. #ifndef MMNOMIDI
  517. /****************************************************************************
  518.  
  519.                             MIDI audio support
  520.  
  521. ****************************************************************************/
  522.  
  523. /* MIDI error return values */
  524. #define MIDIERR_UNPREPARED    (MIDIERR_BASE + 0)   /* header not prepared */
  525. #define MIDIERR_STILLPLAYING  (MIDIERR_BASE + 1)   /* still something playing */
  526. #define MIDIERR_NOMAP         (MIDIERR_BASE + 2)   /* no current map */
  527. #define MIDIERR_NOTREADY      (MIDIERR_BASE + 3)   /* hardware is still busy */
  528. #define MIDIERR_NODEVICE      (MIDIERR_BASE + 4)   /* port no longer connected */
  529. #define MIDIERR_INVALIDSETUP  (MIDIERR_BASE + 5)   /* invalid setup */
  530. #define MIDIERR_LASTERROR     (MIDIERR_BASE + 5)   /* last error in range */
  531.  
  532. /* MIDI audio data types */
  533. DECLARE_HANDLE(HMIDI);
  534. DECLARE_HANDLE(HMIDIIN);
  535. DECLARE_HANDLE(HMIDIOUT);
  536. typedef HMIDIIN FAR *LPHMIDIIN;
  537. typedef HMIDIOUT FAR *LPHMIDIOUT;
  538. typedef DRVCALLBACK MIDICALLBACK;
  539. typedef MIDICALLBACK FAR *LPMIDICALLBACK;
  540. #define MIDIPATCHSIZE   128
  541. typedef WORD PATCHARRAY[MIDIPATCHSIZE];
  542. typedef WORD FAR *LPPATCHARRAY;
  543. typedef WORD KEYARRAY[MIDIPATCHSIZE];
  544. typedef WORD FAR *LPKEYARRAY;
  545.  
  546. /* MIDI callback messages */
  547. #define MIM_OPEN        MM_MIM_OPEN
  548. #define MIM_CLOSE       MM_MIM_CLOSE
  549. #define MIM_DATA        MM_MIM_DATA
  550. #define MIM_LONGDATA    MM_MIM_LONGDATA
  551. #define MIM_ERROR       MM_MIM_ERROR
  552. #define MIM_LONGERROR   MM_MIM_LONGERROR
  553. #define MOM_OPEN        MM_MOM_OPEN
  554. #define MOM_CLOSE       MM_MOM_CLOSE
  555. #define MOM_DONE        MM_MOM_DONE
  556.  
  557. /* device ID for MIDI mapper */
  558. #define MIDIMAPPER     (-1)
  559. #define MIDI_MAPPER    (-1)
  560.  
  561. /* flags for wFlags parm of midiOutCachePatches(), midiOutCacheDrumPatches() */
  562. #define MIDI_CACHE_ALL      1
  563. #define MIDI_CACHE_BESTFIT  2
  564. #define MIDI_CACHE_QUERY    3
  565. #define MIDI_UNCACHE        4
  566.  
  567. /* MIDI output device capabilities structure */
  568. typedef struct midioutcaps_tag {
  569.     UINT    wMid;                  /* manufacturer ID */
  570.     UINT    wPid;                  /* product ID */
  571.     VERSION vDriverVersion;        /* version of the driver */
  572.     char    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  573.     UINT    wTechnology;           /* type of device */
  574.     UINT    wVoices;               /* # of voices (internal synth only) */
  575.     UINT    wNotes;                /* max # of notes (internal synth only) */
  576.     UINT    wChannelMask;          /* channels used (internal synth only) */
  577.     DWORD   dwSupport;             /* functionality supported by driver */
  578. } MIDIOUTCAPS;
  579. typedef MIDIOUTCAPS       *PMIDIOUTCAPS;
  580. typedef MIDIOUTCAPS NEAR *NPMIDIOUTCAPS;
  581. typedef MIDIOUTCAPS FAR  *LPMIDIOUTCAPS;
  582.  
  583. /* flags for wTechnology field of MIDIOUTCAPS structure */
  584. #define MOD_MIDIPORT    1  /* output port */
  585. #define MOD_SYNTH       2  /* generic internal synth */
  586. #define MOD_SQSYNTH     3  /* square wave internal synth */
  587. #define MOD_FMSYNTH     4  /* FM internal synth */
  588. #define MOD_MAPPER      5  /* MIDI mapper */
  589.  
  590. /* flags for dwSupport field of MIDIOUTCAPS structure */
  591. #define MIDICAPS_VOLUME          0x0001  /* supports volume control */
  592. #define MIDICAPS_LRVOLUME        0x0002  /* separate left-right volume control */
  593. #define MIDICAPS_CACHE           0x0004
  594.  
  595. /* MIDI output device capabilities structure */
  596. typedef struct midiincaps_tag {
  597.     UINT    wMid;                  /* manufacturer ID */
  598.     UINT    wPid;                  /* product ID */
  599.     VERSION vDriverVersion;        /* version of the driver */
  600.     char    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  601. } MIDIINCAPS;
  602. typedef MIDIINCAPS      *PMIDIINCAPS;
  603. typedef MIDIINCAPS NEAR *NPMIDIINCAPS;
  604. typedef MIDIINCAPS FAR  *LPMIDIINCAPS;
  605.  
  606. /* MIDI data block header */
  607. typedef struct midihdr_tag {
  608.     LPSTR       lpData;               /* pointer to locked data block */
  609.     DWORD       dwBufferLength;       /* length of data in data block */
  610.     DWORD       dwBytesRecorded;      /* used for input only */
  611.     DWORD       dwUser;               /* for client's use */
  612.     DWORD       dwFlags;              /* assorted flags (see defines) */
  613.     struct midihdr_tag far *lpNext;   /* reserved for driver */
  614.     DWORD       reserved;             /* reserved for driver */
  615. } MIDIHDR;
  616. typedef MIDIHDR       *PMIDIHDR;
  617. typedef MIDIHDR NEAR *NPMIDIHDR;
  618. typedef MIDIHDR FAR  *LPMIDIHDR;
  619.  
  620. /* flags for dwFlags field of MIDIHDR structure */
  621. #define MHDR_DONE       0x00000001       /* done bit */
  622. #define MHDR_PREPARED   0x00000002       /* set if header prepared */
  623. #define MHDR_INQUEUE    0x00000004       /* reserved for driver */
  624.  
  625. /* MIDI function prototypes */
  626. UINT WINAPI midiOutGetNumDevs(void);
  627. UINT WINAPI midiOutGetDevCaps(UINT uDeviceID,
  628.     MIDIOUTCAPS FAR* lpCaps, UINT uSize);
  629. UINT WINAPI midiOutGetVolume(UINT uDeviceID, DWORD FAR* lpdwVolume);
  630. UINT WINAPI midiOutSetVolume(UINT uDeviceID, DWORD dwVolume);
  631. UINT WINAPI midiOutGetErrorText(UINT uError, LPSTR lpText, UINT uSize);
  632. UINT WINAPI midiOutOpen(HMIDIOUT FAR* lphMidiOut, UINT uDeviceID,
  633.     DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  634. UINT WINAPI midiOutClose(HMIDIOUT hMidiOut);
  635. UINT WINAPI midiOutPrepareHeader(HMIDIOUT hMidiOut,
  636.     MIDIHDR FAR* lpMidiOutHdr, UINT uSize);
  637. UINT WINAPI midiOutUnprepareHeader(HMIDIOUT hMidiOut,
  638.     MIDIHDR FAR* lpMidiOutHdr, UINT uSize);
  639. UINT WINAPI midiOutShortMsg(HMIDIOUT hMidiOut, DWORD dwMsg);
  640. UINT WINAPI midiOutLongMsg(HMIDIOUT hMidiOut,
  641.     MIDIHDR FAR* lpMidiOutHdr, UINT uSize);
  642. UINT WINAPI midiOutReset(HMIDIOUT hMidiOut);
  643. UINT WINAPI midiOutCachePatches(HMIDIOUT hMidiOut,
  644.     UINT uBank, WORD FAR* lpwPatchArray, UINT uFlags);
  645. UINT WINAPI midiOutCacheDrumPatches(HMIDIOUT hMidiOut,
  646.     UINT uPatch, WORD FAR* lpwKeyArray, UINT uFlags);
  647. UINT WINAPI midiOutGetID(HMIDIOUT hMidiOut, UINT FAR* lpuDeviceID);
  648.  
  649. #if defined(WINVER) && (WINVER >= 0x030a)
  650. DWORD WINAPI midiOutMessage(HMIDIOUT hMidiOut, UINT uMessage, DWORD dw1, DWORD dw2);
  651. #endif  /* WINVER >= 0x030a */
  652.  
  653. UINT WINAPI midiInGetNumDevs(void);
  654. UINT WINAPI midiInGetDevCaps(UINT uDeviceID,
  655.     LPMIDIINCAPS lpCaps, UINT uSize);
  656. UINT WINAPI midiInGetErrorText(UINT uError, LPSTR lpText, UINT uSize);
  657. UINT WINAPI midiInOpen(HMIDIIN FAR* lphMidiIn, UINT uDeviceID,
  658.     DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  659. UINT WINAPI midiInClose(HMIDIIN hMidiIn);
  660. UINT WINAPI midiInPrepareHeader(HMIDIIN hMidiIn,
  661.     MIDIHDR FAR* lpMidiInHdr, UINT uSize);
  662. UINT WINAPI midiInUnprepareHeader(HMIDIIN hMidiIn,
  663.     MIDIHDR FAR* lpMidiInHdr, UINT uSize);
  664. UINT WINAPI midiInAddBuffer(HMIDIIN hMidiIn,
  665.     MIDIHDR FAR* lpMidiInHdr, UINT uSize);
  666. UINT WINAPI midiInStart(HMIDIIN hMidiIn);
  667. UINT WINAPI midiInStop(HMIDIIN hMidiIn);
  668. UINT WINAPI midiInReset(HMIDIIN hMidiIn);
  669. UINT WINAPI midiInGetID(HMIDIIN hMidiIn, UINT FAR* lpuDeviceID);
  670.  
  671. #if defined(WINVER) && (WINVER >= 0x030a)
  672. DWORD WINAPI midiInMessage(HMIDIIN hMidiIn, UINT uMessage, DWORD dw1, DWORD dw2);
  673. #endif  /* WINVER >= 0x030a */
  674.  
  675. #endif  /* ifndef MMNOMIDI */
  676.  
  677.  
  678. #ifndef MMNOAUX
  679. /****************************************************************************
  680.  
  681.                         Auxiliary audio support
  682.  
  683. ****************************************************************************/
  684.  
  685. /* device ID for aux device mapper */
  686. #define AUX_MAPPER     (-1)
  687.  
  688. /* Auxiliary audio device capabilities structure */
  689. typedef struct auxcaps_tag {
  690.     UINT    wMid;                  /* manufacturer ID */
  691.     UINT    wPid;                  /* product ID */
  692.     VERSION vDriverVersion;        /* version of the driver */
  693.     char    szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  694.     UINT    wTechnology;           /* type of device */
  695.     DWORD   dwSupport;             /* functionality supported by driver */
  696. } AUXCAPS;
  697. typedef AUXCAPS       *PAUXCAPS;
  698. typedef AUXCAPS NEAR *NPAUXCAPS;
  699. typedef AUXCAPS FAR  *LPAUXCAPS;
  700.  
  701. /* flags for wTechnology field in AUXCAPS structure */
  702. #define AUXCAPS_CDAUDIO    1       /* audio from internal CD-ROM drive */
  703. #define AUXCAPS_AUXIN      2       /* audio from auxiliary input jacks */
  704.  
  705. /* flags for dwSupport field in AUXCAPS structure */
  706. #define AUXCAPS_VOLUME          0x0001  /* supports volume control */
  707. #define AUXCAPS_LRVOLUME        0x0002  /* separate left-right volume control */
  708.  
  709. /* auxiliary audio function prototypes */
  710. UINT WINAPI auxGetNumDevs(void);
  711. UINT WINAPI auxGetDevCaps(UINT uDeviceID, AUXCAPS FAR* lpCaps, UINT uSize);
  712. UINT WINAPI auxSetVolume(UINT uDeviceID, DWORD dwVolume);
  713. UINT WINAPI auxGetVolume(UINT uDeviceID, DWORD FAR* lpdwVolume);
  714.  
  715. #if defined(WINVER) && (WINVER >= 0x030a)
  716. DWORD WINAPI auxOutMessage(UINT uDeviceID, UINT uMessage, DWORD dw1, DWORD dw2);
  717. #endif  /* WINVER >= 0x030a */
  718.  
  719. #endif  /* ifndef MMNOAUX */
  720.  
  721.  
  722. #ifndef MMNOTIMER
  723. /****************************************************************************
  724.  
  725.                             Timer support
  726.  
  727. ****************************************************************************/
  728.  
  729. /* timer error return values */
  730. #define TIMERR_NOERROR        (0)                  /* no error */
  731. #define TIMERR_NOCANDO        (TIMERR_BASE+1)      /* request not completed */
  732. #define TIMERR_STRUCT         (TIMERR_BASE+33)     /* time struct size */
  733.  
  734. /* timer data types */
  735. typedef void (CALLBACK TIMECALLBACK) (UINT uTimerID, UINT uMessage, DWORD dwUser, DWORD dw1, DWORD dw2);
  736.  
  737. typedef TIMECALLBACK FAR *LPTIMECALLBACK;
  738.  
  739. /* flags for wFlags parameter of timeSetEvent() function */
  740. #define TIME_ONESHOT    0   /* program timer for single event */
  741. #define TIME_PERIODIC   1   /* program for continuous periodic event */
  742.  
  743. /* timer device capabilities data structure */
  744. typedef struct timecaps_tag {
  745.     UINT    wPeriodMin;     /* minimum period supported  */
  746.     UINT    wPeriodMax;     /* maximum period supported  */
  747.     } TIMECAPS;
  748. typedef TIMECAPS       *PTIMECAPS;
  749. typedef TIMECAPS NEAR *NPTIMECAPS;
  750. typedef TIMECAPS FAR  *LPTIMECAPS;
  751.  
  752. /* timer function prototypes */
  753. UINT WINAPI timeGetSystemTime(MMTIME FAR* lpTime, UINT uSize);
  754. DWORD WINAPI timeGetTime(void);
  755. UINT WINAPI timeSetEvent(UINT uDelay, UINT uResolution,
  756.     LPTIMECALLBACK lpFunction, DWORD dwUser, UINT uFlags);
  757. UINT WINAPI timeKillEvent(UINT uTimerID);
  758. UINT WINAPI timeGetDevCaps(TIMECAPS FAR* lpTimeCaps, UINT uSize);
  759. UINT WINAPI timeBeginPeriod(UINT uPeriod);
  760. UINT WINAPI timeEndPeriod(UINT uPeriod);
  761.  
  762. #endif  /* ifndef MMNOTIMER */
  763.  
  764.  
  765. #ifndef MMNOJOY
  766. /****************************************************************************
  767.  
  768.                             Joystick support
  769.  
  770. ****************************************************************************/
  771.  
  772. /* joystick error return values */
  773. #define JOYERR_NOERROR        (0)                  /* no error */
  774. #define JOYERR_PARMS          (JOYERR_BASE+5)      /* bad parameters */
  775. #define JOYERR_NOCANDO        (JOYERR_BASE+6)      /* request not completed */
  776. #define JOYERR_UNPLUGGED      (JOYERR_BASE+7)      /* joystick is unplugged */
  777.  
  778. /* constants used with JOYINFO structure and MM_JOY* messages */
  779. #define JOY_BUTTON1         0x0001
  780. #define JOY_BUTTON2         0x0002
  781. #define JOY_BUTTON3         0x0004
  782. #define JOY_BUTTON4         0x0008
  783. #define JOY_BUTTON1CHG      0x0100
  784. #define JOY_BUTTON2CHG      0x0200
  785. #define JOY_BUTTON3CHG      0x0400
  786. #define JOY_BUTTON4CHG      0x0800
  787.  
  788. /* joystick ID constants */
  789. #define JOYSTICKID1         0
  790. #define JOYSTICKID2         1
  791.  
  792. /* joystick device capabilities data structure */
  793. typedef struct joycaps_tag {
  794.     UINT wMid;                  /* manufacturer ID */
  795.     UINT wPid;                  /* product ID */
  796.     char szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  797.     UINT wXmin;                 /* minimum x position value */
  798.     UINT wXmax;                 /* maximum x position value */
  799.     UINT wYmin;                 /* minimum y position value */
  800.     UINT wYmax;                 /* maximum y position value */
  801.     UINT wZmin;                 /* minimum z position value */
  802.     UINT wZmax;                 /* maximum z position value */
  803.     UINT wNumButtons;           /* number of buttons */
  804.     UINT wPeriodMin;            /* minimum message period when captured */
  805.     UINT wPeriodMax;            /* maximum message period when captured */
  806.     } JOYCAPS;
  807. typedef JOYCAPS       *PJOYCAPS;
  808. typedef JOYCAPS NEAR *NPJOYCAPS;
  809. typedef JOYCAPS FAR  *LPJOYCAPS;
  810.  
  811. /* joystick information data structure */
  812. typedef struct joyinfo_tag {
  813.     UINT wXpos;                 /* x position */
  814.     UINT wYpos;                 /* y position */
  815.     UINT wZpos;                 /* z position */
  816.     UINT wButtons;              /* button states */
  817.     } JOYINFO;
  818. typedef JOYINFO       *PJOYINFO;
  819. typedef JOYINFO NEAR *NPJOYINFO;
  820. typedef JOYINFO FAR  *LPJOYINFO;
  821.  
  822. /* joystick function prototypes */
  823. UINT WINAPI joyGetDevCaps(UINT uJoyID, JOYCAPS FAR* lpCaps, UINT uSize);
  824. UINT WINAPI joyGetNumDevs(void);
  825. UINT WINAPI joyGetPos(UINT uJoyID, JOYINFO FAR* lpInfo);
  826. UINT WINAPI joyGetThreshold(UINT uJoyID, UINT FAR* lpuThreshold);
  827. UINT WINAPI joyReleaseCapture(UINT uJoyID);
  828. UINT WINAPI joySetCapture(HWND hwnd, UINT uJoyID, UINT uPeriod,
  829.     BOOL bChanged);
  830. UINT WINAPI joySetThreshold(UINT uJoyID, UINT uThreshold);
  831.  
  832. #endif  /* ifndef MMNOJOY */
  833.  
  834.  
  835. #ifndef MMNOMMIO
  836. /****************************************************************************
  837.  
  838.                         Multimedia File I/O support
  839.  
  840. ****************************************************************************/
  841.  
  842. /* MMIO error return values */
  843. #define MMIOERR_BASE            256
  844. #define MMIOERR_FILENOTFOUND    (MMIOERR_BASE + 1)  /* file not found */
  845. #define MMIOERR_OUTOFMEMORY     (MMIOERR_BASE + 2)  /* out of memory */
  846. #define MMIOERR_CANNOTOPEN      (MMIOERR_BASE + 3)  /* cannot open */
  847. #define MMIOERR_CANNOTCLOSE     (MMIOERR_BASE + 4)  /* cannot close */
  848. #define MMIOERR_CANNOTREAD      (MMIOERR_BASE + 5)  /* cannot read */
  849. #define MMIOERR_CANNOTWRITE     (MMIOERR_BASE + 6)  /* cannot write */
  850. #define MMIOERR_CANNOTSEEK      (MMIOERR_BASE + 7)  /* cannot seek */
  851. #define MMIOERR_CANNOTEXPAND    (MMIOERR_BASE + 8)  /* cannot expand file */
  852. #define MMIOERR_CHUNKNOTFOUND   (MMIOERR_BASE + 9)  /* chunk not found */
  853. #define MMIOERR_UNBUFFERED      (MMIOERR_BASE + 10) /* file is unbuffered */
  854.  
  855. /* MMIO constants */
  856. #define CFSEPCHAR       '+'             /* compound file name separator char. */
  857.  
  858. /* MMIO data types */
  859. typedef DWORD           FOURCC;         /* a four character code */
  860. typedef char _huge *    HPSTR;          /* a huge version of LPSTR */
  861. DECLARE_HANDLE(HMMIO);                  /* a handle to an open file */
  862. typedef LRESULT (CALLBACK MMIOPROC)(LPSTR lpmmioinfo, UINT uMessage,
  863.             LPARAM lParam1, LPARAM lParam2);
  864. typedef MMIOPROC FAR *LPMMIOPROC;
  865.  
  866. /* general MMIO information data structure */
  867. typedef struct _MMIOINFO
  868. {
  869.         /* general fields */
  870.         DWORD           dwFlags;        /* general status flags */
  871.         FOURCC          fccIOProc;      /* pointer to I/O procedure */
  872.         LPMMIOPROC      pIOProc;        /* pointer to I/O procedure */
  873.         UINT            wErrorRet;      /* place for error to be returned */
  874.         HTASK           htask;          /* alternate local task */
  875.  
  876.         /* fields maintained by MMIO functions during buffered I/O */
  877.         LONG            cchBuffer;      /* size of I/O buffer (or 0L) */
  878.         HPSTR           pchBuffer;      /* start of I/O buffer (or NULL) */
  879.         HPSTR           pchNext;        /* pointer to next byte to read/write */
  880.         HPSTR           pchEndRead;     /* pointer to last valid byte to read */
  881.         HPSTR           pchEndWrite;    /* pointer to last byte to write */
  882.         LONG            lBufOffset;     /* disk offset of start of buffer */
  883.  
  884.         /* fields maintained by I/O procedure */
  885.         LONG            lDiskOffset;    /* disk offset of next read or write */
  886.         DWORD           adwInfo[3];     /* data specific to type of MMIOPROC */
  887.  
  888.         /* other fields maintained by MMIO */
  889.         DWORD           dwReserved1;    /* reserved for MMIO use */
  890.         DWORD           dwReserved2;    /* reserved for MMIO use */
  891.         HMMIO           hmmio;          /* handle to open file */
  892. } MMIOINFO;
  893. typedef MMIOINFO       *PMMIOINFO;
  894. typedef MMIOINFO NEAR *NPMMIOINFO;
  895. typedef MMIOINFO FAR  *LPMMIOINFO;
  896.  
  897. /* RIFF chunk information data structure */
  898. typedef struct _MMCKINFO
  899. {
  900.         FOURCC          ckid;           /* chunk ID */
  901.         DWORD           cksize;         /* chunk size */
  902.         FOURCC          fccType;        /* form type or list type */
  903.         DWORD           dwDataOffset;   /* offset of data portion of chunk */
  904.         DWORD           dwFlags;        /* flags used by MMIO functions */
  905. } MMCKINFO;
  906. typedef MMCKINFO       *PMMCKINFO;
  907. typedef MMCKINFO NEAR *NPMMCKINFO;
  908. typedef MMCKINFO FAR  *LPMMCKINFO;
  909.  
  910. /* bit field masks */
  911. #define MMIO_RWMODE     0x00000003      /* open file for reading/writing/both */
  912. #define MMIO_SHAREMODE  0x00000070      /* file sharing mode number */
  913.  
  914. /* constants for dwFlags field of MMIOINFO */
  915. #define MMIO_CREATE     0x00001000      /* create new file (or truncate file) */
  916. #define MMIO_PARSE      0x00000100      /* parse new file returning path */
  917. #define MMIO_DELETE     0x00000200      /* create new file (or truncate file) */
  918. #define MMIO_EXIST      0x00004000      /* checks for existence of file */
  919. #define MMIO_ALLOCBUF   0x00010000      /* mmioOpen() should allocate a buffer */
  920. #define MMIO_GETTEMP    0x00020000      /* mmioOpen() should retrieve temp name */
  921.  
  922. #define MMIO_DIRTY      0x10000000      /* I/O buffer is dirty */
  923.  
  924.  
  925. /* read/write mode numbers (bit field MMIO_RWMODE) */
  926. #define MMIO_READ       0x00000000      /* open file for reading only */
  927. #define MMIO_WRITE      0x00000001      /* open file for writing only */
  928. #define MMIO_READWRITE  0x00000002      /* open file for reading and writing */
  929.  
  930. /* share mode numbers (bit field MMIO_SHAREMODE) */
  931. #define MMIO_COMPAT     0x00000000      /* compatibility mode */
  932. #define MMIO_EXCLUSIVE  0x00000010      /* exclusive-access mode */
  933. #define MMIO_DENYWRITE  0x00000020      /* deny writing to other processes */
  934. #define MMIO_DENYREAD   0x00000030      /* deny reading to other processes */
  935. #define MMIO_DENYNONE   0x00000040      /* deny nothing to other processes */
  936.  
  937. /* various MMIO flags */
  938. #define MMIO_FHOPEN             0x0010  /* mmioClose: keep file handle open */
  939. #define MMIO_EMPTYBUF           0x0010  /* mmioFlush: empty the I/O buffer */
  940. #define MMIO_TOUPPER            0x0010  /* mmioStringToFOURCC: to u-case */
  941. #define MMIO_INSTALLPROC    0x00010000  /* mmioInstallIOProc: install MMIOProc */
  942. #define MMIO_GLOBALPROC     0x10000000  /* mmioInstallIOProc: install globally */
  943. #define MMIO_REMOVEPROC     0x00020000  /* mmioInstallIOProc: remove MMIOProc */
  944. #define MMIO_FINDPROC       0x00040000  /* mmioInstallIOProc: find an MMIOProc */
  945. #define MMIO_FINDCHUNK          0x0010  /* mmioDescend: find a chunk by ID */
  946. #define MMIO_FINDRIFF           0x0020  /* mmioDescend: find a LIST chunk */
  947. #define MMIO_FINDLIST           0x0040  /* mmioDescend: find a RIFF chunk */
  948. #define MMIO_CREATERIFF         0x0020  /* mmioCreateChunk: make a LIST chunk */
  949. #define MMIO_CREATELIST         0x0040  /* mmioCreateChunk: make a RIFF chunk */
  950.  
  951.  
  952. /* message numbers for MMIOPROC I/O procedure functions */
  953. #define MMIOM_READ      MMIO_READ       /* read */
  954. #define MMIOM_WRITE    MMIO_WRITE       /* write */
  955. #define MMIOM_SEEK              2       /* seek to a new position in file */
  956. #define MMIOM_OPEN              3       /* open file */
  957. #define MMIOM_CLOSE             4       /* close file */
  958. #define MMIOM_WRITEFLUSH        5       /* write and flush */
  959.  
  960. #if defined(WINVER) && (WINVER >= 0x030a)
  961. #define MMIOM_RENAME            6       /* rename specified file */
  962. #endif  /* WINVER >= 0x030a */
  963.  
  964. #define MMIOM_USER         0x8000       /* beginning of user-defined messages */
  965.  
  966. /* standard four character codes */
  967. #define FOURCC_RIFF     mmioFOURCC('R', 'I', 'F', 'F')
  968. #define FOURCC_LIST     mmioFOURCC('L', 'I', 'S', 'T')
  969.  
  970. /* four character codes used to identify standard built-in I/O procedures */
  971. #define FOURCC_DOS      mmioFOURCC('D', 'O', 'S', ' ')
  972. #define FOURCC_MEM      mmioFOURCC('M', 'E', 'M', ' ')
  973.  
  974. /* flags for mmioSeek() */
  975. #ifndef SEEK_SET
  976. #define SEEK_SET        0               /* seek to an absolute position */
  977. #define SEEK_CUR        1               /* seek relative to current position */
  978. #define SEEK_END        2               /* seek relative to end of file */
  979. #endif  /* ifndef SEEK_SET */
  980.  
  981. /* other constants */
  982. #define MMIO_DEFAULTBUFFER      8192    /* default buffer size */
  983.  
  984. /* MMIO macros */
  985. #define mmioFOURCC( ch0, ch1, ch2, ch3 )                                \
  986.                 ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) |    \
  987.                 ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
  988.  
  989. /* MMIO function prototypes */
  990. FOURCC WINAPI mmioStringToFOURCC(LPCSTR sz, UINT uFlags);
  991. LPMMIOPROC WINAPI mmioInstallIOProc(FOURCC fccIOProc, LPMMIOPROC pIOProc,
  992.     DWORD dwFlags);
  993. HMMIO WINAPI mmioOpen(LPSTR szFileName, MMIOINFO FAR* lpmmioinfo,
  994.     DWORD dwOpenFlags);
  995.  
  996. #if defined(WINVER) && (WINVER >= 0x030a)
  997. UINT WINAPI mmioRename(LPCSTR szFileName, LPCSTR szNewFileName,
  998.      MMIOINFO FAR* lpmmioinfo, DWORD dwRenameFlags);
  999. #endif  /* WINVER >= 0x030a */
  1000.  
  1001. UINT WINAPI mmioClose(HMMIO hmmio, UINT uFlags);
  1002. LONG WINAPI mmioRead(HMMIO hmmio, HPSTR pch, LONG cch);
  1003. LONG WINAPI mmioWrite(HMMIO hmmio, const char _huge* pch, LONG cch);
  1004. LONG WINAPI mmioSeek(HMMIO hmmio, LONG lOffset, int iOrigin);
  1005. UINT WINAPI mmioGetInfo(HMMIO hmmio, MMIOINFO FAR* lpmmioinfo, UINT uFlags);
  1006. UINT WINAPI mmioSetInfo(HMMIO hmmio, const MMIOINFO FAR* lpmmioinfo, UINT uFlags);
  1007. UINT WINAPI mmioSetBuffer(HMMIO hmmio, LPSTR pchBuffer, LONG cchBuffer,
  1008.     UINT uFlags);
  1009. UINT WINAPI mmioFlush(HMMIO hmmio, UINT uFlags);
  1010. UINT WINAPI mmioAdvance(HMMIO hmmio, MMIOINFO FAR* lpmmioinfo, UINT uFlags);
  1011. LRESULT WINAPI mmioSendMessage(HMMIO hmmio, UINT uMessage,
  1012.     LPARAM lParam1, LPARAM lParam2);
  1013. UINT WINAPI mmioDescend(HMMIO hmmio, MMCKINFO FAR* lpck,
  1014.     const MMCKINFO FAR* lpckParent, UINT uFlags);
  1015. UINT WINAPI mmioAscend(HMMIO hmmio, MMCKINFO FAR* lpck, UINT uFlags);
  1016. UINT WINAPI mmioCreateChunk(HMMIO hmmio, MMCKINFO FAR* lpck, UINT uFlags);
  1017.  
  1018. #endif  /* ifndef MMNOMMIO */
  1019.  
  1020.  
  1021. #ifndef MMNOMCI
  1022. /****************************************************************************
  1023.  
  1024.                             MCI support
  1025.  
  1026. ****************************************************************************/
  1027.  
  1028. typedef UINT (CALLBACK *YIELDPROC) (UINT uDeviceID, DWORD dwYieldData);
  1029.  
  1030. /* MCI function prototypes */
  1031. DWORD WINAPI mciSendCommand (UINT uDeviceID, UINT uMessage,
  1032.     DWORD dwParam1, DWORD dwParam2);
  1033. DWORD WINAPI mciSendString (LPCSTR lpstrCommand,
  1034.     LPSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback);
  1035. UINT WINAPI mciGetDeviceID (LPCSTR lpstrName);
  1036. UINT WINAPI mciGetDeviceIDFromElementID (DWORD dwElementID,
  1037.     LPCSTR lpstrType);
  1038. BOOL WINAPI mciGetErrorString (DWORD wError, LPSTR lpstrBuffer,
  1039.     UINT uLength);
  1040. BOOL WINAPI mciSetYieldProc (UINT uDeviceID, YIELDPROC fpYieldProc,
  1041.     DWORD dwYieldData);
  1042.  
  1043. #if defined(WINVER) && (WINVER >= 0x030a)
  1044. HTASK WINAPI mciGetCreatorTask(UINT uDeviceID);
  1045. YIELDPROC WINAPI mciGetYieldProc (UINT uDeviceID, DWORD FAR* lpdwYieldData);
  1046. #endif  /* WINVER >= 0x030a */
  1047.  
  1048. /* If included with the 3.0 windows.h */
  1049. #if !defined(WINVER) || (WINVER < 0x030a)
  1050. BOOL WINAPI mciExecute (LPCSTR lpstrCommand);
  1051. #endif  /* WIN3.0 */
  1052.  
  1053. /* MCI error return values */
  1054. #define MCIERR_INVALID_DEVICE_ID        (MCIERR_BASE + 1)
  1055. #define MCIERR_UNRECOGNIZED_KEYWORD     (MCIERR_BASE + 3)
  1056. #define MCIERR_UNRECOGNIZED_COMMAND     (MCIERR_BASE + 5)
  1057. #define MCIERR_HARDWARE                 (MCIERR_BASE + 6)
  1058. #define MCIERR_INVALID_DEVICE_NAME      (MCIERR_BASE + 7)
  1059. #define MCIERR_OUT_OF_MEMORY            (MCIERR_BASE + 8)
  1060. #define MCIERR_DEVICE_OPEN              (MCIERR_BASE + 9)
  1061. #define MCIERR_CANNOT_LOAD_DRIVER       (MCIERR_BASE + 10)
  1062. #define MCIERR_MISSING_COMMAND_STRING   (MCIERR_BASE + 11)
  1063. #define MCIERR_PARAM_OVERFLOW           (MCIERR_BASE + 12)
  1064. #define MCIERR_MISSING_STRING_ARGUMENT  (MCIERR_BASE + 13)
  1065. #define MCIERR_BAD_INTEGER              (MCIERR_BASE + 14)
  1066. #define MCIERR_PARSER_INTERNAL          (MCIERR_BASE + 15)
  1067. #define MCIERR_DRIVER_INTERNAL          (MCIERR_BASE + 16)
  1068. #define MCIERR_MISSING_PARAMETER        (MCIERR_BASE + 17)
  1069. #define MCIERR_UNSUPPORTED_FUNCTION     (MCIERR_BASE + 18)
  1070. #define MCIERR_FILE_NOT_FOUND           (MCIERR_BASE + 19)
  1071. #define MCIERR_DEVICE_NOT_READY         (MCIERR_BASE + 20)
  1072. #define MCIERR_INTERNAL                 (MCIERR_BASE + 21)
  1073. #define MCIERR_DRIVER                   (MCIERR_BASE + 22)
  1074. #define MCIERR_CANNOT_USE_ALL           (MCIERR_BASE + 23)
  1075. #define MCIERR_MULTIPLE                 (MCIERR_BASE + 24)
  1076. #define MCIERR_EXTENSION_NOT_FOUND      (MCIERR_BASE + 25)
  1077. #define MCIERR_OUTOFRANGE               (MCIERR_BASE + 26)
  1078. #define MCIERR_FLAGS_NOT_COMPATIBLE     (MCIERR_BASE + 28)
  1079. #define MCIERR_FILE_NOT_SAVED           (MCIERR_BASE + 30)
  1080. #define MCIERR_DEVICE_TYPE_REQUIRED     (MCIERR_BASE + 31)
  1081. #define MCIERR_DEVICE_LOCKED            (MCIERR_BASE + 32)
  1082. #define MCIERR_DUPLICATE_ALIAS          (MCIERR_BASE + 33)
  1083. #define MCIERR_BAD_CONSTANT             (MCIERR_BASE + 34)
  1084. #define MCIERR_MUST_USE_SHAREABLE       (MCIERR_BASE + 35)
  1085. #define MCIERR_MISSING_DEVICE_NAME      (MCIERR_BASE + 36)
  1086. #define MCIERR_BAD_TIME_FORMAT          (MCIERR_BASE + 37)
  1087. #define MCIERR_NO_CLOSING_QUOTE         (MCIERR_BASE + 38)
  1088. #define MCIERR_DUPLICATE_FLAGS          (MCIERR_BASE + 39)
  1089. #define MCIERR_INVALID_FILE             (MCIERR_BASE + 40)
  1090. #define MCIERR_NULL_PARAMETER_BLOCK     (MCIERR_BASE + 41)
  1091. #define MCIERR_UNNAMED_RESOURCE         (MCIERR_BASE + 42)
  1092. #define MCIERR_NEW_REQUIRES_ALIAS       (MCIERR_BASE + 43)
  1093. #define MCIERR_NOTIFY_ON_AUTO_OPEN      (MCIERR_BASE + 44)
  1094. #define MCIERR_NO_ELEMENT_ALLOWED       (MCIERR_BASE + 45)
  1095. #define MCIERR_NONAPPLICABLE_FUNCTION   (MCIERR_BASE + 46)
  1096. #define MCIERR_ILLEGAL_FOR_AUTO_OPEN    (MCIERR_BASE + 47)
  1097. #define MCIERR_FILENAME_REQUIRED        (MCIERR_BASE + 48)
  1098. #define MCIERR_EXTRA_CHARACTERS         (MCIERR_BASE + 49)
  1099. #define MCIERR_DEVICE_NOT_INSTALLED     (MCIERR_BASE + 50)
  1100. #define MCIERR_GET_CD                   (MCIERR_BASE + 51)
  1101. #define MCIERR_SET_CD                   (MCIERR_BASE + 52)
  1102. #define MCIERR_SET_DRIVE                (MCIERR_BASE + 53)
  1103. #define MCIERR_DEVICE_LENGTH            (MCIERR_BASE + 54)
  1104. #define MCIERR_DEVICE_ORD_LENGTH        (MCIERR_BASE + 55)
  1105. #define MCIERR_NO_INTEGER               (MCIERR_BASE + 56)
  1106.  
  1107. #define MCIERR_WAVE_OUTPUTSINUSE        (MCIERR_BASE + 64)
  1108. #define MCIERR_WAVE_SETOUTPUTINUSE      (MCIERR_BASE + 65)
  1109. #define MCIERR_WAVE_INPUTSINUSE         (MCIERR_BASE + 66)
  1110. #define MCIERR_WAVE_SETINPUTINUSE       (MCIERR_BASE + 67)
  1111. #define MCIERR_WAVE_OUTPUTUNSPECIFIED   (MCIERR_BASE + 68)
  1112. #define MCIERR_WAVE_INPUTUNSPECIFIED    (MCIERR_BASE + 69)
  1113. #define MCIERR_WAVE_OUTPUTSUNSUITABLE   (MCIERR_BASE + 70)
  1114. #define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE + 71)
  1115. #define MCIERR_WAVE_INPUTSUNSUITABLE    (MCIERR_BASE + 72)
  1116. #define MCIERR_WAVE_SETINPUTUNSUITABLE  (MCIERR_BASE + 73)
  1117.  
  1118. #define MCIERR_SEQ_DIV_INCOMPATIBLE     (MCIERR_BASE + 80)
  1119. #define MCIERR_SEQ_PORT_INUSE           (MCIERR_BASE + 81)
  1120. #define MCIERR_SEQ_PORT_NONEXISTENT     (MCIERR_BASE + 82)
  1121. #define MCIERR_SEQ_PORT_MAPNODEVICE     (MCIERR_BASE + 83)
  1122. #define MCIERR_SEQ_PORT_MISCERROR       (MCIERR_BASE + 84)
  1123. #define MCIERR_SEQ_TIMER                (MCIERR_BASE + 85)
  1124. #define MCIERR_SEQ_PORTUNSPECIFIED      (MCIERR_BASE + 86)
  1125. #define MCIERR_SEQ_NOMIDIPRESENT        (MCIERR_BASE + 87)
  1126.  
  1127. #define MCIERR_NO_WINDOW                (MCIERR_BASE + 90)
  1128. #define MCIERR_CREATEWINDOW             (MCIERR_BASE + 91)
  1129. #define MCIERR_FILE_READ                (MCIERR_BASE + 92)
  1130. #define MCIERR_FILE_WRITE               (MCIERR_BASE + 93)
  1131.  
  1132. /* all custom device driver errors must be >= than this value */
  1133. #define MCIERR_CUSTOM_DRIVER_BASE       (MCIERR_BASE + 256)
  1134.  
  1135. /* MCI command message identifiers */
  1136. #define MCI_OPEN                        0x0803
  1137. #define MCI_CLOSE                       0x0804
  1138. #define MCI_ESCAPE                      0x0805
  1139. #define MCI_PLAY                        0x0806
  1140. #define MCI_SEEK                        0x0807
  1141. #define MCI_STOP                        0x0808
  1142. #define MCI_PAUSE                       0x0809
  1143. #define MCI_INFO                        0x080A
  1144. #define MCI_GETDEVCAPS                  0x080B
  1145. #define MCI_SPIN                        0x080C
  1146. #define MCI_SET                         0x080D
  1147. #define MCI_STEP                        0x080E
  1148. #define MCI_RECORD                      0x080F
  1149. #define MCI_SYSINFO                     0x0810
  1150. #define MCI_BREAK                       0x0811
  1151. #define MCI_SOUND                       0x0812
  1152. #define MCI_SAVE                        0x0813
  1153. #define MCI_STATUS                      0x0814
  1154. #define MCI_CUE                         0x0830
  1155. #define MCI_REALIZE                     0x0840
  1156. #define MCI_WINDOW                      0x0841
  1157. #define MCI_PUT                         0x0842
  1158. #define MCI_WHERE                       0x0843
  1159. #define MCI_FREEZE                      0x0844
  1160. #define MCI_UNFREEZE                    0x0845
  1161. #define MCI_LOAD                        0x0850
  1162. #define MCI_CUT                         0x0851
  1163. #define MCI_COPY                        0x0852
  1164. #define MCI_PASTE                       0x0853
  1165. #define MCI_UPDATE                      0x0854
  1166. #define MCI_RESUME                      0x0855
  1167. #define MCI_DELETE                      0x0856
  1168.  
  1169. /* all custom MCI command messages must be >= than this value */
  1170. #define MCI_USER_MESSAGES               (0x400 + DRV_MCI_FIRST)
  1171.  
  1172.  
  1173. /* device ID for "all devices" */
  1174. #define MCI_ALL_DEVICE_ID               0xFFFF
  1175.  
  1176. /* constants for predefined MCI device types */
  1177. #define MCI_DEVTYPE_VCR                 (MCI_STRING_OFFSET + 1)
  1178. #define MCI_DEVTYPE_VIDEODISC           (MCI_STRING_OFFSET + 2)
  1179. #define MCI_DEVTYPE_OVERLAY             (MCI_STRING_OFFSET + 3)
  1180. #define MCI_DEVTYPE_CD_AUDIO            (MCI_STRING_OFFSET + 4)
  1181. #define MCI_DEVTYPE_DAT                 (MCI_STRING_OFFSET + 5)
  1182. #define MCI_DEVTYPE_SCANNER             (MCI_STRING_OFFSET + 6)
  1183. #define MCI_DEVTYPE_ANIMATION           (MCI_STRING_OFFSET + 7)
  1184. #define MCI_DEVTYPE_DIGITAL_VIDEO       (MCI_STRING_OFFSET + 8)
  1185. #define MCI_DEVTYPE_OTHER               (MCI_STRING_OFFSET + 9)
  1186. #define MCI_DEVTYPE_WAVEFORM_AUDIO      (MCI_STRING_OFFSET + 10)
  1187. #define MCI_DEVTYPE_SEQUENCER           (MCI_STRING_OFFSET + 11)
  1188.  
  1189. #define MCI_DEVTYPE_FIRST               MCI_DEVTYPE_VCR
  1190. #define MCI_DEVTYPE_LAST                MCI_DEVTYPE_SEQUENCER
  1191.  
  1192. /* return values for 'status mode' command */
  1193. #define MCI_MODE_NOT_READY              (MCI_STRING_OFFSET + 12)
  1194. #define MCI_MODE_STOP                   (MCI_STRING_OFFSET + 13)
  1195. #define MCI_MODE_PLAY                   (MCI_STRING_OFFSET + 14)
  1196. #define MCI_MODE_RECORD                 (MCI_STRING_OFFSET + 15)
  1197. #define MCI_MODE_SEEK                   (MCI_STRING_OFFSET + 16)
  1198. #define MCI_MODE_PAUSE                  (MCI_STRING_OFFSET + 17)
  1199. #define MCI_MODE_OPEN                   (MCI_STRING_OFFSET + 18)
  1200.  
  1201. /* constants used in 'set time format' and 'status time format' commands */
  1202. #define MCI_FORMAT_MILLISECONDS         0
  1203. #define MCI_FORMAT_HMS                  1
  1204. #define MCI_FORMAT_MSF                  2
  1205. #define MCI_FORMAT_FRAMES               3
  1206. #define MCI_FORMAT_SMPTE_24             4
  1207. #define MCI_FORMAT_SMPTE_25             5
  1208. #define MCI_FORMAT_SMPTE_30             6
  1209. #define MCI_FORMAT_SMPTE_30DROP         7
  1210. #define MCI_FORMAT_BYTES                8
  1211. #define MCI_FORMAT_SAMPLES              9
  1212. #define MCI_FORMAT_TMSF                 10
  1213.  
  1214. /* MCI time format conversion macros */
  1215. #define MCI_MSF_MINUTE(msf)             ((BYTE)(msf))
  1216. #define MCI_MSF_SECOND(msf)             ((BYTE)(((WORD)(msf)) >> 8))
  1217. #define MCI_MSF_FRAME(msf)              ((BYTE)((msf)>>16))
  1218.  
  1219. #define MCI_MAKE_MSF(m, s, f)           ((DWORD)(((BYTE)(m) | \
  1220.                                                   ((WORD)(s)<<8)) | \
  1221.                                                  (((DWORD)(BYTE)(f))<<16)))
  1222.  
  1223. #define MCI_TMSF_TRACK(tmsf)            ((BYTE)(tmsf))
  1224. #define MCI_TMSF_MINUTE(tmsf)           ((BYTE)(((WORD)(tmsf)) >> 8))
  1225. #define MCI_TMSF_SECOND(tmsf)           ((BYTE)((tmsf)>>16))
  1226. #define MCI_TMSF_FRAME(tmsf)            ((BYTE)((tmsf)>>24))
  1227.  
  1228. #define MCI_MAKE_TMSF(t, m, s, f)       ((DWORD)(((BYTE)(t) | \
  1229.                                                   ((WORD)(m)<<8)) | \
  1230.                                                  (((DWORD)(BYTE)(s) | \
  1231.                                                    ((WORD)(f)<<8))<<16)))
  1232.  
  1233. #define MCI_HMS_HOUR(hms)               ((BYTE)(hms))
  1234. #define MCI_HMS_MINUTE(hms)             ((BYTE)(((WORD)(hms)) >> 8))
  1235. #define MCI_HMS_SECOND(hms)             ((BYTE)((hms)>>16))
  1236.  
  1237. #define MCI_MAKE_HMS(h, m, s)           ((DWORD)(((BYTE)(h) | \
  1238.                                                   ((WORD)(m)<<8)) | \
  1239.                                                  (((DWORD)(BYTE)(s))<<16)))
  1240.  
  1241.  
  1242. /* flags for wParam of MM_MCINOTIFY message */
  1243. #define MCI_NOTIFY_SUCCESSFUL           0x0001
  1244. #define MCI_NOTIFY_SUPERSEDED           0x0002
  1245. #define MCI_NOTIFY_ABORTED              0x0004
  1246. #define MCI_NOTIFY_FAILURE              0x0008
  1247.  
  1248.  
  1249. /* common flags for dwFlags parameter of MCI command messages */
  1250. #define MCI_NOTIFY                      0x00000001L
  1251. #define MCI_WAIT                        0x00000002L
  1252. #define MCI_FROM                        0x00000004L
  1253. #define MCI_TO                          0x00000008L
  1254. #define MCI_TRACK                       0x00000010L
  1255.  
  1256. /* flags for dwFlags parameter of MCI_OPEN command message */
  1257. #define MCI_OPEN_SHAREABLE              0x00000100L
  1258. #define MCI_OPEN_ELEMENT                0x00000200L
  1259. #define MCI_OPEN_ALIAS                  0x00000400L
  1260. #define MCI_OPEN_ELEMENT_ID             0x00000800L
  1261. #define MCI_OPEN_TYPE_ID                0x00001000L
  1262. #define MCI_OPEN_TYPE                   0x00002000L
  1263.  
  1264. /* flags for dwFlags parameter of MCI_SEEK command message */
  1265. #define MCI_SEEK_TO_START               0x00000100L
  1266. #define MCI_SEEK_TO_END                 0x00000200L
  1267.  
  1268. /* flags for dwFlags parameter of MCI_STATUS command message */
  1269. #define MCI_STATUS_ITEM                 0x00000100L
  1270. #define MCI_STATUS_START                0x00000200L
  1271.  
  1272. /* flags for dwItem field of the MCI_STATUS_PARMS parameter block */
  1273. #define MCI_STATUS_LENGTH               0x00000001L
  1274. #define MCI_STATUS_POSITION             0x00000002L
  1275. #define MCI_STATUS_NUMBER_OF_TRACKS     0x00000003L
  1276. #define MCI_STATUS_MODE                 0x00000004L
  1277. #define MCI_STATUS_MEDIA_PRESENT        0x00000005L
  1278. #define MCI_STATUS_TIME_FORMAT          0x00000006L
  1279. #define MCI_STATUS_READY                0x00000007L
  1280. #define MCI_STATUS_CURRENT_TRACK        0x00000008L
  1281.  
  1282. /* flags for dwFlags parameter of MCI_INFO command message */
  1283. #define MCI_INFO_PRODUCT                0x00000100L
  1284. #define MCI_INFO_FILE                   0x00000200L
  1285.  
  1286. /* flags for dwFlags parameter of MCI_GETDEVCAPS command message */
  1287. #define MCI_GETDEVCAPS_ITEM             0x00000100L
  1288.  
  1289. /* flags for dwItem field of the MCI_GETDEVCAPS_PARMS parameter block */
  1290. #define MCI_GETDEVCAPS_CAN_RECORD       0x00000001L
  1291. #define MCI_GETDEVCAPS_HAS_AUDIO        0x00000002L
  1292. #define MCI_GETDEVCAPS_HAS_VIDEO        0x00000003L
  1293. #define MCI_GETDEVCAPS_DEVICE_TYPE      0x00000004L
  1294. #define MCI_GETDEVCAPS_USES_FILES       0x00000005L
  1295. #define MCI_GETDEVCAPS_COMPOUND_DEVICE  0x00000006L
  1296. #define MCI_GETDEVCAPS_CAN_EJECT        0x00000007L
  1297. #define MCI_GETDEVCAPS_CAN_PLAY         0x00000008L
  1298. #define MCI_GETDEVCAPS_CAN_SAVE         0x00000009L
  1299.  
  1300. /* flags for dwFlags parameter of MCI_SYSINFO command message */
  1301. #define MCI_SYSINFO_QUANTITY            0x00000100L
  1302. #define MCI_SYSINFO_OPEN                0x00000200L
  1303. #define MCI_SYSINFO_NAME                0x00000400L
  1304. #define MCI_SYSINFO_INSTALLNAME         0x00000800L
  1305.  
  1306. /* flags for dwFlags parameter of MCI_SET command message */
  1307. #define MCI_SET_DOOR_OPEN               0x00000100L
  1308. #define MCI_SET_DOOR_CLOSED             0x00000200L
  1309. #define MCI_SET_TIME_FORMAT             0x00000400L
  1310. #define MCI_SET_AUDIO                   0x00000800L
  1311. #define MCI_SET_VIDEO                   0x00001000L
  1312. #define MCI_SET_ON                      0x00002000L
  1313. #define MCI_SET_OFF                     0x00004000L
  1314.  
  1315. /* flags for dwAudio field of MCI_SET_PARMS or MCI_SEQ_SET_PARMS */
  1316. #define MCI_SET_AUDIO_ALL               0x00000000L
  1317. #define MCI_SET_AUDIO_LEFT              0x00000001L
  1318. #define MCI_SET_AUDIO_RIGHT             0x00000002L
  1319.  
  1320. /* flags for dwFlags parameter of MCI_BREAK command message */
  1321. #define MCI_BREAK_KEY                   0x00000100L
  1322. #define MCI_BREAK_HWND                  0x00000200L
  1323. #define MCI_BREAK_OFF                   0x00000400L
  1324.  
  1325. /* flags for dwFlags parameter of MCI_RECORD command message */
  1326. #define MCI_RECORD_INSERT               0x00000100L
  1327. #define MCI_RECORD_OVERWRITE            0x00000200L
  1328.  
  1329. /* flags for dwFlags parameter of MCI_SOUND command message */
  1330. #define MCI_SOUND_NAME                  0x00000100L
  1331.  
  1332. /* flags for dwFlags parameter of MCI_SAVE command message */
  1333. #define MCI_SAVE_FILE                   0x00000100L
  1334.  
  1335. /* flags for dwFlags parameter of MCI_LOAD command message */
  1336. #define MCI_LOAD_FILE                   0x00000100L
  1337.  
  1338. /* generic parameter block for MCI command messages with no special parameters */
  1339. typedef struct tagMCI_GENERIC_PARMS {
  1340.     DWORD   dwCallback;
  1341. } MCI_GENERIC_PARMS;
  1342. typedef MCI_GENERIC_PARMS FAR *LPMCI_GENERIC_PARMS;
  1343.  
  1344. /* parameter block for MCI_OPEN command message */
  1345. typedef struct tagMCI_OPEN_PARMS {
  1346.     DWORD   dwCallback;
  1347.     UINT    wDeviceID;
  1348.     UINT    wReserved0;
  1349.     LPCSTR  lpstrDeviceType;
  1350.     LPCSTR  lpstrElementName;
  1351.     LPCSTR  lpstrAlias;
  1352. } MCI_OPEN_PARMS;
  1353. typedef MCI_OPEN_PARMS FAR *LPMCI_OPEN_PARMS;
  1354.  
  1355. /* parameter block for MCI_PLAY command message */
  1356. typedef struct tagMCI_PLAY_PARMS {
  1357.     DWORD   dwCallback;
  1358.     DWORD   dwFrom;
  1359.     DWORD   dwTo;
  1360. } MCI_PLAY_PARMS;
  1361. typedef MCI_PLAY_PARMS FAR *LPMCI_PLAY_PARMS;
  1362.  
  1363. /* parameter block for MCI_SEEK command message */
  1364. typedef struct tagMCI_SEEK_PARMS {
  1365.     DWORD   dwCallback;
  1366.     DWORD   dwTo;
  1367. } MCI_SEEK_PARMS;
  1368. typedef MCI_SEEK_PARMS FAR *LPMCI_SEEK_PARMS;
  1369.  
  1370. /* parameter block for MCI_STATUS command message */
  1371. typedef struct tagMCI_STATUS_PARMS {
  1372.     DWORD   dwCallback;
  1373.     DWORD   dwReturn;
  1374.     DWORD   dwItem;
  1375.     DWORD   dwTrack;
  1376. } MCI_STATUS_PARMS;
  1377. typedef MCI_STATUS_PARMS FAR * LPMCI_STATUS_PARMS;
  1378.  
  1379. /* parameter block for MCI_INFO command message */
  1380. typedef struct tagMCI_INFO_PARMS {
  1381.     DWORD   dwCallback;
  1382.     LPSTR   lpstrReturn;
  1383.     DWORD   dwRetSize;
  1384. } MCI_INFO_PARMS;
  1385. typedef MCI_INFO_PARMS FAR * LPMCI_INFO_PARMS;
  1386.  
  1387. /* parameter block for MCI_GETDEVCAPS command message */
  1388. typedef struct tagMCI_GETDEVCAPS_PARMS {
  1389.     DWORD   dwCallback;
  1390.     DWORD   dwReturn;
  1391.     DWORD   dwItem;
  1392. } MCI_GETDEVCAPS_PARMS;
  1393. typedef MCI_GETDEVCAPS_PARMS FAR * LPMCI_GETDEVCAPS_PARMS;
  1394.  
  1395. /* parameter block for MCI_SYSINFO command message */
  1396. typedef struct tagMCI_SYSINFO_PARMS {
  1397.     DWORD   dwCallback;
  1398.     LPSTR   lpstrReturn;
  1399.     DWORD   dwRetSize;
  1400.     DWORD   dwNumber;
  1401.     UINT    wDeviceType;
  1402.     UINT    wReserved0;
  1403. } MCI_SYSINFO_PARMS;
  1404. typedef MCI_SYSINFO_PARMS FAR * LPMCI_SYSINFO_PARMS;
  1405.  
  1406. /* parameter block for MCI_SET command message */
  1407. typedef struct tagMCI_SET_PARMS {
  1408.     DWORD   dwCallback;
  1409.     DWORD   dwTimeFormat;
  1410.     DWORD   dwAudio;
  1411. } MCI_SET_PARMS;
  1412. typedef MCI_SET_PARMS FAR *LPMCI_SET_PARMS;
  1413.  
  1414. /* parameter block for MCI_BREAK command message */
  1415. typedef struct tagMCI_BREAK_PARMS {
  1416.     DWORD   dwCallback;
  1417.     int     nVirtKey;
  1418.     UINT    wReserved0;
  1419.     HWND    hwndBreak;
  1420.     UINT    wReserved1;
  1421. } MCI_BREAK_PARMS;
  1422. typedef MCI_BREAK_PARMS FAR * LPMCI_BREAK_PARMS;
  1423.  
  1424. /* parameter block for MCI_SOUND command message */
  1425. typedef struct tagMCI_SOUND_PARMS {
  1426.     DWORD   dwCallback;
  1427.     LPCSTR  lpstrSoundName;
  1428. } MCI_SOUND_PARMS;
  1429. typedef MCI_SOUND_PARMS FAR * LPMCI_SOUND_PARMS;
  1430.  
  1431. /* parameter block for MCI_SAVE command message */
  1432. typedef struct tagMCI_SAVE_PARMS {
  1433.     DWORD   dwCallback;
  1434.     LPCSTR  lpfilename;
  1435. } MCI_SAVE_PARMS;
  1436. typedef MCI_SAVE_PARMS FAR * LPMCI_SAVE_PARMS;
  1437.  
  1438. /* parameter block for MCI_LOAD command message */
  1439. typedef struct tagMCI_LOAD_PARMS {
  1440.     DWORD   dwCallback;
  1441.     LPCSTR  lpfilename;
  1442. } MCI_LOAD_PARMS;
  1443. typedef MCI_LOAD_PARMS FAR * LPMCI_LOAD_PARMS;
  1444.  
  1445. /* parameter block for MCI_RECORD command message */
  1446. typedef struct tagMCI_RECORD_PARMS {
  1447.     DWORD   dwCallback;
  1448.     DWORD   dwFrom;
  1449.     DWORD   dwTo;
  1450. } MCI_RECORD_PARMS;
  1451. typedef MCI_RECORD_PARMS FAR *LPMCI_RECORD_PARMS;
  1452.  
  1453.  
  1454. /* MCI extensions for videodisc devices */
  1455.  
  1456. /* flag for dwReturn field of MCI_STATUS_PARMS */
  1457. /* MCI_STATUS command, (dwItem == MCI_STATUS_MODE) */
  1458. #define MCI_VD_MODE_PARK                (MCI_VD_OFFSET + 1)
  1459.  
  1460. /* flag for dwReturn field of MCI_STATUS_PARMS */
  1461. /* MCI_STATUS command, (dwItem == MCI_VD_STATUS_MEDIA_TYPE) */
  1462. #define MCI_VD_MEDIA_CLV                (MCI_VD_OFFSET + 2)
  1463. #define MCI_VD_MEDIA_CAV                (MCI_VD_OFFSET + 3)
  1464. #define MCI_VD_MEDIA_OTHER              (MCI_VD_OFFSET + 4)
  1465.  
  1466. #define MCI_VD_FORMAT_TRACK             0x4001
  1467.  
  1468. /* flags for dwFlags parameter of MCI_PLAY command message */
  1469. #define MCI_VD_PLAY_REVERSE             0x00010000L
  1470. #define MCI_VD_PLAY_FAST                0x00020000L
  1471. #define MCI_VD_PLAY_SPEED               0x00040000L
  1472. #define MCI_VD_PLAY_SCAN                0x00080000L
  1473. #define MCI_VD_PLAY_SLOW                0x00100000L
  1474.  
  1475. /* flag for dwFlags parameter of MCI_SEEK command message */
  1476. #define MCI_VD_SEEK_REVERSE             0x00010000L
  1477.  
  1478. /* flags for dwItem field of MCI_STATUS_PARMS parameter block */
  1479. #define MCI_VD_STATUS_SPEED             0x00004002L
  1480. #define MCI_VD_STATUS_FORWARD           0x00004003L
  1481. #define MCI_VD_STATUS_MEDIA_TYPE        0x00004004L
  1482. #define MCI_VD_STATUS_SIDE              0x00004005L
  1483. #define MCI_VD_STATUS_DISC_SIZE         0x00004006L
  1484.  
  1485. /* flags for dwFlags parameter of MCI_GETDEVCAPS command message */
  1486. #define MCI_VD_GETDEVCAPS_CLV           0x00010000L
  1487. #define MCI_VD_GETDEVCAPS_CAV           0x00020000L
  1488.  
  1489. #define MCI_VD_SPIN_UP                  0x00010000L
  1490. #define MCI_VD_SPIN_DOWN                0x00020000L
  1491.  
  1492. /* flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block */
  1493. #define MCI_VD_GETDEVCAPS_CAN_REVERSE   0x00004002L
  1494. #define MCI_VD_GETDEVCAPS_FAST_RATE     0x00004003L
  1495. #define MCI_VD_GETDEVCAPS_SLOW_RATE     0x00004004L
  1496. #define MCI_VD_GETDEVCAPS_NORMAL_RATE   0x00004005L
  1497.  
  1498. /* flags for the dwFlags parameter of MCI_STEP command message */
  1499. #define MCI_VD_STEP_FRAMES              0x00010000L
  1500. #define MCI_VD_STEP_REVERSE             0x00020000L
  1501.  
  1502. /* flag for the MCI_ESCAPE command message */
  1503. #define MCI_VD_ESCAPE_STRING            0x00000100L
  1504.  
  1505. /* parameter block for MCI_PLAY command message */
  1506. typedef struct tagMCI_VD_PLAY_PARMS {
  1507.     DWORD   dwCallback;
  1508.     DWORD   dwFrom;
  1509.     DWORD   dwTo;
  1510.     DWORD   dwSpeed;
  1511.     } MCI_VD_PLAY_PARMS;
  1512. typedef MCI_VD_PLAY_PARMS FAR *LPMCI_VD_PLAY_PARMS;
  1513.  
  1514. /* parameter block for MCI_STEP command message */
  1515. typedef struct tagMCI_VD_STEP_PARMS {
  1516.     DWORD   dwCallback;
  1517.     DWORD   dwFrames;
  1518. } MCI_VD_STEP_PARMS;
  1519. typedef MCI_VD_STEP_PARMS FAR *LPMCI_VD_STEP_PARMS;
  1520.  
  1521. /* parameter block for MCI_ESCAPE command message */
  1522. typedef struct tagMCI_VD_ESCAPE_PARMS {
  1523.     DWORD   dwCallback;
  1524.     LPCSTR  lpstrCommand;
  1525. } MCI_VD_ESCAPE_PARMS;
  1526. typedef MCI_VD_ESCAPE_PARMS FAR *LPMCI_VD_ESCAPE_PARMS;
  1527.  
  1528.  
  1529. /* MCI extensions for waveform audio devices */
  1530.  
  1531. /* flags for the dwFlags parameter of MCI_OPEN command message */
  1532. #define MCI_WAVE_OPEN_BUFFER            0x00010000L
  1533.  
  1534. /* flags for the dwFlags parameter of MCI_SET command message */
  1535. #define MCI_WAVE_SET_FORMATTAG          0x00010000L
  1536. #define MCI_WAVE_SET_CHANNELS           0x00020000L
  1537. #define MCI_WAVE_SET_SAMPLESPERSEC      0x00040000L
  1538. #define MCI_WAVE_SET_AVGBYTESPERSEC     0x00080000L
  1539. #define MCI_WAVE_SET_BLOCKALIGN         0x00100000L
  1540. #define MCI_WAVE_SET_BITSPERSAMPLE      0x00200000L
  1541.  
  1542. /* flags for the dwFlags parameter of MCI_STATUS, MCI_SET command messages */
  1543. #define MCI_WAVE_INPUT                  0x00400000L
  1544. #define MCI_WAVE_OUTPUT                 0x00800000L
  1545.  
  1546. /* flags for the dwItem field of MCI_STATUS_PARMS parameter block */
  1547. #define MCI_WAVE_STATUS_FORMATTAG       0x00004001L
  1548. #define MCI_WAVE_STATUS_CHANNELS        0x00004002L
  1549. #define MCI_WAVE_STATUS_SAMPLESPERSEC   0x00004003L
  1550. #define MCI_WAVE_STATUS_AVGBYTESPERSEC  0x00004004L
  1551. #define MCI_WAVE_STATUS_BLOCKALIGN      0x00004005L
  1552. #define MCI_WAVE_STATUS_BITSPERSAMPLE   0x00004006L
  1553. #define MCI_WAVE_STATUS_LEVEL           0x00004007L
  1554.  
  1555. /* flags for the dwFlags parameter of MCI_SET command message */
  1556. #define MCI_WAVE_SET_ANYINPUT           0x04000000L
  1557. #define MCI_WAVE_SET_ANYOUTPUT          0x08000000L
  1558.  
  1559. /* flags for the dwFlags parameter of MCI_GETDEVCAPS command message */
  1560. #define MCI_WAVE_GETDEVCAPS_INPUTS      0x00004001L
  1561. #define MCI_WAVE_GETDEVCAPS_OUTPUTS     0x00004002L
  1562.  
  1563. /* parameter block for MCI_OPEN command message */
  1564. typedef struct tagMCI_WAVE_OPEN_PARMS {
  1565.     DWORD   dwCallback;
  1566.     UINT    wDeviceID;
  1567.     UINT    wReserved0;
  1568.     LPCSTR  lpstrDeviceType;
  1569.     LPCSTR  lpstrElementName;
  1570.     LPCSTR  lpstrAlias;
  1571.     DWORD   dwBufferSeconds;
  1572. } MCI_WAVE_OPEN_PARMS;
  1573. typedef MCI_WAVE_OPEN_PARMS FAR *LPMCI_WAVE_OPEN_PARMS;
  1574.  
  1575. /* parameter block for MCI_DELETE command message */
  1576. typedef struct tagMCI_WAVE_DELETE_PARMS {
  1577.     DWORD   dwCallback;
  1578.     DWORD   dwFrom;
  1579.     DWORD   dwTo;
  1580. } MCI_WAVE_DELETE_PARMS;
  1581. typedef MCI_WAVE_DELETE_PARMS FAR *LPMCI_WAVE_DELETE_PARMS;
  1582.  
  1583. /* parameter block for MCI_SET command message */
  1584. typedef struct tagMCI_WAVE_SET_PARMS {
  1585.     DWORD   dwCallback;
  1586.     DWORD   dwTimeFormat;
  1587.     DWORD   dwAudio;
  1588.     UINT    wInput;
  1589.     UINT    wReserved0;
  1590.     UINT    wOutput;
  1591.     UINT    wReserved1;
  1592.     UINT    wFormatTag;
  1593.     UINT    wReserved2;
  1594.     UINT    nChannels;
  1595.     UINT    wReserved3;
  1596.     DWORD   nSamplesPerSec;
  1597.     DWORD   nAvgBytesPerSec;
  1598.     UINT    nBlockAlign;
  1599.     UINT    wReserved4;
  1600.     UINT    wBitsPerSample;
  1601.     UINT    wReserved5;
  1602. } MCI_WAVE_SET_PARMS;
  1603. typedef MCI_WAVE_SET_PARMS FAR * LPMCI_WAVE_SET_PARMS;
  1604.  
  1605.  
  1606. /* MCI extensions for MIDI sequencer devices */
  1607.  
  1608. /* flags for the dwReturn field of MCI_STATUS_PARMS parameter block */
  1609. /* MCI_STATUS command, (dwItem == MCI_SEQ_STATUS_DIVTYPE) */
  1610. #define     MCI_SEQ_DIV_PPQN            (0 + MCI_SEQ_OFFSET)
  1611. #define     MCI_SEQ_DIV_SMPTE_24        (1 + MCI_SEQ_OFFSET)
  1612. #define     MCI_SEQ_DIV_SMPTE_25        (2 + MCI_SEQ_OFFSET)
  1613. #define     MCI_SEQ_DIV_SMPTE_30DROP    (3 + MCI_SEQ_OFFSET)
  1614. #define     MCI_SEQ_DIV_SMPTE_30        (4 + MCI_SEQ_OFFSET)
  1615.  
  1616. /* flags for the dwMaster field of MCI_SEQ_SET_PARMS parameter block */
  1617. /* MCI_SET command, (dwFlags == MCI_SEQ_SET_MASTER) */
  1618. #define     MCI_SEQ_FORMAT_SONGPTR      0x4001
  1619. #define     MCI_SEQ_FILE                0x4002
  1620. #define     MCI_SEQ_MIDI                0x4003
  1621. #define     MCI_SEQ_SMPTE               0x4004
  1622. #define     MCI_SEQ_NONE                65533
  1623.  
  1624. /* flags for the dwItem field of MCI_STATUS_PARMS parameter block */
  1625. #define MCI_SEQ_STATUS_TEMPO            0x00004002L
  1626. #define MCI_SEQ_STATUS_PORT             0x00004003L
  1627. #define MCI_SEQ_STATUS_SLAVE            0x00004007L
  1628. #define MCI_SEQ_STATUS_MASTER           0x00004008L
  1629. #define MCI_SEQ_STATUS_OFFSET           0x00004009L
  1630. #define MCI_SEQ_STATUS_DIVTYPE          0x0000400AL
  1631.  
  1632. /* flags for the dwFlags parameter of MCI_SET command message */
  1633. #define MCI_SEQ_SET_TEMPO               0x00010000L
  1634. #define MCI_SEQ_SET_PORT                0x00020000L
  1635. #define MCI_SEQ_SET_SLAVE               0x00040000L
  1636. #define MCI_SEQ_SET_MASTER              0x00080000L
  1637. #define MCI_SEQ_SET_OFFSET              0x01000000L
  1638.  
  1639. /* parameter block for MCI_SET command message */
  1640. typedef struct tagMCI_SEQ_SET_PARMS {
  1641.     DWORD   dwCallback;
  1642.     DWORD   dwTimeFormat;
  1643.     DWORD   dwAudio;
  1644.     DWORD   dwTempo;
  1645.     DWORD   dwPort;
  1646.     DWORD   dwSlave;
  1647.     DWORD   dwMaster;
  1648.     DWORD   dwOffset;
  1649. } MCI_SEQ_SET_PARMS;
  1650. typedef MCI_SEQ_SET_PARMS FAR * LPMCI_SEQ_SET_PARMS;
  1651.  
  1652.  
  1653. /* MCI extensions for animation devices */
  1654.  
  1655. /* flags for dwFlags parameter of MCI_OPEN command message */
  1656. #define MCI_ANIM_OPEN_WS                0x00010000L
  1657. #define MCI_ANIM_OPEN_PARENT            0x00020000L
  1658. #define MCI_ANIM_OPEN_NOSTATIC          0x00040000L
  1659.  
  1660. /* flags for dwFlags parameter of MCI_PLAY command message */
  1661. #define MCI_ANIM_PLAY_SPEED             0x00010000L
  1662. #define MCI_ANIM_PLAY_REVERSE           0x00020000L
  1663. #define MCI_ANIM_PLAY_FAST              0x00040000L
  1664. #define MCI_ANIM_PLAY_SLOW              0x00080000L
  1665. #define MCI_ANIM_PLAY_SCAN              0x00100000L
  1666.  
  1667. /* flags for dwFlags parameter of MCI_STEP command message */
  1668. #define MCI_ANIM_STEP_REVERSE           0x00010000L
  1669. #define MCI_ANIM_STEP_FRAMES            0x00020000L
  1670.  
  1671. /* flags for dwItem field of MCI_STATUS_PARMS parameter block */
  1672. #define MCI_ANIM_STATUS_SPEED           0x00004001L
  1673. #define MCI_ANIM_STATUS_FORWARD         0x00004002L
  1674. #define MCI_ANIM_STATUS_HWND            0x00004003L
  1675. #define MCI_ANIM_STATUS_HPAL            0x00004004L
  1676. #define MCI_ANIM_STATUS_STRETCH         0x00004005L
  1677.  
  1678. /* flags for the dwFlags parameter of MCI_INFO command message */
  1679. #define MCI_ANIM_INFO_TEXT              0x00010000L
  1680.  
  1681. /* flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block */
  1682. #define MCI_ANIM_GETDEVCAPS_CAN_REVERSE 0x00004001L
  1683. #define MCI_ANIM_GETDEVCAPS_FAST_RATE   0x00004002L
  1684. #define MCI_ANIM_GETDEVCAPS_SLOW_RATE   0x00004003L
  1685. #define MCI_ANIM_GETDEVCAPS_NORMAL_RATE 0x00004004L
  1686. #define MCI_ANIM_GETDEVCAPS_PALETTES    0x00004006L
  1687. #define MCI_ANIM_GETDEVCAPS_CAN_STRETCH 0x00004007L
  1688. #define MCI_ANIM_GETDEVCAPS_MAX_WINDOWS 0x00004008L
  1689.  
  1690. /* flags for the MCI_REALIZE command message */
  1691. #define MCI_ANIM_REALIZE_NORM           0x00010000L
  1692. #define MCI_ANIM_REALIZE_BKGD           0x00020000L
  1693.  
  1694. /* flags for dwFlags parameter of MCI_WINDOW command message */
  1695. #define MCI_ANIM_WINDOW_HWND            0x00010000L
  1696. #define MCI_ANIM_WINDOW_STATE           0x00040000L
  1697. #define MCI_ANIM_WINDOW_TEXT            0x00080000L
  1698. #define MCI_ANIM_WINDOW_ENABLE_STRETCH  0x00100000L
  1699. #define MCI_ANIM_WINDOW_DISABLE_STRETCH 0x00200000L
  1700.  
  1701. /* flags for hWnd field of MCI_ANIM_WINDOW_PARMS parameter block */
  1702. /* MCI_WINDOW command message, (dwFlags == MCI_ANIM_WINDOW_HWND) */
  1703. #define MCI_ANIM_WINDOW_DEFAULT         0x00000000L
  1704.  
  1705. /* flags for dwFlags parameter of MCI_PUT command message */
  1706. #define MCI_ANIM_RECT                   0x00010000L
  1707. #define MCI_ANIM_PUT_SOURCE             0x00020000L
  1708. #define MCI_ANIM_PUT_DESTINATION        0x00040000L
  1709.  
  1710. /* flags for dwFlags parameter of MCI_WHERE command message */
  1711. #define MCI_ANIM_WHERE_SOURCE           0x00020000L
  1712. #define MCI_ANIM_WHERE_DESTINATION      0x00040000L
  1713.  
  1714. /* flags for dwFlags parameter of MCI_UPDATE command message */
  1715. #define MCI_ANIM_UPDATE_HDC             0x00020000L
  1716.  
  1717. /* parameter block for MCI_OPEN command message */
  1718. typedef struct tagMCI_ANIM_OPEN_PARMS {
  1719.     DWORD   dwCallback;
  1720.     UINT    wDeviceID;
  1721.     UINT    wReserved0;
  1722.     LPCSTR  lpstrDeviceType;
  1723.     LPCSTR  lpstrElementName;
  1724.     LPCSTR  lpstrAlias;
  1725.     DWORD   dwStyle;
  1726.     HWND    hWndParent;
  1727.     UINT    wReserved1;
  1728. } MCI_ANIM_OPEN_PARMS;
  1729. typedef MCI_ANIM_OPEN_PARMS FAR *LPMCI_ANIM_OPEN_PARMS;
  1730.  
  1731. /* parameter block for MCI_PLAY command message */
  1732. typedef struct tagMCI_ANIM_PLAY_PARMS {
  1733.     DWORD   dwCallback;
  1734.     DWORD   dwFrom;
  1735.     DWORD   dwTo;
  1736.     DWORD   dwSpeed;
  1737. } MCI_ANIM_PLAY_PARMS;
  1738. typedef MCI_ANIM_PLAY_PARMS FAR *LPMCI_ANIM_PLAY_PARMS;
  1739.  
  1740. /* parameter block for MCI_STEP command message */
  1741. typedef struct tagMCI_ANIM_STEP_PARMS {
  1742.     DWORD   dwCallback;
  1743.     DWORD   dwFrames;
  1744. } MCI_ANIM_STEP_PARMS;
  1745. typedef MCI_ANIM_STEP_PARMS FAR *LPMCI_ANIM_STEP_PARMS;
  1746.  
  1747. /* parameter block for MCI_WINDOW command message */
  1748. typedef struct tagMCI_ANIM_WINDOW_PARMS {
  1749.     DWORD   dwCallback;
  1750.     HWND    hWnd;
  1751.     UINT    wReserved1;
  1752.     UINT    nCmdShow;
  1753.     UINT    wReserved2;
  1754.     LPCSTR  lpstrText;
  1755. } MCI_ANIM_WINDOW_PARMS;
  1756. typedef MCI_ANIM_WINDOW_PARMS FAR * LPMCI_ANIM_WINDOW_PARMS;
  1757.  
  1758. /* parameter block for MCI_PUT, MCI_UPDATE, MCI_WHERE command messages */
  1759. typedef struct tagMCI_ANIM_RECT_PARMS {
  1760.     DWORD   dwCallback;
  1761. #ifdef MCI_USE_OFFEXT
  1762.     POINT   ptOffset;
  1763.     POINT   ptExtent;
  1764. #else   /* ifdef MCI_USE_OFFEXT */
  1765.     RECT    rc;
  1766. #endif  /* ifdef MCI_USE_OFFEXT */
  1767. } MCI_ANIM_RECT_PARMS;
  1768. typedef MCI_ANIM_RECT_PARMS FAR * LPMCI_ANIM_RECT_PARMS;
  1769.  
  1770. /* parameter block for MCI_UPDATE PARMS */
  1771. typedef struct tagMCI_ANIM_UPDATE_PARMS {
  1772.     DWORD   dwCallback;
  1773.     RECT    rc;
  1774.     HDC     hDC;
  1775. } MCI_ANIM_UPDATE_PARMS;
  1776. typedef MCI_ANIM_UPDATE_PARMS FAR * LPMCI_ANIM_UPDATE_PARMS;
  1777.  
  1778.  
  1779. /* MCI extensions for video overlay devices */
  1780.  
  1781. /* flags for dwFlags parameter of MCI_OPEN command message */
  1782. #define MCI_OVLY_OPEN_WS                0x00010000L
  1783. #define MCI_OVLY_OPEN_PARENT            0x00020000L
  1784.  
  1785. /* flags for dwFlags parameter of MCI_STATUS command message */
  1786. #define MCI_OVLY_STATUS_HWND            0x00004001L
  1787. #define MCI_OVLY_STATUS_STRETCH         0x00004002L
  1788.  
  1789. /* flags for dwFlags parameter of MCI_INFO command message */
  1790. #define MCI_OVLY_INFO_TEXT              0x00010000L
  1791.  
  1792. /* flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block */
  1793. #define MCI_OVLY_GETDEVCAPS_CAN_STRETCH 0x00004001L
  1794. #define MCI_OVLY_GETDEVCAPS_CAN_FREEZE  0x00004002L
  1795. #define MCI_OVLY_GETDEVCAPS_MAX_WINDOWS 0x00004003L
  1796.  
  1797. /* flags for dwFlags parameter of MCI_WINDOW command message */
  1798. #define MCI_OVLY_WINDOW_HWND            0x00010000L
  1799. #define MCI_OVLY_WINDOW_STATE           0x00040000L
  1800. #define MCI_OVLY_WINDOW_TEXT            0x00080000L
  1801. #define MCI_OVLY_WINDOW_ENABLE_STRETCH  0x00100000L
  1802. #define MCI_OVLY_WINDOW_DISABLE_STRETCH 0x00200000L
  1803.  
  1804. /* flags for hWnd parameter of MCI_OVLY_WINDOW_PARMS parameter block */
  1805. #define MCI_OVLY_WINDOW_DEFAULT         0x00000000L
  1806.  
  1807. /* flags for dwFlags parameter of MCI_PUT command message */
  1808. #define MCI_OVLY_RECT                   0x00010000L
  1809. #define MCI_OVLY_PUT_SOURCE             0x00020000L
  1810. #define MCI_OVLY_PUT_DESTINATION        0x00040000L
  1811. #define MCI_OVLY_PUT_FRAME              0x00080000L
  1812. #define MCI_OVLY_PUT_VIDEO              0x00100000L
  1813.  
  1814. /* flags for dwFlags parameter of MCI_WHERE command message */
  1815. #define MCI_OVLY_WHERE_SOURCE           0x00020000L
  1816. #define MCI_OVLY_WHERE_DESTINATION      0x00040000L
  1817. #define MCI_OVLY_WHERE_FRAME            0x00080000L
  1818. #define MCI_OVLY_WHERE_VIDEO            0x00100000L
  1819.  
  1820. /* parameter block for MCI_OPEN command message */
  1821. typedef struct tagMCI_OVLY_OPEN_PARMS {
  1822.     DWORD   dwCallback;
  1823.     UINT    wDeviceID;
  1824.     UINT    wReserved0;
  1825.     LPCSTR  lpstrDeviceType;
  1826.     LPCSTR  lpstrElementName;
  1827.     LPCSTR  lpstrAlias;
  1828.     DWORD   dwStyle;
  1829.     HWND    hWndParent;
  1830.     UINT    wReserved1;
  1831.  } MCI_OVLY_OPEN_PARMS;
  1832. typedef MCI_OVLY_OPEN_PARMS FAR *LPMCI_OVLY_OPEN_PARMS;
  1833.  
  1834. /* parameter block for MCI_WINDOW command message */
  1835. typedef struct tagMCI_OVLY_WINDOW_PARMS {
  1836.     DWORD   dwCallback;
  1837.     HWND    hWnd;
  1838.     UINT    wReserved1;
  1839.     UINT    nCmdShow;
  1840.     UINT    wReserved2;
  1841.     LPCSTR  lpstrText;
  1842. } MCI_OVLY_WINDOW_PARMS;
  1843. typedef MCI_OVLY_WINDOW_PARMS FAR * LPMCI_OVLY_WINDOW_PARMS;
  1844.  
  1845. /* parameter block for MCI_PUT, MCI_UPDATE, and MCI_WHERE command messages */
  1846. typedef struct tagMCI_OVLY_RECT_PARMS {
  1847.     DWORD   dwCallback;
  1848. #ifdef MCI_USE_OFFEXT
  1849.     POINT   ptOffset;
  1850.     POINT   ptExtent;
  1851. #else   /* ifdef MCI_USE_OFFEXT */
  1852.     RECT    rc;
  1853. #endif  /* ifdef MCI_USE_OFFEXT */
  1854. } MCI_OVLY_RECT_PARMS;
  1855. typedef MCI_OVLY_RECT_PARMS FAR * LPMCI_OVLY_RECT_PARMS;
  1856.  
  1857. /* parameter block for MCI_SAVE command message */
  1858. typedef struct tagMCI_OVLY_SAVE_PARMS {
  1859.     DWORD   dwCallback;
  1860.     LPCSTR  lpfilename;
  1861.     RECT    rc;
  1862. } MCI_OVLY_SAVE_PARMS;
  1863. typedef MCI_OVLY_SAVE_PARMS FAR * LPMCI_OVLY_SAVE_PARMS;
  1864.  
  1865. /* parameter block for MCI_LOAD command message */
  1866. typedef struct tagMCI_OVLY_LOAD_PARMS {
  1867.     DWORD   dwCallback;
  1868.     LPCSTR  lpfilename;
  1869.     RECT    rc;
  1870. } MCI_OVLY_LOAD_PARMS;
  1871. typedef MCI_OVLY_LOAD_PARMS FAR * LPMCI_OVLY_LOAD_PARMS;
  1872.  
  1873. #endif  /* ifndef MMNOMCI */
  1874.  
  1875. /****************************************************************************
  1876.  
  1877.                         DISPLAY Driver extensions
  1878.  
  1879. ****************************************************************************/
  1880.  
  1881. #ifndef C1_TRANSPARENT
  1882.     #define CAPS1           94          /* other caps */
  1883.     #define C1_TRANSPARENT  0x0001      /* new raster cap */
  1884.     #define NEWTRANSPARENT  3           /* use with SetBkMode() */
  1885.  
  1886.     #define QUERYROPSUPPORT 40          /* use to determine ROP support */
  1887. #endif  /* ifndef C1_TRANSPARENT */
  1888.  
  1889. /****************************************************************************
  1890.  
  1891.                         DIB Driver extensions
  1892.  
  1893. ****************************************************************************/
  1894.  
  1895. #define SELECTDIB       41                      /* DIB.DRV select dib escape */
  1896. #define DIBINDEX(n)     MAKELONG((n),0x10FF)
  1897.  
  1898.  
  1899. /****************************************************************************
  1900.  
  1901.                         ScreenSaver support
  1902.  
  1903.     The current application will receive a syscommand of SC_SCREENSAVE just
  1904.     before the screen saver is invoked.  If the app wishes to prevent a
  1905.     screen save, return non-zero value, otherwise call DefWindowProc().
  1906.  
  1907. ****************************************************************************/
  1908.  
  1909. #ifndef SC_SCREENSAVE
  1910.  
  1911.     #define SC_SCREENSAVE   0xF140
  1912.  
  1913. #endif  /* ifndef SC_SCREENSAVE */
  1914.  
  1915. #ifdef __cplusplus
  1916. }                       /* End of extern "C" { */
  1917. #endif  /* __cplusplus */
  1918.  
  1919. #ifndef RC_INVOKED
  1920. #pragma option -a.      /* Revert to default packing */
  1921. #endif  /* RC_INVOKED */
  1922.  
  1923. #endif  /* __MMSYSTEM_H */
  1924.