MMSYSTEM.H
上传用户:hxb_1234
上传日期:2010-03-30
资源大小:8328k
文件大小:151k
源码类别:

VC书籍

开发平台:

Visual C++

  1. } MIXERCONTROLDETAILS_LISTTEXTA, *PMIXERCONTROLDETAILS_LISTTEXTA, *LPMIXERCONTROLDETAILS_LISTTEXTA;
  2. typedef struct tagMIXERCONTROLDETAILS_LISTTEXTW {
  3.     DWORD           dwParam1;
  4.     DWORD           dwParam2;
  5.     WCHAR           szName[MIXER_LONG_NAME_CHARS];
  6. } MIXERCONTROLDETAILS_LISTTEXTW, *PMIXERCONTROLDETAILS_LISTTEXTW, *LPMIXERCONTROLDETAILS_LISTTEXTW;
  7. #ifdef UNICODE
  8. typedef MIXERCONTROLDETAILS_LISTTEXTW MIXERCONTROLDETAILS_LISTTEXT;
  9. typedef PMIXERCONTROLDETAILS_LISTTEXTW PMIXERCONTROLDETAILS_LISTTEXT;
  10. typedef LPMIXERCONTROLDETAILS_LISTTEXTW LPMIXERCONTROLDETAILS_LISTTEXT;
  11. #else
  12. typedef MIXERCONTROLDETAILS_LISTTEXTA MIXERCONTROLDETAILS_LISTTEXT;
  13. typedef PMIXERCONTROLDETAILS_LISTTEXTA PMIXERCONTROLDETAILS_LISTTEXT;
  14. typedef LPMIXERCONTROLDETAILS_LISTTEXTA LPMIXERCONTROLDETAILS_LISTTEXT;
  15. #endif // UNICODE
  16. #else
  17. typedef struct tMIXERCONTROLDETAILS_LISTTEXT {
  18.     DWORD           dwParam1;
  19.     DWORD           dwParam2;
  20.     char            szName[MIXER_LONG_NAME_CHARS];
  21. } MIXERCONTROLDETAILS_LISTTEXT, *PMIXERCONTROLDETAILS_LISTTEXT, FAR *LPMIXERCONTROLDETAILS_LISTTEXT;
  22. #endif
  23. /* */
  24. /*  MIXER_GETCONTROLDETAILSF_VALUE */
  25. /* */
  26. /* */
  27. typedef struct tMIXERCONTROLDETAILS_BOOLEAN {
  28.     LONG            fValue;
  29. }       MIXERCONTROLDETAILS_BOOLEAN,
  30.       *PMIXERCONTROLDETAILS_BOOLEAN,
  31.  FAR *LPMIXERCONTROLDETAILS_BOOLEAN;
  32. typedef struct tMIXERCONTROLDETAILS_SIGNED {
  33.     LONG            lValue;
  34. }       MIXERCONTROLDETAILS_SIGNED,
  35.       *PMIXERCONTROLDETAILS_SIGNED,
  36.  FAR *LPMIXERCONTROLDETAILS_SIGNED;
  37. typedef struct tMIXERCONTROLDETAILS_UNSIGNED {
  38.     DWORD           dwValue;
  39. }       MIXERCONTROLDETAILS_UNSIGNED,
  40.       *PMIXERCONTROLDETAILS_UNSIGNED,
  41.  FAR *LPMIXERCONTROLDETAILS_UNSIGNED;
  42. #ifdef _WIN32
  43. WINMMAPI MMRESULT WINAPI mixerGetControlDetailsA(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails);
  44. WINMMAPI MMRESULT WINAPI mixerGetControlDetailsW(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails);
  45. #ifdef UNICODE
  46. #define mixerGetControlDetails  mixerGetControlDetailsW
  47. #else
  48. #define mixerGetControlDetails  mixerGetControlDetailsA
  49. #endif // !UNICODE
  50. #else
  51. MMRESULT WINAPI mixerGetControlDetails(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails);
  52. #endif
  53. #define MIXER_GETCONTROLDETAILSF_VALUE      0x00000000L
  54. #define MIXER_GETCONTROLDETAILSF_LISTTEXT   0x00000001L
  55. #define MIXER_GETCONTROLDETAILSF_QUERYMASK  0x0000000FL
  56. WINMMAPI MMRESULT WINAPI mixerSetControlDetails(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails);
  57. #define MIXER_SETCONTROLDETAILSF_VALUE      0x00000000L
  58. #define MIXER_SETCONTROLDETAILSF_CUSTOM     0x00000001L
  59. #define MIXER_SETCONTROLDETAILSF_QUERYMASK  0x0000000FL
  60. #endif /* ifndef _WIN32_VXD */
  61. #endif /* ifndef MMNOMIXER */
  62. #ifndef MMNOTIMER
  63. #ifndef _WIN32_VXD
  64. /****************************************************************************
  65.     Timer support
  66. ****************************************************************************/
  67. /* timer error return values */
  68. #define TIMERR_NOERROR        (0)                  /* no error */
  69. #define TIMERR_NOCANDO        (TIMERR_BASE+1)      /* request not completed */
  70. #define TIMERR_STRUCT         (TIMERR_BASE+33)     /* time struct size */
  71. /* timer data types */
  72. typedef void (CALLBACK TIMECALLBACK)(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);
  73. typedef TIMECALLBACK FAR *LPTIMECALLBACK;
  74. /* flags for fuEvent parameter of timeSetEvent() function */
  75. #define TIME_ONESHOT    0x0000   /* program timer for single event */
  76. #define TIME_PERIODIC   0x0001   /* program for continuous periodic event */
  77. #ifdef _WIN32
  78. #define TIME_CALLBACK_FUNCTION      0x0000  /* callback is function */
  79. #define TIME_CALLBACK_EVENT_SET     0x0010  /* callback is event - use SetEvent */
  80. #define TIME_CALLBACK_EVENT_PULSE   0x0020  /* callback is event - use PulseEvent */
  81. #endif
  82. /* timer device capabilities data structure */
  83. typedef struct timecaps_tag {
  84.     UINT    wPeriodMin;     /* minimum period supported  */
  85.     UINT    wPeriodMax;     /* maximum period supported  */
  86. } TIMECAPS, *PTIMECAPS, NEAR *NPTIMECAPS, FAR *LPTIMECAPS;
  87. /* timer function prototypes */
  88. WINMMAPI MMRESULT WINAPI timeGetSystemTime(LPMMTIME pmmt, UINT cbmmt);
  89. WINMMAPI DWORD WINAPI timeGetTime(void);
  90. WINMMAPI MMRESULT WINAPI timeSetEvent(UINT uDelay, UINT uResolution,
  91.     LPTIMECALLBACK fptc, DWORD dwUser, UINT fuEvent);
  92. WINMMAPI MMRESULT WINAPI timeKillEvent(UINT uTimerID);
  93. WINMMAPI MMRESULT WINAPI timeGetDevCaps(LPTIMECAPS ptc, UINT cbtc);
  94. WINMMAPI MMRESULT WINAPI timeBeginPeriod(UINT uPeriod);
  95. WINMMAPI MMRESULT WINAPI timeEndPeriod(UINT uPeriod);
  96. #endif  /* ifndef _WIN32_VXD */
  97. #endif  /* ifndef MMNOTIMER */
  98. #ifndef MMNOJOY
  99. /****************************************************************************
  100.     Joystick support
  101. ****************************************************************************/
  102. /* joystick error return values */
  103. #define JOYERR_NOERROR        (0)                  /* no error */
  104. #define JOYERR_PARMS          (JOYERR_BASE+5)      /* bad parameters */
  105. #define JOYERR_NOCANDO        (JOYERR_BASE+6)      /* request not completed */
  106. #define JOYERR_UNPLUGGED      (JOYERR_BASE+7)      /* joystick is unplugged */
  107. /* constants used with JOYINFO and JOYINFOEX structures and MM_JOY* messages */
  108. #define JOY_BUTTON1         0x0001
  109. #define JOY_BUTTON2         0x0002
  110. #define JOY_BUTTON3         0x0004
  111. #define JOY_BUTTON4         0x0008
  112. #define JOY_BUTTON1CHG      0x0100
  113. #define JOY_BUTTON2CHG      0x0200
  114. #define JOY_BUTTON3CHG      0x0400
  115. #define JOY_BUTTON4CHG      0x0800
  116. /* constants used with JOYINFOEX */
  117. #define JOY_BUTTON5         0x00000010l
  118. #define JOY_BUTTON6         0x00000020l
  119. #define JOY_BUTTON7         0x00000040l
  120. #define JOY_BUTTON8         0x00000080l
  121. #define JOY_BUTTON9         0x00000100l
  122. #define JOY_BUTTON10        0x00000200l
  123. #define JOY_BUTTON11        0x00000400l
  124. #define JOY_BUTTON12        0x00000800l
  125. #define JOY_BUTTON13        0x00001000l
  126. #define JOY_BUTTON14        0x00002000l
  127. #define JOY_BUTTON15        0x00004000l
  128. #define JOY_BUTTON16        0x00008000l
  129. #define JOY_BUTTON17        0x00010000l
  130. #define JOY_BUTTON18        0x00020000l
  131. #define JOY_BUTTON19        0x00040000l
  132. #define JOY_BUTTON20        0x00080000l
  133. #define JOY_BUTTON21        0x00100000l
  134. #define JOY_BUTTON22        0x00200000l
  135. #define JOY_BUTTON23        0x00400000l
  136. #define JOY_BUTTON24        0x00800000l
  137. #define JOY_BUTTON25        0x01000000l
  138. #define JOY_BUTTON26        0x02000000l
  139. #define JOY_BUTTON27        0x04000000l
  140. #define JOY_BUTTON28        0x08000000l
  141. #define JOY_BUTTON29        0x10000000l
  142. #define JOY_BUTTON30        0x20000000l
  143. #define JOY_BUTTON31        0x40000000l
  144. #define JOY_BUTTON32        0x80000000l
  145. /* constants used with JOYINFOEX structure */
  146. #define JOY_POVCENTERED (WORD) -1
  147. #define JOY_POVFORWARD 0
  148. #define JOY_POVRIGHT 9000
  149. #define JOY_POVBACKWARD 18000
  150. #define JOY_POVLEFT 27000
  151. #define JOY_RETURNX 0x00000001l
  152. #define JOY_RETURNY 0x00000002l
  153. #define JOY_RETURNZ 0x00000004l
  154. #define JOY_RETURNR 0x00000008l
  155. #define JOY_RETURNU 0x00000010l /* axis 5 */
  156. #define JOY_RETURNV 0x00000020l /* axis 6 */
  157. #define JOY_RETURNPOV 0x00000040l
  158. #define JOY_RETURNBUTTONS 0x00000080l
  159. #define JOY_RETURNRAWDATA 0x00000100l
  160. #define JOY_RETURNPOVCTS 0x00000200l
  161. #define JOY_RETURNCENTERED 0x00000400l
  162. #define JOY_USEDEADZONE 0x00000800l
  163. #define JOY_RETURNALL (JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | 
  164.  JOY_RETURNR | JOY_RETURNU | JOY_RETURNV | 
  165.  JOY_RETURNPOV | JOY_RETURNBUTTONS)
  166. #define JOY_CAL_READALWAYS 0x00010000l
  167. #define JOY_CAL_READXYONLY 0x00020000l
  168. #define JOY_CAL_READ3 0x00040000l
  169. #define JOY_CAL_READ4 0x00080000l
  170. #define JOY_CAL_READXONLY 0x00100000l
  171. #define JOY_CAL_READYONLY 0x00200000l
  172. #define JOY_CAL_READ5 0x00400000l
  173. #define JOY_CAL_READ6 0x00800000l
  174. #define JOY_CAL_READZONLY 0x01000000l
  175. #define JOY_CAL_READRONLY 0x02000000l
  176. #define JOY_CAL_READUONLY 0x04000000l
  177. #define JOY_CAL_READVONLY 0x08000000l
  178. /* joystick ID constants */
  179. #define JOYSTICKID1         0
  180. #define JOYSTICKID2         1
  181. /* joystick driver capabilites */
  182. #define JOYCAPS_HASZ 0x0001
  183. #define JOYCAPS_HASR 0x0002
  184. #define JOYCAPS_HASU 0x0004
  185. #define JOYCAPS_HASV 0x0008
  186. #define JOYCAPS_HASPOV 0x0010
  187. #define JOYCAPS_POV4DIR 0x0020
  188. #define JOYCAPS_POVCTS 0x0040
  189. /* joystick device capabilities data structure */
  190. #ifdef _WIN32
  191. typedef struct tagJOYCAPSA {
  192.     WORD    wMid;                /* manufacturer ID */
  193.     WORD    wPid;                /* product ID */
  194.     CHAR    szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
  195.     UINT    wXmin;               /* minimum x position value */
  196.     UINT    wXmax;               /* maximum x position value */
  197.     UINT    wYmin;               /* minimum y position value */
  198.     UINT    wYmax;               /* maximum y position value */
  199.     UINT    wZmin;               /* minimum z position value */
  200.     UINT    wZmax;               /* maximum z position value */
  201.     UINT    wNumButtons;         /* number of buttons */
  202.     UINT    wPeriodMin;          /* minimum message period when captured */
  203.     UINT    wPeriodMax;          /* maximum message period when captured */
  204. #if (WINVER >= 0x0400)
  205.     UINT    wRmin;               /* minimum r position value */
  206.     UINT    wRmax;               /* maximum r position value */
  207.     UINT    wUmin;               /* minimum u (5th axis) position value */
  208.     UINT    wUmax;               /* maximum u (5th axis) position value */
  209.     UINT    wVmin;               /* minimum v (6th axis) position value */
  210.     UINT    wVmax;               /* maximum v (6th axis) position value */
  211.     UINT    wCaps;    /* joystick capabilites */
  212.     UINT    wMaxAxes;    /* maximum number of axes supported */
  213.     UINT    wNumAxes;    /* number of axes in use */
  214.     UINT    wMaxButtons;  /* maximum number of buttons supported */
  215.     CHAR    szRegKey[MAXPNAMELEN];/* registry key */
  216.     CHAR    szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; /* OEM VxD in use */
  217. #endif
  218. } JOYCAPSA, *PJOYCAPSA, *NPJOYCAPSA, *LPJOYCAPSA;
  219. typedef struct tagJOYCAPSW {
  220.     WORD    wMid;                /* manufacturer ID */
  221.     WORD    wPid;                /* product ID */
  222.     WCHAR   szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
  223.     UINT    wXmin;               /* minimum x position value */
  224.     UINT    wXmax;               /* maximum x position value */
  225.     UINT    wYmin;               /* minimum y position value */
  226.     UINT    wYmax;               /* maximum y position value */
  227.     UINT    wZmin;               /* minimum z position value */
  228.     UINT    wZmax;               /* maximum z position value */
  229.     UINT    wNumButtons;         /* number of buttons */
  230.     UINT    wPeriodMin;          /* minimum message period when captured */
  231.     UINT    wPeriodMax;          /* maximum message period when captured */
  232. #if (WINVER >= 0x0400)
  233.     UINT    wRmin;               /* minimum r position value */
  234.     UINT    wRmax;               /* maximum r position value */
  235.     UINT    wUmin;               /* minimum u (5th axis) position value */
  236.     UINT    wUmax;               /* maximum u (5th axis) position value */
  237.     UINT    wVmin;               /* minimum v (6th axis) position value */
  238.     UINT    wVmax;               /* maximum v (6th axis) position value */
  239.     UINT    wCaps;    /* joystick capabilites */
  240.     UINT    wMaxAxes;    /* maximum number of axes supported */
  241.     UINT    wNumAxes;    /* number of axes in use */
  242.     UINT    wMaxButtons;  /* maximum number of buttons supported */
  243.     WCHAR   szRegKey[MAXPNAMELEN];/* registry key */
  244.     WCHAR   szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; /* OEM VxD in use */
  245. #endif
  246. } JOYCAPSW, *PJOYCAPSW, *NPJOYCAPSW, *LPJOYCAPSW;
  247. #ifdef UNICODE
  248. typedef JOYCAPSW JOYCAPS;
  249. typedef PJOYCAPSW PJOYCAPS;
  250. typedef NPJOYCAPSW NPJOYCAPS;
  251. typedef LPJOYCAPSW LPJOYCAPS;
  252. #else
  253. typedef JOYCAPSA JOYCAPS;
  254. typedef PJOYCAPSA PJOYCAPS;
  255. typedef NPJOYCAPSA NPJOYCAPS;
  256. typedef LPJOYCAPSA LPJOYCAPS;
  257. #endif // UNICODE
  258. #else
  259. typedef struct joycaps_tag {
  260.     WORD wMid;                  /* manufacturer ID */
  261.     WORD wPid;                  /* product ID */
  262.     char szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  263.     UINT wXmin;                 /* minimum x position value */
  264.     UINT wXmax;                 /* maximum x position value */
  265.     UINT wYmin;                 /* minimum y position value */
  266.     UINT wYmax;                 /* maximum y position value */
  267.     UINT wZmin;                 /* minimum z position value */
  268.     UINT wZmax;                 /* maximum z position value */
  269.     UINT wNumButtons;           /* number of buttons */
  270.     UINT wPeriodMin;            /* minimum message period when captured */
  271.     UINT wPeriodMax;            /* maximum message period when captured */
  272. #if (WINVER >= 0x0400)
  273.     UINT wRmin;                 /* minimum r position value */
  274.     UINT wRmax;                 /* maximum r position value */
  275.     UINT wUmin;                 /* minimum u (5th axis) position value */
  276.     UINT wUmax;                 /* maximum u (5th axis) position value */
  277.     UINT wVmin;                 /* minimum v (6th axis) position value */
  278.     UINT wVmax;                 /* maximum v (6th axis) position value */
  279.     UINT wCaps;                 /* joystick capabilites */
  280.     UINT wMaxAxes;   /* maximum number of axes supported */
  281.     UINT wNumAxes;   /* number of axes in use */
  282.     UINT wMaxButtons;   /* maximum number of buttons supported */
  283.     char szRegKey[MAXPNAMELEN]; /* registry key */
  284.     char szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; /* OEM VxD in use */
  285. #endif
  286. } JOYCAPS, *PJOYCAPS, NEAR *NPJOYCAPS, FAR *LPJOYCAPS;
  287. #endif
  288. /* joystick information data structure */
  289. typedef struct joyinfo_tag {
  290.     UINT wXpos;                 /* x position */
  291.     UINT wYpos;                 /* y position */
  292.     UINT wZpos;                 /* z position */
  293.     UINT wButtons;              /* button states */
  294. } JOYINFO, *PJOYINFO, NEAR *NPJOYINFO, FAR *LPJOYINFO;
  295. #if(WINVER >= 0x0400)
  296. typedef struct joyinfoex_tag {
  297.     DWORD dwSize;  /* size of structure */
  298.     DWORD dwFlags;  /* flags to indicate what to return */
  299.     DWORD dwXpos;                /* x position */
  300.     DWORD dwYpos;                /* y position */
  301.     DWORD dwZpos;                /* z position */
  302.     DWORD dwRpos;  /* rudder/4th axis position */
  303.     DWORD dwUpos;  /* 5th axis position */
  304.     DWORD dwVpos;  /* 6th axis position */
  305.     DWORD dwButtons;             /* button states */
  306.     DWORD dwButtonNumber;        /* current button number pressed */
  307.     DWORD dwPOV;                 /* point of view state */
  308.     DWORD dwReserved1;  /* reserved for communication between winmm & driver */
  309.     DWORD dwReserved2;  /* reserved for future expansion */
  310. } JOYINFOEX, *PJOYINFOEX, NEAR *NPJOYINFOEX, FAR *LPJOYINFOEX;
  311. #endif /* WINVER >= 0x0400 */
  312. #ifndef _WIN32_VXD
  313. /* joystick function prototypes */
  314. WINMMAPI UINT WINAPI joyGetNumDevs(void);
  315. #ifdef _WIN32
  316. WINMMAPI MMRESULT WINAPI joyGetDevCapsA(UINT uJoyID, LPJOYCAPSA pjc, UINT cbjc);
  317. WINMMAPI MMRESULT WINAPI joyGetDevCapsW(UINT uJoyID, LPJOYCAPSW pjc, UINT cbjc);
  318. #ifdef UNICODE
  319. #define joyGetDevCaps  joyGetDevCapsW
  320. #else
  321. #define joyGetDevCaps  joyGetDevCapsA
  322. #endif // !UNICODE
  323. #else
  324. MMRESULT WINAPI joyGetDevCaps(UINT uJoyID, LPJOYCAPS pjc, UINT cbjc);
  325. #endif
  326. WINMMAPI MMRESULT WINAPI joyGetPos(UINT uJoyID, LPJOYINFO pji);
  327. #if(WINVER >= 0x0400)
  328. WINMMAPI MMRESULT WINAPI joyGetPosEx(UINT uJoyID, LPJOYINFOEX pji);
  329. #endif /* WINVER >= 0x0400 */
  330. WINMMAPI MMRESULT WINAPI joyGetThreshold(UINT uJoyID, LPUINT puThreshold);
  331. WINMMAPI MMRESULT WINAPI joyReleaseCapture(UINT uJoyID);
  332. WINMMAPI MMRESULT WINAPI joySetCapture(HWND hwnd, UINT uJoyID, UINT uPeriod,
  333.     BOOL fChanged);
  334. WINMMAPI MMRESULT WINAPI joySetThreshold(UINT uJoyID, UINT uThreshold);
  335. #endif /* ifndef _WIN32_VXD */
  336. #endif  /* ifndef MMNOJOY */
  337. #ifndef MMNOMMIO
  338. #ifndef _WIN32_VXD
  339. /****************************************************************************
  340. Multimedia File I/O support
  341. ****************************************************************************/
  342. /* MMIO error return values */
  343. #define MMIOERR_BASE                256
  344. #define MMIOERR_FILENOTFOUND        (MMIOERR_BASE + 1)  /* file not found */
  345. #define MMIOERR_OUTOFMEMORY         (MMIOERR_BASE + 2)  /* out of memory */
  346. #define MMIOERR_CANNOTOPEN          (MMIOERR_BASE + 3)  /* cannot open */
  347. #define MMIOERR_CANNOTCLOSE         (MMIOERR_BASE + 4)  /* cannot close */
  348. #define MMIOERR_CANNOTREAD          (MMIOERR_BASE + 5)  /* cannot read */
  349. #define MMIOERR_CANNOTWRITE         (MMIOERR_BASE + 6)  /* cannot write */
  350. #define MMIOERR_CANNOTSEEK          (MMIOERR_BASE + 7)  /* cannot seek */
  351. #define MMIOERR_CANNOTEXPAND        (MMIOERR_BASE + 8)  /* cannot expand file */
  352. #define MMIOERR_CHUNKNOTFOUND       (MMIOERR_BASE + 9)  /* chunk not found */
  353. #define MMIOERR_UNBUFFERED          (MMIOERR_BASE + 10) /*  */
  354. #define MMIOERR_PATHNOTFOUND        (MMIOERR_BASE + 11) /* path incorrect */
  355. #define MMIOERR_ACCESSDENIED        (MMIOERR_BASE + 12) /* file was protected */
  356. #define MMIOERR_SHARINGVIOLATION    (MMIOERR_BASE + 13) /* file in use */
  357. #define MMIOERR_NETWORKERROR        (MMIOERR_BASE + 14) /* network not responding */
  358. #define MMIOERR_TOOMANYOPENFILES    (MMIOERR_BASE + 15) /* no more file handles  */
  359. #define MMIOERR_INVALIDFILE         (MMIOERR_BASE + 16) /* default error file error */
  360. /* MMIO constants */
  361. #define CFSEPCHAR       '+'             /* compound file name separator char. */
  362. /* MMIO data types */
  363. typedef DWORD           FOURCC;         /* a four character code */
  364. typedef char _huge *    HPSTR;          /* a huge version of LPSTR */
  365. DECLARE_HANDLE(HMMIO);                  /* a handle to an open file */
  366. typedef LRESULT (CALLBACK MMIOPROC)(LPSTR lpmmioinfo, UINT uMsg,
  367.     LPARAM lParam1, LPARAM lParam2);
  368. typedef MMIOPROC FAR *LPMMIOPROC;
  369. /* general MMIO information data structure */
  370. typedef struct _MMIOINFO
  371. {
  372. /* general fields */
  373. DWORD           dwFlags;        /* general status flags */
  374. FOURCC          fccIOProc;      /* pointer to I/O procedure */
  375. LPMMIOPROC      pIOProc;        /* pointer to I/O procedure */
  376. UINT            wErrorRet;      /* place for error to be returned */
  377. HTASK           htask;          /* alternate local task */
  378. /* fields maintained by MMIO functions during buffered I/O */
  379. LONG            cchBuffer;      /* size of I/O buffer (or 0L) */
  380. HPSTR           pchBuffer;      /* start of I/O buffer (or NULL) */
  381. HPSTR           pchNext;        /* pointer to next byte to read/write */
  382. HPSTR           pchEndRead;     /* pointer to last valid byte to read */
  383. HPSTR           pchEndWrite;    /* pointer to last byte to write */
  384. LONG            lBufOffset;     /* disk offset of start of buffer */
  385. /* fields maintained by I/O procedure */
  386. LONG            lDiskOffset;    /* disk offset of next read or write */
  387. DWORD           adwInfo[3];     /* data specific to type of MMIOPROC */
  388. /* other fields maintained by MMIO */
  389. DWORD           dwReserved1;    /* reserved for MMIO use */
  390. DWORD           dwReserved2;    /* reserved for MMIO use */
  391. HMMIO           hmmio;          /* handle to open file */
  392. } MMIOINFO, *PMMIOINFO, NEAR *NPMMIOINFO, FAR *LPMMIOINFO;
  393. typedef const MMIOINFO FAR *LPCMMIOINFO;
  394. /* RIFF chunk information data structure */
  395. typedef struct _MMCKINFO
  396. {
  397. FOURCC          ckid;           /* chunk ID */
  398. DWORD           cksize;         /* chunk size */
  399. FOURCC          fccType;        /* form type or list type */
  400. DWORD           dwDataOffset;   /* offset of data portion of chunk */
  401. DWORD           dwFlags;        /* flags used by MMIO functions */
  402. } MMCKINFO, *PMMCKINFO, NEAR *NPMMCKINFO, FAR *LPMMCKINFO;
  403. typedef const MMCKINFO *LPCMMCKINFO;
  404. /* bit field masks */
  405. #define MMIO_RWMODE     0x00000003      /* open file for reading/writing/both */
  406. #define MMIO_SHAREMODE  0x00000070      /* file sharing mode number */
  407. /* constants for dwFlags field of MMIOINFO */
  408. #define MMIO_CREATE     0x00001000      /* create new file (or truncate file) */
  409. #define MMIO_PARSE      0x00000100      /* parse new file returning path */
  410. #define MMIO_DELETE     0x00000200      /* create new file (or truncate file) */
  411. #define MMIO_EXIST      0x00004000      /* checks for existence of file */
  412. #define MMIO_ALLOCBUF   0x00010000      /* mmioOpen() should allocate a buffer */
  413. #define MMIO_GETTEMP    0x00020000      /* mmioOpen() should retrieve temp name */
  414. #define MMIO_DIRTY      0x10000000      /* I/O buffer is dirty */
  415. /* read/write mode numbers (bit field MMIO_RWMODE) */
  416. #define MMIO_READ       0x00000000      /* open file for reading only */
  417. #define MMIO_WRITE      0x00000001      /* open file for writing only */
  418. #define MMIO_READWRITE  0x00000002      /* open file for reading and writing */
  419. /* share mode numbers (bit field MMIO_SHAREMODE) */
  420. #define MMIO_COMPAT     0x00000000      /* compatibility mode */
  421. #define MMIO_EXCLUSIVE  0x00000010      /* exclusive-access mode */
  422. #define MMIO_DENYWRITE  0x00000020      /* deny writing to other processes */
  423. #define MMIO_DENYREAD   0x00000030      /* deny reading to other processes */
  424. #define MMIO_DENYNONE   0x00000040      /* deny nothing to other processes */
  425. /* various MMIO flags */
  426. #define MMIO_FHOPEN             0x0010  /* mmioClose: keep file handle open */
  427. #define MMIO_EMPTYBUF           0x0010  /* mmioFlush: empty the I/O buffer */
  428. #define MMIO_TOUPPER            0x0010  /* mmioStringToFOURCC: to u-case */
  429. #define MMIO_INSTALLPROC    0x00010000  /* mmioInstallIOProc: install MMIOProc */
  430. #define MMIO_GLOBALPROC     0x10000000  /* mmioInstallIOProc: install globally */
  431. #define MMIO_REMOVEPROC     0x00020000  /* mmioInstallIOProc: remove MMIOProc */
  432. #define MMIO_UNICODEPROC    0x01000000  /* mmioInstallIOProc: Unicode MMIOProc */
  433. #define MMIO_FINDPROC       0x00040000  /* mmioInstallIOProc: find an MMIOProc */
  434. #define MMIO_FINDCHUNK          0x0010  /* mmioDescend: find a chunk by ID */
  435. #define MMIO_FINDRIFF           0x0020  /* mmioDescend: find a LIST chunk */
  436. #define MMIO_FINDLIST           0x0040  /* mmioDescend: find a RIFF chunk */
  437. #define MMIO_CREATERIFF         0x0020  /* mmioCreateChunk: make a LIST chunk */
  438. #define MMIO_CREATELIST         0x0040  /* mmioCreateChunk: make a RIFF chunk */
  439. /* message numbers for MMIOPROC I/O procedure functions */
  440. #define MMIOM_READ      MMIO_READ       /* read */
  441. #define MMIOM_WRITE    MMIO_WRITE       /* write */
  442. #define MMIOM_SEEK              2       /* seek to a new position in file */
  443. #define MMIOM_OPEN              3       /* open file */
  444. #define MMIOM_CLOSE             4       /* close file */
  445. #define MMIOM_WRITEFLUSH        5       /* write and flush */
  446. #if (WINVER >= 0x030a)
  447. #define MMIOM_RENAME            6       /* rename specified file */
  448. #endif /* ifdef WINVER >= 0x030a */
  449. #define MMIOM_USER         0x8000       /* beginning of user-defined messages */
  450. /* standard four character codes */
  451. #define FOURCC_RIFF     mmioFOURCC('R', 'I', 'F', 'F')
  452. #define FOURCC_LIST     mmioFOURCC('L', 'I', 'S', 'T')
  453. /* four character codes used to identify standard built-in I/O procedures */
  454. #define FOURCC_DOS      mmioFOURCC('D', 'O', 'S', ' ')
  455. #define FOURCC_MEM      mmioFOURCC('M', 'E', 'M', ' ')
  456. /* flags for mmioSeek() */
  457. #ifndef SEEK_SET
  458. #define SEEK_SET        0               /* seek to an absolute position */
  459. #define SEEK_CUR        1               /* seek relative to current position */
  460. #define SEEK_END        2               /* seek relative to end of file */
  461. #endif  /* ifndef SEEK_SET */
  462. /* other constants */
  463. #define MMIO_DEFAULTBUFFER      8192    /* default buffer size */
  464. /* MMIO macros */
  465. #define mmioFOURCC(ch0, ch1, ch2, ch3)  MAKEFOURCC(ch0, ch1, ch2, ch3)
  466. /* MMIO function prototypes */
  467. #ifdef _WIN32
  468. WINMMAPI FOURCC WINAPI mmioStringToFOURCCA(LPCSTR sz, UINT uFlags);
  469. WINMMAPI FOURCC WINAPI mmioStringToFOURCCW(LPCWSTR sz, UINT uFlags);
  470. #ifdef UNICODE
  471. #define mmioStringToFOURCC  mmioStringToFOURCCW
  472. #else
  473. #define mmioStringToFOURCC  mmioStringToFOURCCA
  474. #endif // !UNICODE
  475. WINMMAPI LPMMIOPROC WINAPI mmioInstallIOProcA(FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags);
  476. WINMMAPI LPMMIOPROC WINAPI mmioInstallIOProcW(FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags);
  477. #ifdef UNICODE
  478. #define mmioInstallIOProc  mmioInstallIOProcW
  479. #else
  480. #define mmioInstallIOProc  mmioInstallIOProcA
  481. #endif // !UNICODE
  482. WINMMAPI HMMIO WINAPI mmioOpenA(LPSTR pszFileName, LPMMIOINFO pmmioinfo, DWORD fdwOpen);
  483. WINMMAPI HMMIO WINAPI mmioOpenW(LPWSTR pszFileName, LPMMIOINFO pmmioinfo, DWORD fdwOpen);
  484. #ifdef UNICODE
  485. #define mmioOpen  mmioOpenW
  486. #else
  487. #define mmioOpen  mmioOpenA
  488. #endif // !UNICODE
  489. WINMMAPI MMRESULT WINAPI mmioRenameA(LPCSTR pszFileName, LPCSTR pszNewFileName, LPCMMIOINFO pmmioinfo, DWORD fdwRename);
  490. WINMMAPI MMRESULT WINAPI mmioRenameW(LPCWSTR pszFileName, LPCWSTR pszNewFileName, LPCMMIOINFO pmmioinfo, DWORD fdwRename);
  491. #ifdef UNICODE
  492. #define mmioRename  mmioRenameW
  493. #else
  494. #define mmioRename  mmioRenameA
  495. #endif // !UNICODE
  496. #else
  497. FOURCC WINAPI mmioStringToFOURCC(LPCSTR sz, UINT uFlags);
  498. LPMMIOPROC WINAPI mmioInstallIOProc(FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags);
  499. HMMIO WINAPI mmioOpen(LPSTR pszFileName, LPMMIOINFO pmmioinfo, DWORD fdwOpen);
  500. #if (WINVER >= 0x030a)
  501. MMRESULT WINAPI mmioRename(LPCSTR pszFileName, LPCSTR pszNewFileName, const MMIOINFO FAR* pmmioinfo, DWORD fdwRename);
  502. #endif /* ifdef WINVER >= 0x030a */
  503. #endif
  504. WINMMAPI MMRESULT WINAPI mmioClose(HMMIO hmmio, UINT fuClose);
  505. WINMMAPI LONG WINAPI mmioRead(HMMIO hmmio, HPSTR pch, LONG cch);
  506. WINMMAPI LONG WINAPI mmioWrite(HMMIO hmmio, const char _huge* pch, LONG cch);
  507. WINMMAPI LONG WINAPI mmioSeek(HMMIO hmmio, LONG lOffset, int iOrigin);
  508. WINMMAPI MMRESULT WINAPI mmioGetInfo(HMMIO hmmio, LPMMIOINFO pmmioinfo, UINT fuInfo);
  509. WINMMAPI MMRESULT WINAPI mmioSetInfo(HMMIO hmmio, LPCMMIOINFO pmmioinfo, UINT fuInfo);
  510. WINMMAPI MMRESULT WINAPI mmioSetBuffer(HMMIO hmmio, LPSTR pchBuffer, LONG cchBuffer,
  511.     UINT fuBuffer);
  512. WINMMAPI MMRESULT WINAPI mmioFlush(HMMIO hmmio, UINT fuFlush);
  513. WINMMAPI MMRESULT WINAPI mmioAdvance(HMMIO hmmio, LPMMIOINFO pmmioinfo, UINT fuAdvance);
  514. WINMMAPI LRESULT WINAPI mmioSendMessage(HMMIO hmmio, UINT uMsg,
  515.     LPARAM lParam1, LPARAM lParam2);
  516. WINMMAPI MMRESULT WINAPI mmioDescend(HMMIO hmmio, LPMMCKINFO pmmcki,
  517.     const MMCKINFO FAR* pmmckiParent, UINT fuDescend);
  518. WINMMAPI MMRESULT WINAPI mmioAscend(HMMIO hmmio, LPMMCKINFO pmmcki, UINT fuAscend);
  519. WINMMAPI MMRESULT WINAPI mmioCreateChunk(HMMIO hmmio, LPMMCKINFO pmmcki, UINT fuCreate);
  520. #endif  /* ifndef _WIN32_VXD */
  521. #endif  /* ifndef MMNOMMIO */
  522. #ifndef MMNOMCI
  523. #ifndef _WIN32_VXD
  524. /****************************************************************************
  525.     MCI support
  526. ****************************************************************************/
  527. #ifndef _MCIERROR_              /* MCIERROR is defined in some post 3.1 apps */
  528. #define _MCIERROR_
  529. typedef DWORD   MCIERROR;       /* error return code, 0 means no error */
  530. #endif
  531. #ifndef _MCIDEVICEID_           /* Same with MCIDEVICEID */
  532. #define _MCIDEVICEID_
  533. typedef UINT    MCIDEVICEID;    /* MCI device ID type */
  534. #endif
  535. typedef UINT (CALLBACK *YIELDPROC)(MCIDEVICEID mciId, DWORD dwYieldData);
  536. /* MCI function prototypes */
  537. #ifdef _WIN32
  538. WINMMAPI MCIERROR WINAPI mciSendCommandA(MCIDEVICEID mciId, UINT uMsg, DWORD dwParam1, DWORD dwParam2);
  539. WINMMAPI MCIERROR WINAPI mciSendCommandW(MCIDEVICEID mciId, UINT uMsg, DWORD dwParam1, DWORD dwParam2);
  540. #ifdef UNICODE
  541. #define mciSendCommand  mciSendCommandW
  542. #else
  543. #define mciSendCommand  mciSendCommandA
  544. #endif // !UNICODE
  545. WINMMAPI MCIERROR  WINAPI mciSendStringA(LPCSTR lpstrCommand, LPSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback);
  546. WINMMAPI MCIERROR  WINAPI mciSendStringW(LPCWSTR lpstrCommand, LPWSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback);
  547. #ifdef UNICODE
  548. #define mciSendString  mciSendStringW
  549. #else
  550. #define mciSendString  mciSendStringA
  551. #endif // !UNICODE
  552. WINMMAPI MCIDEVICEID WINAPI mciGetDeviceIDA(LPCSTR pszDevice);
  553. WINMMAPI MCIDEVICEID WINAPI mciGetDeviceIDW(LPCWSTR pszDevice);
  554. #ifdef UNICODE
  555. #define mciGetDeviceID  mciGetDeviceIDW
  556. #else
  557. #define mciGetDeviceID  mciGetDeviceIDA
  558. #endif // !UNICODE
  559. WINMMAPI MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDA(DWORD dwElementID, LPCSTR lpstrType );
  560. WINMMAPI MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW(DWORD dwElementID, LPCWSTR lpstrType );
  561. #ifdef UNICODE
  562. #define mciGetDeviceIDFromElementID  mciGetDeviceIDFromElementIDW
  563. #else
  564. #define mciGetDeviceIDFromElementID  mciGetDeviceIDFromElementIDA
  565. #endif // !UNICODE
  566. WINMMAPI BOOL WINAPI mciGetErrorStringA(MCIERROR mcierr, LPSTR pszText, UINT cchText);
  567. WINMMAPI BOOL WINAPI mciGetErrorStringW(MCIERROR mcierr, LPWSTR pszText, UINT cchText);
  568. #ifdef UNICODE
  569. #define mciGetErrorString  mciGetErrorStringW
  570. #else
  571. #define mciGetErrorString  mciGetErrorStringA
  572. #endif // !UNICODE
  573. #else
  574. MCIERROR WINAPI mciSendCommand(MCIDEVICEID mciId, UINT uMsg, DWORD dwParam1, DWORD dwParam2);
  575. MCIERROR  WINAPI mciSendString(LPCSTR lpstrCommand, LPSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback);
  576. MCIDEVICEID WINAPI mciGetDeviceID(LPCSTR pszDevice);
  577. BOOL WINAPI mciGetErrorString(MCIERROR mcierr, LPSTR pszText, UINT cchText);
  578. #endif
  579. WINMMAPI BOOL WINAPI mciSetYieldProc(MCIDEVICEID mciId, YIELDPROC fpYieldProc,
  580.     DWORD dwYieldData);
  581. #if (WINVER >= 0x030a)
  582. WINMMAPI HTASK WINAPI mciGetCreatorTask(MCIDEVICEID mciId);
  583. WINMMAPI YIELDPROC WINAPI mciGetYieldProc(MCIDEVICEID mciId, LPDWORD pdwYieldData);
  584. #endif /* ifdef WINVER >= 0x030a */
  585. #if (WINVER < 0x030a)
  586. WINMMAPI BOOL WINAPI mciExecute(LPCSTR pszCommand);
  587. #endif /* ifdef WINVER < 0x030a */
  588. /* MCI error return values */
  589. #define MCIERR_INVALID_DEVICE_ID        (MCIERR_BASE + 1)
  590. #define MCIERR_UNRECOGNIZED_KEYWORD     (MCIERR_BASE + 3)
  591. #define MCIERR_UNRECOGNIZED_COMMAND     (MCIERR_BASE + 5)
  592. #define MCIERR_HARDWARE                 (MCIERR_BASE + 6)
  593. #define MCIERR_INVALID_DEVICE_NAME      (MCIERR_BASE + 7)
  594. #define MCIERR_OUT_OF_MEMORY            (MCIERR_BASE + 8)
  595. #define MCIERR_DEVICE_OPEN              (MCIERR_BASE + 9)
  596. #define MCIERR_CANNOT_LOAD_DRIVER       (MCIERR_BASE + 10)
  597. #define MCIERR_MISSING_COMMAND_STRING   (MCIERR_BASE + 11)
  598. #define MCIERR_PARAM_OVERFLOW           (MCIERR_BASE + 12)
  599. #define MCIERR_MISSING_STRING_ARGUMENT  (MCIERR_BASE + 13)
  600. #define MCIERR_BAD_INTEGER              (MCIERR_BASE + 14)
  601. #define MCIERR_PARSER_INTERNAL          (MCIERR_BASE + 15)
  602. #define MCIERR_DRIVER_INTERNAL          (MCIERR_BASE + 16)
  603. #define MCIERR_MISSING_PARAMETER        (MCIERR_BASE + 17)
  604. #define MCIERR_UNSUPPORTED_FUNCTION     (MCIERR_BASE + 18)
  605. #define MCIERR_FILE_NOT_FOUND           (MCIERR_BASE + 19)
  606. #define MCIERR_DEVICE_NOT_READY         (MCIERR_BASE + 20)
  607. #define MCIERR_INTERNAL                 (MCIERR_BASE + 21)
  608. #define MCIERR_DRIVER                   (MCIERR_BASE + 22)
  609. #define MCIERR_CANNOT_USE_ALL           (MCIERR_BASE + 23)
  610. #define MCIERR_MULTIPLE                 (MCIERR_BASE + 24)
  611. #define MCIERR_EXTENSION_NOT_FOUND      (MCIERR_BASE + 25)
  612. #define MCIERR_OUTOFRANGE               (MCIERR_BASE + 26)
  613. #define MCIERR_FLAGS_NOT_COMPATIBLE     (MCIERR_BASE + 28)
  614. #define MCIERR_FILE_NOT_SAVED           (MCIERR_BASE + 30)
  615. #define MCIERR_DEVICE_TYPE_REQUIRED     (MCIERR_BASE + 31)
  616. #define MCIERR_DEVICE_LOCKED            (MCIERR_BASE + 32)
  617. #define MCIERR_DUPLICATE_ALIAS          (MCIERR_BASE + 33)
  618. #define MCIERR_BAD_CONSTANT             (MCIERR_BASE + 34)
  619. #define MCIERR_MUST_USE_SHAREABLE       (MCIERR_BASE + 35)
  620. #define MCIERR_MISSING_DEVICE_NAME      (MCIERR_BASE + 36)
  621. #define MCIERR_BAD_TIME_FORMAT          (MCIERR_BASE + 37)
  622. #define MCIERR_NO_CLOSING_QUOTE         (MCIERR_BASE + 38)
  623. #define MCIERR_DUPLICATE_FLAGS          (MCIERR_BASE + 39)
  624. #define MCIERR_INVALID_FILE             (MCIERR_BASE + 40)
  625. #define MCIERR_NULL_PARAMETER_BLOCK     (MCIERR_BASE + 41)
  626. #define MCIERR_UNNAMED_RESOURCE         (MCIERR_BASE + 42)
  627. #define MCIERR_NEW_REQUIRES_ALIAS       (MCIERR_BASE + 43)
  628. #define MCIERR_NOTIFY_ON_AUTO_OPEN      (MCIERR_BASE + 44)
  629. #define MCIERR_NO_ELEMENT_ALLOWED       (MCIERR_BASE + 45)
  630. #define MCIERR_NONAPPLICABLE_FUNCTION   (MCIERR_BASE + 46)
  631. #define MCIERR_ILLEGAL_FOR_AUTO_OPEN    (MCIERR_BASE + 47)
  632. #define MCIERR_FILENAME_REQUIRED        (MCIERR_BASE + 48)
  633. #define MCIERR_EXTRA_CHARACTERS         (MCIERR_BASE + 49)
  634. #define MCIERR_DEVICE_NOT_INSTALLED     (MCIERR_BASE + 50)
  635. #define MCIERR_GET_CD                   (MCIERR_BASE + 51)
  636. #define MCIERR_SET_CD                   (MCIERR_BASE + 52)
  637. #define MCIERR_SET_DRIVE                (MCIERR_BASE + 53)
  638. #define MCIERR_DEVICE_LENGTH            (MCIERR_BASE + 54)
  639. #define MCIERR_DEVICE_ORD_LENGTH        (MCIERR_BASE + 55)
  640. #define MCIERR_NO_INTEGER               (MCIERR_BASE + 56)
  641. #define MCIERR_WAVE_OUTPUTSINUSE        (MCIERR_BASE + 64)
  642. #define MCIERR_WAVE_SETOUTPUTINUSE      (MCIERR_BASE + 65)
  643. #define MCIERR_WAVE_INPUTSINUSE         (MCIERR_BASE + 66)
  644. #define MCIERR_WAVE_SETINPUTINUSE       (MCIERR_BASE + 67)
  645. #define MCIERR_WAVE_OUTPUTUNSPECIFIED   (MCIERR_BASE + 68)
  646. #define MCIERR_WAVE_INPUTUNSPECIFIED    (MCIERR_BASE + 69)
  647. #define MCIERR_WAVE_OUTPUTSUNSUITABLE   (MCIERR_BASE + 70)
  648. #define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE + 71)
  649. #define MCIERR_WAVE_INPUTSUNSUITABLE    (MCIERR_BASE + 72)
  650. #define MCIERR_WAVE_SETINPUTUNSUITABLE  (MCIERR_BASE + 73)
  651. #define MCIERR_SEQ_DIV_INCOMPATIBLE     (MCIERR_BASE + 80)
  652. #define MCIERR_SEQ_PORT_INUSE           (MCIERR_BASE + 81)
  653. #define MCIERR_SEQ_PORT_NONEXISTENT     (MCIERR_BASE + 82)
  654. #define MCIERR_SEQ_PORT_MAPNODEVICE     (MCIERR_BASE + 83)
  655. #define MCIERR_SEQ_PORT_MISCERROR       (MCIERR_BASE + 84)
  656. #define MCIERR_SEQ_TIMER                (MCIERR_BASE + 85)
  657. #define MCIERR_SEQ_PORTUNSPECIFIED      (MCIERR_BASE + 86)
  658. #define MCIERR_SEQ_NOMIDIPRESENT        (MCIERR_BASE + 87)
  659. #define MCIERR_NO_WINDOW                (MCIERR_BASE + 90)
  660. #define MCIERR_CREATEWINDOW             (MCIERR_BASE + 91)
  661. #define MCIERR_FILE_READ                (MCIERR_BASE + 92)
  662. #define MCIERR_FILE_WRITE               (MCIERR_BASE + 93)
  663. #define MCIERR_NO_IDENTITY              (MCIERR_BASE + 94)
  664. /* all custom device driver errors must be >= than this value */
  665. #define MCIERR_CUSTOM_DRIVER_BASE       (MCIERR_BASE + 256)
  666. #define MCI_FIRST                       DRV_MCI_FIRST   /* 0x0800 */
  667. /* MCI command message identifiers */
  668. #define MCI_OPEN                        0x0803
  669. #define MCI_CLOSE                       0x0804
  670. #define MCI_ESCAPE                      0x0805
  671. #define MCI_PLAY                        0x0806
  672. #define MCI_SEEK                        0x0807
  673. #define MCI_STOP                        0x0808
  674. #define MCI_PAUSE                       0x0809
  675. #define MCI_INFO                        0x080A
  676. #define MCI_GETDEVCAPS                  0x080B
  677. #define MCI_SPIN                        0x080C
  678. #define MCI_SET                         0x080D
  679. #define MCI_STEP                        0x080E
  680. #define MCI_RECORD                      0x080F
  681. #define MCI_SYSINFO                     0x0810
  682. #define MCI_BREAK                       0x0811
  683. #define MCI_SAVE                        0x0813
  684. #define MCI_STATUS                      0x0814
  685. #define MCI_CUE                         0x0830
  686. #define MCI_REALIZE                     0x0840
  687. #define MCI_WINDOW                      0x0841
  688. #define MCI_PUT                         0x0842
  689. #define MCI_WHERE                       0x0843
  690. #define MCI_FREEZE                      0x0844
  691. #define MCI_UNFREEZE                    0x0845
  692. #define MCI_LOAD                        0x0850
  693. #define MCI_CUT                         0x0851
  694. #define MCI_COPY                        0x0852
  695. #define MCI_PASTE                       0x0853
  696. #define MCI_UPDATE                      0x0854
  697. #define MCI_RESUME                      0x0855
  698. #define MCI_DELETE                      0x0856
  699. /* all custom MCI command messages must be >= than this value */
  700. #define MCI_USER_MESSAGES               (DRV_MCI_FIRST + 0x400)
  701. #define MCI_LAST                        0x0FFF
  702. /* device ID for "all devices" */
  703. #define MCI_ALL_DEVICE_ID               ((MCIDEVICEID)-1)
  704. /* constants for predefined MCI device types */
  705. #define MCI_DEVTYPE_VCR                 513 /* (MCI_STRING_OFFSET + 1) */
  706. #define MCI_DEVTYPE_VIDEODISC           514 /* (MCI_STRING_OFFSET + 2) */
  707. #define MCI_DEVTYPE_OVERLAY             515 /* (MCI_STRING_OFFSET + 3) */
  708. #define MCI_DEVTYPE_CD_AUDIO            516 /* (MCI_STRING_OFFSET + 4) */
  709. #define MCI_DEVTYPE_DAT                 517 /* (MCI_STRING_OFFSET + 5) */
  710. #define MCI_DEVTYPE_SCANNER             518 /* (MCI_STRING_OFFSET + 6) */
  711. #define MCI_DEVTYPE_ANIMATION           519 /* (MCI_STRING_OFFSET + 7) */
  712. #define MCI_DEVTYPE_DIGITAL_VIDEO       520 /* (MCI_STRING_OFFSET + 8) */
  713. #define MCI_DEVTYPE_OTHER               521 /* (MCI_STRING_OFFSET + 9) */
  714. #define MCI_DEVTYPE_WAVEFORM_AUDIO      522 /* (MCI_STRING_OFFSET + 10) */
  715. #define MCI_DEVTYPE_SEQUENCER           523 /* (MCI_STRING_OFFSET + 11) */
  716. #define MCI_DEVTYPE_FIRST               MCI_DEVTYPE_VCR
  717. #define MCI_DEVTYPE_LAST                MCI_DEVTYPE_SEQUENCER
  718. #define MCI_DEVTYPE_FIRST_USER          0x1000
  719. /* return values for 'status mode' command */
  720. #define MCI_MODE_NOT_READY              (MCI_STRING_OFFSET + 12)
  721. #define MCI_MODE_STOP                   (MCI_STRING_OFFSET + 13)
  722. #define MCI_MODE_PLAY                   (MCI_STRING_OFFSET + 14)
  723. #define MCI_MODE_RECORD                 (MCI_STRING_OFFSET + 15)
  724. #define MCI_MODE_SEEK                   (MCI_STRING_OFFSET + 16)
  725. #define MCI_MODE_PAUSE                  (MCI_STRING_OFFSET + 17)
  726. #define MCI_MODE_OPEN                   (MCI_STRING_OFFSET + 18)
  727. /* constants used in 'set time format' and 'status time format' commands */
  728. #define MCI_FORMAT_MILLISECONDS         0
  729. #define MCI_FORMAT_HMS                  1
  730. #define MCI_FORMAT_MSF                  2
  731. #define MCI_FORMAT_FRAMES               3
  732. #define MCI_FORMAT_SMPTE_24             4
  733. #define MCI_FORMAT_SMPTE_25             5
  734. #define MCI_FORMAT_SMPTE_30             6
  735. #define MCI_FORMAT_SMPTE_30DROP         7
  736. #define MCI_FORMAT_BYTES                8
  737. #define MCI_FORMAT_SAMPLES              9
  738. #define MCI_FORMAT_TMSF                 10
  739. /* MCI time format conversion macros */
  740. #define MCI_MSF_MINUTE(msf)             ((BYTE)(msf))
  741. #define MCI_MSF_SECOND(msf)             ((BYTE)(((WORD)(msf)) >> 8))
  742. #define MCI_MSF_FRAME(msf)              ((BYTE)((msf)>>16))
  743. #define MCI_MAKE_MSF(m, s, f)           ((DWORD)(((BYTE)(m) | 
  744.   ((WORD)(s)<<8)) | 
  745.  (((DWORD)(BYTE)(f))<<16)))
  746. #define MCI_TMSF_TRACK(tmsf)            ((BYTE)(tmsf))
  747. #define MCI_TMSF_MINUTE(tmsf)           ((BYTE)(((WORD)(tmsf)) >> 8))
  748. #define MCI_TMSF_SECOND(tmsf)           ((BYTE)((tmsf)>>16))
  749. #define MCI_TMSF_FRAME(tmsf)            ((BYTE)((tmsf)>>24))
  750. #define MCI_MAKE_TMSF(t, m, s, f)       ((DWORD)(((BYTE)(t) | 
  751.   ((WORD)(m)<<8)) | 
  752.  (((DWORD)(BYTE)(s) | 
  753.    ((WORD)(f)<<8))<<16)))
  754. #define MCI_HMS_HOUR(hms)               ((BYTE)(hms))
  755. #define MCI_HMS_MINUTE(hms)             ((BYTE)(((WORD)(hms)) >> 8))
  756. #define MCI_HMS_SECOND(hms)             ((BYTE)((hms)>>16))
  757. #define MCI_MAKE_HMS(h, m, s)           ((DWORD)(((BYTE)(h) | 
  758.   ((WORD)(m)<<8)) | 
  759.  (((DWORD)(BYTE)(s))<<16)))
  760. /* flags for wParam of MM_MCINOTIFY message */
  761. #define MCI_NOTIFY_SUCCESSFUL           0x0001
  762. #define MCI_NOTIFY_SUPERSEDED           0x0002
  763. #define MCI_NOTIFY_ABORTED              0x0004
  764. #define MCI_NOTIFY_FAILURE              0x0008
  765. /* common flags for dwFlags parameter of MCI command messages */
  766. #define MCI_NOTIFY                      0x00000001L
  767. #define MCI_WAIT                        0x00000002L
  768. #define MCI_FROM                        0x00000004L
  769. #define MCI_TO                          0x00000008L
  770. #define MCI_TRACK                       0x00000010L
  771. /* flags for dwFlags parameter of MCI_OPEN command message */
  772. #define MCI_OPEN_SHAREABLE              0x00000100L
  773. #define MCI_OPEN_ELEMENT                0x00000200L
  774. #define MCI_OPEN_ALIAS                  0x00000400L
  775. #define MCI_OPEN_ELEMENT_ID             0x00000800L
  776. #define MCI_OPEN_TYPE_ID                0x00001000L
  777. #define MCI_OPEN_TYPE                   0x00002000L
  778. /* flags for dwFlags parameter of MCI_SEEK command message */
  779. #define MCI_SEEK_TO_START               0x00000100L
  780. #define MCI_SEEK_TO_END                 0x00000200L
  781. /* flags for dwFlags parameter of MCI_STATUS command message */
  782. #define MCI_STATUS_ITEM                 0x00000100L
  783. #define MCI_STATUS_START                0x00000200L
  784. /* flags for dwItem field of the MCI_STATUS_PARMS parameter block */
  785. #define MCI_STATUS_LENGTH               0x00000001L
  786. #define MCI_STATUS_POSITION             0x00000002L
  787. #define MCI_STATUS_NUMBER_OF_TRACKS     0x00000003L
  788. #define MCI_STATUS_MODE                 0x00000004L
  789. #define MCI_STATUS_MEDIA_PRESENT        0x00000005L
  790. #define MCI_STATUS_TIME_FORMAT          0x00000006L
  791. #define MCI_STATUS_READY                0x00000007L
  792. #define MCI_STATUS_CURRENT_TRACK        0x00000008L
  793. /* flags for dwFlags parameter of MCI_INFO command message */
  794. #define MCI_INFO_PRODUCT                0x00000100L
  795. #define MCI_INFO_FILE                   0x00000200L
  796. #define MCI_INFO_MEDIA_UPC              0x00000400L
  797. #define MCI_INFO_MEDIA_IDENTITY         0x00000800L
  798. #define MCI_INFO_NAME                   0x00001000L
  799. #define MCI_INFO_COPYRIGHT              0x00002000L
  800. /* flags for dwFlags parameter of MCI_GETDEVCAPS command message */
  801. #define MCI_GETDEVCAPS_ITEM             0x00000100L
  802. /* flags for dwItem field of the MCI_GETDEVCAPS_PARMS parameter block */
  803. #define MCI_GETDEVCAPS_CAN_RECORD       0x00000001L
  804. #define MCI_GETDEVCAPS_HAS_AUDIO        0x00000002L
  805. #define MCI_GETDEVCAPS_HAS_VIDEO        0x00000003L
  806. #define MCI_GETDEVCAPS_DEVICE_TYPE      0x00000004L
  807. #define MCI_GETDEVCAPS_USES_FILES       0x00000005L
  808. #define MCI_GETDEVCAPS_COMPOUND_DEVICE  0x00000006L
  809. #define MCI_GETDEVCAPS_CAN_EJECT        0x00000007L
  810. #define MCI_GETDEVCAPS_CAN_PLAY         0x00000008L
  811. #define MCI_GETDEVCAPS_CAN_SAVE         0x00000009L
  812. /* flags for dwFlags parameter of MCI_SYSINFO command message */
  813. #define MCI_SYSINFO_QUANTITY            0x00000100L
  814. #define MCI_SYSINFO_OPEN                0x00000200L
  815. #define MCI_SYSINFO_NAME                0x00000400L
  816. #define MCI_SYSINFO_INSTALLNAME         0x00000800L
  817. /* flags for dwFlags parameter of MCI_SET command message */
  818. #define MCI_SET_DOOR_OPEN               0x00000100L
  819. #define MCI_SET_DOOR_CLOSED             0x00000200L
  820. #define MCI_SET_TIME_FORMAT             0x00000400L
  821. #define MCI_SET_AUDIO                   0x00000800L
  822. #define MCI_SET_VIDEO                   0x00001000L
  823. #define MCI_SET_ON                      0x00002000L
  824. #define MCI_SET_OFF                     0x00004000L
  825. /* flags for dwAudio field of MCI_SET_PARMS or MCI_SEQ_SET_PARMS */
  826. #define MCI_SET_AUDIO_ALL               0x00000000L
  827. #define MCI_SET_AUDIO_LEFT              0x00000001L
  828. #define MCI_SET_AUDIO_RIGHT             0x00000002L
  829. /* flags for dwFlags parameter of MCI_BREAK command message */
  830. #define MCI_BREAK_KEY                   0x00000100L
  831. #define MCI_BREAK_HWND                  0x00000200L
  832. #define MCI_BREAK_OFF                   0x00000400L
  833. /* flags for dwFlags parameter of MCI_RECORD command message */
  834. #define MCI_RECORD_INSERT               0x00000100L
  835. #define MCI_RECORD_OVERWRITE            0x00000200L
  836. /* flags for dwFlags parameter of MCI_SAVE command message */
  837. #define MCI_SAVE_FILE                   0x00000100L
  838. /* flags for dwFlags parameter of MCI_LOAD command message */
  839. #define MCI_LOAD_FILE                   0x00000100L
  840. /* generic parameter block for MCI command messages with no special parameters */
  841. typedef struct tagMCI_GENERIC_PARMS {
  842.     DWORD   dwCallback;
  843. } MCI_GENERIC_PARMS, *PMCI_GENERIC_PARMS, FAR *LPMCI_GENERIC_PARMS;
  844. /* parameter block for MCI_OPEN command message */
  845. #ifdef _WIN32
  846. typedef struct tagMCI_OPEN_PARMSA {
  847.     DWORD   dwCallback;
  848.     MCIDEVICEID wDeviceID;
  849.     LPCSTR     lpstrDeviceType;
  850.     LPCSTR     lpstrElementName;
  851.     LPCSTR     lpstrAlias;
  852. } MCI_OPEN_PARMSA, *PMCI_OPEN_PARMSA, *LPMCI_OPEN_PARMSA;
  853. typedef struct tagMCI_OPEN_PARMSW {
  854.     DWORD   dwCallback;
  855.     MCIDEVICEID wDeviceID;
  856.     LPCWSTR    lpstrDeviceType;
  857.     LPCWSTR    lpstrElementName;
  858.     LPCWSTR    lpstrAlias;
  859. } MCI_OPEN_PARMSW, *PMCI_OPEN_PARMSW, *LPMCI_OPEN_PARMSW;
  860. #ifdef UNICODE
  861. typedef MCI_OPEN_PARMSW MCI_OPEN_PARMS;
  862. typedef PMCI_OPEN_PARMSW PMCI_OPEN_PARMS;
  863. typedef LPMCI_OPEN_PARMSW LPMCI_OPEN_PARMS;
  864. #else
  865. typedef MCI_OPEN_PARMSA MCI_OPEN_PARMS;
  866. typedef PMCI_OPEN_PARMSA PMCI_OPEN_PARMS;
  867. typedef LPMCI_OPEN_PARMSA LPMCI_OPEN_PARMS;
  868. #endif // UNICODE
  869. #else
  870. typedef struct tagMCI_OPEN_PARMS {
  871.     DWORD       dwCallback;
  872.     MCIDEVICEID wDeviceID;
  873.     WORD        wReserved0;
  874.     LPCSTR      lpstrDeviceType;
  875.     LPCSTR      lpstrElementName;
  876.     LPCSTR      lpstrAlias;
  877. } MCI_OPEN_PARMS, FAR *LPMCI_OPEN_PARMS;
  878. #endif
  879. /* parameter block for MCI_PLAY command message */
  880. typedef struct tagMCI_PLAY_PARMS {
  881.     DWORD   dwCallback;
  882.     DWORD   dwFrom;
  883.     DWORD   dwTo;
  884. } MCI_PLAY_PARMS, *PMCI_PLAY_PARMS, FAR *LPMCI_PLAY_PARMS;
  885. /* parameter block for MCI_SEEK command message */
  886. typedef struct tagMCI_SEEK_PARMS {
  887.     DWORD   dwCallback;
  888.     DWORD   dwTo;
  889. } MCI_SEEK_PARMS, *PMCI_SEEK_PARMS, FAR *LPMCI_SEEK_PARMS;
  890. /* parameter block for MCI_STATUS command message */
  891. typedef struct tagMCI_STATUS_PARMS {
  892.     DWORD   dwCallback;
  893.     DWORD   dwReturn;
  894.     DWORD   dwItem;
  895.     DWORD   dwTrack;
  896. } MCI_STATUS_PARMS, *PMCI_STATUS_PARMS, FAR * LPMCI_STATUS_PARMS;
  897. /* parameter block for MCI_INFO command message */
  898. #ifdef _WIN32
  899. typedef struct tagMCI_INFO_PARMSA {
  900.     DWORD   dwCallback;
  901.     LPSTR   lpstrReturn;
  902.     DWORD   dwRetSize;
  903. } MCI_INFO_PARMSA, * LPMCI_INFO_PARMSA;
  904. typedef struct tagMCI_INFO_PARMSW {
  905.     DWORD   dwCallback;
  906.     LPWSTR  lpstrReturn;
  907.     DWORD   dwRetSize;
  908. } MCI_INFO_PARMSW, * LPMCI_INFO_PARMSW;
  909. #ifdef UNICODE
  910. typedef MCI_INFO_PARMSW MCI_INFO_PARMS;
  911. typedef LPMCI_INFO_PARMSW LPMCI_INFO_PARMS;
  912. #else
  913. typedef MCI_INFO_PARMSA MCI_INFO_PARMS;
  914. typedef LPMCI_INFO_PARMSA LPMCI_INFO_PARMS;
  915. #endif // UNICODE
  916. #else
  917. typedef struct tagMCI_INFO_PARMS {
  918.     DWORD   dwCallback;
  919.     LPSTR   lpstrReturn;
  920.     DWORD   dwRetSize;
  921. } MCI_INFO_PARMS, FAR * LPMCI_INFO_PARMS;
  922. #endif
  923. /* parameter block for MCI_GETDEVCAPS command message */
  924. typedef struct tagMCI_GETDEVCAPS_PARMS {
  925.     DWORD   dwCallback;
  926.     DWORD   dwReturn;
  927.     DWORD   dwItem;
  928. } MCI_GETDEVCAPS_PARMS, *PMCI_GETDEVCAPS_PARMS, FAR * LPMCI_GETDEVCAPS_PARMS;
  929. /* parameter block for MCI_SYSINFO command message */
  930. #ifdef _WIN32
  931. typedef struct tagMCI_SYSINFO_PARMSA {
  932.     DWORD   dwCallback;
  933.     LPSTR   lpstrReturn;
  934.     DWORD   dwRetSize;
  935.     DWORD   dwNumber;
  936.     UINT    wDeviceType;
  937. } MCI_SYSINFO_PARMSA, *PMCI_SYSINFO_PARMSA, * LPMCI_SYSINFO_PARMSA;
  938. typedef struct tagMCI_SYSINFO_PARMSW {
  939.     DWORD   dwCallback;
  940.     LPWSTR  lpstrReturn;
  941.     DWORD   dwRetSize;
  942.     DWORD   dwNumber;
  943.     UINT    wDeviceType;
  944. } MCI_SYSINFO_PARMSW, *PMCI_SYSINFO_PARMSW, * LPMCI_SYSINFO_PARMSW;
  945. #ifdef UNICODE
  946. typedef MCI_SYSINFO_PARMSW MCI_SYSINFO_PARMS;
  947. typedef PMCI_SYSINFO_PARMSW PMCI_SYSINFO_PARMS;
  948. typedef LPMCI_SYSINFO_PARMSW LPMCI_SYSINFO_PARMS;
  949. #else
  950. typedef MCI_SYSINFO_PARMSA MCI_SYSINFO_PARMS;
  951. typedef PMCI_SYSINFO_PARMSA PMCI_SYSINFO_PARMS;
  952. typedef LPMCI_SYSINFO_PARMSA LPMCI_SYSINFO_PARMS;
  953. #endif // UNICODE
  954. #else
  955. typedef struct tagMCI_SYSINFO_PARMS {
  956.     DWORD   dwCallback;
  957.     LPSTR   lpstrReturn;
  958.     DWORD   dwRetSize;
  959.     DWORD   dwNumber;
  960.     WORD    wDeviceType;
  961.     WORD    wReserved0;
  962. } MCI_SYSINFO_PARMS, FAR * LPMCI_SYSINFO_PARMS;
  963. #endif
  964. /* parameter block for MCI_SET command message */
  965. typedef struct tagMCI_SET_PARMS {
  966.     DWORD   dwCallback;
  967.     DWORD   dwTimeFormat;
  968.     DWORD   dwAudio;
  969. } MCI_SET_PARMS, *PMCI_SET_PARMS, FAR *LPMCI_SET_PARMS;
  970. /* parameter block for MCI_BREAK command message */
  971. typedef struct tagMCI_BREAK_PARMS {
  972.     DWORD   dwCallback;
  973. #ifdef _WIN32
  974.     int     nVirtKey;
  975.     HWND    hwndBreak;
  976. #else
  977.     short   nVirtKey;
  978.     WORD    wReserved0;             /* padding for Win 16 */
  979.     HWND    hwndBreak;
  980.     WORD    wReserved1;             /* padding for Win 16 */
  981. #endif
  982. } MCI_BREAK_PARMS, *PMCI_BREAK_PARMS, FAR * LPMCI_BREAK_PARMS;
  983. /* parameter block for MCI_SAVE command message */
  984. #ifdef _WIN32
  985. typedef struct tagMCI_SAVE_PARMSA {
  986.     DWORD    dwCallback;
  987.     LPCSTR    lpfilename;
  988. } MCI_SAVE_PARMSA, *PMCI_SAVE_PARMSA, * LPMCI_SAVE_PARMSA;
  989. typedef struct tagMCI_SAVE_PARMSW {
  990.     DWORD    dwCallback;
  991.     LPCWSTR   lpfilename;
  992. } MCI_SAVE_PARMSW, *PMCI_SAVE_PARMSW, * LPMCI_SAVE_PARMSW;
  993. #ifdef UNICODE
  994. typedef MCI_SAVE_PARMSW MCI_SAVE_PARMS;
  995. typedef PMCI_SAVE_PARMSW PMCI_SAVE_PARMS;
  996. typedef LPMCI_SAVE_PARMSW LPMCI_SAVE_PARMS;
  997. #else
  998. typedef MCI_SAVE_PARMSA MCI_SAVE_PARMS;
  999. typedef PMCI_SAVE_PARMSA PMCI_SAVE_PARMS;
  1000. typedef LPMCI_SAVE_PARMSA LPMCI_SAVE_PARMS;
  1001. #endif // UNICODE
  1002. #else
  1003. typedef struct tagMCI_SAVE_PARMS {
  1004.     DWORD   dwCallback;
  1005.     LPCSTR  lpfilename;
  1006. } MCI_SAVE_PARMS, FAR * LPMCI_SAVE_PARMS;
  1007. #endif
  1008. /* parameter block for MCI_LOAD command message */
  1009. #ifdef _WIN32
  1010. typedef struct tagMCI_LOAD_PARMSA {
  1011.     DWORD    dwCallback;
  1012.     LPCSTR      lpfilename;
  1013. } MCI_LOAD_PARMSA, *PMCI_LOAD_PARMSA, * LPMCI_LOAD_PARMSA;
  1014. typedef struct tagMCI_LOAD_PARMSW {
  1015.     DWORD    dwCallback;
  1016.     LPCWSTR     lpfilename;
  1017. } MCI_LOAD_PARMSW, *PMCI_LOAD_PARMSW, * LPMCI_LOAD_PARMSW;
  1018. #ifdef UNICODE
  1019. typedef MCI_LOAD_PARMSW MCI_LOAD_PARMS;
  1020. typedef PMCI_LOAD_PARMSW PMCI_LOAD_PARMS;
  1021. typedef LPMCI_LOAD_PARMSW LPMCI_LOAD_PARMS;
  1022. #else
  1023. typedef MCI_LOAD_PARMSA MCI_LOAD_PARMS;
  1024. typedef PMCI_LOAD_PARMSA PMCI_LOAD_PARMS;
  1025. typedef LPMCI_LOAD_PARMSA LPMCI_LOAD_PARMS;
  1026. #endif // UNICODE
  1027. #else
  1028. typedef struct tagMCI_LOAD_PARMS {
  1029.     DWORD   dwCallback;
  1030.     LPCSTR  lpfilename;
  1031. } MCI_LOAD_PARMS, FAR * LPMCI_LOAD_PARMS;
  1032. #endif
  1033. /* parameter block for MCI_RECORD command message */
  1034. typedef struct tagMCI_RECORD_PARMS {
  1035.     DWORD   dwCallback;
  1036.     DWORD   dwFrom;
  1037.     DWORD   dwTo;
  1038. } MCI_RECORD_PARMS, FAR *LPMCI_RECORD_PARMS;
  1039. /* MCI extensions for videodisc devices */
  1040. /* flag for dwReturn field of MCI_STATUS_PARMS */
  1041. /* MCI_STATUS command, (dwItem == MCI_STATUS_MODE) */
  1042. #define MCI_VD_MODE_PARK                (MCI_VD_OFFSET + 1)
  1043. /* flag for dwReturn field of MCI_STATUS_PARMS */
  1044. /* MCI_STATUS command, (dwItem == MCI_VD_STATUS_MEDIA_TYPE) */
  1045. #define MCI_VD_MEDIA_CLV                (MCI_VD_OFFSET + 2)
  1046. #define MCI_VD_MEDIA_CAV                (MCI_VD_OFFSET + 3)
  1047. #define MCI_VD_MEDIA_OTHER              (MCI_VD_OFFSET + 4)
  1048. #define MCI_VD_FORMAT_TRACK             0x4001
  1049. /* flags for dwFlags parameter of MCI_PLAY command message */
  1050. #define MCI_VD_PLAY_REVERSE             0x00010000L
  1051. #define MCI_VD_PLAY_FAST                0x00020000L
  1052. #define MCI_VD_PLAY_SPEED               0x00040000L
  1053. #define MCI_VD_PLAY_SCAN                0x00080000L
  1054. #define MCI_VD_PLAY_SLOW                0x00100000L
  1055. /* flag for dwFlags parameter of MCI_SEEK command message */
  1056. #define MCI_VD_SEEK_REVERSE             0x00010000L
  1057. /* flags for dwItem field of MCI_STATUS_PARMS parameter block */
  1058. #define MCI_VD_STATUS_SPEED             0x00004002L
  1059. #define MCI_VD_STATUS_FORWARD           0x00004003L
  1060. #define MCI_VD_STATUS_MEDIA_TYPE        0x00004004L
  1061. #define MCI_VD_STATUS_SIDE              0x00004005L
  1062. #define MCI_VD_STATUS_DISC_SIZE         0x00004006L
  1063. /* flags for dwFlags parameter of MCI_GETDEVCAPS command message */
  1064. #define MCI_VD_GETDEVCAPS_CLV           0x00010000L
  1065. #define MCI_VD_GETDEVCAPS_CAV           0x00020000L
  1066. #define MCI_VD_SPIN_UP                  0x00010000L
  1067. #define MCI_VD_SPIN_DOWN                0x00020000L
  1068. /* flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block */
  1069. #define MCI_VD_GETDEVCAPS_CAN_REVERSE   0x00004002L
  1070. #define MCI_VD_GETDEVCAPS_FAST_RATE     0x00004003L
  1071. #define MCI_VD_GETDEVCAPS_SLOW_RATE     0x00004004L
  1072. #define MCI_VD_GETDEVCAPS_NORMAL_RATE   0x00004005L
  1073. /* flags for the dwFlags parameter of MCI_STEP command message */
  1074. #define MCI_VD_STEP_FRAMES              0x00010000L
  1075. #define MCI_VD_STEP_REVERSE             0x00020000L
  1076. /* flag for the MCI_ESCAPE command message */
  1077. #define MCI_VD_ESCAPE_STRING            0x00000100L
  1078. /* parameter block for MCI_PLAY command message */
  1079. typedef struct tagMCI_VD_PLAY_PARMS {
  1080.     DWORD   dwCallback;
  1081.     DWORD   dwFrom;
  1082.     DWORD   dwTo;
  1083.     DWORD   dwSpeed;
  1084. } MCI_VD_PLAY_PARMS, *PMCI_VD_PLAY_PARMS, FAR *LPMCI_VD_PLAY_PARMS;
  1085. /* parameter block for MCI_STEP command message */
  1086. typedef struct tagMCI_VD_STEP_PARMS {
  1087.     DWORD   dwCallback;
  1088.     DWORD   dwFrames;
  1089. } MCI_VD_STEP_PARMS, *PMCI_VD_STEP_PARMS, FAR *LPMCI_VD_STEP_PARMS;
  1090. /* parameter block for MCI_ESCAPE command message */
  1091. #ifdef _WIN32
  1092. typedef struct tagMCI_VD_ESCAPE_PARMSA {
  1093.     DWORD   dwCallback;
  1094.     LPCSTR      lpstrCommand;
  1095. } MCI_VD_ESCAPE_PARMSA, *PMCI_VD_ESCAPE_PARMSA, *LPMCI_VD_ESCAPE_PARMSA;
  1096. typedef struct tagMCI_VD_ESCAPE_PARMSW {
  1097.     DWORD   dwCallback;
  1098.     LPCWSTR     lpstrCommand;
  1099. } MCI_VD_ESCAPE_PARMSW, *PMCI_VD_ESCAPE_PARMSW, *LPMCI_VD_ESCAPE_PARMSW;
  1100. #ifdef UNICODE
  1101. typedef MCI_VD_ESCAPE_PARMSW MCI_VD_ESCAPE_PARMS;
  1102. typedef PMCI_VD_ESCAPE_PARMSW PMCI_VD_ESCAPE_PARMS;
  1103. typedef LPMCI_VD_ESCAPE_PARMSW LPMCI_VD_ESCAPE_PARMS;
  1104. #else
  1105. typedef MCI_VD_ESCAPE_PARMSA MCI_VD_ESCAPE_PARMS;
  1106. typedef PMCI_VD_ESCAPE_PARMSA PMCI_VD_ESCAPE_PARMS;
  1107. typedef LPMCI_VD_ESCAPE_PARMSA LPMCI_VD_ESCAPE_PARMS;
  1108. #endif // UNICODE
  1109. #else
  1110. typedef struct tagMCI_VD_ESCAPE_PARMS {
  1111.     DWORD   dwCallback;
  1112.     LPCSTR  lpstrCommand;
  1113. } MCI_VD_ESCAPE_PARMS, FAR *LPMCI_VD_ESCAPE_PARMS;
  1114. #endif
  1115. /* MCI extensions for CD audio devices */
  1116. /* flags for the dwItem field of the MCI_STATUS_PARMS parameter block */
  1117. #define MCI_CDA_STATUS_TYPE_TRACK       0x00004001L
  1118. /* flags for the dwReturn field of MCI_STATUS_PARMS parameter block */
  1119. /* MCI_STATUS command, (dwItem == MCI_CDA_STATUS_TYPE_TRACK) */
  1120. #define MCI_CDA_TRACK_AUDIO             (MCI_CD_OFFSET + 0)
  1121. #define MCI_CDA_TRACK_OTHER             (MCI_CD_OFFSET + 1)
  1122. /* MCI extensions for waveform audio devices */
  1123. #define MCI_WAVE_PCM                    (MCI_WAVE_OFFSET + 0)
  1124. #define MCI_WAVE_MAPPER                 (MCI_WAVE_OFFSET + 1)
  1125. /* flags for the dwFlags parameter of MCI_OPEN command message */
  1126. #define MCI_WAVE_OPEN_BUFFER            0x00010000L
  1127. /* flags for the dwFlags parameter of MCI_SET command message */
  1128. #define MCI_WAVE_SET_FORMATTAG          0x00010000L
  1129. #define MCI_WAVE_SET_CHANNELS           0x00020000L
  1130. #define MCI_WAVE_SET_SAMPLESPERSEC      0x00040000L
  1131. #define MCI_WAVE_SET_AVGBYTESPERSEC     0x00080000L
  1132. #define MCI_WAVE_SET_BLOCKALIGN         0x00100000L
  1133. #define MCI_WAVE_SET_BITSPERSAMPLE      0x00200000L
  1134. /* flags for the dwFlags parameter of MCI_STATUS, MCI_SET command messages */
  1135. #define MCI_WAVE_INPUT                  0x00400000L
  1136. #define MCI_WAVE_OUTPUT                 0x00800000L
  1137. /* flags for the dwItem field of MCI_STATUS_PARMS parameter block */
  1138. #define MCI_WAVE_STATUS_FORMATTAG       0x00004001L
  1139. #define MCI_WAVE_STATUS_CHANNELS        0x00004002L
  1140. #define MCI_WAVE_STATUS_SAMPLESPERSEC   0x00004003L
  1141. #define MCI_WAVE_STATUS_AVGBYTESPERSEC  0x00004004L
  1142. #define MCI_WAVE_STATUS_BLOCKALIGN      0x00004005L
  1143. #define MCI_WAVE_STATUS_BITSPERSAMPLE   0x00004006L
  1144. #define MCI_WAVE_STATUS_LEVEL           0x00004007L
  1145. /* flags for the dwFlags parameter of MCI_SET command message */
  1146. #define MCI_WAVE_SET_ANYINPUT           0x04000000L
  1147. #define MCI_WAVE_SET_ANYOUTPUT          0x08000000L
  1148. /* flags for the dwFlags parameter of MCI_GETDEVCAPS command message */
  1149. #define MCI_WAVE_GETDEVCAPS_INPUTS      0x00004001L
  1150. #define MCI_WAVE_GETDEVCAPS_OUTPUTS     0x00004002L
  1151. /* parameter block for MCI_OPEN command message */
  1152. #ifdef _WIN32
  1153. typedef struct tagMCI_WAVE_OPEN_PARMSA {
  1154.     DWORD   dwCallback;
  1155.     MCIDEVICEID wDeviceID;
  1156.     LPCSTR      lpstrDeviceType;
  1157.     LPCSTR      lpstrElementName;
  1158.     LPCSTR      lpstrAlias;
  1159.     DWORD   dwBufferSeconds;
  1160. } MCI_WAVE_OPEN_PARMSA, *PMCI_WAVE_OPEN_PARMSA, *LPMCI_WAVE_OPEN_PARMSA;
  1161. typedef struct tagMCI_WAVE_OPEN_PARMSW {
  1162.     DWORD   dwCallback;
  1163.     MCIDEVICEID wDeviceID;
  1164.     LPCWSTR     lpstrDeviceType;
  1165.     LPCWSTR     lpstrElementName;
  1166.     LPCWSTR     lpstrAlias;
  1167.     DWORD   dwBufferSeconds;
  1168. } MCI_WAVE_OPEN_PARMSW, *PMCI_WAVE_OPEN_PARMSW, *LPMCI_WAVE_OPEN_PARMSW;
  1169. #ifdef UNICODE
  1170. typedef MCI_WAVE_OPEN_PARMSW MCI_WAVE_OPEN_PARMS;
  1171. typedef PMCI_WAVE_OPEN_PARMSW PMCI_WAVE_OPEN_PARMS;
  1172. typedef LPMCI_WAVE_OPEN_PARMSW LPMCI_WAVE_OPEN_PARMS;
  1173. #else
  1174. typedef MCI_WAVE_OPEN_PARMSA MCI_WAVE_OPEN_PARMS;
  1175. typedef PMCI_WAVE_OPEN_PARMSA PMCI_WAVE_OPEN_PARMS;
  1176. typedef LPMCI_WAVE_OPEN_PARMSA LPMCI_WAVE_OPEN_PARMS;
  1177. #endif // UNICODE
  1178. #else
  1179. typedef struct tagMCI_WAVE_OPEN_PARMS {
  1180.     DWORD   dwCallback;
  1181.     MCIDEVICEID wDeviceID;
  1182.     WORD        wReserved0;
  1183.     LPCSTR      lpstrDeviceType;
  1184.     LPCSTR      lpstrElementName;
  1185.     LPCSTR      lpstrAlias;
  1186.     DWORD       dwBufferSeconds;
  1187. } MCI_WAVE_OPEN_PARMS, FAR *LPMCI_WAVE_OPEN_PARMS;
  1188. #endif
  1189. /* parameter block for MCI_DELETE command message */
  1190. typedef struct tagMCI_WAVE_DELETE_PARMS {
  1191.     DWORD   dwCallback;
  1192.     DWORD   dwFrom;
  1193.     DWORD   dwTo;
  1194. } MCI_WAVE_DELETE_PARMS, *PMCI_WAVE_DELETE_PARMS, FAR *LPMCI_WAVE_DELETE_PARMS;
  1195. /* parameter block for MCI_SET command message */
  1196. typedef struct tagMCI_WAVE_SET_PARMS {
  1197.     DWORD   dwCallback;
  1198.     DWORD   dwTimeFormat;
  1199.     DWORD   dwAudio;
  1200. #ifdef _WIN32
  1201.     UINT    wInput;
  1202.     UINT    wOutput;
  1203. #else
  1204.     WORD    wInput;
  1205.     WORD    wReserved0;
  1206.     WORD    wOutput;
  1207.     WORD    wReserved1;
  1208. #endif
  1209.     WORD    wFormatTag;
  1210.     WORD    wReserved2;
  1211.     WORD    nChannels;
  1212.     WORD    wReserved3;
  1213.     DWORD   nSamplesPerSec;
  1214.     DWORD   nAvgBytesPerSec;
  1215.     WORD    nBlockAlign;
  1216.     WORD    wReserved4;
  1217.     WORD    wBitsPerSample;
  1218.     WORD    wReserved5;
  1219. } MCI_WAVE_SET_PARMS, *PMCI_WAVE_SET_PARMS, FAR * LPMCI_WAVE_SET_PARMS;
  1220. /* MCI extensions for MIDI sequencer devices */
  1221. /* flags for the dwReturn field of MCI_STATUS_PARMS parameter block */
  1222. /* MCI_STATUS command, (dwItem == MCI_SEQ_STATUS_DIVTYPE) */
  1223. #define     MCI_SEQ_DIV_PPQN            (0 + MCI_SEQ_OFFSET)
  1224. #define     MCI_SEQ_DIV_SMPTE_24        (1 + MCI_SEQ_OFFSET)
  1225. #define     MCI_SEQ_DIV_SMPTE_25        (2 + MCI_SEQ_OFFSET)
  1226. #define     MCI_SEQ_DIV_SMPTE_30DROP    (3 + MCI_SEQ_OFFSET)
  1227. #define     MCI_SEQ_DIV_SMPTE_30        (4 + MCI_SEQ_OFFSET)
  1228. /* flags for the dwMaster field of MCI_SEQ_SET_PARMS parameter block */
  1229. /* MCI_SET command, (dwFlags == MCI_SEQ_SET_MASTER) */
  1230. #define     MCI_SEQ_FORMAT_SONGPTR      0x4001
  1231. #define     MCI_SEQ_FILE                0x4002
  1232. #define     MCI_SEQ_MIDI                0x4003
  1233. #define     MCI_SEQ_SMPTE               0x4004
  1234. #define     MCI_SEQ_NONE                65533
  1235. #define     MCI_SEQ_MAPPER              65535
  1236. /* flags for the dwItem field of MCI_STATUS_PARMS parameter block */
  1237. #define MCI_SEQ_STATUS_TEMPO            0x00004002L
  1238. #define MCI_SEQ_STATUS_PORT             0x00004003L
  1239. #define MCI_SEQ_STATUS_SLAVE            0x00004007L
  1240. #define MCI_SEQ_STATUS_MASTER           0x00004008L
  1241. #define MCI_SEQ_STATUS_OFFSET           0x00004009L
  1242. #define MCI_SEQ_STATUS_DIVTYPE          0x0000400AL
  1243. #define MCI_SEQ_STATUS_NAME             0x0000400BL
  1244. #define MCI_SEQ_STATUS_COPYRIGHT        0x0000400CL
  1245. /* flags for the dwFlags parameter of MCI_SET command message */
  1246. #define MCI_SEQ_SET_TEMPO               0x00010000L
  1247. #define MCI_SEQ_SET_PORT                0x00020000L
  1248. #define MCI_SEQ_SET_SLAVE               0x00040000L
  1249. #define MCI_SEQ_SET_MASTER              0x00080000L
  1250. #define MCI_SEQ_SET_OFFSET              0x01000000L
  1251. /* parameter block for MCI_SET command message */
  1252. typedef struct tagMCI_SEQ_SET_PARMS {
  1253.     DWORD   dwCallback;
  1254.     DWORD   dwTimeFormat;
  1255.     DWORD   dwAudio;
  1256.     DWORD   dwTempo;
  1257.     DWORD   dwPort;
  1258.     DWORD   dwSlave;
  1259.     DWORD   dwMaster;
  1260.     DWORD   dwOffset;
  1261. } MCI_SEQ_SET_PARMS, *PMCI_SEQ_SET_PARMS, FAR * LPMCI_SEQ_SET_PARMS;
  1262. /* MCI extensions for animation devices */
  1263. /* flags for dwFlags parameter of MCI_OPEN command message */
  1264. #define MCI_ANIM_OPEN_WS                0x00010000L
  1265. #define MCI_ANIM_OPEN_PARENT            0x00020000L
  1266. #define MCI_ANIM_OPEN_NOSTATIC          0x00040000L
  1267. /* flags for dwFlags parameter of MCI_PLAY command message */
  1268. #define MCI_ANIM_PLAY_SPEED             0x00010000L
  1269. #define MCI_ANIM_PLAY_REVERSE           0x00020000L
  1270. #define MCI_ANIM_PLAY_FAST              0x00040000L
  1271. #define MCI_ANIM_PLAY_SLOW              0x00080000L
  1272. #define MCI_ANIM_PLAY_SCAN              0x00100000L
  1273. /* flags for dwFlags parameter of MCI_STEP command message */
  1274. #define MCI_ANIM_STEP_REVERSE           0x00010000L
  1275. #define MCI_ANIM_STEP_FRAMES            0x00020000L
  1276. /* flags for dwItem field of MCI_STATUS_PARMS parameter block */
  1277. #define MCI_ANIM_STATUS_SPEED           0x00004001L
  1278. #define MCI_ANIM_STATUS_FORWARD         0x00004002L
  1279. #define MCI_ANIM_STATUS_HWND            0x00004003L
  1280. #define MCI_ANIM_STATUS_HPAL            0x00004004L
  1281. #define MCI_ANIM_STATUS_STRETCH         0x00004005L
  1282. /* flags for the dwFlags parameter of MCI_INFO command message */
  1283. #define MCI_ANIM_INFO_TEXT              0x00010000L
  1284. /* flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block */
  1285. #define MCI_ANIM_GETDEVCAPS_CAN_REVERSE 0x00004001L
  1286. #define MCI_ANIM_GETDEVCAPS_FAST_RATE   0x00004002L
  1287. #define MCI_ANIM_GETDEVCAPS_SLOW_RATE   0x00004003L
  1288. #define MCI_ANIM_GETDEVCAPS_NORMAL_RATE 0x00004004L
  1289. #define MCI_ANIM_GETDEVCAPS_PALETTES    0x00004006L
  1290. #define MCI_ANIM_GETDEVCAPS_CAN_STRETCH 0x00004007L
  1291. #define MCI_ANIM_GETDEVCAPS_MAX_WINDOWS 0x00004008L
  1292. /* flags for the MCI_REALIZE command message */
  1293. #define MCI_ANIM_REALIZE_NORM           0x00010000L
  1294. #define MCI_ANIM_REALIZE_BKGD           0x00020000L
  1295. /* flags for dwFlags parameter of MCI_WINDOW command message */
  1296. #define MCI_ANIM_WINDOW_HWND            0x00010000L
  1297. #define MCI_ANIM_WINDOW_STATE           0x00040000L
  1298. #define MCI_ANIM_WINDOW_TEXT            0x00080000L
  1299. #define MCI_ANIM_WINDOW_ENABLE_STRETCH  0x00100000L
  1300. #define MCI_ANIM_WINDOW_DISABLE_STRETCH 0x00200000L
  1301. /* flags for hWnd field of MCI_ANIM_WINDOW_PARMS parameter block */
  1302. /* MCI_WINDOW command message, (dwFlags == MCI_ANIM_WINDOW_HWND) */
  1303. #define MCI_ANIM_WINDOW_DEFAULT         0x00000000L
  1304. /* flags for dwFlags parameter of MCI_PUT command message */
  1305. #define MCI_ANIM_RECT                   0x00010000L
  1306. #define MCI_ANIM_PUT_SOURCE             0x00020000L
  1307. #define MCI_ANIM_PUT_DESTINATION        0x00040000L
  1308. /* flags for dwFlags parameter of MCI_WHERE command message */
  1309. #define MCI_ANIM_WHERE_SOURCE           0x00020000L
  1310. #define MCI_ANIM_WHERE_DESTINATION      0x00040000L
  1311. /* flags for dwFlags parameter of MCI_UPDATE command message */
  1312. #define MCI_ANIM_UPDATE_HDC             0x00020000L
  1313. /* parameter block for MCI_OPEN command message */
  1314. #ifdef _WIN32
  1315. typedef struct tagMCI_ANIM_OPEN_PARMSA {
  1316.     DWORD   dwCallback;
  1317.     MCIDEVICEID wDeviceID;
  1318.     LPCSTR      lpstrDeviceType;
  1319.     LPCSTR      lpstrElementName;
  1320.     LPCSTR      lpstrAlias;
  1321.     DWORD   dwStyle;
  1322.     HWND    hWndParent;
  1323. } MCI_ANIM_OPEN_PARMSA, *PMCI_ANIM_OPEN_PARMSA, *LPMCI_ANIM_OPEN_PARMSA;
  1324. typedef struct tagMCI_ANIM_OPEN_PARMSW {
  1325.     DWORD   dwCallback;
  1326.     MCIDEVICEID wDeviceID;
  1327.     LPCWSTR     lpstrDeviceType;
  1328.     LPCWSTR     lpstrElementName;
  1329.     LPCWSTR     lpstrAlias;
  1330.     DWORD   dwStyle;
  1331.     HWND    hWndParent;
  1332. } MCI_ANIM_OPEN_PARMSW, *PMCI_ANIM_OPEN_PARMSW, *LPMCI_ANIM_OPEN_PARMSW;
  1333. #ifdef UNICODE
  1334. typedef MCI_ANIM_OPEN_PARMSW MCI_ANIM_OPEN_PARMS;
  1335. typedef PMCI_ANIM_OPEN_PARMSW PMCI_ANIM_OPEN_PARMS;
  1336. typedef LPMCI_ANIM_OPEN_PARMSW LPMCI_ANIM_OPEN_PARMS;
  1337. #else
  1338. typedef MCI_ANIM_OPEN_PARMSA MCI_ANIM_OPEN_PARMS;
  1339. typedef PMCI_ANIM_OPEN_PARMSA PMCI_ANIM_OPEN_PARMS;
  1340. typedef LPMCI_ANIM_OPEN_PARMSA LPMCI_ANIM_OPEN_PARMS;
  1341. #endif // UNICODE
  1342. #else
  1343. typedef struct tagMCI_ANIM_OPEN_PARMS {
  1344.     DWORD   dwCallback;
  1345.     MCIDEVICEID wDeviceID;
  1346.     WORD        wReserved0;
  1347.     LPCSTR      lpstrDeviceType;
  1348.     LPCSTR      lpstrElementName;
  1349.     LPCSTR      lpstrAlias;
  1350.     DWORD       dwStyle;
  1351.     HWND        hWndParent;
  1352.     WORD        wReserved1;
  1353. } MCI_ANIM_OPEN_PARMS, FAR *LPMCI_ANIM_OPEN_PARMS;
  1354. #endif
  1355. /* parameter block for MCI_PLAY command message */
  1356. typedef struct tagMCI_ANIM_PLAY_PARMS {
  1357.     DWORD   dwCallback;
  1358.     DWORD   dwFrom;
  1359.     DWORD   dwTo;
  1360.     DWORD   dwSpeed;
  1361. } MCI_ANIM_PLAY_PARMS, *PMCI_ANIM_PLAY_PARMS, FAR *LPMCI_ANIM_PLAY_PARMS;
  1362. /* parameter block for MCI_STEP command message */
  1363. typedef struct tagMCI_ANIM_STEP_PARMS {
  1364.     DWORD   dwCallback;
  1365.     DWORD   dwFrames;
  1366. } MCI_ANIM_STEP_PARMS, *PMCI_ANIM_STEP_PARMS, FAR *LPMCI_ANIM_STEP_PARMS;
  1367. /* parameter block for MCI_WINDOW command message */
  1368. #ifdef _WIN32
  1369. typedef struct tagMCI_ANIM_WINDOW_PARMSA {
  1370.     DWORD   dwCallback;
  1371.     HWND    hWnd;
  1372.     UINT    nCmdShow;
  1373.     LPCSTR     lpstrText;
  1374. } MCI_ANIM_WINDOW_PARMSA, *PMCI_ANIM_WINDOW_PARMSA, * LPMCI_ANIM_WINDOW_PARMSA;
  1375. typedef struct tagMCI_ANIM_WINDOW_PARMSW {
  1376.     DWORD   dwCallback;
  1377.     HWND    hWnd;
  1378.     UINT    nCmdShow;
  1379.     LPCWSTR    lpstrText;
  1380. } MCI_ANIM_WINDOW_PARMSW, *PMCI_ANIM_WINDOW_PARMSW, * LPMCI_ANIM_WINDOW_PARMSW;
  1381. #ifdef UNICODE
  1382. typedef MCI_ANIM_WINDOW_PARMSW MCI_ANIM_WINDOW_PARMS;
  1383. typedef PMCI_ANIM_WINDOW_PARMSW PMCI_ANIM_WINDOW_PARMS;
  1384. typedef LPMCI_ANIM_WINDOW_PARMSW LPMCI_ANIM_WINDOW_PARMS;
  1385. #else
  1386. typedef MCI_ANIM_WINDOW_PARMSA MCI_ANIM_WINDOW_PARMS;
  1387. typedef PMCI_ANIM_WINDOW_PARMSA PMCI_ANIM_WINDOW_PARMS;
  1388. typedef LPMCI_ANIM_WINDOW_PARMSA LPMCI_ANIM_WINDOW_PARMS;
  1389. #endif // UNICODE
  1390. #else
  1391. typedef struct tagMCI_ANIM_WINDOW_PARMS {
  1392.     DWORD   dwCallback;
  1393.     HWND    hWnd;
  1394.     WORD    wReserved1;
  1395.     WORD    nCmdShow;
  1396.     WORD    wReserved2;
  1397.     LPCSTR  lpstrText;
  1398. } MCI_ANIM_WINDOW_PARMS, FAR * LPMCI_ANIM_WINDOW_PARMS;
  1399. #endif
  1400. /* parameter block for MCI_PUT, MCI_UPDATE, MCI_WHERE command messages */
  1401. typedef struct tagMCI_ANIM_RECT_PARMS {
  1402.     DWORD   dwCallback;
  1403. #ifdef MCI_USE_OFFEXT
  1404.     POINT   ptOffset;
  1405.     POINT   ptExtent;
  1406. #else   /* ifdef MCI_USE_OFFEXT */
  1407.     RECT    rc;
  1408. #endif  /* ifdef MCI_USE_OFFEXT */
  1409. } MCI_ANIM_RECT_PARMS;
  1410. typedef MCI_ANIM_RECT_PARMS * PMCI_ANIM_RECT_PARMS;
  1411. typedef MCI_ANIM_RECT_PARMS FAR * LPMCI_ANIM_RECT_PARMS;
  1412. /* parameter block for MCI_UPDATE PARMS */
  1413. typedef struct tagMCI_ANIM_UPDATE_PARMS {
  1414.     DWORD   dwCallback;
  1415.     RECT    rc;
  1416.     HDC     hDC;
  1417. } MCI_ANIM_UPDATE_PARMS, *PMCI_ANIM_UPDATE_PARMS, FAR * LPMCI_ANIM_UPDATE_PARMS;
  1418. /* MCI extensions for video overlay devices */
  1419. /* flags for dwFlags parameter of MCI_OPEN command message */
  1420. #define MCI_OVLY_OPEN_WS                0x00010000L
  1421. #define MCI_OVLY_OPEN_PARENT            0x00020000L
  1422. /* flags for dwFlags parameter of MCI_STATUS command message */
  1423. #define MCI_OVLY_STATUS_HWND            0x00004001L
  1424. #define MCI_OVLY_STATUS_STRETCH         0x00004002L
  1425. /* flags for dwFlags parameter of MCI_INFO command message */
  1426. #define MCI_OVLY_INFO_TEXT              0x00010000L
  1427. /* flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block */
  1428. #define MCI_OVLY_GETDEVCAPS_CAN_STRETCH 0x00004001L
  1429. #define MCI_OVLY_GETDEVCAPS_CAN_FREEZE  0x00004002L
  1430. #define MCI_OVLY_GETDEVCAPS_MAX_WINDOWS 0x00004003L
  1431. /* flags for dwFlags parameter of MCI_WINDOW command message */
  1432. #define MCI_OVLY_WINDOW_HWND            0x00010000L
  1433. #define MCI_OVLY_WINDOW_STATE           0x00040000L
  1434. #define MCI_OVLY_WINDOW_TEXT            0x00080000L
  1435. #define MCI_OVLY_WINDOW_ENABLE_STRETCH  0x00100000L
  1436. #define MCI_OVLY_WINDOW_DISABLE_STRETCH 0x00200000L
  1437. /* flags for hWnd parameter of MCI_OVLY_WINDOW_PARMS parameter block */
  1438. #define MCI_OVLY_WINDOW_DEFAULT         0x00000000L
  1439. /* flags for dwFlags parameter of MCI_PUT command message */
  1440. #define MCI_OVLY_RECT                   0x00010000L
  1441. #define MCI_OVLY_PUT_SOURCE             0x00020000L
  1442. #define MCI_OVLY_PUT_DESTINATION        0x00040000L
  1443. #define MCI_OVLY_PUT_FRAME              0x00080000L
  1444. #define MCI_OVLY_PUT_VIDEO              0x00100000L
  1445. /* flags for dwFlags parameter of MCI_WHERE command message */
  1446. #define MCI_OVLY_WHERE_SOURCE           0x00020000L
  1447. #define MCI_OVLY_WHERE_DESTINATION      0x00040000L
  1448. #define MCI_OVLY_WHERE_FRAME            0x00080000L
  1449. #define MCI_OVLY_WHERE_VIDEO            0x00100000L
  1450. /* parameter block for MCI_OPEN command message */
  1451. #ifdef _WIN32
  1452. typedef struct tagMCI_OVLY_OPEN_PARMSA {
  1453.     DWORD   dwCallback;
  1454.     MCIDEVICEID wDeviceID;
  1455.     LPCSTR      lpstrDeviceType;
  1456.     LPCSTR      lpstrElementName;
  1457.     LPCSTR      lpstrAlias;
  1458.     DWORD   dwStyle;
  1459.     HWND    hWndParent;
  1460. } MCI_OVLY_OPEN_PARMSA, *PMCI_OVLY_OPEN_PARMSA, *LPMCI_OVLY_OPEN_PARMSA;
  1461. typedef struct tagMCI_OVLY_OPEN_PARMSW {
  1462.     DWORD   dwCallback;
  1463.     MCIDEVICEID wDeviceID;
  1464.     LPCWSTR     lpstrDeviceType;
  1465.     LPCWSTR     lpstrElementName;
  1466.     LPCWSTR     lpstrAlias;
  1467.     DWORD   dwStyle;
  1468.     HWND    hWndParent;
  1469. } MCI_OVLY_OPEN_PARMSW, *PMCI_OVLY_OPEN_PARMSW, *LPMCI_OVLY_OPEN_PARMSW;
  1470. #ifdef UNICODE
  1471. typedef MCI_OVLY_OPEN_PARMSW MCI_OVLY_OPEN_PARMS;
  1472. typedef PMCI_OVLY_OPEN_PARMSW PMCI_OVLY_OPEN_PARMS;
  1473. typedef LPMCI_OVLY_OPEN_PARMSW LPMCI_OVLY_OPEN_PARMS;
  1474. #else
  1475. typedef MCI_OVLY_OPEN_PARMSA MCI_OVLY_OPEN_PARMS;
  1476. typedef PMCI_OVLY_OPEN_PARMSA PMCI_OVLY_OPEN_PARMS;
  1477. typedef LPMCI_OVLY_OPEN_PARMSA LPMCI_OVLY_OPEN_PARMS;
  1478. #endif // UNICODE
  1479. #else
  1480. typedef struct tagMCI_OVLY_OPEN_PARMS {
  1481.     DWORD   dwCallback;
  1482.     MCIDEVICEID wDeviceID;
  1483.     WORD        wReserved0;
  1484.     LPCSTR      lpstrDeviceType;
  1485.     LPCSTR      lpstrElementName;
  1486.     LPCSTR      lpstrAlias;
  1487.     DWORD       dwStyle;
  1488.     HWND        hWndParent;
  1489.     WORD        wReserved1;
  1490. } MCI_OVLY_OPEN_PARMS, FAR *LPMCI_OVLY_OPEN_PARMS;
  1491. #endif
  1492. /* parameter block for MCI_WINDOW command message */
  1493. #ifdef _WIN32
  1494. typedef struct tagMCI_OVLY_WINDOW_PARMSA {
  1495.     DWORD   dwCallback;
  1496.     HWND    hWnd;
  1497.     UINT    nCmdShow;
  1498.     LPCSTR      lpstrText;
  1499. } MCI_OVLY_WINDOW_PARMSA, *PMCI_OVLY_WINDOW_PARMSA, * LPMCI_OVLY_WINDOW_PARMSA;
  1500. typedef struct tagMCI_OVLY_WINDOW_PARMSW {
  1501.     DWORD   dwCallback;
  1502.     HWND    hWnd;
  1503.     UINT    nCmdShow;
  1504.     LPCWSTR     lpstrText;
  1505. } MCI_OVLY_WINDOW_PARMSW, *PMCI_OVLY_WINDOW_PARMSW, * LPMCI_OVLY_WINDOW_PARMSW;
  1506. #ifdef UNICODE
  1507. typedef MCI_OVLY_WINDOW_PARMSW MCI_OVLY_WINDOW_PARMS;
  1508. typedef PMCI_OVLY_WINDOW_PARMSW PMCI_OVLY_WINDOW_PARMS;
  1509. typedef LPMCI_OVLY_WINDOW_PARMSW LPMCI_OVLY_WINDOW_PARMS;
  1510. #else
  1511. typedef MCI_OVLY_WINDOW_PARMSA MCI_OVLY_WINDOW_PARMS;
  1512. typedef PMCI_OVLY_WINDOW_PARMSA PMCI_OVLY_WINDOW_PARMS;
  1513. typedef LPMCI_OVLY_WINDOW_PARMSA LPMCI_OVLY_WINDOW_PARMS;
  1514. #endif // UNICODE
  1515. #else
  1516. typedef struct tagMCI_OVLY_WINDOW_PARMS {
  1517.     DWORD   dwCallback;
  1518.     HWND    hWnd;
  1519.     WORD    wReserved1;
  1520.     UINT    nCmdShow;
  1521.     WORD    wReserved2;
  1522.     LPCSTR  lpstrText;
  1523. } MCI_OVLY_WINDOW_PARMS, FAR * LPMCI_OVLY_WINDOW_PARMS;
  1524. #endif
  1525. /* parameter block for MCI_PUT, MCI_UPDATE, and MCI_WHERE command messages */
  1526. typedef struct tagMCI_OVLY_RECT_PARMS {
  1527.     DWORD   dwCallback;
  1528. #ifdef MCI_USE_OFFEXT
  1529.     POINT   ptOffset;
  1530.     POINT   ptExtent;
  1531. #else   /* ifdef MCI_USE_OFFEXT */
  1532.     RECT    rc;
  1533. #endif  /* ifdef MCI_USE_OFFEXT */
  1534. } MCI_OVLY_RECT_PARMS, *PMCI_OVLY_RECT_PARMS, FAR * LPMCI_OVLY_RECT_PARMS;
  1535. /* parameter block for MCI_SAVE command message */
  1536. #ifdef _WIN32
  1537. typedef struct tagMCI_OVLY_SAVE_PARMSA {
  1538.     DWORD   dwCallback;
  1539.     LPCSTR      lpfilename;
  1540.     RECT    rc;
  1541. } MCI_OVLY_SAVE_PARMSA, *PMCI_OVLY_SAVE_PARMSA, * LPMCI_OVLY_SAVE_PARMSA;
  1542. typedef struct tagMCI_OVLY_SAVE_PARMSW {
  1543.     DWORD   dwCallback;
  1544.     LPCWSTR     lpfilename;
  1545.     RECT    rc;
  1546. } MCI_OVLY_SAVE_PARMSW, *PMCI_OVLY_SAVE_PARMSW, * LPMCI_OVLY_SAVE_PARMSW;
  1547. #ifdef UNICODE
  1548. typedef MCI_OVLY_SAVE_PARMSW MCI_OVLY_SAVE_PARMS;
  1549. typedef PMCI_OVLY_SAVE_PARMSW PMCI_OVLY_SAVE_PARMS;
  1550. typedef LPMCI_OVLY_SAVE_PARMSW LPMCI_OVLY_SAVE_PARMS;
  1551. #else
  1552. typedef MCI_OVLY_SAVE_PARMSA MCI_OVLY_SAVE_PARMS;
  1553. typedef PMCI_OVLY_SAVE_PARMSA PMCI_OVLY_SAVE_PARMS;
  1554. typedef LPMCI_OVLY_SAVE_PARMSA LPMCI_OVLY_SAVE_PARMS;
  1555. #endif // UNICODE
  1556. #else
  1557. typedef struct tagMCI_OVLY_SAVE_PARMS {
  1558.     DWORD   dwCallback;
  1559.     LPCSTR  lpfilename;
  1560.     RECT    rc;
  1561. } MCI_OVLY_SAVE_PARMS, FAR * LPMCI_OVLY_SAVE_PARMS;
  1562. #endif
  1563. /* parameter block for MCI_LOAD command message */
  1564. #ifdef _WIN32
  1565. typedef struct tagMCI_OVLY_LOAD_PARMSA {
  1566.     DWORD   dwCallback;
  1567.     LPCSTR      lpfilename;
  1568.     RECT    rc;
  1569. } MCI_OVLY_LOAD_PARMSA, *PMCI_OVLY_LOAD_PARMSA, * LPMCI_OVLY_LOAD_PARMSA;
  1570. typedef struct tagMCI_OVLY_LOAD_PARMSW {
  1571.     DWORD   dwCallback;
  1572.     LPCWSTR     lpfilename;
  1573.     RECT    rc;
  1574. } MCI_OVLY_LOAD_PARMSW, *PMCI_OVLY_LOAD_PARMSW, * LPMCI_OVLY_LOAD_PARMSW;
  1575. #ifdef UNICODE
  1576. typedef MCI_OVLY_LOAD_PARMSW MCI_OVLY_LOAD_PARMS;
  1577. typedef PMCI_OVLY_LOAD_PARMSW PMCI_OVLY_LOAD_PARMS;
  1578. typedef LPMCI_OVLY_LOAD_PARMSW LPMCI_OVLY_LOAD_PARMS;
  1579. #else
  1580. typedef MCI_OVLY_LOAD_PARMSA MCI_OVLY_LOAD_PARMS;
  1581. typedef PMCI_OVLY_LOAD_PARMSA PMCI_OVLY_LOAD_PARMS;
  1582. typedef LPMCI_OVLY_LOAD_PARMSA LPMCI_OVLY_LOAD_PARMS;
  1583. #endif // UNICODE
  1584. #else
  1585. typedef struct tagMCI_OVLY_LOAD_PARMS {
  1586.     DWORD   dwCallback;
  1587.     LPCSTR  lpfilename;
  1588.     RECT    rc;
  1589. } MCI_OVLY_LOAD_PARMS, FAR * LPMCI_OVLY_LOAD_PARMS;
  1590. #endif
  1591. #endif  /* ifndef _WIN32_VXD */
  1592. #endif  /* ifndef MMNOMCI */
  1593. /****************************************************************************
  1594. DISPLAY Driver extensions
  1595. ****************************************************************************/
  1596. #ifndef NEWTRANSPARENT
  1597.     #define NEWTRANSPARENT  3           /* use with SetBkMode() */
  1598.     #define QUERYROPSUPPORT 40          /* use to determine ROP support */
  1599. #endif  /* ifndef NEWTRANSPARENT */
  1600. /****************************************************************************
  1601. DIB Driver extensions
  1602. ****************************************************************************/
  1603. #define SELECTDIB       41                      /* DIB.DRV select dib escape */
  1604. #define DIBINDEX(n)     MAKELONG((n),0x10FF)
  1605. /****************************************************************************
  1606. ScreenSaver support
  1607.     The current application will receive a syscommand of SC_SCREENSAVE just
  1608.     before the screen saver is invoked.  If the app wishes to prevent a
  1609.     screen save, return non-zero value, otherwise call DefWindowProc().
  1610. ****************************************************************************/
  1611. #ifndef SC_SCREENSAVE
  1612.     #define SC_SCREENSAVE   0xF140
  1613. #endif  /* ifndef SC_SCREENSAVE */
  1614. #ifdef __cplusplus
  1615. }                       /* End of extern "C" { */
  1616. #endif  /* __cplusplus */
  1617. #ifdef _WIN32
  1618. #include <poppack.h>
  1619. #else
  1620. #ifndef RC_INVOKED
  1621. #pragma pack()
  1622. #endif
  1623. #endif
  1624. #endif  /* _INC_MMSYSTEM */