home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Multimedia Development Kit 0.9 beta / MDKBeta_DevEnvironment_ISO9660.iso / msdk / include / mmsystem.h / mmsystem.h
Encoding:
C/C++ Source or Header  |  1990-11-09  |  57.4 KB  |  1,529 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.         MMNOMMSYSTEM     - No mmsystem general functions
  19.  
  20.  
  21. ****************************************************************************/
  22.  
  23. #define MMSYSTEM
  24. typedef WORD    VERSION;
  25.  
  26. /****************************************************************************
  27.  
  28.     Multimedia Systems Window Messages
  29.  
  30. ****************************************************************************/
  31.  
  32. #ifndef WM_MM_RESERVED_FIRST
  33. // taken from windows.h
  34. /* The following message range reserved for multi-media */
  35. #define WM_MM_RESERVED_FIRST 0x03B0
  36. #define WM_MM_RESERVED_LAST  0x03EF
  37. #endif
  38.  
  39. #define MM_JOY1MOVE        (WM_MM_RESERVED_FIRST + 1)
  40. #define MM_JOY2MOVE        (1 + MM_JOY1MOVE)
  41. #define MM_JOY1ZMOVE        (WM_MM_RESERVED_FIRST + 3)
  42. #define MM_JOY2ZMOVE        (1 + MM_JOY1ZMOVE)
  43. #define MM_JOY1BUTTONDOWN   (WM_MM_RESERVED_FIRST + 5)
  44. #define MM_JOY2BUTTONDOWN   (1 + MM_JOY1BUTTONDOWN)
  45. #define MM_JOY1BUTTONUP     (WM_MM_RESERVED_FIRST + 7)
  46. #define MM_JOY2BUTTONUP     (1 + MM_JOY1BUTTONUP)
  47.  
  48. #define MM_MCINOTIFY        (WM_MM_RESERVED_FIRST + 9)
  49. #define MM_MEDNOTIFY        (WM_MM_RESERVED_FIRST + 10)
  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. // maximum length of szPname in devcaps structures
  71. #define MAXPNAMELEN             32
  72.  
  73. /****************************************************************************
  74.  
  75.     String resource number bases
  76.  
  77. ****************************************************************************/
  78.  
  79. #define MAXERRORLENGTH         80    // maximum error text length (including
  80.                      // terminating null)
  81. // error string resources
  82. #define MMSYSERR_BASE          0
  83. #define WAVERR_BASE            32
  84. #define MIDIERR_BASE           64
  85. #define TIMERR_BASE            128
  86. #define JOYERR_BASE            160
  87. #define MCIERR_BASE            256
  88.  
  89. #define MCI_STRING_OFFSET      512    // general mci string resources
  90. #define MCI_VD_OFFSET          544    // videodisc command string resources
  91. #define MCI_CD_OFFSET          576    // redbook audio command string resources
  92. #define MCI_WAVE_OFFSET        608    // wave audio command string resources
  93. #define MCI_SEQ_OFFSET           640    // sequencer command string resources
  94.  
  95.  
  96. /****************************************************************************
  97.  
  98.     General error return values
  99.  
  100. ****************************************************************************/
  101.  
  102. #define MMSYSERR_NOERROR       0                    // no error
  103. #define MMSYSERR_ERROR         (MMSYSERR_BASE + 1)  // unspecified error
  104. #define MMSYSERR_BADDEVICEID   (MMSYSERR_BASE + 2)  // device id is out of range
  105. #define MMSYSERR_NOTENABLED    (MMSYSERR_BASE + 3)  // driver failed its enable
  106. #define MMSYSERR_ALLOCATED     (MMSYSERR_BASE + 4)  // device already allocated
  107. #define MMSYSERR_INVALHANDLE   (MMSYSERR_BASE + 5)  // device handle is invalid
  108. #define MMSYSERR_NODRIVER      (MMSYSERR_BASE + 6)  // no device driver present
  109. #define MMSYSERR_NOMEM         (MMSYSERR_BASE + 7)  // memory allocation error
  110. #define MMSYSERR_NOTSUPPORTED  (MMSYSERR_BASE + 8)  // function isn't supported
  111. #define MMSYSERR_BADERRNUM     (MMSYSERR_BASE + 9)  // error number out of range
  112. #define MMSYSERR_LASTERROR     (MMSYSERR_BASE + 9)  // last error in range
  113.  
  114. /****************************************************************************
  115.  
  116.     driver callback
  117.  
  118.     the CALLBACK_* flags are used with WaveOutOpen(), WaveInOpen(),
  119.     midiInOpen(), and midiOutOpen() to determine the type of the
  120.     dwCallback parameter
  121.  
  122. ****************************************************************************/
  123.  
  124. #define CALLBACK_TYPEMASK   0x00070000l    // callback type mask
  125. #define CALLBACK_NULL       0x00000000l    // unknown callback type
  126. #define CALLBACK_WINDOW     0x00010000l    // dwCallback is a HWND
  127. #define CALLBACK_TASK       0x00020000l    // dwCallback is a HTASK
  128. #define CALLBACK_FUNCTION   0x00030000l    // dwCallback is a FARPROC
  129.  
  130.  
  131. typedef void (FAR PASCAL DRVCALLBACK) (HANDLE h, WORD msg, DWORD dwUser, DWORD dw1, DWORD dw2);
  132. typedef DRVCALLBACK FAR *LPDRVCALLBACK;
  133.  
  134. /****************************************************************************
  135.  
  136.     Manufacturer and product ids
  137.  
  138. ****************************************************************************/
  139.  
  140. // manufacturer ids
  141. #define MM_MICROSOFT        1
  142.  
  143. // product ids
  144. #define MM_SNDBLST_MIDIOUT    1
  145. #define MM_SNDBLST_MIDIIN    2
  146. #define MM_SNDBLST_SYNTH     3
  147. #define MM_SNDBLST_WAVEOUT    4
  148. #define MM_SNDBLST_WAVEIN    5
  149. #define MM_SNDBLST_JOY        6
  150.  
  151. #define MM_ADLIB        7
  152.  
  153. #define MM_MPU401_MIDIOUT    8
  154. #define MM_MPU401_MIDIIN    9
  155.  
  156. #define MM_MIDI_MAPPER          10
  157.  
  158. #define MM_MSOUND_MIDIOUT    11
  159. #define MM_MSOUND_MIDIIN    12
  160. #define MM_MSOUND_SYNTH     13
  161. #define MM_MSOUND_WAVEOUT    14
  162. #define MM_MSOUND_WAVEIN    15
  163.  
  164. /****************************************************************************
  165.  
  166.     MMTIME union of various structs
  167.  
  168. ****************************************************************************/
  169.  
  170. typedef struct mmtime_tag {
  171.     WORD    wType;              // the contents of the union
  172.     union {
  173.         DWORD ms;               // milliseconds
  174.         DWORD sample;           // samples
  175.         DWORD cb;               // byte count
  176.         struct {                // SMPTE
  177.             BYTE hour;          // hours
  178.             BYTE min;           // minutes
  179.             BYTE sec;           // seconds
  180.             BYTE frame;         // frames
  181.             BYTE fps;           // frames per second (24, 25, 29(30 drop) or 30)
  182.             BYTE dummy;
  183.             } smpte;
  184.         struct {                // MIDI
  185.         DWORD songptrpos;   // song pointer position
  186.             } midi;
  187.         } u;
  188.     } MMTIME;
  189. typedef MMTIME FAR *LPMMTIME;
  190.  
  191. // types for MMTIME struct
  192. #define TIME_MS         0x0001  // time counted in Milliseconds
  193. #define TIME_SAMPLES    0x0002  // number of wave samples
  194. #define TIME_BYTES      0x0004  // current byte offset
  195. #define TIME_SMPTE      0x0008  // smpte time
  196. #define TIME_MIDI       0x0010  // midi time
  197.  
  198. /////////////////////////////////////////////////////////////////////////////
  199. /////////////////////////////////////////////////////////////////////////////
  200.  
  201. #ifndef MMNOMMSYSTEM
  202.  
  203. /****************************************************************************
  204.  
  205.     Version Function for mmsystem - high order byte is major version. low
  206.     order byte is minor version.
  207.  
  208. ****************************************************************************/
  209.  
  210. WORD FAR PASCAL mmsystemGetVersion(void);
  211.  
  212. #endif
  213.  
  214. #ifndef MMNOSOUND
  215. /****************************************************************************
  216.  
  217.              Sound support functions
  218.  
  219. ****************************************************************************/
  220.  
  221. BOOL FAR PASCAL sndPlaySound(LPSTR lpszSoundName, WORD wFlags);
  222.  
  223. // flag values for sndPlaySound()
  224. #define SND_SYNC            0x0000  // play synchronously (default)
  225. #define SND_ASYNC           0x0001  // play asynchronously
  226. #define SND_NODEFAULT       0x0002  // don't use default if sound not found
  227. #define SND_MEMORY          0x0004  // the LPSTR points to a memory file
  228. #define SND_LOOP            0x0008  // loop the sound, until next sndPlaySound
  229. #define SND_NOSTOP          0x0010  // dont stop any currently playing sound
  230.  
  231. #endif        // ifndef MMNOSOUND
  232.  
  233. #ifndef MMNOWAVE
  234. /****************************************************************************
  235.  
  236.         Waveform
  237.  
  238. ****************************************************************************/
  239.  
  240. typedef HANDLE    HWAVEIN;
  241. typedef HANDLE    HWAVEOUT;
  242. typedef HWAVEIN FAR *LPHWAVEIN;
  243. typedef HWAVEOUT FAR *LPHWAVEOUT;
  244.  
  245. // flags for waveOutOpen and waveInOpen
  246. #define  WAVE_FORMAT_QUERY     0x0001
  247.  
  248. /****************************************************************************
  249.  
  250.     Wave error return values
  251.  
  252. ****************************************************************************/
  253.  
  254. #define WAVERR_BADFORMAT      (WAVERR_BASE + 0)  // unsupported wave format
  255. #define WAVERR_STILLPLAYING   (WAVERR_BASE + 1)  // still something playing
  256. #define WAVERR_UNPREPARED     (WAVERR_BASE + 2)  // header hasn't been prepared
  257. #define WAVERR_LASTERROR      (WAVERR_BASE + 2)  // last error in range
  258.  
  259. /****************************************************************************
  260.  
  261.     Wave callback
  262.  
  263. ****************************************************************************/
  264.  
  265. typedef DRVCALLBACK WAVECALLBACK;
  266. typedef WAVECALLBACK FAR *LPWAVECALLBACK;
  267.  
  268. // wave callback messages
  269. #define WOM_OPEN        MM_WOM_OPEN
  270. #define WOM_CLOSE       MM_WOM_CLOSE
  271. #define WOM_DONE        MM_WOM_DONE
  272.  
  273. #define WIM_OPEN        MM_WIM_OPEN
  274. #define WIM_CLOSE       MM_WIM_CLOSE
  275. #define WIM_DATA        MM_WIM_DATA
  276.  
  277. /****************************************************************************
  278.  
  279.     Wave data block header
  280.  
  281. ****************************************************************************/
  282.  
  283. typedef struct wavehdr_tag {
  284.     LPSTR       lpData;                 // pointer to locked data buffer
  285.     DWORD       dwBufferLength;               // length of data buffer
  286.     DWORD       dwBytesRecorded;               // length of data buffer
  287.     DWORD       dwUser;                 // for client's use
  288.     DWORD       dwFlags;                // assorted flags (see defines)
  289.     DWORD       dwLoops;                // loop control counter
  290.     struct wavehdr_tag far *lpNext;     // reserved for driver
  291.     DWORD       reserved;               // reserved for driver
  292. } WAVEHDR;
  293. typedef WAVEHDR FAR *LPWAVEHDR;
  294.  
  295. // equates for WAVEHDR flag bits
  296. #define WHDR_DONE       0x00000001  // done bit
  297. #define WHDR_PREPARED   0x00000002  // set if this header has been prepared
  298. #define WHDR_BEGINLOOP  0x00000004  // loop start block
  299. #define WHDR_ENDLOOP    0x00000008  // loop end block 
  300. #define WHDR_INQUEUE    0x00000010  // reserved for driver
  301.  
  302. /***************************************************************************
  303.  
  304.     Wave device caps structures
  305.  
  306. ****************************************************************************/
  307.  
  308. typedef struct waveoutcaps_tag {
  309.     WORD    wMid;                  // manufacturer id
  310.     WORD    wPid;                  // product id
  311.     VERSION vDriverVersion;        // version of the driver
  312.     char    szPname[MAXPNAMELEN];  // product name (NULL terminated string)
  313.     DWORD   dwFormats;             // formats supported
  314.     WORD    wChannels;               // number of sources supported.
  315.     DWORD   dwSupport;             // what functionality the driver supports
  316. } WAVEOUTCAPS;
  317. typedef WAVEOUTCAPS FAR *LPWAVEOUTCAPS;
  318.  
  319. // flags for dwSupport
  320. #define WAVECAPS_PITCH        0x0001   // supports pitch control
  321. #define WAVECAPS_PLAYBACKRATE    0x0002   // supports playback rate control
  322. #define WAVECAPS_VOLUME        0x0004   // supports volume control
  323. #define WAVECAPS_LRVOLUME       0x0008   // separate left-right volume control
  324.  
  325. typedef struct waveincaps_tag {
  326.     WORD    wMid;                    // manufacturer id
  327.     WORD    wPid;                    // product id
  328.     VERSION vDriverVersion;          // version of the driver
  329.     char    szPname[MAXPNAMELEN];    // product name (NULL terminated string)
  330.     DWORD   dwFormats;             // formats supported
  331.     WORD    wChannels;             // number of streams supported.
  332. } WAVEINCAPS;
  333. typedef WAVEINCAPS FAR *LPWAVEINCAPS;
  334.  
  335. // defines for WAVEXXXCAPS format field
  336. #define WAVE_INVALIDFORMAT     0x00000000    // invalid format
  337. #define WAVE_FORMAT_1M08       0x00000001    // 11.025 kHz, Mono,   8-bit
  338. #define WAVE_FORMAT_1S08       0x00000002    // 11.025 kHz, Stereo, 8-bit
  339. #define WAVE_FORMAT_1M16       0x00000004    // 11.025 kHz, Mono,   16-bit
  340. #define WAVE_FORMAT_1S16       0x00000008    // 11.025 kHz, Stereo, 16-bit
  341. #define WAVE_FORMAT_2M08       0x00000010    // 22.05  kHz, Mono,   8-bit
  342. #define WAVE_FORMAT_2S08       0x00000020    // 22.05  kHz, Stereo, 8-bit
  343. #define WAVE_FORMAT_2M16       0x00000040    // 22.05  kHz, Mono,   16-bit
  344. #define WAVE_FORMAT_2S16       0x00000080    // 22.05  kHz, Stereo, 16-bit
  345. #define WAVE_FORMAT_4M08       0x00000100    // 44.1   kHz, Mono,   8-bit
  346. #define WAVE_FORMAT_4S08       0x00000200    // 44.1   kHz, Stereo, 8-bit
  347. #define WAVE_FORMAT_4M16       0x00000400    // 44.1   kHz, Mono,   16-bit
  348. #define WAVE_FORMAT_4S16       0x00000800    // 44.1   kHz, Stereo, 16-bit
  349.  
  350. /**************************************************************************** 
  351.  
  352.    Wave format structures
  353.  
  354. ****************************************************************************/
  355.  
  356. // format information common to all formats
  357. typedef struct waveformat_tag {
  358.     WORD    wFormatTag;        // what format type is this?
  359.     WORD    nChannels;         // number of channels (i.e. mono, stereo, etc.)
  360.     DWORD   nSamplesPerSec;    // sample rate
  361.     DWORD   nAvgBytesPerSec;   // for buffer estimation
  362.     WORD    nBlockAlign;       // block size of data
  363. } WAVEFORMAT;
  364. typedef WAVEFORMAT NEAR *NPWAVEFORMAT;
  365. typedef WAVEFORMAT FAR *LPWAVEFORMAT;
  366.      
  367. // defines for wFormatTag
  368. #define WAVE_FORMAT_PCM     1
  369.      
  370. // use if wFormatTag == WAVE_FORMAT_PCM
  371. typedef struct pcmwaveformat_tag {
  372.     WAVEFORMAT  wf;
  373.     WORD        wBitsPerSample;
  374. } PCMWAVEFORMAT;
  375. typedef PCMWAVEFORMAT NEAR *NPPCMWAVEFORMAT;
  376. typedef PCMWAVEFORMAT FAR *LPPCMWAVEFORMAT;
  377.  
  378. /**************************************************************************** 
  379.  
  380.    Wave support functions
  381.  
  382. ****************************************************************************/
  383.  
  384. WORD FAR PASCAL waveOutGetNumDevs(void);
  385. WORD FAR PASCAL waveOutGetDevCaps(WORD wDeviceID,
  386.                     LPWAVEOUTCAPS lpCaps, WORD wSize);
  387. WORD FAR PASCAL waveOutGetVolume(HWAVEOUT hWaveOut, LPDWORD lpdwVolume);
  388. WORD FAR PASCAL waveOutSetVolume(HWAVEOUT hWaveOut, DWORD dwVolume);
  389. WORD FAR PASCAL waveOutGetErrorText(WORD wError, LPSTR lpText, WORD wSize);
  390. WORD FAR PASCAL waveOutOpen(LPHWAVEOUT lphWaveOut, WORD wDeviceID, 
  391.                             LPWAVEFORMAT lpFormat, DWORD dwCallback,
  392.                             DWORD dwInstance, DWORD dwFlags);
  393. WORD FAR PASCAL waveOutClose(HWAVEOUT hWaveOut);
  394. WORD FAR PASCAL waveOutPrepareHeader(HWAVEOUT hWaveOut,
  395.                     LPWAVEHDR lpWaveOutHdr, WORD wSize);
  396. WORD FAR PASCAL waveOutUnprepareHeader(HWAVEOUT hWaveOut,
  397.                     LPWAVEHDR lpWaveOutHdr, WORD wSize);
  398. WORD FAR PASCAL waveOutWrite(HWAVEOUT hWaveOut,
  399.                     LPWAVEHDR lpWaveOutHdr, WORD wSize);
  400. WORD FAR PASCAL waveOutPause(HWAVEOUT hWaveOut);
  401. WORD FAR PASCAL waveOutRestart(HWAVEOUT hWaveOut);
  402. WORD FAR PASCAL waveOutReset(HWAVEOUT hWaveOut);
  403. WORD FAR PASCAL waveOutBreakLoop(HWAVEOUT hWaveOut);
  404. WORD FAR PASCAL waveOutGetPosition(HWAVEOUT hWaveOut,
  405.                     LPMMTIME lpInfo, WORD wSize);
  406. WORD FAR PASCAL waveOutGetPitch(HWAVEOUT hWaveOut, LPDWORD lpdwPitch);
  407. WORD FAR PASCAL waveOutSetPitch(HWAVEOUT hWaveOut, DWORD dwPitch);
  408. WORD FAR PASCAL waveOutGetPlaybackRate(HWAVEOUT hWaveOut, LPDWORD lpdwRate);
  409. WORD FAR PASCAL waveOutSetPlaybackRate(HWAVEOUT hWaveOut, DWORD dwRate);
  410.  
  411. WORD FAR PASCAL waveInGetNumDevs(void);
  412. WORD FAR PASCAL waveInGetDevCaps(WORD wDeviceID,
  413.                     LPWAVEINCAPS lpCaps, WORD wSize);
  414. WORD FAR PASCAL waveInGetErrorText(WORD wError, LPSTR lpText, WORD wSize);
  415. WORD FAR PASCAL waveInOpen(LPHWAVEIN lphWaveIn, WORD wDeviceID,
  416.                            LPWAVEFORMAT lpFormat, DWORD dwCallback,
  417.                            DWORD dwInstance, DWORD dwFlags);
  418. WORD FAR PASCAL waveInClose(HWAVEIN hWaveIn);
  419. WORD FAR PASCAL waveInPrepareHeader(HWAVEIN hWaveIn,
  420.                     LPWAVEHDR lpWaveInHdr, WORD wSize);
  421. WORD FAR PASCAL waveInUnprepareHeader(HWAVEIN hWaveIn,
  422.                     LPWAVEHDR lpWaveInHdr, WORD wSize);
  423. WORD FAR PASCAL waveInAddBuffer(HWAVEIN hWaveIn,
  424.                     LPWAVEHDR lpWaveInHdr, WORD wSize);
  425. WORD FAR PASCAL waveInStart(HWAVEIN hWaveIn);
  426. WORD FAR PASCAL waveInStop(HWAVEIN hWaveIn);
  427. WORD FAR PASCAL waveInReset(HWAVEIN hWaveIn);
  428. WORD FAR PASCAL waveInGetPosition(HWAVEIN hWaveIn, LPMMTIME lpInfo, WORD wSize);
  429.  
  430. #endif        // ifndef MMNOWAVE
  431.  
  432. #ifndef MMNOMIDI
  433. /****************************************************************************
  434.  
  435.         MIDI
  436.  
  437. ****************************************************************************/
  438.  
  439. typedef HANDLE    HMIDIIN;
  440. typedef HANDLE    HMIDIOUT;
  441. typedef HMIDIIN FAR *LPHMIDIIN;
  442. typedef HMIDIOUT FAR *LPHMIDIOUT;
  443.  
  444. // device id for mapper
  445. #define    MIDIMAPPER     65535
  446.  
  447. /****************************************************************************
  448.  
  449.     MIDI error return values
  450.  
  451. ****************************************************************************/
  452.  
  453. #define MIDIERR_UNPREPARED    (MIDIERR_BASE + 0)  // header hasn't been prepared
  454. #define MIDIERR_STILLPLAYING  (MIDIERR_BASE + 1)  // still something playing
  455. #define MIDIERR_NOMAP         (MIDIERR_BASE + 2)  // no current map
  456. #define MIDIERR_NOTREADY      (MIDIERR_BASE + 3)  // hardware is still busy
  457. #define MIDIERR_NODEVICE      (MIDIERR_BASE + 4)  // port no longer connected
  458. #define MIDIERR_LASTERROR     (MIDIERR_BASE + 4)  // last error in range
  459.  
  460. /****************************************************************************
  461.  
  462.     MIDI callback
  463.  
  464. ****************************************************************************/
  465.  
  466. typedef DRVCALLBACK MIDICALLBACK;
  467. typedef MIDICALLBACK FAR *LPMIDICALLBACK;
  468.  
  469. // callback messages
  470. #define MIM_OPEN        MM_MIM_OPEN
  471. #define MIM_CLOSE       MM_MIM_CLOSE
  472. #define MIM_DATA        MM_MIM_DATA
  473. #define MIM_LONGDATA    MM_MIM_LONGDATA
  474. #define MIM_ERROR       MM_MIM_ERROR
  475. #define MIM_LONGERROR   MM_MIM_LONGERROR
  476.  
  477. #define MOM_OPEN        MM_MOM_OPEN
  478. #define MOM_CLOSE       MM_MOM_CLOSE
  479. #define MOM_DONE        MM_MOM_DONE
  480.  
  481. /****************************************************************************
  482.  
  483.     MIDI device caps structures
  484.  
  485. *****************************************************************************/
  486.  
  487. // MIDI output device caps
  488. typedef struct midioutcaps_tag { 
  489.     WORD    wMid;                  // manufacturer id
  490.     WORD    wPid;                  // product id
  491.     VERSION vDriverVersion;        // version of the driver
  492.     char    szPname[MAXPNAMELEN];  // product name (NULL terminated string)
  493.     WORD    wTechnology;           // type of device
  494.     WORD    wVoices;               // number of voices          
  495.     WORD    wNotes;                // max number of notes
  496.     WORD    wChannelMask;          // channels on port which device is attached
  497.     DWORD   dwSupport;             // what functionality the driver supports
  498. } MIDIOUTCAPS;
  499. typedef MIDIOUTCAPS FAR *LPMIDIOUTCAPS;
  500.  
  501. // defines for MIDIOUTCAPS technology field
  502. #define MOD_MIDIPORT    1  // MIDI hardware port
  503. #define MOD_SYNTH       2  // MIDI synthesizer (unspecified type)
  504. #define MOD_SQSYNTH     3  // square wave synth
  505. #define MOD_FMSYNTH     4  // FM synth
  506. #define MOD_MAPPER      5  // MIDI mapper
  507.  
  508. // flags for dwSupport
  509. #define MIDICAPS_VOLUME          0x0001     // supports volume control
  510. #define MIDICAPS_LRVOLUME        0x0002  // separate left-right volume control
  511. #define MIDICAPS_CACHE           0x0004  // supports patch cacheing
  512.  
  513. // MIDI input device caps
  514. typedef struct midiincaps_tag { 
  515.     WORD    wMid;                  // manufacturer id
  516.     WORD    wPid;                  // product id
  517.     VERSION vDriverVersion;        // version of the driver
  518.     char    szPname[MAXPNAMELEN];  // product name (NULL terminated string)
  519. } MIDIINCAPS;
  520. typedef MIDIINCAPS FAR *LPMIDIINCAPS;
  521.  
  522. /****************************************************************************
  523.  
  524.     MIDI data block header
  525.  
  526. *****************************************************************************/
  527.  
  528. typedef struct midihdr_tag {
  529.     LPSTR       lpData;               // pointer to locked data block
  530.     DWORD       dwBufferLength;             // length of data in data block
  531.     DWORD       dwBytesRecorded;               // length of data buffer
  532.     DWORD       dwUser;               // for client's use
  533.     DWORD       dwFlags;              // assorted flags (see defines)
  534.     struct midihdr_tag far *lpNext;   // reserved for driver
  535.     DWORD       reserved;             // reserved for driver
  536. } MIDIHDR;
  537. typedef MIDIHDR FAR *LPMIDIHDR;
  538.  
  539. // defines for MIDIHDR flag bits
  540. #define MHDR_DONE       0x00000001       // done bit
  541. #define MHDR_PREPARED   0x00000002       // set if this header has been prepared
  542. #define MHDR_INQUEUE    0x00000004       // reserved for driver
  543.  
  544. /****************************************************************************
  545.  
  546.     MIDI patch cache array
  547.  
  548. *****************************************************************************/
  549.  
  550. typedef BYTE PATCHARRAY[128];
  551. typedef BYTE FAR *LPPATCHARRAY;
  552.  
  553. // flags for midiOutCachePatches
  554. #define MIDI_CACHE    1
  555. #define MIDI_UNCACHE  2
  556.  
  557. /**************************************************************************** 
  558.  
  559.     MIDI support functions
  560.  
  561. ****************************************************************************/
  562.  
  563. WORD FAR PASCAL midiOutGetNumDevs(void);
  564. WORD FAR PASCAL midiOutGetDevCaps(WORD wDeviceID,
  565.                     LPMIDIOUTCAPS lpCaps, WORD wSize);
  566. WORD FAR PASCAL midiOutGetVolume(HMIDIOUT hMidiOut, LPDWORD lpdwVolume);
  567. WORD FAR PASCAL midiOutSetVolume(HMIDIOUT hMidiOut, DWORD dwVolume);
  568.  
  569. WORD FAR PASCAL midiOutGetErrorText(WORD wError, LPSTR lpText, WORD wSize);
  570. WORD FAR PASCAL midiOutOpen(LPHMIDIOUT lphMidiOut, WORD wDeviceID,
  571.         DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  572. WORD FAR PASCAL midiOutClose(HMIDIOUT hMidiOut);
  573. WORD FAR PASCAL midiOutPrepareHeader(HMIDIOUT hMidiOut,
  574.                     LPMIDIHDR lpMidiOutHdr, WORD wSize);
  575. WORD FAR PASCAL midiOutUnprepareHeader(HMIDIOUT hMidiOut,
  576.                     LPMIDIHDR lpMidiOutHdr, WORD wSize);
  577. WORD FAR PASCAL midiOutShortMsg(HMIDIOUT hMidiOut, DWORD dwMsg);
  578. WORD FAR PASCAL midiOutLongMsg(HMIDIOUT hMidiOut,
  579.                     LPMIDIHDR lpMidiOutHdr, WORD wSize);
  580. WORD FAR PASCAL midiOutReset(HMIDIOUT hMidiOut);
  581. WORD FAR PASCAL midiOutCachePatches(HMIDIOUT hMidiOut, WORD wChannel,
  582.                                   LPPATCHARRAY lpPatchArray, WORD wFlags);
  583.  
  584. WORD FAR PASCAL midiInGetNumDevs(void);
  585. WORD FAR PASCAL midiInGetDevCaps(WORD wDeviceID,
  586.                     LPMIDIINCAPS lpCaps, WORD wSize);
  587. WORD FAR PASCAL midiInGetErrorText(WORD wError, LPSTR lpText, WORD wSize);
  588. WORD FAR PASCAL midiInOpen(LPHMIDIIN lphMidiIn, WORD wDeviceID,
  589.         DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
  590. WORD FAR PASCAL midiInClose(HMIDIIN hMidiIn);
  591. WORD FAR PASCAL midiInPrepareHeader(HMIDIIN hMidiIn,
  592.                     LPMIDIHDR lpMidiInHdr, WORD wSize);
  593. WORD FAR PASCAL midiInUnprepareHeader(HMIDIIN hMidiIn,
  594.                     LPMIDIHDR lpMidiInHdr, WORD wSize);
  595. WORD FAR PASCAL midiInAddBuffer(HMIDIIN hMidiIn,
  596.                     LPMIDIHDR lpMidiInHdr, WORD wSize);
  597. WORD FAR PASCAL midiInStart(HMIDIIN hMidiIn);
  598. WORD FAR PASCAL midiInStop(HMIDIIN hMidiIn);
  599. WORD FAR PASCAL midiInReset(HMIDIIN hMidiIn);
  600.  
  601. #endif        // ifndef MMNOMIDI
  602.  
  603. #ifndef MMNOAUX
  604. /****************************************************************************
  605.  
  606.     auxiliary output device
  607.  
  608. ****************************************************************************/
  609.  
  610. /***************************************************************************
  611.  
  612.     aux device caps structures
  613.  
  614. ****************************************************************************/
  615.  
  616. typedef struct auxcaps_tag {
  617.     WORD    wMid;                  // manufacturer id
  618.     WORD    wPid;                  // product id
  619.     VERSION vDriverVersion;        // version of the driver
  620.     char    szPname[MAXPNAMELEN];  // product name (NULL terminated string)
  621.     WORD    wTechnology;           // type of device
  622.     DWORD   dwSupport;             // what functionality the driver supports
  623. } AUXCAPS;
  624. typedef AUXCAPS FAR *LPAUXCAPS;
  625.  
  626. // defines for AUXCAPS technology field
  627. #define AUXCAPS_CDAUDIO    1       // audio from internal CD-ROM drive
  628. #define AUXCAPS_AUXIN      2       // audio from auxiliary input jacks
  629.  
  630. // flags for dwSupport
  631. #define AUXCAPS_VOLUME          0x0001    // supports volume control
  632. #define AUXCAPS_LRVOLUME        0x0002  // separate left-right volume control
  633.  
  634. /**************************************************************************** 
  635.  
  636.     aux support functions
  637.  
  638. ****************************************************************************/
  639.  
  640. WORD FAR PASCAL auxGetNumDevs(void);
  641. WORD FAR PASCAL auxGetDevCaps(WORD wDeviceID, LPAUXCAPS lpCaps, WORD wSize);
  642. WORD FAR PASCAL auxSetVolume(WORD wDeviceID, DWORD dwVolume);
  643. WORD FAR PASCAL auxGetVolume(WORD wDeviceID, LPDWORD lpdwVolume);
  644. #endif        // ifndef MMNOAUX
  645.  
  646. #ifndef MMNOTIMER
  647. /****************************************************************************
  648.  
  649.         Timer
  650.  
  651. ****************************************************************************/
  652.  
  653.  
  654. /****************************************************************************
  655.  
  656.     Timer error return values
  657.  
  658. ****************************************************************************/
  659.  
  660. #define TIMERR_NOERROR   (0)              // no error
  661. #define TIMERR_NODRIVER  (TIMERR_BASE+1)  // no timer device driver present
  662. #define TIMERR_NOCANDO     (TIMERR_BASE+2)  // requested operation wasn't executed
  663.  
  664. /****************************************************************************
  665.  
  666.     Timer callback
  667.  
  668. ****************************************************************************/
  669.  
  670. typedef DRVCALLBACK TIMECALLBACK;
  671. typedef TIMECALLBACK FAR *LPTIMECALLBACK;
  672.  
  673. /****************************************************************************
  674.  
  675.     Timer device caps structure
  676.  
  677. ****************************************************************************/
  678.  
  679. typedef struct timecaps_tag {
  680.     WORD    wPeriodMin;        // minimum period supported.
  681.     WORD    wPeriodMax;     // maximum period supported.
  682.     } TIMECAPS;
  683. typedef TIMECAPS FAR *LPTIMECAPS;
  684.  
  685. /****************************************************************************
  686.  
  687.     Timer support functions
  688.  
  689. ****************************************************************************/
  690.  
  691. WORD FAR PASCAL timeGetSystemTime(LPMMTIME lpTime, WORD wSize);
  692. WORD FAR PASCAL timeSetEvent(WORD wDelay, WORD wResolution, 
  693.     LPTIMECALLBACK lpFunction, DWORD dwUser, WORD wFlags); 
  694. WORD FAR PASCAL timeKillEvent(WORD wId);
  695. WORD FAR PASCAL timeGetDevCaps(LPTIMECAPS lpTimeCaps, WORD wSize);
  696. void FAR PASCAL timeBeginPeriod(WORD wPeriod);
  697. void FAR PASCAL timeEndPeriod(WORD wPeriod);
  698.  
  699.  
  700. // flags for timeSetEvent
  701. #define TIME_ONESHOT    0   // program timer for single event
  702. #define TIME_PERIODIC    1   // program for continuous periodic event
  703.  
  704. #endif        // ifndef MMNOTIMER
  705.  
  706. #ifndef MMNOJOY
  707. /****************************************************************************
  708.  
  709.         Joystick
  710.  
  711. ****************************************************************************/
  712.  
  713. /****************************************************************************
  714.  
  715.     Joystick error return values
  716.  
  717. ****************************************************************************/
  718.  
  719. #define JOYERR_NOERROR      (0)               // no error
  720. #define JOYERR_NODRIVER   (JOYERR_BASE+4)   // no joystick device driver present
  721. #define JOYERR_PARMS      (JOYERR_BASE+5)   // bad parameters passed to function
  722. #define JOYERR_NOCANDO      (JOYERR_BASE+6)   // cannot execute required function 
  723.                 // due to some service being unavailable (ex timer)
  724. #define JOYERR_UNPLUGGED  (JOYERR_BASE+7)   // joystick specified is unplugged
  725.  
  726. /****************************************************************************
  727.  
  728.     Joystick device caps structure
  729.  
  730. ****************************************************************************/
  731.  
  732. typedef struct joycaps_tag {
  733.     WORD wMid;                  // manufacturer id
  734.     WORD wPid;                  // product id
  735.     char szPname[MAXPNAMELEN];  // product name (NULL terminated string)
  736.     WORD wXmin;                 // minimum x position value
  737.     WORD wXmax;                 // maximum x position value
  738.     WORD wYmin;                 // minimum y position value
  739.     WORD wYmax;                 // maximum y position value
  740.     WORD wZmin;         // minimum z position value
  741.     WORD wZmax;         // maximum z position value
  742.     WORD wNumButtons;        // number of buttons
  743.     WORD wPeriodMin;        // minimum message period when captured
  744.     WORD wPeriodMax;        // maximum message period when captured
  745.     } JOYCAPS;
  746.  
  747. typedef JOYCAPS FAR *LPJOYCAPS;
  748.  
  749. /****************************************************************************
  750.  
  751.     Joystick information structure
  752.  
  753. ****************************************************************************/
  754.  
  755. typedef struct joyinfo_tag {
  756.     WORD wXpos;                 // x position
  757.     WORD wYpos;                 // y position
  758.     WORD wZpos;         // z position
  759.     WORD wButtons;              // button states
  760.     } JOYINFO;
  761.  
  762. typedef JOYINFO FAR *LPJOYINFO;
  763.  
  764. /****************************************************************************
  765.  
  766.    Joystick support functions
  767.  
  768. ****************************************************************************/
  769.  
  770. WORD FAR PASCAL joyGetDevCaps(WORD id, LPJOYCAPS lpCaps, WORD wSize);
  771. WORD FAR PASCAL joyGetNumDevs(void);
  772. WORD FAR PASCAL joyGetPos(WORD id, LPJOYINFO lpInfo);
  773. WORD FAR PASCAL joyGetThreshold(WORD id,LPWORD lpwThreshold);
  774. WORD FAR PASCAL joyReleaseCapture(WORD id);
  775. WORD FAR PASCAL joySetCapture(HWND hwnd, WORD wId, WORD wPeriod, BOOL bChanged);
  776. WORD FAR PASCAL joySetThreshold(WORD id, WORD wThreshold);
  777.  
  778. WORD FAR PASCAL joySetCalibration(WORD id, LPWORD pwXbase, LPWORD pwXdelta,
  779.                   LPWORD pwYbase, LPWORD pwYdelta,
  780.                   LPWORD pwZbase, LPWORD pwZdelta); // internal
  781.  
  782. /****************************************************************************
  783.  
  784.     Joystick messages
  785.  
  786. ****************************************************************************/
  787.  
  788. #define JOY_BUTTON1         0x0001
  789. #define JOY_BUTTON2        0x0002
  790. #define JOY_BUTTON3        0x0004
  791. #define JOY_BUTTON4        0x0008
  792. #define JOY_BUTTON1CHG      0x0100
  793. #define JOY_BUTTON2CHG      0x0200
  794. #define JOY_BUTTON3CHG        0x0400
  795. #define JOY_BUTTON4CHG        0x0800
  796.  
  797. #define JOYSTICKID1        0
  798. #define JOYSTICKID2        1
  799.  
  800. #endif        // ifndef MMNOJOY
  801.  
  802. #ifndef MMNOMCI
  803. /****************************************************************************
  804.  
  805.         MCI
  806.  
  807. ****************************************************************************/
  808.  
  809.  
  810.  
  811. // the length of the longest legal MCI string input parameter
  812. #define MCI_STRING_LENGTH                 30
  813.  
  814. /****************************************************************************
  815.  
  816.     MCI error return values
  817.  
  818. *****************************************************************************/
  819.  
  820. #define MCIERR_INVALID_DEVICE_ID         (MCIERR_BASE + 1)
  821. #define MCIERR_UNRECOGNIZED_KEYWORD      (MCIERR_BASE + 3)
  822. #define MCIERR_UNRECOGNIZED_COMMAND      (MCIERR_BASE + 5)
  823. #define MCIERR_HARDWARE                  (MCIERR_BASE + 6)
  824. #define MCIERR_INVALID_DEVICE_NAME       (MCIERR_BASE + 7)
  825. #define MCIERR_OUT_OF_MEMORY             (MCIERR_BASE + 8)
  826. #define MCIERR_DEVICE_OPEN               (MCIERR_BASE + 9)
  827. #define MCIERR_CANNOT_LOAD_DRIVER        (MCIERR_BASE + 10)
  828. #define MCIERR_MISSING_COMMAND_STRING    (MCIERR_BASE + 11)
  829. #define MCIERR_PARAM_OVERFLOW            (MCIERR_BASE + 12)
  830. #define MCIERR_MISSING_STRING_ARGUMENT   (MCIERR_BASE + 13)
  831. #define MCIERR_BAD_INTEGER               (MCIERR_BASE + 14)
  832. #define MCIERR_PARSER_INTERNAL           (MCIERR_BASE + 15)
  833. #define MCIERR_DRIVER_INTERNAL           (MCIERR_BASE + 16)
  834. #define MCIERR_MISSING_PARAMETER         (MCIERR_BASE + 17)
  835. #define MCIERR_UNSUPPORTED_FUNCTION      (MCIERR_BASE + 18)
  836. #define MCIERR_FILE_NOT_FOUND            (MCIERR_BASE + 19)
  837. #define MCIERR_DEVICE_NOT_READY          (MCIERR_BASE + 20)
  838. #define MCIERR_INTERNAL                  (MCIERR_BASE + 21)
  839. #define MCIERR_DRIVER                    (MCIERR_BASE + 22)
  840. #define MCIERR_CANNOT_USE_ALL            (MCIERR_BASE + 23)
  841. #define MCIERR_MULTIPLE                  (MCIERR_BASE + 24)
  842. #define MCIERR_EXTENSION_NOT_FOUND       (MCIERR_BASE + 25)
  843. #define MCIERR_OUTOFRANGE             (MCIERR_BASE + 26)
  844. #define MCIERR_CANNOT_ADD_ALIAS          (MCIERR_BASE + 27)
  845. #define MCIERR_FLAGS_NOT_COMPATIBLE      (MCIERR_BASE + 28)
  846. #define MCIERR_CANNOT_USE_NOUNLOAD       (MCIERR_BASE + 29)
  847. #define MCIERR_FILE_NOT_SAVED            (MCIERR_BASE + 30)
  848. #define MCIERR_DEVICE_TYPE_REQUIRED      (MCIERR_BASE + 31)
  849. #define MCIERR_DEVICE_LOCKED             (MCIERR_BASE + 32)
  850. #define MCIERR_DUPLICATE_ALIAS           (MCIERR_BASE + 33)
  851.  
  852. #define MCIERR_WAVE_OUTPUTSINUSE         (MCIERR_BASE + 64)
  853. #define MCIERR_WAVE_SETOUTPUTINUSE       (MCIERR_BASE + 65)
  854. #define MCIERR_WAVE_INPUTSINUSE          (MCIERR_BASE + 66)
  855. #define MCIERR_WAVE_SETINPUTINUSE        (MCIERR_BASE + 67)
  856. #define MCIERR_WAVE_OUTPUTUNSPECIFIED    (MCIERR_BASE + 68)
  857. #define MCIERR_WAVE_INPUTUNSPECIFIED     (MCIERR_BASE + 69)
  858. #define MCIERR_WAVE_OUTPUTSUNSUITABLE    (MCIERR_BASE + 70)
  859. #define MCIERR_WAVE_SETOUTPUTUNSUITABLE  (MCIERR_BASE + 71)
  860. #define MCIERR_WAVE_INPUTSUNSUITABLE     (MCIERR_BASE + 72)
  861. #define MCIERR_WAVE_SETINPUTUNSUITABLE   (MCIERR_BASE + 73)
  862.  
  863.  
  864. #define MCIERR_SEQ_DIV_INCOMPATIBLE     (MCIERR_BASE + 80)
  865. #define MCIERR_SEQ_PORT_INUSE         (MCIERR_BASE + 81)
  866. #define MCIERR_SEQ_PORT_NONEXISTENT     (MCIERR_BASE + 82)
  867. #define MCIERR_SEQ_PORT_MAPNODEVICE     (MCIERR_BASE + 83)
  868. #define MCIERR_SEQ_PORT_MISCERROR     (MCIERR_BASE + 84)
  869. #define MCIERR_SEQ_TIMER         (MCIERR_BASE + 85)
  870.  
  871. #define MCIERR_CUSTOM_DRIVER_BASE        (MCIERR_BASE + 256)
  872.  
  873. /****************************************************************************
  874.  
  875.     MCI command message identifiers
  876.  
  877. *****************************************************************************/
  878. #define MCI_OPEN                    1
  879. #define MCI_CLOSE                   2
  880. #define MCI_COMMAND                 3 
  881. #define MCI_PLAY                    4
  882. #define MCI_SEEK                    5
  883. #define MCI_STOP                    6
  884. #define MCI_PAUSE                   7
  885. #define MCI_INFO                    8
  886. #define MCI_GETDEVCAPS              10
  887. #define MCI_STATUS                  13
  888.  
  889. // Messages 14 through 16 are reserved
  890.  
  891. #define MCI_SPIN                    17
  892.  
  893. // Messages 18 and 19 are reserved
  894.  
  895. #define MCI_SET                     20
  896. #define MCI_STEP                    21
  897. #define MCI_RECORD                  22
  898. #define MCI_SYSINFO                 23
  899. #define MCI_BREAK                   24
  900. #define MCI_SOUND                   25
  901. #define MCI_SAVE                    26
  902. #define MCI_CUE                     30
  903. #define MCI_UPDATE                  40
  904. #define MCI_REALIZE                 50
  905. #define MCI_WINDOW                  60
  906.  
  907. // this and all subsequent message ID's are reserved for the user
  908. #define MCI_USER_MESSAGES   1000
  909.  
  910. /****************************************************************************
  911.  
  912.     Structures for the lpdwParams (dwParam2) of mciSendCommand for those
  913.     command messages that may be parsed in string form.
  914.  
  915. *****************************************************************************/
  916.  
  917. // string resource ID's for the MCI core
  918. #define MCI_FALSE                       (MCI_STRING_OFFSET + 0)
  919. #define MCI_TRUE                        (MCI_STRING_OFFSET + 1)
  920.  
  921. // Special Device ID for "all"
  922. #define MCI_ALL_DEVICE_ID               0xFFFF
  923. #define MCI_ALLINSYSTEM_DEVICE_ID       0xFFFE
  924.  
  925. // ID's for MCI_DEVCAPS command
  926. #define MCI_DEVTYPE_VIDEOTAPE           (MCI_STRING_OFFSET + 2)
  927. #define MCI_DEVTYPE_VIDEODISC           (MCI_STRING_OFFSET + 3)
  928. #define MCI_DEVTYPE_STILL_VIDEO         (MCI_STRING_OFFSET + 4)
  929. #define MCI_DEVTYPE_CD_AUDIO            (MCI_STRING_OFFSET + 5)
  930. #define MCI_DEVTYPE_DAT                 (MCI_STRING_OFFSET + 6)
  931. #define MCI_DEVTYPE_SCANNER             (MCI_STRING_OFFSET + 7)
  932. #define MCI_DEVTYPE_GRAPHIC             (MCI_STRING_OFFSET + 8)
  933. #define MCI_DEVTYPE_AUDIO_TAPE_PLAYER   (MCI_STRING_OFFSET + 9)
  934. #define MCI_DEVTYPE_OTHER               (MCI_STRING_OFFSET + 10)
  935. #define MCI_DEVTYPE_WAVEFORM_AUDIO      (MCI_STRING_OFFSET + 11)
  936. #define MCI_DEVTYPE_SEQUENCER           (MCI_STRING_OFFSET + 12)
  937.  
  938. #define MCI_DEVTYPE_FIRST               MCI_DEVTYPE_VIDEOTAPE
  939. #define MCI_DEVTYPE_LAST                MCI_DEVTYPE_SEQUENCER
  940.  
  941. // ID's returned from "status mode"
  942. #define MCI_MODE_NOT_READY              (MCI_STRING_OFFSET + 20)
  943. #define MCI_MODE_STOP                   (MCI_STRING_OFFSET + 21)
  944. #define MCI_MODE_PLAY                   (MCI_STRING_OFFSET + 22)
  945. #define MCI_MODE_RECORD                 (MCI_STRING_OFFSET + 23)
  946. #define MCI_MODE_SEEK                   (MCI_STRING_OFFSET + 24)
  947. #define MCI_MODE_PAUSE                  (MCI_STRING_OFFSET + 25)
  948. #define MCI_MODE_OPEN                   (MCI_STRING_OFFSET + 26)
  949. #define MCI_MODE_OTHER                  (MCI_STRING_OFFSET + 27)
  950.  
  951. // Flags for mciDriverNotify
  952. #define MCI_NOTIFY_SUCCESSFUL       0x0001
  953. #define MCI_NOTIFY_SUPERSEDED       0x0002
  954. #define MCI_NOTIFY_ABORTED          0x0004
  955.  
  956. //
  957. // NOTE: All flags must have an "L" suffix in order to be parsed as
  958. // DWORDs by the resource compiler
  959. //
  960.  
  961. // standard flags
  962. #define MCI_NOTIFY          0x00000001L
  963. #define MCI_WAIT            0x00000002L
  964.  
  965. #define MCI_FROM            0x00000004L
  966. #define MCI_TO              0x00000008L
  967. #define MCI_MILLISECONDS    0x00000010L
  968. #define MCI_TRACK           0x00000020L
  969. #define MCI_AUTOCLOSE       0x00000040L
  970.  
  971. // parameters for default command messages with empty parameter lists
  972. typedef struct {
  973.     DWORD   dwCallback;
  974. } MCI_GENERIC_PARMS;
  975. typedef MCI_GENERIC_PARMS FAR *LPMCI_GENERIC_PARMS;
  976.  
  977. // parameters for the MCI_OPEN message
  978. // OPEN flags
  979. // device can be shared
  980. #define MCI_OPEN_SHAREABLE      0x00000100L
  981. #define MCI_OPEN_ELEMENT        0x00000200L
  982. #define MCI_OPEN_ALIAS          0x00000400L
  983. #define MCI_OPEN_ELEMENT_ID     0x00000800L
  984. #define MCI_OPEN_TYPE_ID        0x00001000L
  985.  
  986. typedef struct {
  987.     DWORD   dwCallback;
  988.     WORD    wDeviceID;       // device ID returned to user
  989.     WORD    wReserved0;
  990.     LPSTR   lpstrDeviceType; // device name from SYSTEM.INI
  991.     LPSTR   lpstrElementName;// typically a file name or NULL
  992.     LPSTR   lpstrAlias;      // Optional device alias
  993. } MCI_OPEN_PARMS;
  994. typedef MCI_OPEN_PARMS FAR *LPMCI_OPEN_PARMS;
  995.  
  996. // flags for the MCI_CLOSE message
  997. #define MCI_CLOSE_NOUNLOAD  0x00000100L
  998. // Internal flag to close no matter what the use count is
  999. #define MCI_CLOSE_FORCE     0x00000200L
  1000.  
  1001. // parameters for the MCI_COMMAND message
  1002. #define MCI_COMMAND_STRING  0x00000100L
  1003. typedef struct {
  1004.     DWORD   dwCallback;
  1005.     LPSTR   lpstrCommand;           // command to send to the device
  1006. } MCI_COMMAND_PARMS;
  1007. typedef MCI_COMMAND_PARMS FAR *LPMCI_COMMAND_PARMS;
  1008.  
  1009. // parameters for the MCI_PLAY message
  1010. // "play" command flags
  1011. typedef struct {
  1012.     DWORD   dwCallback;
  1013.     DWORD   dwFrom;         // play from this position
  1014.     DWORD   dwTo;           // play to this position
  1015. } MCI_PLAY_PARMS;
  1016. typedef MCI_PLAY_PARMS FAR *LPMCI_PLAY_PARMS;
  1017.  
  1018. // parameters for the MCI_SEEK message
  1019. // "seek" command flags
  1020. typedef struct {
  1021.     DWORD   dwCallback;
  1022.     DWORD   dwTo;           // seek to this position
  1023. } MCI_SEEK_PARMS;
  1024. typedef MCI_SEEK_PARMS FAR *LPMCI_SEEK_PARMS;
  1025.  
  1026. // parameters for the MCI_STATUS message
  1027. #define MCI_STATUS_POSITION          0x00000100L
  1028. #define MCI_STATUS_IN_TRACK          0x00000200L
  1029. #define MCI_STATUS_LENGTH            0x00000400L
  1030. #define MCI_STATUS_CURRENT_TRACK     0x00000800L
  1031. #define MCI_STATUS_NUMBER_OF_TRACKS  0x00001000L
  1032. #define MCI_STATUS_READY             0x00002000L
  1033. #define MCI_STATUS_MODE              0x00004000L
  1034. #define MCI_STATUS_MEDIA_PRESENT     0x00008000L
  1035. typedef struct {
  1036.     DWORD   dwCallback;
  1037.     DWORD   dwReturn;
  1038.     DWORD   dwTrack;
  1039. } MCI_STATUS_PARMS;
  1040. typedef MCI_STATUS_PARMS FAR * LPMCI_STATUS_PARMS;
  1041.  
  1042. // parameters for the MCI_INFO message
  1043. // "info" command flags
  1044. #define MCI_INFO_PRODUCT             0x00000100L
  1045. #define MCI_INFO_FILE                0x00000200L
  1046.  
  1047. typedef struct {
  1048.     DWORD   dwCallback;
  1049.     LPSTR   lpstrReturn;
  1050.     DWORD   dwRetSize;
  1051. } MCI_INFO_PARMS;
  1052. typedef MCI_INFO_PARMS FAR * LPMCI_INFO_PARMS;
  1053.  
  1054. // parameters for the MCI_GETDEVCAPS message
  1055. // "devcaps" command flags
  1056. #define MCI_GETDEVCAPS_CAN_RECORD              0x00000100L
  1057. #define MCI_GETDEVCAPS_HAS_AUDIO               0x00000200L
  1058. #define MCI_GETDEVCAPS_HAS_VIDEO               0x00000400L
  1059. #define MCI_GETDEVCAPS_DEVICE_TYPE             0x00000800L
  1060. #define MCI_GETDEVCAPS_USES_FILES              0x00002000L
  1061. #define MCI_GETDEVCAPS_COMPOUND_DEVICE         0x00004000L
  1062. #define MCI_GETDEVCAPS_CAN_EJECT               0x00008000L
  1063.  
  1064. typedef struct {
  1065.     DWORD   dwCallback;
  1066.     DWORD   dwReturn;
  1067. } MCI_GETDEVCAPS_PARMS;
  1068. typedef MCI_GETDEVCAPS_PARMS FAR * LPMCI_GETDEVCAPS_PARMS;
  1069.  
  1070. // parameters for the MCI_SYSINFO message
  1071. #define MCI_SYSINFO_QUANTITY                   0x00000100L
  1072. #define MCI_SYSINFO_OPEN                       0x00000200L
  1073. #define MCI_SYSINFO_USE_COUNT                  0x00000400L
  1074. #define MCI_SYSINFO_NAME                       0x00000800L
  1075. typedef struct {
  1076.     DWORD   dwDummyCallback;    // NOTIFY not allowed for SYSINFO
  1077.     LPSTR   lpstrReturn;
  1078.     DWORD   dwRetSize;
  1079.     DWORD   dwNumber;
  1080.     WORD    wDeviceType;        // mciSendString kludges this
  1081.     WORD    wReserved0;
  1082. } MCI_SYSINFO_PARMS;
  1083. typedef MCI_SYSINFO_PARMS FAR * LPMCI_SYSINFO_PARMS;
  1084.  
  1085. // parameters for the MCI_SET message
  1086. #define MCI_SET_DOOR_OPEN                   0x00000100L
  1087. #define MCI_SET_DOOR_CLOSED                 0x00000200L
  1088.  
  1089. // parameters for the MCI_BREAK message
  1090. #define MCI_BREAK_KEY                        0x00000100L
  1091. #define MCI_BREAK_HWND                       0x00000200L
  1092. #define MCI_BREAK_OFF                        0x00000400L
  1093. typedef struct {
  1094.     DWORD   dwCallback;     
  1095.     int     nVirtKey;
  1096.     WORD    wReserved0;
  1097.     HWND    hwndBreak;
  1098.     WORD    wReserved1;
  1099. } MCI_BREAK_PARMS;
  1100. typedef MCI_BREAK_PARMS FAR * LPMCI_BREAK_PARMS;
  1101.  
  1102. // parameters for the MCI_SOUND message
  1103. #define MCI_SOUND_NAME                      0x00000100L
  1104. typedef struct {
  1105.     DWORD   dwCallback;
  1106.     LPSTR   lpstrSoundName;
  1107. } MCI_SOUND_PARMS;
  1108. typedef MCI_SOUND_PARMS FAR * LPMCI_SOUND_PARMS;
  1109.     
  1110.  
  1111. /*****************************************************************************
  1112.  
  1113.     Standard command parameters for videodisc drivers
  1114.  
  1115. *****************************************************************************/
  1116.  
  1117. // string resource ID's for videodisc players 
  1118. // return ID's for videodisc status command
  1119. #define MCI_VD_SCAN                (MCI_VD_OFFSET + 1)
  1120. #define MCI_VD_OPEN                (MCI_VD_OFFSET + 2)
  1121. #define MCI_VD_PARK                (MCI_VD_OFFSET + 3)
  1122.  
  1123. // return ID's for videodisc MCI_GETDEVCAPS command
  1124. #define MCI_VD_MEDIA_CLV           (MCI_VD_OFFSET + 10)
  1125. #define MCI_VD_MEDIA_CAV           (MCI_VD_OFFSET + 11)
  1126. #define MCI_VD_MEDIA_OTHER         (MCI_VD_OFFSET + 12)
  1127.  
  1128. // parameters for the MCI_PLAY message
  1129. // "play" command flags
  1130. #define MCI_VD_PLAY_REVERSE    0x00010000L  // play in reverse
  1131. #define MCI_VD_PLAY_FAST       0x00020000L  // play fast
  1132. #define MCI_VD_PLAY_SPEED      0x00040000L  // a "speed" factor is included
  1133. #define MCI_VD_PLAY_FPS        0x00080000L  // an "FPS" parameter is included
  1134. #define MCI_VD_PLAY_FACTOR     0x00100000L  // an "x" factor is included
  1135. #define MCI_VD_PLAY_SCAN       0x00200000L  // scan quickly
  1136. #define MCI_VD_PLAY_CHAPTER    0x00400000L  // chapter mode
  1137. #define MCI_VD_PLAY_SLOW       0x00800000L  // play slow
  1138.  
  1139. typedef struct {
  1140.     DWORD   dwCallback;
  1141.     DWORD   dwFrom;         // play from this position
  1142.     DWORD   dwTo;           // play to this position
  1143.     DWORD   dwFactor;       // play at this speed factor
  1144.     DWORD   dwFPS;          // play at this fps
  1145. } MCI_VD_PLAY_PARMS;
  1146. typedef MCI_VD_PLAY_PARMS FAR *LPMCI_VD_PLAY_PARMS;
  1147.  
  1148. // parameters for the MCI_SEEK message
  1149. // "seek" command flags
  1150. #define    MCI_VD_SEEK_REVERSE    0x00010000L
  1151.     
  1152. // MCI_STATUS command flags
  1153. #define MCI_VD_STATUS_SEEKING          0x00010000L
  1154. #define MCI_VD_STATUS_SPEED            0x00040000L
  1155. #define MCI_VD_STATUS_FORWARD          0x00080000L
  1156. #define MCI_VD_STATUS_MEDIA_TYPE       0x00100000L
  1157. #define MCI_VD_STATUS_SIDE             0x00200000L
  1158. #define MCI_VD_STATUS_DISC_SIZE        0x00400000L
  1159.  
  1160. // parameter flags for videodisc MCI_GETDEVCAPS command
  1161. #define MCI_VD_GETDEVCAPS_CAN_REVERSE          0x00010000L
  1162. #define MCI_VD_GETDEVCAPS_FAST_RATE            0x00020000L
  1163. #define MCI_VD_GETDEVCAPS_SLOW_RATE            0x00040000L
  1164. #define MCI_VD_GETDEVCAPS_NORMAL_RATE          0x00080000L
  1165. #define MCI_VD_GETDEVCAPS_CLV                  0x00100000L
  1166. #define MCI_VD_GETDEVCAPS_CAV                  0x00200000L
  1167.  
  1168. // flags for the MCI_SPIN command
  1169. #define MCI_VD_SPIN_UP         0x00010000L
  1170. #define MCI_VD_SPIN_DOWN       0x00020000L
  1171.  
  1172. // parameters for the MCI_STEP message
  1173. #define MCI_VD_STEP_FRAMES     0x00010000L
  1174. #define MCI_VD_STEP_REVERSE    0x00020000L
  1175. typedef struct {
  1176.     DWORD   dwCallback;
  1177.     DWORD   dwFrames;
  1178. } MCI_VD_STEP_PARMS;
  1179. typedef MCI_VD_STEP_PARMS FAR *LPMCI_VD_STEP_PARMS;
  1180.  
  1181. // parameters for the MCI_SET message
  1182. #define MCI_VD_SET_CHANNEL 0x00010000L
  1183. #define MCI_VD_SET_ON      0x00020000L
  1184. #define MCI_VD_SET_OFF     0x00040000L
  1185. #define MCI_VD_SET_FRAMES  0x00080000L
  1186. #define MCI_VD_SET_HMS     0x00100000L
  1187. #define MCI_VD_SET_VIDEO   0x00200000L
  1188.  
  1189. typedef struct {
  1190.     DWORD   dwCallback;
  1191.     DWORD   dwChannel;
  1192. } MCI_VD_SET_PARMS;
  1193. typedef MCI_VD_SET_PARMS FAR * LPMCI_VD_SET_PARMS;
  1194.  
  1195. /*****************************************************************************
  1196.   
  1197.     Standard command parameters for waveform audio drivers
  1198.   
  1199. *****************************************************************************/
  1200.  
  1201. #define MCI_WAVE_SAMPLES                0x01000000L
  1202. #define MCI_WAVE_BYTES                  0x02000000L
  1203.  
  1204. #define MCI_WAVE_MEDID                  0x00020000L          
  1205.  
  1206. #define MCI_WAVE_FORMATTAG              0x00010000L
  1207. #define MCI_WAVE_CHANNELS               0x00020000L
  1208. #define MCI_WAVE_SAMPLESPERSEC          0x00040000L
  1209. #define MCI_WAVE_AVGBYTESPERSEC         0x00080000L
  1210. #define MCI_WAVE_BLOCKALIGN             0x00100000L
  1211. #define MCI_WAVE_BITSPERSAMPLE          0x00200000L
  1212. #define MCI_WAVE_INPUT                  0x00400000L
  1213. #define MCI_WAVE_OUTPUT                 0x00800000L
  1214.  
  1215. #define MCI_WAVE_STATUS_LEVEL           0x04000000L
  1216.  
  1217. #define MCI_WAVE_SET_ANYINPUT           0x04000000L
  1218. #define MCI_WAVE_SET_ANYOUTPUT          0x08000000L
  1219.  
  1220. #define MCI_WAVE_GETDEVCAPS_INPUTS      0x00010000L
  1221. #define MCI_WAVE_GETDEVCAPS_OUTPUTS     0x00020000L
  1222.  
  1223.  
  1224. typedef struct {
  1225.     DWORD   dwCallback;
  1226.     DWORD   dwFrom;         
  1227.     DWORD   dwTo;           
  1228. } MCI_WAVE_RECORD_PARMS;
  1229. typedef MCI_WAVE_RECORD_PARMS FAR *LPMCI_WAVE_RECORD_PARMS;
  1230.  
  1231. typedef struct {
  1232.     DWORD   dwCallback;
  1233.     WORD    wInput;
  1234.     WORD    wReserved0;
  1235.     WORD    wOutput;
  1236.     WORD    wReserved1;
  1237.     WORD    wFormatTag;       
  1238.     WORD    wReserved2;
  1239.     WORD    nChannels;          
  1240.     WORD    wReserved3;
  1241.     DWORD   nSamplesPerSec;   
  1242.     DWORD   nAvgBytesPerSec;  
  1243.     WORD    nBlockAlign;      
  1244.     WORD    wReserved4;
  1245.     WORD    wBitsPerSample;   
  1246.     WORD    wReserved5;
  1247. } MCI_WAVE_SET_PARMS;
  1248. typedef MCI_WAVE_SET_PARMS FAR * LPMCI_WAVE_SET_PARMS;
  1249.  
  1250. /*****************************************************************************
  1251.  
  1252.    Standard command parameters for CD audio drivers
  1253.  
  1254. *****************************************************************************/
  1255.  
  1256. // parameters for the MCI_PLAY message
  1257. typedef struct {
  1258.     DWORD   dwCallback;
  1259.     DWORD   dwFrom;         // play from this position
  1260.     DWORD   dwTo;           // play to this position
  1261.     DWORD   dwTrack;        // track number
  1262. } MCI_CD_PLAY_PARMS;
  1263. typedef MCI_CD_PLAY_PARMS FAR *LPMCI_CD_PLAY_PARMS;
  1264.  
  1265. // parameters for the MCI_SEEK message
  1266. typedef struct {
  1267.     DWORD   dwCallback;
  1268.     DWORD   dwTo;           // seek to this position
  1269.     DWORD   dwTrack;        // track number
  1270. } MCI_CD_SEEK_PARMS;
  1271. typedef MCI_CD_SEEK_PARMS FAR *LPMCI_CD_SEEK_PARMS;
  1272.  
  1273. // MCI_SET command flags
  1274. #define MCI_CD_SET_MSF                  0x00010000L
  1275.  
  1276. /*****************************************************************************
  1277.  
  1278.     Standard command parameters for Sequencer drivers
  1279.  
  1280. *****************************************************************************/
  1281. // string resource ID's for sequencers
  1282. // return ids for status division type
  1283.  
  1284. #define     MCI_SEQ_DIV_PPQN         (0 + MCI_SEQ_OFFSET)
  1285. #define     MCI_SEQ_DIV_SMPTE_24     (1 + MCI_SEQ_OFFSET)
  1286. #define     MCI_SEQ_DIV_SMPTE_25     (2 + MCI_SEQ_OFFSET)
  1287. #define     MCI_SEQ_DIV_SMPTE_30DROP (3 + MCI_SEQ_OFFSET)
  1288. #define     MCI_SEQ_DIV_SMPTE_30     (4 + MCI_SEQ_OFFSET)
  1289.  
  1290.  
  1291.  
  1292. // flags for the MCI_SET message
  1293. #define MCI_SEQ_SET_TEMPO               0x00010000L
  1294.  
  1295. typedef struct {
  1296.     DWORD   dwCallback;
  1297.     DWORD   dwTempo;
  1298.     DWORD   dwPort;
  1299.     DWORD   dwOffset;
  1300. } MCI_SEQ_SET_PARMS;
  1301. typedef MCI_SEQ_SET_PARMS FAR * LPMCI_SEQ_SET_PARMS;
  1302.  
  1303. // flags for the MCI_STATUS message
  1304. #define MCI_SEQ_STATUS_TEMPO        0x00010000L
  1305. #define MCI_SEQ_STATUS_PORT        0x00020000L
  1306. #define MCI_SEQ_STATUS_SYNC_SLAVE    0x00040000L
  1307. #define MCI_SEQ_STATUS_SYNC_MASTER    0x00080000L
  1308. #define MCI_SEQ_STATUS_SYNC_OFFSET    0x00100000L
  1309. #define MCI_SEQ_STATUS_SLAVE        0x00200000L
  1310. #define MCI_SEQ_STATUS_MASTER        0x00400000L
  1311. #define MCI_SEQ_STATUS_OFFSET        0x00800000L
  1312. #define MCI_SEQ_STATUS_DIVTYPE        0x01000000L
  1313.  
  1314. // flags for the MCI_SET message
  1315. #define MCI_SEQ_SET_TEMPO        0x00010000L
  1316. #define MCI_SEQ_SET_PORT        0x00020000L
  1317. #define MCI_SEQ_SET_SLAVE_SMPTE     0x00040000L
  1318. #define MCI_SEQ_SET_SLAVE_MIDI        0x00080000L
  1319. #define MCI_SEQ_SET_SLAVE_NOTHING    0x00100000L
  1320. #define MCI_SEQ_SET_MASTER_SMPTE    0x00200000L
  1321. #define MCI_SEQ_SET_MASTER_MIDI     0x00400000L
  1322. #define MCI_SEQ_SET_MASTER_NOTHING    0x00800000L
  1323. #define MCI_SEQ_SET_OFFSET        0x01000000L
  1324. #define MCI_SEQ_SET_PORT_OFF        0x02000000L
  1325. #define MCI_SEQ_SET_PORT_MAPPER     0x04000000L
  1326. #define MCI_SEQ_SET_SMPTE_24        0x08000000L
  1327. #define MCI_SEQ_SET_SMPTE_25        0x10000000L
  1328. #define MCI_SEQ_SET_SMPTE_30        0x20000000L
  1329. #define MCI_SEQ_SET_SMPTE_30DROP    0x40000000L
  1330. #define MCI_SEQ_SET_SONGPTR        0x80000000L
  1331.  
  1332.  
  1333. /*****************************************************************************
  1334.  
  1335.     Standard command parameters for graphic objects
  1336.  
  1337. *****************************************************************************/
  1338.  
  1339. #define MCI_GR_FPS                      0x00010000L  
  1340. #define MCI_GR_REVERSE                  0x00040000L  
  1341.  
  1342. #define MCI_GR_HDC                      0x00200000L
  1343. #define MCI_GR_HWND                     0x00800000L
  1344. #define MCI_GR_SRC_RECT                 0x00010000L
  1345. #define MCI_GR_DEST_RECT                0x00020000L
  1346. #define MCI_GR_PAL_NORM                 0x00040000L
  1347. #define MCI_GR_PAL_BKGD                 0x00080000L
  1348. #define MCI_GR_PAL_NONE                 0x00100000L
  1349.  
  1350. #define MCI_GR_WND_MINIMIZE             0x00040000L
  1351. #define MCI_GR_WND_MAXIMIZE             0x00080000L
  1352. #define MCI_GR_WND_SHOW                 0x00100000L
  1353. #define MCI_GR_WND_HIDE                 0x00200000L
  1354. #define MCI_GR_WND_DEFAULT              0x00400000L
  1355. #define MCI_GR_WND_NORMAL               0x01000000L
  1356.  
  1357.  
  1358. #define MCI_GR_PLAY_FAST                0x00100000L  
  1359. #define MCI_GR_PLAY_SLOW                0x00200000L  
  1360. #define MCI_GR_PLAY_SCAN                0x00400000L  
  1361.  
  1362. #define MCI_GR_STATUS_SPEED             0x00100000L
  1363. #define MCI_GR_STATUS_FORWARD           0x00200000L
  1364. #define MCI_GR_STATUS_EXTENT            0x00400000L
  1365.  
  1366. #define MCI_GR_GETDEVCAPS_CAN_REVERSE   0x00010000L
  1367. #define MCI_GR_GETDEVCAPS_FAST_RATE     0x00020000L
  1368. #define MCI_GR_GETDEVCAPS_SLOW_RATE     0x00040000L
  1369. #define MCI_GR_GETDEVCAPS_NORMAL_RATE   0x00080000L
  1370. #define MCI_GR_GETDEVCAPS_STATIC        0x00100000L
  1371. #define MCI_GR_GETDEVCAPS_USES_PALETTES 0x00200000L
  1372. #define MCI_GR_GETDEVCAPS_CAN_SIZETOFIT 0x00400000L
  1373.  
  1374. #define MCI_GR_STEP_FRAMES              0x00010000L
  1375.  
  1376. #define MCI_GR_SET_CHANNEL              0x00010000L
  1377. #define MCI_GR_SET_ON                   0x00020000L
  1378. #define MCI_GR_SET_OFF                  0x00040000L
  1379. #define MCI_GR_SET_FRAMES               0x00080000L
  1380. #define MCI_GR_SET_SIZETOFIT            0x00100000L
  1381. #define MCI_GR_SET_FULLSIZE             0x00200000L
  1382. #define MCI_GR_SET_CAPTION              0x00400000L
  1383.  
  1384.  
  1385. typedef struct {
  1386.     DWORD   dwCallback;
  1387.     DWORD   dwFrom;         
  1388.     DWORD   dwTo;           
  1389.     DWORD   dwFactor;       
  1390.     DWORD   dwFPS;          
  1391. } MCI_GR_PLAY_PARMS;
  1392. typedef MCI_GR_PLAY_PARMS FAR *LPMCI_GR_PLAY_PARMS;
  1393.  
  1394. typedef struct {
  1395.     DWORD   dwCallback;
  1396.     DWORD   dwFrames;
  1397. } MCI_GR_STEP_PARMS;
  1398. typedef MCI_GR_STEP_PARMS FAR *LPMCI_GR_STEP_PARMS;
  1399.  
  1400. typedef struct {
  1401.     DWORD   dwCallback;
  1402.     DWORD   dwChannel;
  1403.     LPSTR   lpstrCaption; 
  1404. } MCI_GR_SET_PARMS;
  1405. typedef MCI_GR_SET_PARMS FAR * LPMCI_GR_SET_PARMS;
  1406.  
  1407. typedef struct {
  1408.     DWORD   dwCallback;
  1409.     DWORD   dwChannel;
  1410.     WORD    hDc;              
  1411.     WORD    wReserved1;
  1412.     LPRECT  lprcSrc;
  1413.     LPRECT  lprcDest;
  1414. } MCI_GR_UPDATE_PARMS;
  1415. typedef MCI_GR_UPDATE_PARMS FAR * LPMCI_GR_UPDATE_PARMS;
  1416.  
  1417. typedef struct {
  1418.     DWORD   dwCallback;
  1419.     WORD    hWnd;          
  1420.     WORD    wReserved1;
  1421.     LPRECT  lprcSrc;
  1422.     LPRECT  lprcDest;
  1423. } MCI_GR_WINDOW_PARMS;
  1424. typedef MCI_GR_WINDOW_PARMS FAR * LPMCI_GR_WINDOW_PARMS;
  1425.  
  1426. typedef struct {
  1427.     DWORD   dwCallback;
  1428.     WORD    hDC;                 
  1429.     WORD    wReserved0;
  1430. } MCI_GR_REALIZE_PARMS;
  1431. typedef MCI_GR_REALIZE_PARMS FAR * LPMCI_GR_REALIZE_PARMS;
  1432.  
  1433.  
  1434. typedef int (FAR PASCAL *YIELDPROC) (WORD wDeviceID, DWORD dwYieldData);
  1435.  
  1436. /*****************************************************************************
  1437.  
  1438.     MCI support functions
  1439.  
  1440. *****************************************************************************/
  1441.  
  1442. extern DWORD FAR PASCAL mciSendCommand (WORD wDeviceID, WORD wMessage,
  1443.                                        DWORD dwParam1, DWORD dwParam2);
  1444.  
  1445. extern DWORD FAR PASCAL mciSendString (LPSTR lpstrCommand,
  1446.                                       LPSTR lpstrReturnString,
  1447.                                       WORD wReturnLength,
  1448.                                       HANDLE hCallback);
  1449.  
  1450. extern WORD FAR PASCAL mciGetDeviceID (LPSTR lpstrName);
  1451. extern WORD FAR PASCAL mciGetDeviceIDFromElementID (DWORD dwElementID,
  1452.                                                     LPSTR lpstrType);
  1453.  
  1454. extern WORD FAR PASCAL mciGetErrorString (DWORD wError, LPSTR lpstrBuffer,
  1455.                                           WORD wLength);
  1456. extern BOOL FAR PASCAL mciExecute (LPSTR lpstrCommand);
  1457.  
  1458. extern WORD mciSetYieldProc (WORD wDeviceID, YIELDPROC fpYieldProc,
  1459.                              DWORD dwYieldData);
  1460. #endif        // ifndef MMNOMCI
  1461.  
  1462. #ifndef MMNODRV // installable driver support
  1463.  
  1464. #define DRV_CANCEL             0x0000 
  1465. #define DRV_OK                 0x0001   
  1466. #define DRV_RESTART            0x0002
  1467.  
  1468. #define DRV_LOAD               0x0001
  1469. #define DRV_ENABLE             0x0002
  1470. #define DRV_OPEN               0x0003
  1471. #define DRV_CLOSE              0x0004
  1472. #define DRV_DISABLE            0x0005
  1473. #define DRV_FREE               0x0006
  1474. #define DRV_CONFIGURE          0x0007
  1475. #define DRV_QUERYCONFIGURE     0x0008
  1476. #define DRV_INSTALL            0x0009
  1477. #define DRV_REMOVE             0x000A
  1478.  
  1479. #define DRV_RESERVED           0x0800
  1480. #define DRV_USER               0x4000
  1481.  
  1482. typedef struct tagDRVCONFIGINFO
  1483.     {
  1484.     DWORD   dwDCISize;
  1485.     LPSTR   lpszDCISectionName;
  1486.     LPSTR   lpszDCIAliasName;
  1487.     } DRVCONFIGINFO;
  1488. typedef DRVCONFIGINFO       *PDRVCONFIGINFO;
  1489. typedef DRVCONFIGINFO FAR   *LPDRVCONFIGINFO;
  1490.  
  1491. LONG FAR PASCAL DrvClose(HANDLE hDriver, LONG lParam1, LONG lParam2);
  1492. HANDLE FAR PASCAL DrvOpen(LPSTR szDriverName, LPSTR szSectionName, LONG lParam);
  1493. LONG FAR PASCAL DrvSendMessage(HANDLE hDriver, WORD message, LONG lParam1, LONG lParam2);
  1494. HANDLE FAR PASCAL DrvGetModuleHandle(HANDLE hDriver);
  1495.  
  1496. #endif
  1497.  
  1498. /****************************************************************************
  1499.  
  1500.     DISPLAY Driver extensions
  1501.  
  1502. ****************************************************************************/
  1503.  
  1504. #ifndef RC_TRANSPARENT
  1505.  
  1506.     #define RC_TRANSPARENT  0x8000      // new raster cap
  1507.     #define NEWTRANSPARENT  3           // use with SetBkMode()
  1508.  
  1509.     #define QUERYROPSUPPORT 40          // use to determine ROP support
  1510.     #define SELECTDIB       41          // DIB.DRV select dib excape
  1511.  
  1512. #endif
  1513.  
  1514. /****************************************************************************
  1515.  
  1516.     ScreenSave stuff
  1517.  
  1518.     the current application will recive a syscommand of SC_SCREENSAVE just
  1519.     before the screen saver is invoked.  If the app wishes to prevent a
  1520.     screen save, return non-0 otherwise pass to DefWindowProc()
  1521.  
  1522. ****************************************************************************/
  1523.  
  1524. #ifndef SC_SCREENSAVE
  1525.  
  1526.     #define SC_SCREENSAVE   0xF140
  1527.  
  1528. #endif
  1529.