home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Multimedia Development Kit 0.9 beta / MDKBeta_Release3_ISO9660.iso / mdk / include / mmsystem.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-06-16  |  70.7 KB  |  1,860 lines

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