home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c480 / 17.ddi / INCLUDE / MMSYSTEM.H_ / MMSYSTEM.H
Encoding:
C/C++ Source or Header  |  1993-02-08  |  78.2 KB  |  1,918 lines

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