Annotation of mstools/h/mmsystem.h, revision 1.1

1.1     ! root        1: #ifndef _MMSYSTEM_
        !             2: #define _MMSYSTEM_
        !             3: 
        !             4: /**************************************************************************/
        !             5: 
        !             6: /*++ BUILD Version: 0002    Increment this if a change has global effects
        !             7: 
        !             8: Copyright (c) 1990-91, Microsoft Corporation
        !             9: 
        !            10: Module Name:
        !            11: 
        !            12:     mmsystem.h
        !            13: 
        !            14: Abstract:
        !            15: 
        !            16:     This include file defines all the support for Multimedia applications.
        !            17: 
        !            18:     mmsystem.h must be included IMMEDIATELY AFTER windows.h
        !            19: 
        !            20:     24-Apr-91 MMTIME structure added. NigelT.
        !            21:     3-Dec-91  Wholesale changes.  LaurieGr.
        !            22:     30-Jan-92 Avoid things only in portwin32 LPARAM,HFILE,WPARAM  LaurieGr
        !            23:     19-Feb-92 Brave attempt to avoid collisions with rest of NT LaurieGr
        !            24:     26-Feb-92 RobinSp moved across to mmsystem.h
        !            25:     10-Apr-92 StephenE added Unicode support
        !            26: 
        !            27: --*/
        !            28: 
        !            29: /*    If defined, the following flags inhibit inclusion
        !            30:  *    of the indicated items:
        !            31:  *
        !            32:  *      MMNODRV          - Installable driver support
        !            33:  *      MMNOSOUND        - Sound support
        !            34:  *      MMNOWAVE         - Waveform support
        !            35:  *      MMNOMIDI         - MIDI support
        !            36:  *      MMNOAUX          - Auxiliary audio support
        !            37:  *      MMNOTIMER        - Timer support
        !            38:  *      MMNOJOY          - Joystick support
        !            39:  *      MMNOMCI          - MCI support
        !            40:  *      MMNOMMIO         - Multimedia file I/O support
        !            41:  *      MMNOMMSYSTEM     - General MMSYSTEM functions
        !            42:  */
        !            43: 
        !            44: /****************************************************************************
        !            45: *   Multimedia Systems Window Messages
        !            46: ****************************************************************************/
        !            47: 
        !            48: #ifndef WM_MM_RESERVED_FIRST
        !            49: // taken from windows.h
        !            50: /* The following message range reserved for multi-media */
        !            51: #define WM_MM_RESERVED_FIRST 0x3A0
        !            52: #define WM_MM_RESERVED_LAST  0x3DF
        !            53: #endif
        !            54: 
        !            55: 
        !            56: #define MAXPNAMELEN      32     // max product name length (including NULL)
        !            57: #define MAXERRORLENGTH   128    // max error text length (including final NULL)
        !            58: 
        !            59: // general data types
        !            60: typedef UINT    MMVERSION;      // major (high byte), minor (low byte)
        !            61: typedef UINT    MMRESULT;       // error return code, 0 means no error
        !            62:                                 // call as if(err=xxxx(...)) Error(err); else
        !            63: typedef DWORD   MCIERROR;       // error return code, 0 means no error
        !            64: 
        !            65: /***************************************************************************
        !            66: *   Multimedia time
        !            67: ***************************************************************************/
        !            68: typedef struct tagMMTIME {
        !            69:     UINT    wType;              // the contents of the union
        !            70:     union {
        !            71:         DWORD ms;               // milliseconds
        !            72:         DWORD sample;           // samples
        !            73:         DWORD cb;               // byte count
        !            74:         struct {                // SMPTE
        !            75:             BYTE hour;          // hours
        !            76:             BYTE min;           // minutes  (min is also a macro, so what?)
        !            77:             BYTE sec;           // seconds
        !            78:             BYTE frame;         // frames
        !            79:             BYTE fps;           // frames per second (24, 25, 29(30 drop) or 30)
        !            80:             BYTE dummy;
        !            81:             } smpte;
        !            82:         struct {                // MIDI
        !            83:             DWORD songptrpos;   // song pointer position
        !            84:             } midi;
        !            85:         } u;
        !            86:     } MMTIME;
        !            87: typedef MMTIME       *PMMTIME;
        !            88: typedef MMTIME      *NPMMTIME;
        !            89: typedef MMTIME      *LPMMTIME;
        !            90: 
        !            91: // values for wType field in MMTIME struct
        !            92: #define TIME_MS         0x0001  // time in Milliseconds
        !            93: #define TIME_SAMPLES    0x0002  // number of wave samples
        !            94: #define TIME_BYTES      0x0004  // current byte offset
        !            95: #define TIME_SMPTE      0x0008  // SMPTE time
        !            96: #define TIME_MIDI       0x0010  // MIDI time
        !            97: 
        !            98: /****************************************************************************
        !            99: *                   Multimedia Window Messages
        !           100: ****************************************************************************/
        !           101: 
        !           102: #define MM_JOY1MOVE         0x3A0           // joystick
        !           103: #define MM_JOY2MOVE         0x3A1
        !           104: #define MM_JOY1ZMOVE        0x3A2
        !           105: #define MM_JOY2ZMOVE        0x3A3
        !           106: #define MM_JOY1BUTTONDOWN   0x3B5
        !           107: #define MM_JOY2BUTTONDOWN   0x3B6
        !           108: #define MM_JOY1BUTTONUP     0x3B7
        !           109: #define MM_JOY2BUTTONUP     0x3B8
        !           110: 
        !           111: #define MM_MCINOTIFY        0x3B9           // MCI
        !           112: #define MM_MCISYSTEM_STRING 0x3CA
        !           113: 
        !           114: #define MM_WOM_OPEN         0x3BB           // waveform output
        !           115: #define MM_WOM_CLOSE        0x3BC
        !           116: #define MM_WOM_DONE         0x3BD
        !           117: 
        !           118: #define MM_WIM_OPEN         0x3BE           // waveform input
        !           119: #define MM_WIM_CLOSE        0x3BF
        !           120: #define MM_WIM_DATA         0x3C0
        !           121: 
        !           122: #define MM_MIM_OPEN         0x3C1           // MIDI input
        !           123: #define MM_MIM_CLOSE        0x3C2
        !           124: #define MM_MIM_DATA         0x3C3
        !           125: #define MM_MIM_LONGDATA     0x3C4
        !           126: #define MM_MIM_ERROR        0x3C5
        !           127: #define MM_MIM_LONGERROR    0x3C6
        !           128: 
        !           129: #define MM_MOM_OPEN         0x3C7           // MIDI output
        !           130: #define MM_MOM_CLOSE        0x3C8
        !           131: #define MM_MOM_DONE         0x3C9
        !           132: 
        !           133: 
        !           134: /****************************************************************************
        !           135: 
        !           136:                 String resource number bases (internal use)
        !           137: 
        !           138: ****************************************************************************/
        !           139: 
        !           140: #define MMSYSERR_BASE          0
        !           141: #define WAVERR_BASE            32
        !           142: #define MIDIERR_BASE           64
        !           143: #define TIMERR_BASE            96   // was 128, changed to match Win 31 Sonic
        !           144: #define JOYERR_BASE            160
        !           145: #define MCIERR_BASE            256
        !           146: 
        !           147: #define MCI_STRING_OFFSET      512  // if this number is changed you MUST
        !           148:                                     // alter the MCI_DEVTYPE_... list below
        !           149: #define MCI_VD_OFFSET          1024
        !           150: #define MCI_CD_OFFSET          1088
        !           151: #define MCI_WAVE_OFFSET        1152
        !           152: #define MCI_SEQ_OFFSET         1216
        !           153: 
        !           154: /****************************************************************************
        !           155: 
        !           156:                         General error return values
        !           157: 
        !           158: ****************************************************************************/
        !           159: 
        !           160: #define MMSYSERR_NOERROR      0                    // no error
        !           161: #define MMSYSERR_ERROR        (MMSYSERR_BASE + 1)  // unspecified error
        !           162: #define MMSYSERR_BADDEVICEID  (MMSYSERR_BASE + 2)  // device ID out of range
        !           163: #define MMSYSERR_NOTENABLED   (MMSYSERR_BASE + 3)  // driver failed enable
        !           164: #define MMSYSERR_ALLOCATED    (MMSYSERR_BASE + 4)  // device already allocated
        !           165: #define MMSYSERR_INVALHANDLE  (MMSYSERR_BASE + 5)  // device handle is invalid
        !           166: #define MMSYSERR_NODRIVER     (MMSYSERR_BASE + 6)  // no device driver present
        !           167: #define MMSYSERR_NOMEM        (MMSYSERR_BASE + 7)  // memory allocation error
        !           168: #define MMSYSERR_NOTSUPPORTED (MMSYSERR_BASE + 8)  // function isn't supported
        !           169: #define MMSYSERR_BADERRNUM    (MMSYSERR_BASE + 9)  // error value out of range
        !           170: #define MMSYSERR_INVALFLAG    (MMSYSERR_BASE + 10) // invalid flag passed
        !           171: #define MMSYSERR_INVALPARAM   (MMSYSERR_BASE + 11) // invalid parameter passed
        !           172: #define MMSYSERR_HANDLEBUSY   (MMSYSERR_BASE + 12) // handle being used
        !           173:                                                    // simultaneously on another
        !           174:                                                    // thread (eg callback)
        !           175: #define MMSYSERR_INVALIDALIAS (MMSYSERR_BASE + 13) // "Specified alias not found in WIN.INI
        !           176: #define MMSYSERR_LASTERROR    (MMSYSERR_BASE + 13) // last error in range
        !           177: 
        !           178: 
        !           179: #ifndef MMNODRV
        !           180: /****************************************************************************
        !           181: 
        !           182:                         Installable driver support
        !           183: 
        !           184: ****************************************************************************/
        !           185: 
        !           186: typedef HANDLE HDRVR;
        !           187: 
        !           188: #ifndef DRV_LOAD
        !           189: 
        !           190: /* Driver messages */
        !           191: #define DRV_LOAD            0x0001
        !           192: #define DRV_ENABLE          0x0002
        !           193: #define DRV_OPEN            0x0003
        !           194: #define DRV_CLOSE           0x0004
        !           195: #define DRV_DISABLE         0x0005
        !           196: #define DRV_FREE            0x0006
        !           197: #define DRV_CONFIGURE       0x0007
        !           198: #define DRV_QUERYCONFIGURE  0x0008
        !           199: #define DRV_INSTALL         0x0009
        !           200: #define DRV_REMOVE          0x000A
        !           201: #define DRV_EXITSESSION     0x000B
        !           202: #define DRV_POWER           0x000F
        !           203: #define DRV_RESERVED        0x0800
        !           204: #define DRV_USER            0x4000
        !           205: 
        !           206: /* LPARAM of DRV_CONFIGURE message */
        !           207: typedef struct tagDRVCONFIGINFO {
        !           208:     DWORD   dwDCISize;
        !           209:     LPCWSTR   lpszDCISectionName;
        !           210:     LPCWSTR   lpszDCIAliasName;
        !           211: } DRVCONFIGINFO;
        !           212: typedef DRVCONFIGINFO        *PDRVCONFIGINFO;
        !           213: typedef DRVCONFIGINFO       *NPDRVCONFIGINFO;
        !           214: typedef DRVCONFIGINFO       *LPDRVCONFIGINFO;
        !           215: /* Supported return values for DRV_CONFIGURE message */
        !           216: #define DRVCNF_CANCEL       0x0000
        !           217: #define DRVCNF_OK           0x0001
        !           218: #define DRVCNF_RESTART      0x0002
        !           219: 
        !           220: 
        !           221: // return values from DriverProc() function
        !           222: #define DRV_CANCEL             DRVCNF_CANCEL
        !           223: #define DRV_OK                 DRVCNF_OK
        !           224: #define DRV_RESTART            DRVCNF_RESTART
        !           225: 
        !           226: // installable driver function prototypes
        !           227: LRESULT APIENTRY DrvClose(HDRVR hDriver, LONG lParam1, LONG lParam2);
        !           228: HDRVR   APIENTRY DrvOpen( LPCWSTR szDriverName, LPCWSTR szSectionName,
        !           229:                           LONG lParam2);
        !           230: LRESULT APIENTRY DrvSendMessage( HDRVR hDriver, UINT message, LONG lParam1,
        !           231:                                  LONG lParam2);
        !           232: HANDLE APIENTRY DrvGetModuleHandle( HDRVR hDriver );
        !           233: 
        !           234: #define DRV_MCI_FIRST          DRV_RESERVED
        !           235: #define DRV_MCI_LAST           (DRV_RESERVED + 0xFFF)
        !           236: 
        !           237: #endif
        !           238: #endif  //ifndef MMNODRV
        !           239: 
        !           240: 
        !           241: /****************************************************************************
        !           242: 
        !           243:                           Driver callback support
        !           244: 
        !           245: ****************************************************************************/
        !           246: 
        !           247: // flags used with waveOutOpen(), waveInOpen(), midiInOpen(), and
        !           248: // midiOutOpen() to specify the type of the dwCallback parameter.
        !           249: #define CALLBACK_TYPEMASK   0x00070000l    // callback type mask
        !           250: #define CALLBACK_NULL       0x00000000l    // no callback
        !           251: #define CALLBACK_WINDOW     0x00010000l    // dwCallback is a HWND
        !           252: #define CALLBACK_TASK       0x00020000l    // dwCallback is a HTASK
        !           253: #define CALLBACK_FUNCTION   0x00030000l    // dwCallback is a FARPROC
        !           254: 
        !           255: #ifndef MMNODRV  //ifndef MMNODRV
        !           256: 
        !           257: // driver callback prototypes
        !           258: typedef void DRVCALLBACK
        !           259:                     (HDRVR h, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2);
        !           260: 
        !           261: typedef DRVCALLBACK     *PDRVCALLBACK;
        !           262: typedef DRVCALLBACK     *LPDRVCALLBACK;
        !           263: 
        !           264: #endif  //ifndef MMNODRV
        !           265: 
        !           266: /****************************************************************************
        !           267: 
        !           268:                          Manufacturer and product IDs
        !           269: 
        !           270:     Used with wMid and wPid fields in WAVEOUTCAPS, WAVEINCAPS,
        !           271:     MIDIOUTCAPS, MIDIINCAPS, AUXCAPS, JOYCAPS structures.
        !           272: 
        !           273: ****************************************************************************/
        !           274: 
        !           275: // manufacturer IDs
        !           276: #define MM_MICROSOFT            1       // Microsoft Corp.
        !           277: 
        !           278: // product IDs
        !           279: #define MM_MIDI_MAPPER          1       // MIDI Mapper
        !           280: #define MM_WAVE_MAPPER          2       // Wave Mapper
        !           281: 
        !           282: #define MM_SNDBLST_MIDIOUT      3       // Sound Blaster MIDI output port
        !           283: #define MM_SNDBLST_MIDIIN       4       // Sound Blaster MIDI input port
        !           284: #define MM_SNDBLST_SYNTH        5       // Sound Blaster internal synthesizer
        !           285: #define MM_SNDBLST_WAVEOUT      6       // Sound Blaster waveform output
        !           286: #define MM_SNDBLST_WAVEIN       7       // Sound Blaster waveform input
        !           287: 
        !           288: #define MM_ADLIB                9       // Ad Lib-compatible synthesizer
        !           289: 
        !           290: #define MM_MPU401_MIDIOUT       10      // MPU401-compatible MIDI output port
        !           291: #define MM_MPU401_MIDIIN        11      // MPU401-compatible MIDI input port
        !           292: 
        !           293: #define MM_PC_JOYSTICK          12      // Joystick adapter
        !           294: 
        !           295: 
        !           296: /****************************************************************************
        !           297: *                    General MMSYSTEM support
        !           298: ****************************************************************************/
        !           299: 
        !           300: UINT APIENTRY mmsystemGetVersion(VOID);
        !           301: 
        !           302: // We should point people to using OutputDebugString
        !           303: #define OutputDebugStr OutputDebugString
        !           304: #ifndef OutputDebugStr
        !           305:     VOID APIENTRY OutputDebugStr(LPCSTR);
        !           306: #endif
        !           307: 
        !           308: 
        !           309: /****************************************************************************
        !           310: *                           Sound support
        !           311: *  Note:  It may be fairly obvious that there are two very similar looking
        !           312: *  API calls to provide high level sound support.  The major difference is
        !           313: *  that PlaySound takes a module handle.  The position is to be reviewed.
        !           314: ****************************************************************************/
        !           315: 
        !           316: BOOL APIENTRY sndPlaySoundA( LPCSTR  lpszSoundName, UINT uFlags );
        !           317: BOOL APIENTRY sndPlaySoundW( LPCWSTR lpszSoundName, UINT uFlags );
        !           318: 
        !           319: #ifdef UNICODE
        !           320: #define sndPlaySound    sndPlaySoundW
        !           321: #else
        !           322: #define sndPlaySound    sndPlaySoundA
        !           323: #endif
        !           324: 
        !           325: // flag values for uFlags parameter
        !           326: /**** These are the Win3.1 values ***
        !           327:  *  #define SND_SYNC            0x0000  // play synchronously (default)
        !           328:  *  #define SND_ASYNC           0x0001  // play asynchronously
        !           329:  *  #define SND_NODEFAULT       0x0002  // don't use default sound
        !           330:  *  #define SND_MEMORY          0x0004  // lpszSoundName points to a memory file
        !           331:  *  #define SND_LOOP            0x0008  // loop the sound until next sndPlaySound
        !           332:  *  #define SND_NOSTOP          0x0010  // don't stop any currently playing sound
        !           333:  * NT defines some additional flags.
        !           334:  **************/
        !           335: 
        !           336: #define SND_SYNC       0x00000000   // play synchronously (default)
        !           337: #define SND_ASYNC      0x00000001   // play asynchronously
        !           338: 
        !           339: #define SND_NODEFAULT  0x00000002   // silence not default, if sound not found
        !           340: 
        !           341: #define SND_MEMORY     0x00000004   // lpszSoundName points to a memory file
        !           342: #define SND_ALIAS      0x00010000   // name is a WIN.INI [sounds] entry
        !           343: #define SND_FILENAME   0x00020000   // name is a file name
        !           344: #define SND_RESOURCE   0x00040004   // name is a resource name or atom
        !           345: #define SND_ALIAS_ID   0x00110000   // name is a WIN.INI [sounds] entry identifier
        !           346: 
        !           347: #define SND_ALIAS_ID   0x00110000   // name is a WIN.INI [sounds] entry identifier
        !           348: #define SND_ALIAS_START  0      // must be > 4096 to keep strings in same section of resource file
        !           349: 
        !           350: // sndAlias creates the alias identifier
        !           351: #define sndAlias( ch0, ch1 ) \
        !           352:                 ( SND_ALIAS_START + (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ))
        !           353: 
        !           354: #define SND_ALIAS_SYSTEMASTERISK        sndAlias('S', '*')
        !           355: #define SND_ALIAS_SYSTEMQUESTION        sndAlias('S', '?')
        !           356: #define SND_ALIAS_SYSTEMHAND            sndAlias('S', 'H')
        !           357: #define SND_ALIAS_SYSTEMEXIT            sndAlias('S', 'E')
        !           358: #define SND_ALIAS_SYSTEMSTART           sndAlias('S', 'S')
        !           359: #define SND_ALIAS_SYSTEMWELCOME         sndAlias('S', 'W')
        !           360: #define SND_ALIAS_SYSTEMEXCLAMATION     sndAlias('S', '!')
        !           361: #define SND_ALIAS_SYSTEMDEFAULT         sndAlias('S', 'D')
        !           362: 
        !           363: // 00000004 bit off means behaviour as 3.1 with SND_MEMORY not set
        !           364: // ??? Needs better definition
        !           365: 
        !           366: #define SND_LOOP       0x00000008   // loop the sound until next sndPlaySound
        !           367: #define SND_NOSTOP     0x00000010   // don't stop any currently playing sound
        !           368: #define SND_VALID      0x0000001F  // valid flags          /* ;Internal */
        !           369: 
        !           370: #define SND_NOWAIT     0x00002000   // don't wait if the driver is busy
        !           371: 
        !           372: #define SND_VALIDFLAGS 0x0017201F   // Set of valid flag bits.  Anything outside
        !           373:                                     // this range will raise an error
        !           374: #define SND_RESERVED   0xFF000000   // In particular these flags are reserved
        !           375: 
        !           376: #define SND_TYPE_MASK  0x00170007
        !           377: 
        !           378: /****************************************************************************/
        !           379: 
        !           380: BOOL APIENTRY PlaySoundA( LPCSTR  lpszName, HANDLE hModule, DWORD dwFlags );
        !           381: BOOL APIENTRY PlaySoundW( LPCWSTR lpszName, HANDLE hModule, DWORD dwFlags );
        !           382: 
        !           383: #ifdef UNICODE
        !           384: #define PlaySound   PlaySoundW
        !           385: #else
        !           386: #define PlaySound   PlaySoundA
        !           387: #endif
        !           388: 
        !           389: #ifndef MMNOWAVE
        !           390: /****************************************************************************
        !           391: 
        !           392:                         Waveform audio support
        !           393: 
        !           394: ****************************************************************************/
        !           395: 
        !           396: // waveform audio error return values
        !           397: #define WAVERR_BADFORMAT      (WAVERR_BASE + 0)    // unsupported wave format
        !           398: #define WAVERR_STILLPLAYING   (WAVERR_BASE + 1)    // still something playing
        !           399: #define WAVERR_UNPREPARED     (WAVERR_BASE + 2)    // header not prepared
        !           400: #define WAVERR_SYNC           (WAVERR_BASE + 3)    // device is synchronous
        !           401: #define WAVERR_LASTERROR      (WAVERR_BASE + 3)    // last error in range
        !           402: 
        !           403: // waveform audio data types
        !           404: typedef HANDLE          HWAVE;
        !           405: typedef HWAVE           HWAVEIN;
        !           406: typedef HWAVE           HWAVEOUT;
        !           407: typedef HWAVEIN         *LPHWAVEIN;
        !           408: typedef HWAVEOUT        *LPHWAVEOUT;
        !           409: typedef DRVCALLBACK     WAVECALLBACK;
        !           410: typedef WAVECALLBACK    *LPWAVECALLBACK;
        !           411: 
        !           412: // wave callback messages
        !           413: #define WOM_OPEN        MM_WOM_OPEN
        !           414: #define WOM_CLOSE       MM_WOM_CLOSE
        !           415: #define WOM_DONE        MM_WOM_DONE
        !           416: #define WIM_OPEN        MM_WIM_OPEN
        !           417: #define WIM_CLOSE       MM_WIM_CLOSE
        !           418: #define WIM_DATA        MM_WIM_DATA
        !           419: 
        !           420: // device ID for wave device mapper
        !           421: #define WAVE_MAPPER     (-1)
        !           422: 
        !           423: // flags for dwFlags parameter in waveOutOpen() and waveInOpen()
        !           424: #define  WAVE_FORMAT_QUERY     0x00000001
        !           425: #define  WAVE_ALLOWSYNC        0x00000002
        !           426: #define  WAVE_VALID            0x00000003       /* ;Internal */
        !           427: 
        !           428: // wave data block header
        !           429: typedef struct wavehdr_tag {
        !           430:     LPSTR                 lpData;          // pointer to locked data buffer
        !           431:     DWORD                 dwBufferLength;  // length of data buffer
        !           432:     DWORD                 dwBytesRecorded; // used for input only
        !           433:     DWORD                 dwUser;          // for client's use
        !           434:     DWORD                 dwFlags;         // assorted flags (see defines)
        !           435:     DWORD                 dwLoops;         // loop control counter
        !           436:     struct wavehdr_tag  * lpNext;          // reserved for driver
        !           437:     DWORD                 reserved;        // reserved for driver
        !           438: } WAVEHDR;
        !           439: typedef WAVEHDR       *PWAVEHDR;
        !           440: typedef WAVEHDR      *NPWAVEHDR;
        !           441: typedef WAVEHDR      *LPWAVEHDR;
        !           442: 
        !           443: // flags for dwFlags field of WAVEHDR
        !           444: #define WHDR_DONE       0x00000001  // done bit
        !           445: #define WHDR_PREPARED   0x00000002  // set if this header has been prepared
        !           446: #define WHDR_BEGINLOOP  0x00000004  // loop start block
        !           447: #define WHDR_ENDLOOP    0x00000008  // loop end block
        !           448: #define WHDR_INQUEUE    0x00000010  // reserved for driver
        !           449: #define WHDR_VALID      0x0000001F  // valid flags      /* ;Internal */
        !           450: 
        !           451: // waveform output device capabilities structure (ASCII )
        !           452: typedef struct tagWAVEOUTCAPSA {
        !           453:     WORD    wMid;                  // manufacturer ID
        !           454:     WORD    wPid;                  // product ID
        !           455:     MMVERSION vDriverVersion;      // version of the driver
        !           456:     CHAR    szPname[MAXPNAMELEN];  // product name (NULL terminated string)
        !           457:     DWORD   dwFormats;             // formats supported
        !           458:     WORD    wChannels;             // number of sources supported
        !           459:     DWORD   dwSupport;             // functionality supported by driver
        !           460: } WAVEOUTCAPSA;
        !           461: 
        !           462: // waveform output device capabilities structure (UNICODE )
        !           463: typedef struct tagWAVEOUTCAPSW {
        !           464:     WORD    wMid;                  // manufacturer ID
        !           465:     WORD    wPid;                  // product ID
        !           466:     MMVERSION vDriverVersion;      // version of the driver
        !           467:     WCHAR   szPname[MAXPNAMELEN];  // product name (NULL terminated string)
        !           468:     DWORD   dwFormats;             // formats supported
        !           469:     WORD    wChannels;             // number of sources supported
        !           470:     DWORD   dwSupport;             // functionality supported by driver
        !           471: } WAVEOUTCAPSW;
        !           472: 
        !           473: typedef WAVEOUTCAPSA     *PWAVEOUTCAPSA;
        !           474: typedef WAVEOUTCAPSA     *NPWAVEOUTCAPSA;
        !           475: typedef WAVEOUTCAPSA     *LPWAVEOUTCAPSA;
        !           476: 
        !           477: typedef WAVEOUTCAPSW     *PWAVEOUTCAPSW;
        !           478: typedef WAVEOUTCAPSW     *NPWAVEOUTCAPSW;
        !           479: typedef WAVEOUTCAPSW     *LPWAVEOUTCAPSW;
        !           480: 
        !           481: #ifdef UNICODE
        !           482: #define WAVEOUTCAPS     WAVEOUTCAPSW
        !           483: #define NPWAVEOUTCAPS   NPWAVEOUTCAPSW
        !           484: #define LPWAVEOUTCAPS   LPWAVEOUTCAPSW
        !           485: #else
        !           486: #define WAVEOUTCAPS     WAVEOUTCAPSA
        !           487: #define NPWAVEOUTCAPS   NPWAVEOUTCAPSA
        !           488: #define LPWAVEOUTCAPS   LPWAVEOUTCAPSA
        !           489: #endif
        !           490: 
        !           491: 
        !           492: // flags for dwSupport field of WAVEOUTCAPS
        !           493: #define WAVECAPS_PITCH        0x00000001  // supports pitch control
        !           494: #define WAVECAPS_PLAYBACKRATE 0x00000002  // supports playback rate control
        !           495: #define WAVECAPS_VOLUME       0x00000004  // supports volume control
        !           496: #define WAVECAPS_LRVOLUME     0x00000008  // separate left-right volume control
        !           497: #define WAVECAPS_SYNC         0x00000010
        !           498: 
        !           499: // waveform input device capabilities structure (ASCII)
        !           500: typedef struct tagWAVEINCAPSA {
        !           501:     WORD    wMid;                    // manufacturer ID
        !           502:     WORD    wPid;                    // product ID
        !           503:     MMVERSION vDriverVersion;        // version of the driver
        !           504:     CHAR    szPname[MAXPNAMELEN];    // product name (NULL terminated string)
        !           505:     DWORD   dwFormats;               // formats supported
        !           506:     WORD    wChannels;               // number of channels supported
        !           507: } WAVEINCAPSA, *PWAVEINCAPSA, *LPWAVEINCAPSA;
        !           508: 
        !           509: // waveform input device capabilities structure (UNICODE)
        !           510: typedef struct tagWAVEINCAPSW {
        !           511:     WORD    wMid;                    // manufacturer ID
        !           512:     WORD    wPid;                    // product ID
        !           513:     MMVERSION vDriverVersion;        // version of the driver
        !           514:     WCHAR   szPname[MAXPNAMELEN];    // product name (NULL terminated string)
        !           515:     DWORD   dwFormats;               // formats supported
        !           516:     WORD    wChannels;               // number of channels supported
        !           517: } WAVEINCAPSW, *PWAVEINCAPSW, *LPWAVEINCAPSW;
        !           518: 
        !           519: #ifdef UNICODE
        !           520: #define WAVEINCAPS      WAVEINCAPSW
        !           521: #define LPWAVEINCAPS    LPWAVEINCAPSW
        !           522: #define PWAVEINCAPS     PWAVEINCAPSW
        !           523: #else
        !           524: #define WAVEINCAPS      WAVEINCAPSA
        !           525: #define PWAVEINCAPS     PWAVEINCAPSA
        !           526: #define LPWAVEINCAPS    LPWAVEINCAPSA
        !           527: #endif
        !           528: 
        !           529: // defines for dwFormat field of WAVEINCAPS and WAVEOUTCAPS
        !           530: #define WAVE_INVALIDFORMAT     0x00000000       // invalid format
        !           531: #define WAVE_FORMAT_1M08       0x00000001       // 11.025 kHz, Mono,   8-bit
        !           532: #define WAVE_FORMAT_1S08       0x00000002       // 11.025 kHz, Stereo, 8-bit
        !           533: #define WAVE_FORMAT_1M16       0x00000004       // 11.025 kHz, Mono,   16-bit
        !           534: #define WAVE_FORMAT_1S16       0x00000008       // 11.025 kHz, Stereo, 16-bit
        !           535: #define WAVE_FORMAT_2M08       0x00000010       // 22.05  kHz, Mono,   8-bit
        !           536: #define WAVE_FORMAT_2S08       0x00000020       // 22.05  kHz, Stereo, 8-bit
        !           537: #define WAVE_FORMAT_2M16       0x00000040       // 22.05  kHz, Mono,   16-bit
        !           538: #define WAVE_FORMAT_2S16       0x00000080       // 22.05  kHz, Stereo, 16-bit
        !           539: #define WAVE_FORMAT_4M08       0x00000100       // 44.1   kHz, Mono,   8-bit
        !           540: #define WAVE_FORMAT_4S08       0x00000200       // 44.1   kHz, Stereo, 8-bit
        !           541: #define WAVE_FORMAT_4M16       0x00000400       // 44.1   kHz, Mono,   16-bit
        !           542: #define WAVE_FORMAT_4S16       0x00000800       // 44.1   kHz, Stereo, 16-bit
        !           543: 
        !           544: // flags for wFormatTag field of WAVEFORMAT
        !           545: #define WAVE_FORMAT_PCM     1    // Needed in resource files
        !           546: 
        !           547: #ifndef RC_INVOKED             // RC gets upset by #pragma pack()
        !           548: 
        !           549: // general waveform format (information common to all formats)
        !           550: // as read from a file.  See Multimedia file formats in Programmer Reference
        !           551: #pragma pack(2)                // File format is not double word aligned
        !           552: typedef struct {
        !           553:     WORD    wFormatTag;        // format type
        !           554:     WORD    nChannels;         // number of channels (i.e. mono, stereo, etc.)
        !           555:     DWORD   nSamplesPerSec;    // sample rate
        !           556:     DWORD   nAvgBytesPerSec;   // for buffer estimation
        !           557:     WORD    nBlockAlign;       // block size of data
        !           558: } WAVEFORMAT;
        !           559: typedef WAVEFORMAT       *PWAVEFORMAT;
        !           560: typedef WAVEFORMAT      *NPWAVEFORMAT;
        !           561: typedef WAVEFORMAT      *LPWAVEFORMAT;
        !           562: // NOTE:  The fields in the structure above are copied into
        !           563: // the MCI_WAVE_SET_PARMS structure during execution
        !           564: 
        !           565: // specific waveform format for PCM data
        !           566: typedef struct tagPCMWAVEFORMAT {
        !           567:     WAVEFORMAT  wf;
        !           568:     WORD        wBitsPerSample;        // corresponds to MCI_WAVE_SET_.... structure
        !           569: } PCMWAVEFORMAT;
        !           570: typedef PCMWAVEFORMAT       *PPCMWAVEFORMAT;
        !           571: typedef PCMWAVEFORMAT      *NPPCMWAVEFORMAT;
        !           572: typedef PCMWAVEFORMAT      *LPPCMWAVEFORMAT;
        !           573: 
        !           574: #pragma pack()                    // revert to command line packing
        !           575: 
        !           576: // waveform audio function prototypes
        !           577: UINT APIENTRY waveOutGetNumDevs(VOID);
        !           578: 
        !           579: MMRESULT APIENTRY waveOutGetDevCapsA(UINT uDeviceID, LPWAVEOUTCAPSA lpCaps,
        !           580:     UINT uSize);
        !           581: MMRESULT APIENTRY waveOutGetDevCapsW(UINT uDeviceID, LPWAVEOUTCAPSW lpCaps,
        !           582:     UINT uSize);
        !           583: #ifdef UNICODE
        !           584: #define waveOutGetDevCaps       waveOutGetDevCapsW
        !           585: #else
        !           586: #define waveOutGetDevCaps       waveOutGetDevCapsA
        !           587: #endif
        !           588: 
        !           589: MMRESULT APIENTRY waveOutGetVolume(UINT uDeviceID, LPDWORD lpdwVolume);
        !           590: MMRESULT APIENTRY waveOutSetVolume(UINT uDeviceID, DWORD dwVolume);
        !           591: 
        !           592: MMRESULT APIENTRY waveOutGetErrorTextA(MMRESULT err, LPSTR lpText, UINT uSize);
        !           593: MMRESULT APIENTRY waveOutGetErrorTextW(MMRESULT err, LPWSTR lpText, UINT uSize);
        !           594: #ifdef UNICODE
        !           595: #define waveOutGetErrorText     waveOutGetErrorTextW
        !           596: #else
        !           597: #define waveOutGetErrorText     waveOutGetErrorTextA
        !           598: #endif
        !           599: 
        !           600: MMRESULT APIENTRY waveOutOpen(LPHWAVEOUT lphWaveOut, UINT uDeviceID,
        !           601:     LPWAVEFORMAT lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
        !           602: MMRESULT APIENTRY waveOutClose(HWAVEOUT hWaveOut);
        !           603: MMRESULT APIENTRY waveOutPrepareHeader(HWAVEOUT hWaveOut,
        !           604:      LPWAVEHDR lpWaveOutHdr, UINT uSize);
        !           605: MMRESULT APIENTRY waveOutUnprepareHeader(HWAVEOUT hWaveOut,
        !           606:     LPWAVEHDR lpWaveOutHdr, UINT uSize);
        !           607: MMRESULT APIENTRY waveOutWrite(HWAVEOUT hWaveOut, LPWAVEHDR lpWaveOutHdr,
        !           608:     UINT uSize);
        !           609: MMRESULT APIENTRY waveOutPause(HWAVEOUT hWaveOut);
        !           610: MMRESULT APIENTRY waveOutRestart(HWAVEOUT hWaveOut);
        !           611: MMRESULT APIENTRY waveOutReset(HWAVEOUT hWaveOut);
        !           612: MMRESULT APIENTRY waveOutBreakLoop(HWAVEOUT hWaveOut);
        !           613: MMRESULT APIENTRY waveOutGetPosition(HWAVEOUT hWaveOut, LPMMTIME lpInfo,
        !           614:     UINT uSize);
        !           615: MMRESULT APIENTRY waveOutGetPitch(HWAVEOUT hWaveOut, LPDWORD lpdwPitch);
        !           616: MMRESULT APIENTRY waveOutSetPitch(HWAVEOUT hWaveOut, DWORD dwPitch);
        !           617: MMRESULT APIENTRY waveOutGetPlaybackRate(HWAVEOUT hWaveOut, LPDWORD lpdwRate);
        !           618: MMRESULT APIENTRY waveOutSetPlaybackRate(HWAVEOUT hWaveOut, DWORD dwRate);
        !           619: MMRESULT APIENTRY waveOutGetID(HWAVEOUT hWaveOut, PUINT lpuDeviceID);
        !           620: MMRESULT APIENTRY waveOutMessage(HWAVEOUT hWaveOut, UINT msg, DWORD dw1, DWORD dw2);
        !           621: UINT APIENTRY waveInGetNumDevs(VOID);
        !           622: 
        !           623: MMRESULT APIENTRY waveInGetDevCapsA(UINT uDeviceID, LPWAVEINCAPSA lpCaps,
        !           624:     UINT uSize);
        !           625: MMRESULT APIENTRY waveInGetDevCapsW(UINT uDeviceID, LPWAVEINCAPSW lpCaps,
        !           626:     UINT uSize);
        !           627: #ifdef UNICODE
        !           628: #define waveInGetDevCaps        waveInGetDevCapsW
        !           629: #else
        !           630: #define waveInGetDevCaps        waveInGetDevCapsA
        !           631: #endif
        !           632: 
        !           633: 
        !           634: MMRESULT APIENTRY waveInGetErrorTextA(MMRESULT err, LPSTR lpText, UINT uSize);
        !           635: MMRESULT APIENTRY waveInGetErrorTextW(MMRESULT err, LPWSTR lpText, UINT uSize);
        !           636: #ifdef UNICODE
        !           637: #define waveInGetErrorText     waveInGetErrorTextW
        !           638: #else
        !           639: #define waveInGetErrorText     waveInGetErrorTextA
        !           640: #endif
        !           641: 
        !           642: MMRESULT APIENTRY waveInOpen(LPHWAVEIN lphWaveIn, UINT uDeviceID,
        !           643:     LPWAVEFORMAT lpFormat, DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
        !           644: MMRESULT APIENTRY waveInClose(HWAVEIN hWaveIn);
        !           645: MMRESULT APIENTRY waveInPrepareHeader(HWAVEIN hWaveIn,
        !           646:     LPWAVEHDR lpWaveInHdr, UINT uSize);
        !           647: MMRESULT APIENTRY waveInUnprepareHeader(HWAVEIN hWaveIn,
        !           648:     LPWAVEHDR lpWaveInHdr, UINT uSize);
        !           649: MMRESULT APIENTRY waveInAddBuffer(HWAVEIN hWaveIn,
        !           650:     LPWAVEHDR lpWaveInHdr, UINT uSize);
        !           651: MMRESULT APIENTRY waveInStart(HWAVEIN hWaveIn);
        !           652: MMRESULT APIENTRY waveInStop(HWAVEIN hWaveIn);
        !           653: MMRESULT APIENTRY waveInReset(HWAVEIN hWaveIn);
        !           654: MMRESULT APIENTRY waveInGetPosition(HWAVEIN hWaveIn, LPMMTIME lpInfo,
        !           655:     UINT uSize);
        !           656: MMRESULT APIENTRY waveInGetID(HWAVEIN hWaveIn, PUINT lpuDeviceID);
        !           657: MMRESULT APIENTRY waveInMessage(HWAVEIN hWaveIn, UINT msg, DWORD dw1, DWORD dw2);
        !           658: 
        !           659: #endif /* RC_INVOKED */
        !           660: #endif  //ifndef MMNOWAVE
        !           661: 
        !           662: #ifndef MMNOMIDI
        !           663: /****************************************************************************
        !           664: 
        !           665:                             MIDI audio support
        !           666: 
        !           667: ****************************************************************************/
        !           668: 
        !           669: // MIDI error return values
        !           670: #define MIDIERR_UNPREPARED    (MIDIERR_BASE + 0)   /* header not prepared */
        !           671: #define MIDIERR_STILLPLAYING  (MIDIERR_BASE + 1)   /* still something playing */
        !           672: #define MIDIERR_NOMAP         (MIDIERR_BASE + 2)   /* no current map */
        !           673: #define MIDIERR_NOTREADY      (MIDIERR_BASE + 3)   /* hardware is still busy */
        !           674: #define MIDIERR_NODEVICE      (MIDIERR_BASE + 4)   /* port no longer connected */
        !           675: #define MIDIERR_INVALIDSETUP  (MIDIERR_BASE + 5)   /* invalid setup */
        !           676: #define MIDIERR_LASTERROR     (MIDIERR_BASE + 5)   /* last error in range */
        !           677: 
        !           678: // MIDI audio data types
        !           679: typedef HANDLE  HMIDI;
        !           680: typedef HMIDI   HMIDIIN;
        !           681: typedef HMIDI   HMIDIOUT;
        !           682: typedef HMIDIIN *LPHMIDIIN;
        !           683: typedef HMIDIOUT *LPHMIDIOUT;
        !           684: typedef DRVCALLBACK MIDICALLBACK;
        !           685: typedef MIDICALLBACK *LPMIDICALLBACK;
        !           686: #define MIDIPATCHSIZE   128
        !           687: typedef WORD PATCHARRAY[MIDIPATCHSIZE];
        !           688: typedef WORD     *LPPATCHARRAY;
        !           689: typedef WORD KEYARRAY[MIDIPATCHSIZE];
        !           690: typedef WORD     *LPKEYARRAY;
        !           691: 
        !           692: // MIDI callback messages
        !           693: #define MIM_OPEN        MM_MIM_OPEN
        !           694: #define MIM_CLOSE       MM_MIM_CLOSE
        !           695: #define MIM_DATA        MM_MIM_DATA
        !           696: #define MIM_LONGDATA    MM_MIM_LONGDATA
        !           697: #define MIM_ERROR       MM_MIM_ERROR
        !           698: #define MIM_LONGERROR   MM_MIM_LONGERROR
        !           699: #define MOM_OPEN        MM_MOM_OPEN
        !           700: #define MOM_CLOSE       MM_MOM_CLOSE
        !           701: #define MOM_DONE        MM_MOM_DONE
        !           702: 
        !           703: // device ID for MIDI mapper
        !           704: #define MIDIMAPPER     (-1)
        !           705: #define MIDI_MAPPER    (-1)
        !           706: 
        !           707: // flags for wFlags parm of midiOutCachePatches(), midiOutCacheDrumPatches()
        !           708: #define MIDI_CACHE_ALL      1
        !           709: #define MIDI_CACHE_BESTFIT  2
        !           710: #define MIDI_CACHE_QUERY    3
        !           711: #define MIDI_UNCACHE        4
        !           712: #define MIDI_CACHE_VALID    (MIDI_CACHE_ALL | MIDI_CACHE_BESTFIT | MIDI_CACHE_QUERY | MIDI_UNCACHE) /* ;Internal */
        !           713: 
        !           714: // MIDI output device capabilities structure (ASCII)
        !           715: typedef struct tagMIDIOUTCAPSA {
        !           716:     WORD    wMid;                  // manufacturer ID
        !           717:     WORD    wPid;                  // product ID
        !           718:     MMVERSION vDriverVersion;      // version of the driver
        !           719:     CHAR    szPname[MAXPNAMELEN];  // product name (NULL terminated string)
        !           720:     WORD    wTechnology;           // type of device
        !           721:     WORD    wVoices;               // # of voices (internal synth only)
        !           722:     WORD    wNotes;                // max # of notes (internal synth only)
        !           723:     WORD    wChannelMask;          // channels used (internal synth only)
        !           724:     DWORD   dwSupport;             // functionality supported by driver
        !           725: } MIDIOUTCAPSA;
        !           726: typedef MIDIOUTCAPSA    *PMIDIOUTCAPSA;
        !           727: typedef MIDIOUTCAPSA    *NPMIDIOUTCAPSA;
        !           728: typedef MIDIOUTCAPSA    *LPMIDIOUTCAPSA;
        !           729: 
        !           730: // MIDI output device capabilities structure (UNICODE)
        !           731: typedef struct tagMIDIOUTCAPSW {
        !           732:     WORD    wMid;                  // manufacturer ID
        !           733:     WORD    wPid;                  // product ID
        !           734:     MMVERSION vDriverVersion;      // version of the driver
        !           735:     WCHAR   szPname[MAXPNAMELEN];  // product name (NULL terminated string)
        !           736:     WORD    wTechnology;           // type of device
        !           737:     WORD    wVoices;               // # of voices (internal synth only)
        !           738:     WORD    wNotes;                // max # of notes (internal synth only)
        !           739:     WORD    wChannelMask;          // channels used (internal synth only)
        !           740:     DWORD   dwSupport;             // functionality supported by driver
        !           741: } MIDIOUTCAPSW;
        !           742: typedef MIDIOUTCAPSW    *PMIDIOUTCAPSW;
        !           743: typedef MIDIOUTCAPSW    *NPMIDIOUTCAPSW;
        !           744: typedef MIDIOUTCAPSW    *LPMIDIOUTCAPSW;
        !           745: 
        !           746: #ifdef UNICODE
        !           747: #define MIDIOUTCAPS     MIDIOUTCAPSW
        !           748: #define NPMIDIOUTCAPS   NPMIDIOUTCAPSW
        !           749: #define LPMIDIOUTCAPS   LPMIDIOUTCAPSW
        !           750: #else
        !           751: #define MIDIOUTCAPS     MIDIOUTCAPSA
        !           752: #define NPMIDIOUTCAPS   NPMIDIOUTCAPSA
        !           753: #define LPMIDIOUTCAPS   LPMIDIOUTCAPSA
        !           754: #endif
        !           755: 
        !           756: // flags for wTechnology field of MIDIOUTCAPS structure
        !           757: #define MOD_MIDIPORT    1  // output port
        !           758: #define MOD_SYNTH       2  // generic internal synth
        !           759: #define MOD_SQSYNTH     3  // square wave internal synth
        !           760: #define MOD_FMSYNTH     4  // FM internal synth
        !           761: #define MOD_MAPPER      5  // MIDI mapper
        !           762: 
        !           763: // flags for dwSupport field of MIDIOUTCAPS
        !           764: #define MIDICAPS_VOLUME     0x00000001  // supports volume control
        !           765: #define MIDICAPS_LRVOLUME   0x00000002  // separate left-right volume control
        !           766: #define MIDICAPS_CACHE      0x00000004
        !           767: 
        !           768: // MIDI input device capabilities structure (ASCII)
        !           769: typedef struct tagMIDIINCAPSA {
        !           770:     WORD        wMid;                   // manufacturer ID
        !           771:     WORD        wPid;                   // product ID
        !           772:     MMVERSION   vDriverVersion;         // version of the driver
        !           773:     CHAR        szPname[MAXPNAMELEN];   // product name (NULL terminated string)
        !           774: } MIDIINCAPSA;
        !           775: typedef MIDIINCAPSA     *PMIDIINCAPSA;
        !           776: typedef MIDIINCAPSA     *NPMIDIINCAPSA;
        !           777: typedef MIDIINCAPSA     *LPMIDIINCAPSA;
        !           778: 
        !           779: // MIDI input device capabilities structure (UNICODE)
        !           780: typedef struct tagMIDIINCAPSW {
        !           781:     WORD        wMid;                   // manufacturer ID
        !           782:     WORD        wPid;                   // product ID
        !           783:     MMVERSION   vDriverVersion;         // version of the driver
        !           784:     WCHAR       szPname[MAXPNAMELEN];   // product name (NULL terminated string)
        !           785: } MIDIINCAPSW;
        !           786: typedef MIDIINCAPSW     *PMIDIINCAPSW;
        !           787: typedef MIDIINCAPSW     *NPMIDIINCAPSW;
        !           788: typedef MIDIINCAPSW     *LPMIDIINCAPSW;
        !           789: 
        !           790: #ifdef UNICODE
        !           791: #define MIDIINCAPS      MIDIINCAPSW
        !           792: #define NPMIDIINCAPS    NPMIDIINCAPSW
        !           793: #define LPMIDIINCAPS    LPMIDIINCAPSW
        !           794: #else
        !           795: #define MIDIINCAPS      MIDIINCAPSA
        !           796: #define NPMIDIINCAPS    NPMIDIINCAPSA
        !           797: #define LPMIDIINCAPS    LPMIDIINCAPSA
        !           798: #endif
        !           799: 
        !           800: // MIDI data block header
        !           801: typedef struct midihdr_tag {
        !           802:     LPSTR       lpData;               // pointer to locked data block
        !           803:     DWORD       dwBufferLength;       // length of data in data block
        !           804:     DWORD       dwBytesRecorded;      // used for input only
        !           805:     DWORD       dwUser;               // for client's use
        !           806:     DWORD       dwFlags;              // assorted flags (see defines)
        !           807:     struct midihdr_tag *lpNext;   // reserved for driver
        !           808:     DWORD       reserved;             // reserved for driver
        !           809: } MIDIHDR;
        !           810: typedef MIDIHDR       *PMIDIHDR;
        !           811: typedef MIDIHDR      *NPMIDIHDR;
        !           812: typedef MIDIHDR      *LPMIDIHDR;
        !           813: 
        !           814: // flags for dwFlags field of MIDIHDR structure
        !           815: #define MHDR_DONE       0x00000001       // done bit
        !           816: #define MHDR_PREPARED   0x00000002       // set if header prepared
        !           817: #define MHDR_INQUEUE    0x00000004       // reserved for driver
        !           818: #define MHDR_VALID      0x00000007       // valid flags /* ;Internal */
        !           819: 
        !           820: // MIDI function prototypes
        !           821: UINT APIENTRY midiOutGetNumDevs(VOID);
        !           822: 
        !           823: MMRESULT APIENTRY midiOutGetDevCapsW(UINT uDeviceID,    // UNICODE version
        !           824:     LPMIDIOUTCAPSW lpCaps, UINT uSize);
        !           825: 
        !           826: MMRESULT APIENTRY midiOutGetDevCapsA(UINT uDeviceID,    // ASCII version
        !           827:     LPMIDIOUTCAPSA lpCaps, UINT uSize);
        !           828: 
        !           829: #ifdef UNICODE
        !           830: #define midiOutGetDevCaps   midiOutGetDevCapsW
        !           831: #else
        !           832: #define midiOutGetDevCaps   midiOutGetDevCapsA
        !           833: #endif
        !           834: 
        !           835: MMRESULT APIENTRY midiOutGetVolume(UINT uDeviceID, LPDWORD lpdwVolume);
        !           836: MMRESULT APIENTRY midiOutSetVolume(UINT uDeviceID, DWORD dwVolume);
        !           837: 
        !           838: MMRESULT APIENTRY midiOutGetErrorTextA(MMRESULT err, LPSTR lpText, UINT uSize);
        !           839: MMRESULT APIENTRY midiOutGetErrorTextW(MMRESULT err, LPWSTR lpText, UINT uSize);
        !           840: #ifdef UNICODE
        !           841: #define midiOutGetErrorText midiOutGetErrorTextW
        !           842: #else
        !           843: #define midiOutGetErrorText midiOutGetErrorTextA
        !           844: #endif
        !           845: 
        !           846: 
        !           847: MMRESULT APIENTRY midiOutOpen(LPHMIDIOUT lphMidiOut, UINT uDeviceID,
        !           848:     DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
        !           849: MMRESULT APIENTRY midiOutClose(HMIDIOUT hMidiOut);
        !           850: MMRESULT APIENTRY midiOutPrepareHeader(HMIDIOUT hMidiOut,
        !           851:     LPMIDIHDR lpMidiOutHdr, UINT uSize);
        !           852: MMRESULT APIENTRY midiOutUnprepareHeader(HMIDIOUT hMidiOut,
        !           853:     LPMIDIHDR lpMidiOutHdr, UINT uSize);
        !           854: MMRESULT APIENTRY midiOutShortMsg(HMIDIOUT hMidiOut, DWORD dwMsg);
        !           855: MMRESULT APIENTRY midiOutLongMsg(HMIDIOUT hMidiOut,
        !           856:     LPMIDIHDR lpMidiOutHdr, UINT uSize);
        !           857: MMRESULT APIENTRY midiOutReset(HMIDIOUT hMidiOut);
        !           858: MMRESULT APIENTRY midiOutCachePatches(HMIDIOUT hMidiOut,
        !           859:     UINT uBank, LPWORD lpPatchArray, UINT uFlags);
        !           860: MMRESULT APIENTRY midiOutCacheDrumPatches(HMIDIOUT hMidiOut,
        !           861:     UINT uPatch, LPWORD lpKeyArray, UINT uFlags);
        !           862: MMRESULT APIENTRY midiOutGetID(HMIDIOUT hMidiOut, PUINT lpuDeviceID);
        !           863: MMRESULT APIENTRY
        !           864:              midiOutMessage(HMIDIOUT hMidiOut, UINT msg, DWORD dw1, DWORD dw2);
        !           865: 
        !           866: UINT APIENTRY midiInGetNumDevs(VOID);
        !           867: 
        !           868: MMRESULT APIENTRY midiInGetDevCapsW(UINT uDeviceID,     // UNICODE version
        !           869:     LPMIDIINCAPSW lpCaps, UINT uSize);
        !           870: 
        !           871: MMRESULT APIENTRY midiInGetDevCapsA(UINT uDeviceID,     // ASCII version
        !           872:     LPMIDIINCAPSA lpCaps, UINT uSize);
        !           873: 
        !           874: #ifdef UNICODE
        !           875: #define midiInGetDevCaps   midiInGetDevCapsW
        !           876: #else
        !           877: #define midiInGetDevCaps   midiInGetDevCapsA
        !           878: #endif
        !           879: 
        !           880: MMRESULT APIENTRY midiInGetErrorTextW(MMRESULT err, LPWSTR lpText, UINT uSize);
        !           881: 
        !           882: MMRESULT APIENTRY midiInGetErrorTextA(MMRESULT err, LPSTR lpText, UINT uSize);
        !           883: 
        !           884: #ifdef UNICODE
        !           885: #define midiInGetErrorText midiInGetErrorTextW
        !           886: #else
        !           887: #define midiInGetErrorText midiInGetErrorTextA
        !           888: #endif
        !           889: 
        !           890: MMRESULT APIENTRY midiInOpen(LPHMIDIIN lphMidiIn, UINT uDeviceID,
        !           891:     DWORD dwCallback, DWORD dwInstance, DWORD dwFlags);
        !           892: MMRESULT APIENTRY midiInClose(HMIDIIN hMidiIn);
        !           893: MMRESULT APIENTRY midiInPrepareHeader(HMIDIIN hMidiIn,
        !           894:     LPMIDIHDR lpMidiInHdr, UINT uSize);
        !           895: MMRESULT APIENTRY midiInUnprepareHeader(HMIDIIN hMidiIn,
        !           896:     LPMIDIHDR lpMidiInHdr, UINT uSize);
        !           897: MMRESULT APIENTRY midiInAddBuffer(HMIDIIN hMidiIn,
        !           898:     LPMIDIHDR lpMidiInHdr, UINT uSize);
        !           899: MMRESULT APIENTRY midiInStart(HMIDIIN hMidiIn);
        !           900: MMRESULT APIENTRY midiInStop(HMIDIIN hMidiIn);
        !           901: MMRESULT APIENTRY midiInReset(HMIDIIN hMidiIn);
        !           902: MMRESULT APIENTRY midiInGetID(HMIDIIN hMidiIn, PUINT lpuDeviceID);
        !           903: MMRESULT APIENTRY
        !           904:                  midiInMessage(HMIDIIN hMidiIn, UINT msg, DWORD dw1, DWORD dw2);
        !           905: 
        !           906: #endif  //ifndef MMNOMIDI
        !           907: 
        !           908: 
        !           909: #ifndef MMNOAUX
        !           910: /****************************************************************************
        !           911: 
        !           912:                         Auxiliary audio support
        !           913: 
        !           914: ****************************************************************************/
        !           915: 
        !           916: // device ID for aux device mapper
        !           917: #define AUX_MAPPER     (-1)
        !           918: 
        !           919: // Auxiliary audio device capabilities structure  (UNICODE)
        !           920: typedef struct auxcapsW_tag {
        !           921:     WORD        wMid;                   // manufacturer ID
        !           922:     WORD        wPid;                   // product ID
        !           923:     MMVERSION   vDriverVersion;         // version of the driver
        !           924:     WCHAR       szPname[MAXPNAMELEN];   // product name (NULL terminated string)
        !           925:     WORD        wTechnology;            // type of device
        !           926:     DWORD       dwSupport;              // functionality supported by driver
        !           927: } AUXCAPSW;
        !           928: typedef AUXCAPSW      *PAUXCAPSW;
        !           929: typedef AUXCAPSW     *NPAUXCAPSW;
        !           930: typedef AUXCAPSW     *LPAUXCAPSW;
        !           931: 
        !           932: // Auxiliary audio device capabilities structure  (ASCII)
        !           933: typedef struct auxcapsA_tag {
        !           934:     WORD        wMid;                   // manufacturer ID
        !           935:     WORD        wPid;                   // product ID
        !           936:     MMVERSION   vDriverVersion;         // version of the driver
        !           937:     CHAR        szPname[MAXPNAMELEN];   // product name (NULL terminated string)
        !           938:     WORD        wTechnology;            // type of device
        !           939:     DWORD       dwSupport;              // functionality supported by driver
        !           940: } AUXCAPSA;
        !           941: typedef AUXCAPSA       *PAUXCAPSA;
        !           942: typedef AUXCAPSA      *NPAUXCAPSA;
        !           943: typedef AUXCAPSA      *LPAUXCAPSA;
        !           944: 
        !           945: #ifdef UNICODE
        !           946: #define AUXCAPS       AUXCAPSW
        !           947: #define NPAUXCAPS     NPAUXCAPSW
        !           948: #define LPAUXCAPS     LPAUXCAPSW
        !           949: #else
        !           950: #define AUXCAPS       AUXCAPSA
        !           951: #define NPAUXCAPS     NPAUXCAPSA
        !           952: #define LPAUXCAPS     LPAUXCAPSA
        !           953: #endif
        !           954: 
        !           955: // flags for wTechnology field in AUXCAPS structure
        !           956: #define AUXCAPS_CDAUDIO    1       // audio from internal CD-ROM drive
        !           957: #define AUXCAPS_AUXIN      2       // audio from auxiliary input jacks
        !           958: 
        !           959: // flags for dwSupport field in AUXCAPS structure
        !           960: #define AUXCAPS_VOLUME     0x00000001   // supports volume control
        !           961: #define AUXCAPS_LRVOLUME   0x00000002   // separate left-right volume control
        !           962: 
        !           963: // auxiliary audio function prototypes
        !           964: UINT APIENTRY auxGetNumDevs(VOID);
        !           965: MMRESULT APIENTRY auxGetDevCapsW(UINT uDeviceID, LPAUXCAPSW lpCaps, UINT uSize);
        !           966: MMRESULT APIENTRY auxGetDevCapsA(UINT uDeviceID, LPAUXCAPSA lpCaps, UINT uSize);
        !           967: 
        !           968: #ifdef UNICODE
        !           969: #define auxGetDevCaps   auxGetDevCapsW
        !           970: #else
        !           971: #define auxGetDevCaps   auxGetDevCapsA
        !           972: #endif
        !           973: 
        !           974: MMRESULT APIENTRY auxSetVolume(UINT uDeviceID, DWORD dwVolume);
        !           975: MMRESULT APIENTRY auxGetVolume(UINT uDeviceID, LPDWORD lpdwVolume);
        !           976: MMRESULT APIENTRY auxOutMessage(UINT uDeviceID, UINT msg, DWORD dw1, DWORD dw2);
        !           977: 
        !           978: #endif  //ifndef MMNOAUX
        !           979: 
        !           980: 
        !           981: #ifndef MMNOTIMER
        !           982: /****************************************************************************
        !           983: 
        !           984:                             Timer support
        !           985: 
        !           986: ****************************************************************************/
        !           987: 
        !           988: // timer error return values
        !           989: #define TIMERR_NOERROR        (0)                  // no error
        !           990: #define TIMERR_NOCANDO        (TIMERR_BASE+1)      // request not completed
        !           991: #define TIMERR_STRUCT         (TIMERR_BASE+33)     // time struct size
        !           992: 
        !           993: // timer data types
        !           994: typedef VOID TIMECALLBACK
        !           995:              (UINT uTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2);
        !           996: typedef TIMECALLBACK  *LPTIMECALLBACK;
        !           997: 
        !           998: // flags for wFlags parameter of timeSetEvent() function
        !           999: #define TIME_ONESHOT    0   // program timer for single event
        !          1000: #define TIME_PERIODIC   1   // program for continuous periodic event
        !          1001: 
        !          1002: // timer device capabilities data structure
        !          1003: typedef struct timecaps_tag {
        !          1004:     UINT    wPeriodMin;     // minimum period supported
        !          1005:     UINT    wPeriodMax;     // maximum period supported
        !          1006:     } TIMECAPS;
        !          1007: typedef TIMECAPS       *PTIMECAPS;
        !          1008: typedef TIMECAPS      *NPTIMECAPS;
        !          1009: typedef TIMECAPS      *LPTIMECAPS;
        !          1010: 
        !          1011: // timer function prototypes
        !          1012: MMRESULT APIENTRY timeGetSystemTime(LPMMTIME lpTime, UINT uSize);
        !          1013: DWORD APIENTRY timeGetTime(VOID);
        !          1014: UINT APIENTRY timeSetEvent(UINT uDelay, UINT uResolution,
        !          1015:     LPTIMECALLBACK lpFunction, DWORD dwUser, UINT uFlags);
        !          1016: MMRESULT APIENTRY timeKillEvent(UINT uId);
        !          1017: MMRESULT APIENTRY timeGetDevCaps(LPTIMECAPS lpTimeCaps, UINT uSize);
        !          1018: MMRESULT APIENTRY timeBeginPeriod(UINT uPeriod);
        !          1019: MMRESULT APIENTRY timeEndPeriod(UINT uPeriod);
        !          1020: 
        !          1021: #endif  //ifndef MMNOTIMER
        !          1022: 
        !          1023: 
        !          1024: #ifndef MMNOJOY
        !          1025: /****************************************************************************
        !          1026: 
        !          1027:                             Joystick support
        !          1028: 
        !          1029: ****************************************************************************/
        !          1030: 
        !          1031: // joystick error return values
        !          1032: #define JOYERR_NOERROR        (0)                  // no error
        !          1033: #define JOYERR_PARMS          (JOYERR_BASE+5)      // bad parameters
        !          1034: #define JOYERR_NOCANDO        (JOYERR_BASE+6)      // request not completed
        !          1035: #define JOYERR_UNPLUGGED      (JOYERR_BASE+7)      // joystick is unplugged
        !          1036: 
        !          1037: // constants used with JOYINFO structure and MM_JOY* messages
        !          1038: #define JOY_BUTTON1         0x0001
        !          1039: #define JOY_BUTTON2         0x0002
        !          1040: #define JOY_BUTTON3         0x0004
        !          1041: #define JOY_BUTTON4         0x0008
        !          1042: #define JOY_BUTTON1CHG      0x0100
        !          1043: #define JOY_BUTTON2CHG      0x0200
        !          1044: #define JOY_BUTTON3CHG      0x0400
        !          1045: #define JOY_BUTTON4CHG      0x0800
        !          1046: 
        !          1047: // joystick ID constants
        !          1048: #define JOYSTICKID1         0
        !          1049: #define JOYSTICKID2         1
        !          1050: 
        !          1051: // joystick device capabilities data structure (UNICODE)
        !          1052: typedef struct joycapsW_tag {
        !          1053:     WORD    wMid;                  // manufacturer ID
        !          1054:     WORD    wPid;                  // product ID
        !          1055:     WCHAR   szPname[MAXPNAMELEN];  // product name (NULL terminated string)
        !          1056:     WORD    wXmin;                 // minimum x position value
        !          1057:     WORD    wXmax;                 // maximum x position value
        !          1058:     WORD    wYmin;                 // minimum y position value
        !          1059:     WORD    wYmax;                 // maximum y position value
        !          1060:     WORD    wZmin;                 // minimum z position value
        !          1061:     WORD    wZmax;                 // maximum z position value
        !          1062:     WORD    wNumButtons;           // number of buttons
        !          1063:     WORD    wPeriodMin;            // minimum message period when captured
        !          1064:     WORD    wPeriodMax;            // maximum message period when captured
        !          1065:     } JOYCAPSW;
        !          1066: typedef JOYCAPSW      *PJOYCAPSW;
        !          1067: typedef JOYCAPSW     *NPJOYCAPSW;
        !          1068: typedef JOYCAPSW     *LPJOYCAPSW;
        !          1069: 
        !          1070: // joystick device capabilities data structure
        !          1071: typedef struct joycapsA_tag {
        !          1072:     WORD    wMid;                  // manufacturer ID
        !          1073:     WORD    wPid;                  // product ID
        !          1074:     CHAR    szPname[MAXPNAMELEN];  // product name (NULL terminated string)
        !          1075:     WORD    wXmin;                 // minimum x position value
        !          1076:     WORD    wXmax;                 // maximum x position value
        !          1077:     WORD    wYmin;                 // minimum y position value
        !          1078:     WORD    wYmax;                 // maximum y position value
        !          1079:     WORD    wZmin;                 // minimum z position value
        !          1080:     WORD    wZmax;                 // maximum z position value
        !          1081:     WORD    wNumButtons;           // number of buttons
        !          1082:     WORD    wPeriodMin;            // minimum message period when captured
        !          1083:     WORD    wPeriodMax;            // maximum message period when captured
        !          1084:     } JOYCAPSA;
        !          1085: typedef JOYCAPSA       *PJOYCAPSA;
        !          1086: typedef JOYCAPSA      *NPJOYCAPSA;
        !          1087: typedef JOYCAPSA      *LPJOYCAPSA;
        !          1088: 
        !          1089: #ifdef UNICODE
        !          1090: #define JOYCAPS          JOYCAPSW
        !          1091: #define NPJOYCAPS      NPJOYCAPSW
        !          1092: #define LPJOYCAPS      LPJOYCAPSW
        !          1093: #else
        !          1094: #define JOYCAPS          JOYCAPSA
        !          1095: #define NPJOYCAPS      NPJOYCAPSA
        !          1096: #define LPJOYCAPS      LPJOYCAPSA
        !          1097: #endif
        !          1098: 
        !          1099: // joystick information data structure
        !          1100: typedef struct joyinfo_tag {
        !          1101:     WORD wXpos;                 // x position
        !          1102:     WORD wYpos;                 // y position
        !          1103:     WORD wZpos;                 // z position
        !          1104:     WORD wButtons;              // button states
        !          1105:     } JOYINFO;
        !          1106: typedef JOYINFO       *PJOYINFO;
        !          1107: typedef JOYINFO      *NPJOYINFO;
        !          1108: typedef JOYINFO      *LPJOYINFO;
        !          1109: 
        !          1110: // joystick function prototypes
        !          1111: MMRESULT APIENTRY joyGetDevCapsW(UINT id, LPJOYCAPSW lpCaps, UINT uSize);
        !          1112: MMRESULT APIENTRY joyGetDevCapsA(UINT id, LPJOYCAPSA lpCaps, UINT uSize);
        !          1113: #ifdef UNICODE
        !          1114: #define joyGetDevCaps   joyGetDevCapsW
        !          1115: #else
        !          1116: #define joyGetDevCaps   joyGetDevCapsA
        !          1117: #endif
        !          1118: 
        !          1119: UINT     APIENTRY joyGetNumDevs(VOID);
        !          1120: MMRESULT APIENTRY joyGetPos(UINT id, LPJOYINFO lpInfo);
        !          1121: MMRESULT APIENTRY joyGetThreshold(UINT id,LPWORD lpwThreshold);
        !          1122: MMRESULT APIENTRY joyReleaseCapture(UINT id);
        !          1123: MMRESULT APIENTRY joySetCapture(HWND hwnd, UINT uId, UINT uPeriod,
        !          1124:     BOOL bChanged);
        !          1125: MMRESULT APIENTRY joySetThreshold(UINT id, UINT uThreshold);
        !          1126: UINT APIENTRY joySetCalibration(UINT id, LPWORD pwXbase,      /* ;Internal */
        !          1127:     LPWORD pwXdelta, LPWORD pwYbase, LPWORD pwYdelta,         /* ;Internal */
        !          1128:     LPWORD pwZbase, LPWORD pwZdelta);                         /* ;Internal */
        !          1129: 
        !          1130: #endif  //ifndef MMNOJOY
        !          1131: 
        !          1132: #ifndef MMNOMMIO
        !          1133: /****************************************************************************
        !          1134: 
        !          1135:                         Multimedia File I/O support
        !          1136: 
        !          1137: ****************************************************************************/
        !          1138: 
        !          1139: // MMIO error return values
        !          1140: #define MMIOERR_BASE            256
        !          1141: #define MMIOERR_FILENOTFOUND    (MMIOERR_BASE + 1)  // file not found
        !          1142: #define MMIOERR_OUTOFMEMORY     (MMIOERR_BASE + 2)  // out of memory
        !          1143: #define MMIOERR_CANNOTOPEN      (MMIOERR_BASE + 3)  // cannot open
        !          1144: #define MMIOERR_CANNOTCLOSE     (MMIOERR_BASE + 4)  // cannot close
        !          1145: #define MMIOERR_CANNOTREAD      (MMIOERR_BASE + 5)  // cannot read
        !          1146: #define MMIOERR_CANNOTWRITE     (MMIOERR_BASE + 6)  // cannot write
        !          1147: #define MMIOERR_CANNOTSEEK      (MMIOERR_BASE + 7)  // cannot seek
        !          1148: #define MMIOERR_CANNOTEXPAND    (MMIOERR_BASE + 8)  // cannot expand file
        !          1149: #define MMIOERR_CHUNKNOTFOUND   (MMIOERR_BASE + 9)  // chunk not found
        !          1150: #define MMIOERR_UNBUFFERED      (MMIOERR_BASE + 10) // file is unbuffered
        !          1151: 
        !          1152: // MMIO constants
        !          1153: #define CFSEPCHAR       '+'             // compound file name separator char.
        !          1154: 
        !          1155: // MMIO data types
        !          1156: typedef DWORD           FOURCC;         // a four character code
        !          1157: typedef HANDLE          HMMIO;          // a handle to an open file
        !          1158: typedef LPSTR           HPSTR;          // a huge version of LPSTR
        !          1159: 
        !          1160: typedef LRESULT MMIOPROC
        !          1161:                     (LPSTR lpmmioinfo, UINT uMsg, LONG lParam1, LONG lParam2);
        !          1162: typedef MMIOPROC *LPMMIOPROC;
        !          1163: 
        !          1164: // general MMIO information data structure
        !          1165: typedef struct                  // The MMIO state
        !          1166: {
        !          1167:         /* general fields */
        !          1168:         DWORD           dwFlags;        // general status flags
        !          1169:         FOURCC          fccIOProc;      // 4 char id for the I/O procedure
        !          1170:         LPMMIOPROC      pIOProc;        // pointer to I/O procedure
        !          1171:         UINT            wErrorRet;      // place for error to be returned
        !          1172:         HANDLE          htask;          //
        !          1173: 
        !          1174:         /* fields maintained by MMIO functions during buffered I/O */
        !          1175:         LONG            cchBuffer;      // size of I/O buffer (or 0L)
        !          1176:         LPSTR           pchBuffer;      // start of I/O buffer (or NULL)
        !          1177:         LPSTR           pchNext;        // pointer to next byte to read/write
        !          1178:         LPSTR           pchEndRead;     // pointer to last valid byte to read
        !          1179:         LPSTR           pchEndWrite;    // pointer to last byte to write
        !          1180:         LONG            lBufOffset;     // disk offset of start of buffer
        !          1181: 
        !          1182:         /* fields maintained by I/O procedure */
        !          1183:         LONG            lDiskOffset;    // disk offset of next read or write
        !          1184:         DWORD           adwInfo[3];     // data specific to type of MMIOPROC
        !          1185: 
        !          1186:         /* other fields maintained by MMIO */
        !          1187:         DWORD           dwReserved1;    // reserved for MMIO use
        !          1188:         DWORD           dwReserved2;    // reserved for MMIO use
        !          1189:         HMMIO           hmmio;          // handle to open file
        !          1190: 
        !          1191: } MMIOINFO;
        !          1192: typedef MMIOINFO       *PMMIOINFO;
        !          1193: typedef MMIOINFO      *NPMMIOINFO;
        !          1194: typedef MMIOINFO      *LPMMIOINFO;
        !          1195: 
        !          1196: // RIFF chunk information data structure
        !          1197: typedef struct MMCKINFO_tag      // structure for representing RIFF chunk info.
        !          1198: {
        !          1199:         FOURCC          ckid;           // chunk ID
        !          1200:         DWORD           cksize;         // chunk size
        !          1201:         FOURCC          fccType;        // form type or list type
        !          1202:         DWORD           dwDataOffset;   // offset of data portion of chunk
        !          1203:         DWORD           dwFlags;        // flags used by MMIO functions
        !          1204: } MMCKINFO;
        !          1205: typedef MMCKINFO       *PMMCKINFO;
        !          1206: typedef MMCKINFO      *NPMMCKINFO;
        !          1207: typedef MMCKINFO      *LPMMCKINFO;
        !          1208: 
        !          1209: /* <dwFlags> field of MMIOINFO structure -- many same as OpenFile() flags */
        !          1210: /* Low word of flags will be passed to OpenFile() -- therefore, any MMIO-
        !          1211:     specific flags should be in the high word.  */
        !          1212: #define MMIO_RWMODE     0x00000003      // mask to get bits used for opening
        !          1213:                                         // file for reading/writing/both
        !          1214: #define MMIO_SHAREMODE  0x00000070      // file sharing mode number
        !          1215: 
        !          1216: // constants for dwFlags field of MMIOINFO
        !          1217: #define MMIO_CREATE     0x00001000      // create new file (or truncate file)
        !          1218: #define MMIO_PARSE      0x00000100      // parse new file returning path
        !          1219: #define MMIO_DELETE     0x00000200      // create new file (or truncate file)
        !          1220: #define MMIO_EXIST      0x00004000      // checks for existence of file
        !          1221: #define MMIO_ALLOCBUF   0x00010000      // mmioOpen() should allocate a buffer
        !          1222: #define MMIO_GETTEMP    0x00020000      // mmioOpen() should retrieve temp name
        !          1223: 
        !          1224: #define MMIO_DIRTY      0x10000000      // I/O buffer is dirty
        !          1225: /* MMIO_DIRTY is also used in the <dwFlags> field of MMCKINFO structure */
        !          1226: 
        !          1227: #define MMIO_OPEN_VALID 0x0003FFFF      // valid flags for mmioOpen /* ;Internal */
        !          1228: 
        !          1229: /* read/write mode numbers (bit field MMIO_RWMODE) */
        !          1230: #define MMIO_READ       0x00000000      // open file for reading only
        !          1231: #define MMIO_WRITE      0x00000001      // open file for writing only
        !          1232: #define MMIO_READWRITE  0x00000002      // open file for reading and writing
        !          1233: 
        !          1234: /* share mode numbers (bit field MMIO_SHAREMODE) */
        !          1235: #define MMIO_COMPAT     0x00000000      // compatibility mode
        !          1236: #define MMIO_EXCLUSIVE  0x00000010      // exclusive-access mode
        !          1237: #define MMIO_DENYWRITE  0x00000020      // deny writing to other processes
        !          1238: #define MMIO_DENYREAD   0x00000030      // deny reading to other processes
        !          1239: #define MMIO_DENYNONE   0x00000040      // deny nothing to other processes
        !          1240: 
        !          1241: /* flags for other functions */
        !          1242: #define MMIO_FHOPEN             0x0010  // mmioClose(): keep file handle open
        !          1243: #define MMIO_EMPTYBUF           0x0010  // mmioFlush(): empty the I/O buffer
        !          1244: #define MMIO_TOUPPER            0x0010  // mmioStringToFOURCC(): cvt. to u-case
        !          1245: #define MMIO_INSTALLPROC    0x00010000  // mmioInstallIOProc(): install MMIOProc
        !          1246: #define MMIO_GLOBALPROC     0x10000000  // mmioInstallIOProc: install globally
        !          1247: #define MMIO_UNICODEPROC    0x01000000  // mmioInstallIOProc(): Unicode MMIOProc
        !          1248: #define MMIO_REMOVEPROC     0x00020000  // mmioInstallIOProc(): remove MMIOProc
        !          1249: #define MMIO_FINDPROC       0x00040000  // mmioInstallIOProc(): find an MMIOProc
        !          1250: #define MMIO_FINDCHUNK          0x0010  // mmioDescend(): find a chunk by ID
        !          1251: #define MMIO_FINDRIFF           0x0020  // mmioDescend(): find a LIST chunk
        !          1252:                                         // ???
        !          1253: #define MMIO_FINDLIST           0x0040  // mmioDescend(): find a RIFF chunk
        !          1254:                                         // ???
        !          1255: #define MMIO_CREATERIFF         0x0020  // mmioCreateChunk(): make a LIST chunk
        !          1256:                                         // ???
        !          1257: #define MMIO_CREATELIST         0x0040  // mmioCreateChunk(): make a RIFF chunk
        !          1258:                                         // ???
        !          1259: 
        !          1260: #define MMIO_VALIDPROC      0x11070000  // valid for mmioInstallIOProc /* ;Internal */
        !          1261: 
        !          1262: /* message numbers for MMIOPROC I/O procedure functions */
        !          1263: #define MMIOM_READ      MMIO_READ       // read (must equal MMIO_READ!)
        !          1264: #define MMIOM_WRITE    MMIO_WRITE       // write (must equal MMIO_WRITE!)
        !          1265: #define MMIOM_SEEK              2       // seek to a new position in file
        !          1266: #define MMIOM_OPEN              3       // open file
        !          1267: #define MMIOM_CLOSE             4       // close file
        !          1268: #define MMIOM_WRITEFLUSH        5       // write and flush
        !          1269: #define MMIOM_RENAME            6       // rename specified file
        !          1270: #define MMIOM_USER         0x8000       // beginning of user-defined messages
        !          1271: 
        !          1272: /* standard four character codes */
        !          1273: #define FOURCC_RIFF     mmioFOURCC('R', 'I', 'F', 'F')
        !          1274: #define FOURCC_LIST     mmioFOURCC('L', 'I', 'S', 'T')
        !          1275: 
        !          1276: /* four character codes used to identify standard built-in I/O procedures */
        !          1277: #define FOURCC_DOS      mmioFOURCC('D', 'O', 'S', ' ')
        !          1278: #define FOURCC_MEM      mmioFOURCC('M', 'E', 'M', ' ')
        !          1279: 
        !          1280: // flags for mmioSeek()
        !          1281: #ifndef SEEK_SET
        !          1282: #define SEEK_SET        0               // seek to an absolute position
        !          1283: #define SEEK_CUR        1               // seek relative to current position
        !          1284: #define SEEK_END        2               // seek relative to end of file
        !          1285: #endif  //ifndef SEEK_SET
        !          1286: 
        !          1287: /* other constants */
        !          1288: #define MMIO_DEFAULTBUFFER      8192    // default buffer size
        !          1289: 
        !          1290: /* MMIO macros */
        !          1291: #define mmioFOURCC( ch0, ch1, ch2, ch3 )                                \
        !          1292:                 ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) |    \
        !          1293:                 ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
        !          1294: // This macro is machine byte-sex and word-sex dependent!!
        !          1295: // The characters are BYTES, so compatible with ANSI, not at all with UNICODE
        !          1296: 
        !          1297: 
        !          1298: /* MMIO prototypes */
        !          1299: 
        !          1300: FOURCC APIENTRY mmioStringToFOURCCA(LPSTR sz, UINT uFlags);
        !          1301: FOURCC APIENTRY mmioStringToFOURCCW(LPWSTR sz, UINT uFlags);
        !          1302: #ifdef UNICODE
        !          1303: #define mmioStringToFOURCC   mmioStringToFOURCCW
        !          1304: #else
        !          1305: #define mmioStringToFOURCC   mmioStringToFOURCCA
        !          1306: #endif
        !          1307: 
        !          1308: LPMMIOPROC APIENTRY mmioInstallIOProcA( FOURCC fccIOProc, LPMMIOPROC pIOProc,
        !          1309:                                         DWORD dwFlags);
        !          1310: LPMMIOPROC APIENTRY mmioInstallIOProcW( FOURCC fccIOProc, LPMMIOPROC pIOProc,
        !          1311:                                         DWORD dwFlags);
        !          1312: #ifdef UNICODE
        !          1313: #define mmioInstallIOProc    mmioInstallIOProcW
        !          1314: #else
        !          1315: #define mmioInstallIOProc    mmioInstallIOProcA
        !          1316: #endif
        !          1317: 
        !          1318: HMMIO APIENTRY mmioOpenA( LPSTR szFileName, LPMMIOINFO lpmmioinfo,
        !          1319:                           DWORD dwOpenFlags);
        !          1320: HMMIO APIENTRY mmioOpenW( LPWSTR szFileName, LPMMIOINFO lpmmioinfo,
        !          1321:                           DWORD dwOpenFlags);
        !          1322: #ifdef UNICODE
        !          1323: #define mmioOpen mmioOpenW
        !          1324: #else
        !          1325: #define mmioOpen mmioOpenA
        !          1326: #endif
        !          1327: 
        !          1328: MMRESULT APIENTRY mmioRenameA( LPSTR szFileName, LPSTR szNewFileName,
        !          1329:                                LPMMIOINFO lpmmioinfo, DWORD dwRenameFlags);
        !          1330: MMRESULT APIENTRY mmioRenameW( LPWSTR szFileName, LPWSTR szNewFileName,
        !          1331:                                LPMMIOINFO lpmmioinfo, DWORD dwRenameFlags);
        !          1332: #ifdef UNICODE
        !          1333: #define mmioRename   mmioRenameW
        !          1334: #else
        !          1335: #define mmioRename   mmioRenameA
        !          1336: #endif
        !          1337: 
        !          1338: 
        !          1339: MMRESULT APIENTRY mmioClose(HMMIO hmmio, UINT uFlags);
        !          1340: LRESULT APIENTRY mmioRead(HMMIO hmmio, LPSTR pch, LONG cch);
        !          1341: LRESULT APIENTRY mmioWrite(HMMIO hmmio, LPSTR pch, LONG cch);
        !          1342: LRESULT APIENTRY mmioSeek(HMMIO hmmio, LONG lOffset, int iOrigin);
        !          1343: MMRESULT APIENTRY mmioGetInfo(HMMIO hmmio, LPMMIOINFO lpmmioinfo, UINT uFlags);
        !          1344: MMRESULT APIENTRY mmioSetInfo(HMMIO hmmio, LPMMIOINFO lpmmioinfo, UINT uFlags);
        !          1345: MMRESULT APIENTRY mmioSetBuffer( HMMIO hmmio, LPSTR pchBuffer, LONG cchBuffer,
        !          1346:                                  UINT uFlags);
        !          1347: MMRESULT APIENTRY mmioFlush(HMMIO hmmio, UINT uFlags);
        !          1348: MMRESULT APIENTRY mmioAdvance(HMMIO hmmio, LPMMIOINFO lpmmioinfo, UINT uFlags);
        !          1349: LRESULT APIENTRY mmioSendMessage( HMMIO hmmio, UINT uMsg,
        !          1350:                                   LONG lParam1, LONG lParam2);
        !          1351: 
        !          1352: /* RIFF I/O prototypes */
        !          1353: MMRESULT APIENTRY mmioDescend( HMMIO hmmio, LPMMCKINFO lpck,
        !          1354:                             LPMMCKINFO lpckParent, UINT uFlags);
        !          1355: MMRESULT APIENTRY mmioAscend(HMMIO hmmio, LPMMCKINFO lpck, UINT uFlags);
        !          1356: MMRESULT APIENTRY mmioCreateChunk(HMMIO hmmio, LPMMCKINFO lpck, UINT uFlags);
        !          1357: 
        !          1358: #endif  //ifndef MMNOMMIO
        !          1359: 
        !          1360: typedef  UINT    MCIDEVICEID;  // MCI device ID type
        !          1361: // BEWARE:  MCI device ids can be stored and read from Win 3 compatible
        !          1362: // files when the device id will be WORD size.
        !          1363: 
        !          1364: #ifndef MMNOMCI
        !          1365: /****************************************************************************
        !          1366: 
        !          1367:                             MCI support
        !          1368: 
        !          1369: ****************************************************************************/
        !          1370: 
        !          1371: /*--------------------------------------------------------------------*\
        !          1372:  *
        !          1373:  *                           MCI functions
        !          1374:  *
        !          1375:  *--------------------------------------------------------------------
        !          1376:  * msiSendCommand
        !          1377: \*--------------------------------------------------------------------*/
        !          1378: MCIERROR APIENTRY mciSendCommandA(
        !          1379:     MCIDEVICEID wDeviceID,
        !          1380:     UINT uMessage,
        !          1381:     DWORD dwParam1,
        !          1382:     DWORD dwParam2 );
        !          1383: 
        !          1384: MCIERROR APIENTRY mciSendCommandW(
        !          1385:     MCIDEVICEID wDeviceID,
        !          1386:     UINT uMessage,
        !          1387:     DWORD dwParam1,
        !          1388:     DWORD dwParam2 );
        !          1389: 
        !          1390: #ifdef UNICODE
        !          1391: #define mciSendCommand              mciSendCommandW
        !          1392: #else
        !          1393: #define mciSendCommand              mciSendCommandA
        !          1394: #endif
        !          1395: 
        !          1396: 
        !          1397: /*--------------------------------------------------------------------*\
        !          1398:  * mciSendString
        !          1399: \*--------------------------------------------------------------------*/
        !          1400: MCIERROR APIENTRY mciSendStringA(
        !          1401:     LPCSTR lpstrCommand,
        !          1402:     LPSTR lpstrReturnString,
        !          1403:     UINT uReturnLength,
        !          1404:     HWND hwndCallback );
        !          1405: 
        !          1406: MCIERROR APIENTRY mciSendStringW(
        !          1407:     LPCWSTR lpstrCommand,
        !          1408:     LPWSTR lpstrReturnString,
        !          1409:     UINT uReturnLength,
        !          1410:     HWND hwndCallback );
        !          1411: 
        !          1412: #ifdef UNICODE
        !          1413: #define mciSendString               mciSendStringW
        !          1414: #else
        !          1415: #define mciSendString               mciSendStringA
        !          1416: #endif
        !          1417: 
        !          1418: 
        !          1419: /*--------------------------------------------------------------------*\
        !          1420:  *  mciGetCreatorTask
        !          1421: \*--------------------------------------------------------------------*/
        !          1422: HANDLE APIENTRY mciGetCreatorTask(
        !          1423:     MCIDEVICEID wDeviceID);
        !          1424: 
        !          1425: 
        !          1426: /*--------------------------------------------------------------------*\
        !          1427:  *  mciGetDeviceID
        !          1428: \*--------------------------------------------------------------------*/
        !          1429: MCIDEVICEID APIENTRY mciGetDeviceIDA(
        !          1430:     LPCSTR lpstrName );
        !          1431: 
        !          1432: MCIDEVICEID APIENTRY mciGetDeviceIDW(
        !          1433:     LPCWSTR lpstrName );
        !          1434: 
        !          1435: #ifdef UNICODE
        !          1436: #define mciGetDeviceID              mciGetDeviceIDW
        !          1437: #else
        !          1438: #define mciGetDeviceID              mciGetDeviceIDA
        !          1439: #endif
        !          1440: 
        !          1441: /*--------------------------------------------------------------------*\
        !          1442:  *  mciGetDeviceIDFromElementID
        !          1443: \*--------------------------------------------------------------------*/
        !          1444: MCIDEVICEID APIENTRY mciGetDeviceIDFromElementIDA(
        !          1445:     DWORD dwElementID,
        !          1446:     LPCSTR lpstrType );
        !          1447: 
        !          1448: MCIDEVICEID APIENTRY mciGetDeviceIDFromElementIDW(
        !          1449:     DWORD dwElementID,
        !          1450:     LPCWSTR lpstrType );
        !          1451: 
        !          1452: #ifdef UNICODE
        !          1453: #define mciGetDeviceIDFromElementID mciGetDeviceIDFromElementIDW
        !          1454: #else
        !          1455: #define mciGetDeviceIDFromElementID mciGetDeviceIDFromElementIDA
        !          1456: #endif
        !          1457: 
        !          1458: 
        !          1459: /*--------------------------------------------------------------------*\
        !          1460:  * mciGetErrorString
        !          1461: \*--------------------------------------------------------------------*/
        !          1462: BOOL APIENTRY mciGetErrorStringA(
        !          1463:     DWORD dwError,
        !          1464:     LPSTR lpstrBuffer,
        !          1465:     UINT uLength );
        !          1466: 
        !          1467: BOOL APIENTRY mciGetErrorStringW(
        !          1468:     DWORD dwError,
        !          1469:     LPWSTR lpstrBuffer,
        !          1470:     UINT uLength );
        !          1471: 
        !          1472: #ifdef UNICODE
        !          1473: #define mciGetErrorString           mciGetErrorStringW
        !          1474: #else
        !          1475: #define mciGetErrorString           mciGetErrorStringA
        !          1476: #endif
        !          1477: 
        !          1478: 
        !          1479: /*--------------------------------------------------------------------*\
        !          1480:  * mciExecute
        !          1481: \*--------------------------------------------------------------------*/
        !          1482: BOOL APIENTRY mciExecuteA(
        !          1483:     LPCSTR lpstrCommand );
        !          1484: 
        !          1485: BOOL APIENTRY mciExecuteW(
        !          1486:     LPCWSTR lpstrCommand );
        !          1487: 
        !          1488: #ifdef UNICODE
        !          1489: #define mciExecute                  mciExecuteW
        !          1490: #else
        !          1491: #define mciExecute                  mciExecuteA
        !          1492: #endif
        !          1493: 
        !          1494: //BOOL APIENTRY mciSetYieldProc ( MCIDEVICEID wDeviceID              // ???
        !          1495: //                              , YIELDPROC fpYieldProc              // ???
        !          1496: //                              , DWORD dwYieldData                  // ???
        !          1497: //                              );                                   // ???
        !          1498: //YIELDPROC APIENTRY mciGetYieldProc ( MCIDEVICEID wDeviceID         // ???
        !          1499: //                                   , LPDWORD lpdwYieldData         // ???
        !          1500: //                                   );                              // ???
        !          1501: //
        !          1502: 
        !          1503: typedef UINT (*YIELDPROC) (MCIDEVICEID wDeviceID, DWORD dwYieldData);
        !          1504: 
        !          1505: // THIS NUMBER IS HARDCODED WHERE THE MCI_FORMAT_<x>'s ARE #define'd
        !          1506: // You must change those definitions if you change this number
        !          1507: 
        !          1508: //  MCI error return values
        !          1509: #define MCIERR_INVALID_DEVICE_ID        (MCIERR_BASE + 1)
        !          1510: #define MCIERR_UNRECOGNIZED_KEYWORD     (MCIERR_BASE + 3)
        !          1511: #define MCIERR_UNRECOGNIZED_COMMAND     (MCIERR_BASE + 5)
        !          1512: #define MCIERR_HARDWARE                 (MCIERR_BASE + 6)
        !          1513: #define MCIERR_INVALID_DEVICE_NAME      (MCIERR_BASE + 7)
        !          1514: #define MCIERR_OUT_OF_MEMORY            (MCIERR_BASE + 8)
        !          1515: #define MCIERR_DEVICE_OPEN              (MCIERR_BASE + 9)
        !          1516: #define MCIERR_CANNOT_LOAD_DRIVER       (MCIERR_BASE + 10)
        !          1517: #define MCIERR_MISSING_COMMAND_STRING   (MCIERR_BASE + 11)
        !          1518: #define MCIERR_PARAM_OVERFLOW           (MCIERR_BASE + 12)
        !          1519: #define MCIERR_MISSING_STRING_ARGUMENT  (MCIERR_BASE + 13)
        !          1520: #define MCIERR_BAD_INTEGER              (MCIERR_BASE + 14)
        !          1521: #define MCIERR_PARSER_INTERNAL          (MCIERR_BASE + 15)
        !          1522: #define MCIERR_DRIVER_INTERNAL          (MCIERR_BASE + 16)
        !          1523: #define MCIERR_MISSING_PARAMETER        (MCIERR_BASE + 17)
        !          1524: #define MCIERR_UNSUPPORTED_FUNCTION     (MCIERR_BASE + 18)
        !          1525: #define MCIERR_FILE_NOT_FOUND           (MCIERR_BASE + 19)
        !          1526: #define MCIERR_DEVICE_NOT_READY         (MCIERR_BASE + 20)
        !          1527: #define MCIERR_INTERNAL                 (MCIERR_BASE + 21)
        !          1528: #define MCIERR_DRIVER                   (MCIERR_BASE + 22)
        !          1529: #define MCIERR_CANNOT_USE_ALL           (MCIERR_BASE + 23)
        !          1530: #define MCIERR_MULTIPLE                 (MCIERR_BASE + 24)
        !          1531: #define MCIERR_EXTENSION_NOT_FOUND      (MCIERR_BASE + 25)
        !          1532: #define MCIERR_OUTOFRANGE               (MCIERR_BASE + 26)
        !          1533: #define MCIERR_FLAGS_NOT_COMPATIBLE     (MCIERR_BASE + 28)
        !          1534: #define MCIERR_FILE_NOT_SAVED           (MCIERR_BASE + 30)
        !          1535: #define MCIERR_DEVICE_TYPE_REQUIRED     (MCIERR_BASE + 31)
        !          1536: #define MCIERR_DEVICE_LOCKED            (MCIERR_BASE + 32)
        !          1537: #define MCIERR_DUPLICATE_ALIAS          (MCIERR_BASE + 33)
        !          1538: #define MCIERR_BAD_CONSTANT             (MCIERR_BASE + 34)
        !          1539: #define MCIERR_MUST_USE_SHAREABLE       (MCIERR_BASE + 35)
        !          1540: #define MCIERR_MISSING_DEVICE_NAME      (MCIERR_BASE + 36)
        !          1541: #define MCIERR_BAD_TIME_FORMAT          (MCIERR_BASE + 37)
        !          1542: #define MCIERR_NO_CLOSING_QUOTE         (MCIERR_BASE + 38)
        !          1543: #define MCIERR_DUPLICATE_FLAGS          (MCIERR_BASE + 39)
        !          1544: #define MCIERR_INVALID_FILE             (MCIERR_BASE + 40)
        !          1545: #define MCIERR_NULL_PARAMETER_BLOCK     (MCIERR_BASE + 41)
        !          1546: #define MCIERR_UNNAMED_RESOURCE         (MCIERR_BASE + 42)
        !          1547: #define MCIERR_NEW_REQUIRES_ALIAS       (MCIERR_BASE + 43)
        !          1548: #define MCIERR_NOTIFY_ON_AUTO_OPEN      (MCIERR_BASE + 44)
        !          1549: #define MCIERR_NO_ELEMENT_ALLOWED       (MCIERR_BASE + 45)
        !          1550: #define MCIERR_NONAPPLICABLE_FUNCTION   (MCIERR_BASE + 46)
        !          1551: #define MCIERR_ILLEGAL_FOR_AUTO_OPEN    (MCIERR_BASE + 47)
        !          1552: #define MCIERR_FILENAME_REQUIRED        (MCIERR_BASE + 48)
        !          1553: #define MCIERR_EXTRA_CHARACTERS         (MCIERR_BASE + 49)
        !          1554: #define MCIERR_DEVICE_NOT_INSTALLED     (MCIERR_BASE + 50)
        !          1555: #define MCIERR_GET_CD                   (MCIERR_BASE + 51)
        !          1556: #define MCIERR_SET_CD                   (MCIERR_BASE + 52)
        !          1557: #define MCIERR_SET_DRIVE                (MCIERR_BASE + 53)
        !          1558: #define MCIERR_DEVICE_LENGTH            (MCIERR_BASE + 54)
        !          1559: #define MCIERR_DEVICE_ORD_LENGTH        (MCIERR_BASE + 55)
        !          1560: #define MCIERR_NO_INTEGER               (MCIERR_BASE + 56)
        !          1561: 
        !          1562: #define MCIERR_WAVE_OUTPUTSINUSE        (MCIERR_BASE + 64)
        !          1563: #define MCIERR_WAVE_SETOUTPUTINUSE      (MCIERR_BASE + 65)
        !          1564: #define MCIERR_WAVE_INPUTSINUSE         (MCIERR_BASE + 66)
        !          1565: #define MCIERR_WAVE_SETINPUTINUSE       (MCIERR_BASE + 67)
        !          1566: #define MCIERR_WAVE_OUTPUTUNSPECIFIED   (MCIERR_BASE + 68)
        !          1567: #define MCIERR_WAVE_INPUTUNSPECIFIED    (MCIERR_BASE + 69)
        !          1568: #define MCIERR_WAVE_OUTPUTSUNSUITABLE   (MCIERR_BASE + 70)
        !          1569: #define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE + 71)
        !          1570: #define MCIERR_WAVE_INPUTSUNSUITABLE    (MCIERR_BASE + 72)
        !          1571: #define MCIERR_WAVE_SETINPUTUNSUITABLE  (MCIERR_BASE + 73)
        !          1572: 
        !          1573: #define MCIERR_SEQ_DIV_INCOMPATIBLE     (MCIERR_BASE + 80)
        !          1574: #define MCIERR_SEQ_PORT_INUSE           (MCIERR_BASE + 81)
        !          1575: #define MCIERR_SEQ_PORT_NONEXISTENT     (MCIERR_BASE + 82)
        !          1576: #define MCIERR_SEQ_PORT_MAPNODEVICE     (MCIERR_BASE + 83)
        !          1577: #define MCIERR_SEQ_PORT_MISCERROR       (MCIERR_BASE + 84)
        !          1578: #define MCIERR_SEQ_TIMER                (MCIERR_BASE + 85)
        !          1579: #define MCIERR_SEQ_PORTUNSPECIFIED      (MCIERR_BASE + 86)
        !          1580: #define MCIERR_SEQ_NOMIDIPRESENT        (MCIERR_BASE + 87)
        !          1581: 
        !          1582: #define MCIERR_NO_WINDOW                (MCIERR_BASE + 90)
        !          1583: #define MCIERR_CREATEWINDOW             (MCIERR_BASE + 91)
        !          1584: #define MCIERR_FILE_READ                (MCIERR_BASE + 92)
        !          1585: #define MCIERR_FILE_WRITE               (MCIERR_BASE + 93)
        !          1586: 
        !          1587: // All custom device driver errors must be >= this value
        !          1588: #define MCIERR_CUSTOM_DRIVER_BASE       (MCIERR_BASE + 256)
        !          1589: 
        !          1590: /****************************************************************************
        !          1591: *          MCI command message identifiers
        !          1592: *****************************************************************************/
        !          1593: // Message numbers are hard coded because the resource compiler
        !          1594: // will otherwise fail on the RCDATA command table in mmsystem.rc
        !          1595: 
        !          1596: // They must be in the range between MCI_FIRST and MCI_LAST
        !          1597: 
        !          1598: #define MCI_FIRST                       0x0800
        !          1599: // Messages 0x801 and 0x802 are reserved
        !          1600: #define MCI_OPEN                        0x0803
        !          1601: #define MCI_CLOSE                       0x0804
        !          1602: #define MCI_ESCAPE                      0x0805
        !          1603: #define MCI_PLAY                        0x0806
        !          1604: #define MCI_SEEK                        0x0807
        !          1605: #define MCI_STOP                        0x0808
        !          1606: #define MCI_PAUSE                       0x0809
        !          1607: #define MCI_INFO                        0x080A
        !          1608: #define MCI_GETDEVCAPS                  0x080B
        !          1609: #define MCI_SPIN                        0x080C
        !          1610: #define MCI_SET                         0x080D
        !          1611: #define MCI_STEP                        0x080E
        !          1612: #define MCI_RECORD                      0x080F
        !          1613: #define MCI_SYSINFO                     0x0810
        !          1614: #define MCI_BREAK                       0x0811
        !          1615: #define MCI_SOUND                       0x0812
        !          1616: #define MCI_SAVE                        0x0813
        !          1617: #define MCI_STATUS                      0x0814
        !          1618: 
        !          1619: #define MCI_CUE                         0x0830
        !          1620: 
        !          1621: #define MCI_REALIZE                     0x0840
        !          1622: #define MCI_WINDOW                      0x0841
        !          1623: #define MCI_PUT                         0x0842
        !          1624: #define MCI_WHERE                       0x0843
        !          1625: #define MCI_FREEZE                      0x0844
        !          1626: #define MCI_UNFREEZE                    0x0845
        !          1627: 
        !          1628: #define MCI_LOAD                        0x0850
        !          1629: #define MCI_CUT                         0x0851
        !          1630: #define MCI_COPY                        0x0852
        !          1631: #define MCI_PASTE                       0x0853
        !          1632: #define MCI_UPDATE                      0x0854
        !          1633: #define MCI_RESUME                      0x0855
        !          1634: #define MCI_DELETE                      0x0856
        !          1635: 
        !          1636: #define MCI_LAST                        0x0FFF
        !          1637: 
        !          1638: // the next 0x400 message ID's are reserved for custom drivers
        !          1639: // all custom MCI command messages must be >= than this value
        !          1640: #define MCI_USER_MESSAGES               (0x400 + MCI_FIRST)
        !          1641: 
        !          1642: 
        !          1643: /****************************************************************************
        !          1644: *   Structures for the lpdwParams (dwParam2) of mciSendCommand for those
        !          1645: *   command messages that may be parsed in string form.
        !          1646: *****************************************************************************/
        !          1647: 
        !          1648: 
        !          1649: 
        !          1650: #define MCI_ALL_DEVICE_ID               ((MCIDEVICEID)-1)    // Device ids are 16 bits
        !          1651: 
        !          1652: // constants for predefined MCI device types
        !          1653: //#define MCI_DEVTYPE_VCR                 (MCI_STRING_OFFSET + 1)
        !          1654: //#define MCI_DEVTYPE_VIDEODISC           (MCI_STRING_OFFSET + 2)
        !          1655: //#define MCI_DEVTYPE_OVERLAY             (MCI_STRING_OFFSET + 3)
        !          1656: //#define MCI_DEVTYPE_CD_AUDIO            (MCI_STRING_OFFSET + 4)
        !          1657: //#define MCI_DEVTYPE_DAT                 (MCI_STRING_OFFSET + 5)
        !          1658: //#define MCI_DEVTYPE_SCANNER             (MCI_STRING_OFFSET + 6)
        !          1659: //#define MCI_DEVTYPE_ANIMATION           (MCI_STRING_OFFSET + 7)
        !          1660: //#define MCI_DEVTYPE_DIGITAL_VIDEO       (MCI_STRING_OFFSET + 8)
        !          1661: //#define MCI_DEVTYPE_OTHER               (MCI_STRING_OFFSET + 9)
        !          1662: //#define MCI_DEVTYPE_WAVEFORM_AUDIO      (MCI_STRING_OFFSET + 10)
        !          1663: //#define MCI_DEVTYPE_SEQUENCER           (MCI_STRING_OFFSET + 11)
        !          1664: 
        !          1665: // Constant values are used because RC does not like the parentheses
        !          1666: #define MCI_DEVTYPE_VCR                 513
        !          1667: #define MCI_DEVTYPE_VIDEODISC           514
        !          1668: #define MCI_DEVTYPE_OVERLAY             515
        !          1669: #define MCI_DEVTYPE_CD_AUDIO            516
        !          1670: #define MCI_DEVTYPE_DAT                 517
        !          1671: #define MCI_DEVTYPE_SCANNER             518
        !          1672: #define MCI_DEVTYPE_ANIMATION           519
        !          1673: #define MCI_DEVTYPE_DIGITAL_VIDEO       520
        !          1674: #define MCI_DEVTYPE_OTHER               521
        !          1675: #define MCI_DEVTYPE_WAVEFORM_AUDIO      522
        !          1676: #define MCI_DEVTYPE_SEQUENCER           523
        !          1677: 
        !          1678: #define MCI_DEVTYPE_FIRST               MCI_DEVTYPE_VCR
        !          1679: #define MCI_DEVTYPE_LAST                MCI_DEVTYPE_SEQUENCER
        !          1680: 
        !          1681: 
        !          1682: #define MCI_DEVTYPE_FIRST_USER          0x1000
        !          1683: 
        !          1684: // return values for 'status mode' command
        !          1685: #define MCI_MODE_NOT_READY              (MCI_STRING_OFFSET + 12)
        !          1686: #define MCI_MODE_STOP                   (MCI_STRING_OFFSET + 13)
        !          1687: #define MCI_MODE_PLAY                   (MCI_STRING_OFFSET + 14)
        !          1688: #define MCI_MODE_RECORD                 (MCI_STRING_OFFSET + 15)
        !          1689: #define MCI_MODE_SEEK                   (MCI_STRING_OFFSET + 16)
        !          1690: #define MCI_MODE_PAUSE                  (MCI_STRING_OFFSET + 17)
        !          1691: #define MCI_MODE_OPEN                   (MCI_STRING_OFFSET + 18)
        !          1692: 
        !          1693: // constants used in 'set time format' and 'status time format' commands
        !          1694: // These are not based on MCI_FORMATS_OFFSET because of resource
        !          1695: // compiler limitations
        !          1696: #define MCI_FORMAT_MILLISECONDS         0
        !          1697: #define MCI_FORMAT_HMS                  1
        !          1698: #define MCI_FORMAT_MSF                  2
        !          1699: #define MCI_FORMAT_FRAMES               3
        !          1700: #define MCI_FORMAT_SMPTE_24             4
        !          1701: #define MCI_FORMAT_SMPTE_25             5
        !          1702: #define MCI_FORMAT_SMPTE_30             6
        !          1703: #define MCI_FORMAT_SMPTE_30DROP         7
        !          1704: #define MCI_FORMAT_BYTES                8
        !          1705: #define MCI_FORMAT_SAMPLES              9
        !          1706: #define MCI_FORMAT_TMSF                 10
        !          1707: 
        !          1708: // MCI time format conversion macros
        !          1709: // Note that these macros are byte-sex dependent as the SMPT format gives
        !          1710: // the layout in storage that's wanted.
        !          1711: #define MCI_MSF_MINUTE(msf)             ((BYTE)(msf))
        !          1712: #define MCI_MSF_SECOND(msf)             ((BYTE)(((WORD)(msf)) >> 8))
        !          1713: #define MCI_MSF_FRAME(msf)              ((BYTE)((msf)>>16))
        !          1714: 
        !          1715: #define MCI_MAKE_MSF(m, s, f)           ((DWORD)(((BYTE)(m) | \
        !          1716:                                                   ((WORD)(s)<<8)) | \
        !          1717:                                                  (((DWORD)(BYTE)(f))<<16)))
        !          1718: 
        !          1719: #define MCI_TMSF_TRACK(tmsf)            ((BYTE)(tmsf))
        !          1720: #define MCI_TMSF_MINUTE(tmsf)           ((BYTE)(((WORD)(tmsf)) >> 8))
        !          1721: #define MCI_TMSF_SECOND(tmsf)           ((BYTE)((tmsf)>>16))
        !          1722: #define MCI_TMSF_FRAME(tmsf)            ((BYTE)((tmsf)>>24))
        !          1723: 
        !          1724: #define MCI_MAKE_TMSF(t, m, s, f)       ( (DWORD)( ( (BYTE)(t)            \
        !          1725:                                                    | ( (WORD)(m) << 8 )   \
        !          1726:                                                    )                      \
        !          1727:                                                  | ( ( (DWORD)(BYTE)(s)   \
        !          1728:                                                      | ( (WORD)(f) <<8 )  \
        !          1729:                                                      )                    \
        !          1730:                                                    << 16                  \
        !          1731:                                                    )                      \
        !          1732:                                                  )                        \
        !          1733:                                         )
        !          1734: 
        !          1735: #define MCI_HMS_HOUR(hms)               ((BYTE)(hms))
        !          1736: #define MCI_HMS_MINUTE(hms)             ((BYTE)(((WORD)(hms)) >> 8))
        !          1737: #define MCI_HMS_SECOND(hms)             ((BYTE)((hms)>>16))
        !          1738: 
        !          1739: #define MCI_MAKE_HMS(h, m, s)           ( (DWORD)( ( (BYTE)(h)            \
        !          1740:                                                    | ( (WORD)(m) <<8 )    \
        !          1741:                                                    )                      \
        !          1742:                                                  | ( ( (DWORD)(BYTE)(s) ) \
        !          1743:                                                    <<16                   \
        !          1744:                                                    )                      \
        !          1745:                                                  )                        \
        !          1746:                                         )
        !          1747: 
        !          1748: 
        !          1749: 
        !          1750: /* Flags for wParam of the MM_MCINOTIFY message */
        !          1751: #define MCI_NOTIFY_SUCCESSFUL           0x0001
        !          1752: #define MCI_NOTIFY_SUPERSEDED           0x0002
        !          1753: #define MCI_NOTIFY_ABORTED              0x0004
        !          1754: #define MCI_NOTIFY_FAILURE              0x0008
        !          1755: 
        !          1756: // NOTE: All flags must have an "L" suffix in order to be parsed as
        !          1757: // DWORDs by the resource compiler
        !          1758: 
        !          1759: // common flags for dwFlags parameter of MCI command messages
        !          1760: #define MCI_NOTIFY                      0x00000001L
        !          1761: #define MCI_WAIT                        0x00000002L
        !          1762: #define MCI_FROM                        0x00000004L
        !          1763: #define MCI_TO                          0x00000008L
        !          1764: #define MCI_TRACK                       0x00000010L
        !          1765: 
        !          1766: // flags for dwFlags parameter of MCI_OPEN command message
        !          1767: #define MCI_OPEN_SHAREABLE              0x00000100L
        !          1768: #define MCI_OPEN_ELEMENT                0x00000200L
        !          1769: #define MCI_OPEN_ALIAS                  0x00000400L
        !          1770: #define MCI_OPEN_ELEMENT_ID             0x00000800L
        !          1771: #define MCI_OPEN_TYPE_ID                0x00001000L
        !          1772: #define MCI_OPEN_TYPE                   0x00002000L
        !          1773: 
        !          1774: // flags for dwFlags parameter of MCI_SEEK command message
        !          1775: #define MCI_SEEK_TO_START               0x00000100L
        !          1776: #define MCI_SEEK_TO_END                 0x00000200L
        !          1777: 
        !          1778: // flags for dwFlags parameter of MCI_STATUS command message
        !          1779: #define MCI_STATUS_ITEM                 0x00000100L
        !          1780: #define MCI_STATUS_START                0x00000200L
        !          1781: 
        !          1782: // flags for dwItem field of the MCI_STATUS_PARMS parameter block
        !          1783: #define MCI_STATUS_LENGTH               0x00000001L
        !          1784: #define MCI_STATUS_POSITION             0x00000002L
        !          1785: #define MCI_STATUS_NUMBER_OF_TRACKS     0x00000003L
        !          1786: #define MCI_STATUS_MODE                 0x00000004L
        !          1787: #define MCI_STATUS_MEDIA_PRESENT        0x00000005L
        !          1788: #define MCI_STATUS_TIME_FORMAT          0x00000006L
        !          1789: #define MCI_STATUS_READY                0x00000007L
        !          1790: #define MCI_STATUS_CURRENT_TRACK        0x00000008L
        !          1791: 
        !          1792: // flags for dwFlags parameter of MCI_INFO command message
        !          1793: #define MCI_INFO_PRODUCT                0x00000100L
        !          1794: #define MCI_INFO_FILE                   0x00000200L
        !          1795: 
        !          1796: // flags for dwFlags parameter of MCI_GETDEVCAPS command message
        !          1797: #define MCI_GETDEVCAPS_ITEM             0x00000100L
        !          1798: 
        !          1799: // flags for dwItem field of the MCI_GETDEVCAPS_PARMS parameter block
        !          1800: #define MCI_GETDEVCAPS_CAN_RECORD       0x00000001L
        !          1801: #define MCI_GETDEVCAPS_HAS_AUDIO        0x00000002L
        !          1802: #define MCI_GETDEVCAPS_HAS_VIDEO        0x00000003L
        !          1803: #define MCI_GETDEVCAPS_DEVICE_TYPE      0x00000004L
        !          1804: #define MCI_GETDEVCAPS_USES_FILES       0x00000005L
        !          1805: #define MCI_GETDEVCAPS_COMPOUND_DEVICE  0x00000006L
        !          1806: #define MCI_GETDEVCAPS_CAN_EJECT        0x00000007L
        !          1807: #define MCI_GETDEVCAPS_CAN_PLAY         0x00000008L
        !          1808: #define MCI_GETDEVCAPS_CAN_SAVE         0x00000009L
        !          1809: 
        !          1810: // flags for dwFlags parameter of MCI_SYSINFO command message
        !          1811: #define MCI_SYSINFO_QUANTITY            0x00000100L
        !          1812: #define MCI_SYSINFO_OPEN                0x00000200L
        !          1813: #define MCI_SYSINFO_NAME                0x00000400L
        !          1814: #define MCI_SYSINFO_INSTALLNAME         0x00000800L
        !          1815: 
        !          1816: // flags for dwFlags parameter of MCI_SET command message
        !          1817: #define MCI_SET_DOOR_OPEN               0x00000100L
        !          1818: #define MCI_SET_DOOR_CLOSED             0x00000200L
        !          1819: #define MCI_SET_TIME_FORMAT             0x00000400L
        !          1820: #define MCI_SET_AUDIO                   0x00000800L
        !          1821: #define MCI_SET_VIDEO                   0x00001000L
        !          1822: #define MCI_SET_ON                      0x00002000L
        !          1823: #define MCI_SET_OFF                     0x00004000L
        !          1824: 
        !          1825: // flags for dwAudio field of MCI_SET_PARMS or MCI_SEQ_SET_PARMS
        !          1826: #define MCI_SET_AUDIO_ALL               0x00004001L
        !          1827: #define MCI_SET_AUDIO_LEFT              0x00004002L
        !          1828: #define MCI_SET_AUDIO_RIGHT             0x00004003L
        !          1829: 
        !          1830: // flags for dwFlags parameter of MCI_BREAK command message
        !          1831: #define MCI_BREAK_KEY                   0x00000100L
        !          1832: #define MCI_BREAK_HWND                  0x00000200L
        !          1833: #define MCI_BREAK_OFF                   0x00000400L
        !          1834: 
        !          1835: // flags for dwFlags parameter of MCI_RECORD command message
        !          1836: #define MCI_RECORD_INSERT               0x00000100L
        !          1837: #define MCI_RECORD_OVERWRITE            0x00000200L
        !          1838: 
        !          1839: // flags for dwFlags parameter of MCI_SOUND command message
        !          1840: #define MCI_SOUND_NAME                  0x00000100L
        !          1841: 
        !          1842: // flags for dwFlags parameter of MCI_SAVE command message
        !          1843: #define MCI_SAVE_FILE                   0x00000100L
        !          1844: 
        !          1845: // flags for dwFlags parameter of MCI_LOAD command message
        !          1846: #define MCI_LOAD_FILE                   0x00000100L
        !          1847: 
        !          1848: /* Note that some structures below do not have all the fields of the
        !          1849: // corresponding Win 3.1 structures.  Some reserved WORD sized fields
        !          1850: // have disappeared.  This is deliberate.  The structures are the same
        !          1851: // size (with one exception which is two bytes longer).
        !          1852: //
        !          1853: // The FIRST entry in each structure must be dwCallback.  A large union
        !          1854: // could be defined... but...
        !          1855: */
        !          1856: 
        !          1857: // generic parameter block for MCI command messages with no special parameters
        !          1858: typedef struct tagMCI_GENERIC_PARMS {
        !          1859:     DWORD   dwCallback;
        !          1860: } MCI_GENERIC_PARMS;
        !          1861: typedef MCI_GENERIC_PARMS     *PMCI_GENERIC_PARMS;
        !          1862: typedef MCI_GENERIC_PARMS     *LPMCI_GENERIC_PARMS;
        !          1863: 
        !          1864: // parameter block for MCI_OPEN command message (ascii version)
        !          1865: typedef struct tagMCI_OPEN_PARMSA {
        !          1866:     DWORD   dwCallback;
        !          1867:     MCIDEVICEID wDeviceID;
        !          1868: //  MCIDEVICEID wReserved0;    // While MCIDEVICEID is a WORD
        !          1869:     LPCSTR   lpstrDeviceType;
        !          1870:     LPCSTR   lpstrElementName;
        !          1871:     LPCSTR   lpstrAlias;
        !          1872: } MCI_OPEN_PARMSA;
        !          1873: typedef MCI_OPEN_PARMSA     *PMCI_OPEN_PARMSA;
        !          1874: typedef MCI_OPEN_PARMSA     *LPMCI_OPEN_PARMSA;
        !          1875: 
        !          1876: // parameter block for MCI_OPEN command message (unicode version)
        !          1877: typedef struct tagMCI_OPEN_PARMSW {
        !          1878:     DWORD   dwCallback;
        !          1879:     MCIDEVICEID wDeviceID;
        !          1880: //  MCIDEVICEID wReserved0;    // While MCIDEVICEID is a WORD
        !          1881:     LPCWSTR   lpstrDeviceType;
        !          1882:     LPCWSTR   lpstrElementName;
        !          1883:     LPCWSTR   lpstrAlias;
        !          1884: } MCI_OPEN_PARMSW;
        !          1885: typedef MCI_OPEN_PARMSW     *PMCI_OPEN_PARMSW;
        !          1886: typedef MCI_OPEN_PARMSW     *LPMCI_OPEN_PARMSW;
        !          1887: 
        !          1888: #ifdef UNICODE
        !          1889: #define MCI_OPEN_PARMS     MCI_OPEN_PARMSW
        !          1890: #define PMCI_OPEN_PARMS    PMCI_OPEN_PARMSW
        !          1891: #define LPMCI_OPEN_PARMS   LPMCI_OPEN_PARMSW
        !          1892: #else
        !          1893: #define MCI_OPEN_PARMS     MCI_OPEN_PARMSA
        !          1894: #define PMCI_OPEN_PARMS    PMCI_OPEN_PARMSWA
        !          1895: #define LPMCI_OPEN_PARMS   LPMCI_OPEN_PARMSA
        !          1896: #endif
        !          1897: 
        !          1898: 
        !          1899: // parameter block for MCI_PLAY command message
        !          1900: typedef struct tagMCI_PLAY_PARMS {
        !          1901:     DWORD   dwCallback;
        !          1902:     DWORD   dwFrom;
        !          1903:     DWORD   dwTo;
        !          1904: } MCI_PLAY_PARMS;
        !          1905: typedef MCI_PLAY_PARMS     *PMCI_PLAY_PARMS;
        !          1906: typedef MCI_PLAY_PARMS     *LPMCI_PLAY_PARMS;
        !          1907: 
        !          1908: // parameter block for MCI_SEEK command message
        !          1909: typedef struct tagMCI_SEEK_PARMS {
        !          1910:     DWORD   dwCallback;
        !          1911:     DWORD   dwTo;
        !          1912: } MCI_SEEK_PARMS;
        !          1913: typedef MCI_SEEK_PARMS     *PMCI_SEEK_PARMS;
        !          1914: typedef MCI_SEEK_PARMS     *LPMCI_SEEK_PARMS;
        !          1915: 
        !          1916: // parameter block for MCI_STATUS command message
        !          1917: typedef struct tagMCI_STATUS_PARMS {
        !          1918:     DWORD   dwCallback;
        !          1919:     DWORD   dwReturn;
        !          1920:     DWORD   dwItem;
        !          1921:     DWORD   dwTrack;
        !          1922: } MCI_STATUS_PARMS;
        !          1923: typedef MCI_STATUS_PARMS     * PMCI_STATUS_PARMS;
        !          1924: typedef MCI_STATUS_PARMS     * LPMCI_STATUS_PARMS;
        !          1925: 
        !          1926: // parameter block for MCI_INFO command message (ascii version)
        !          1927: typedef struct tagMCI_INFO_PARMSA {
        !          1928:     DWORD   dwCallback;
        !          1929:     LPSTR   lpstrReturn;
        !          1930:     DWORD   dwRetSize;
        !          1931: } MCI_INFO_PARMSA;
        !          1932: typedef MCI_INFO_PARMSA     * PMCI_INFO_PARMSA;
        !          1933: typedef MCI_INFO_PARMSA     * LPMCI_INFO_PARMSA;
        !          1934: 
        !          1935: // parameter block for MCI_INFO command message (unicode version)
        !          1936: typedef struct tagMCI_INFO_PARMSW {
        !          1937:     DWORD   dwCallback;
        !          1938:     LPWSTR   lpstrReturn;
        !          1939:     DWORD   dwRetSize;
        !          1940: } MCI_INFO_PARMSW;
        !          1941: typedef MCI_INFO_PARMSW     * PMCI_INFO_PARMSW;
        !          1942: typedef MCI_INFO_PARMSW     * LPMCI_INFO_PARMSW;
        !          1943: 
        !          1944: #ifdef UNICODE
        !          1945: #define MCI_INFO_PARMS     MCI_INFO_PARMSW
        !          1946: #define PMCI_INFO_PARMS    PMCI_INFO_PARMSW
        !          1947: #define LPMCI_INFO_PARMS   LPMCI_INFO_PARMSW
        !          1948: #else
        !          1949: #define MCI_INFO_PARMS     MCI_INFO_PARMSA
        !          1950: #define PMCI_INFO_PARMS    PMCI_INFO_PARMSWA
        !          1951: #define LPMCI_INFO_PARMS   LPMCI_INFO_PARMSA
        !          1952: #endif
        !          1953: 
        !          1954: // parameter block for MCI_GETDEVCAPS command message
        !          1955: typedef struct tagMCI_GETDEVCAPS_PARMS {
        !          1956:     DWORD   dwCallback;
        !          1957:     DWORD   dwReturn;
        !          1958:     DWORD   dwItem;
        !          1959: } MCI_GETDEVCAPS_PARMS;
        !          1960: typedef MCI_GETDEVCAPS_PARMS     * PMCI_GETDEVCAPS_PARMS;
        !          1961: typedef MCI_GETDEVCAPS_PARMS     * LPMCI_GETDEVCAPS_PARMS;
        !          1962: 
        !          1963: // parameter block for MCI_SYSINFO command message (ascii version)
        !          1964: typedef struct tagMCI_SYSINFO_PARMSA {
        !          1965:     DWORD   dwCallback;
        !          1966:     LPSTR   lpstrReturn;
        !          1967:     DWORD   dwRetSize;
        !          1968:     DWORD   dwNumber;
        !          1969:     UINT    wDeviceType;
        !          1970: } MCI_SYSINFO_PARMSA;
        !          1971: typedef MCI_SYSINFO_PARMSA     *PMCI_SYSINFO_PARMSA;
        !          1972: typedef MCI_SYSINFO_PARMSA     *LPMCI_SYSINFO_PARMSA;
        !          1973: 
        !          1974: // parameter block for MCI_SYSINFO command message (unicode version)
        !          1975: typedef struct tagMCI_SYSINFO_PARMSW {
        !          1976:     DWORD   dwCallback;
        !          1977:     LPWSTR  lpstrReturn;
        !          1978:     DWORD   dwRetSize;
        !          1979:     DWORD   dwNumber;
        !          1980:     UINT    wDeviceType;
        !          1981: } MCI_SYSINFO_PARMSW;
        !          1982: typedef MCI_SYSINFO_PARMSW     *PMCI_SYSINFO_PARMSW;
        !          1983: typedef MCI_SYSINFO_PARMSW     *LPMCI_SYSINFO_PARMSW;
        !          1984: 
        !          1985: #ifdef UNICODE
        !          1986: #define MCI_SYSINFO_PARMS     MCI_SYSINFO_PARMSW
        !          1987: #define PMCI_SYSINFO_PARMS    PMCI_SYSINFO_PARMSW
        !          1988: #define LPMCI_SYSINFO_PARMS   LPMCI_SYSINFO_PARMSW
        !          1989: #else
        !          1990: #define MCI_SYSINFO_PARMS     MCI_SYSINFO_PARMSA
        !          1991: #define PMCI_SYSINFO_PARMS    PMCI_SYSINFO_PARMSWA
        !          1992: #define LPMCI_SYSINFO_PARMS   LPMCI_SYSINFO_PARMSA
        !          1993: #endif
        !          1994: 
        !          1995: // parameter block for MCI_SET command message
        !          1996: typedef struct tagMCI_SET_PARMS {
        !          1997:     DWORD   dwCallback;
        !          1998:     DWORD   dwTimeFormat;
        !          1999:     DWORD   dwAudio;
        !          2000: } MCI_SET_PARMS;
        !          2001: typedef MCI_SET_PARMS     *PMCI_SET_PARMS;
        !          2002: typedef MCI_SET_PARMS     *LPMCI_SET_PARMS;
        !          2003: 
        !          2004: // parameter block for MCI_BREAK command message
        !          2005: typedef struct tagMCI_BREAK_PARMS {
        !          2006:     DWORD   dwCallback;
        !          2007:     int     nVirtKey;
        !          2008:     HWND    hwndBreak;
        !          2009: } MCI_BREAK_PARMS;
        !          2010: typedef MCI_BREAK_PARMS     * PMCI_BREAK_PARMS;
        !          2011: typedef MCI_BREAK_PARMS     * LPMCI_BREAK_PARMS;
        !          2012: 
        !          2013: // parameter block for MCI_SOUND command message (ascii version)
        !          2014: typedef struct tagMCI_SOUND_PARMSA {
        !          2015:     DWORD   dwCallback;
        !          2016:     LPCSTR  lpstrSoundName;
        !          2017: } MCI_SOUND_PARMSA;
        !          2018: typedef MCI_SOUND_PARMSA     * PMCI_SOUND_PARMSA;
        !          2019: typedef MCI_SOUND_PARMSA     * LPMCI_SOUND_PARMSA;
        !          2020: 
        !          2021: // parameter block for MCI_SOUND command message (unicode version)
        !          2022: typedef struct tagMCI_SOUND_PARMSW {
        !          2023:     DWORD   dwCallback;
        !          2024:     LPCWSTR lpstrSoundName;
        !          2025: } MCI_SOUND_PARMSW;
        !          2026: typedef MCI_SOUND_PARMSW     *PMCI_SOUND_PARMSW;
        !          2027: typedef MCI_SOUND_PARMSW     *LPMCI_SOUND_PARMSW;
        !          2028: 
        !          2029: #ifdef UNICODE
        !          2030: #define MCI_SOUND_PARMS     MCI_SOUND_PARMSW
        !          2031: #define PMCI_SOUND_PARMS    PMCI_SOUND_PARMSW
        !          2032: #define LPMCI_SOUND_PARMS   LPMCI_SOUND_PARMSW
        !          2033: #else
        !          2034: #define MCI_SOUND_PARMS     MCI_SOUND_PARMSA
        !          2035: #define PMCI_SOUND_PARMS    PMCI_SOUND_PARMSWA
        !          2036: #define LPMCI_SOUND_PARMS   LPMCI_SOUND_PARMSA
        !          2037: #endif
        !          2038: 
        !          2039: // parameter block for MCI_SAVE command message (ascii version)
        !          2040: typedef struct tagMCI_SAVE_PARMSA {
        !          2041:     DWORD   dwCallback;
        !          2042:     LPCSTR  lpfilename;
        !          2043: } MCI_SAVE_PARMSA;
        !          2044: typedef MCI_SAVE_PARMSA     *PMCI_SAVE_PARMSA;
        !          2045: typedef MCI_SAVE_PARMSA     *LPMCI_SAVE_PARMSA;
        !          2046: 
        !          2047: // parameter block for MCI_SAVE command message (unicode version)
        !          2048: typedef struct tagMCI_SAVE_PARMSW {
        !          2049:     DWORD    dwCallback;
        !          2050:     LPCWSTR  lpfilename;
        !          2051: } MCI_SAVE_PARMSW;
        !          2052: typedef MCI_SAVE_PARMSW     *PMCI_SAVE_PARMSW;
        !          2053: typedef MCI_SAVE_PARMSW     *LPMCI_SAVE_PARMSW;
        !          2054: 
        !          2055: #ifdef UNICODE
        !          2056: #define MCI_SAVE_PARMS     MCI_SAVE_PARMSW
        !          2057: #define PMCI_SAVE_PARMS    PMCI_SAVE_PARMSW
        !          2058: #define LPMCI_SAVE_PARMS   LPMCI_SAVE_PARMSW
        !          2059: #else
        !          2060: #define MCI_SAVE_PARMS     MCI_SAVE_PARMSA
        !          2061: #define PMCI_SAVE_PARMS    PMCI_SAVE_PARMSWA
        !          2062: #define LPMCI_SAVE_PARMS   LPMCI_SAVE_PARMSA
        !          2063: #endif
        !          2064: 
        !          2065: // parameter block for MCI_LOAD command message (ascii version)
        !          2066: typedef struct tagMCI_LOAD_PARMSA {
        !          2067:     DWORD   dwCallback;
        !          2068:     LPCSTR  lpfilename;
        !          2069: } MCI_LOAD_PARMSA;
        !          2070: typedef MCI_LOAD_PARMSA     *PMCI_LOAD_PARMSA;
        !          2071: typedef MCI_LOAD_PARMSA     *LPMCI_LOAD_PARMSA;
        !          2072: 
        !          2073: // parameter block for MCI_LOAD command message (unicode version)
        !          2074: typedef struct tagMCI_LOAD_PARMSW {
        !          2075:     DWORD   dwCallback;
        !          2076:     LPCWSTR lpfilename;
        !          2077: } MCI_LOAD_PARMSW;
        !          2078: typedef MCI_LOAD_PARMSW     *PMCI_LOAD_PARMSW;
        !          2079: typedef MCI_LOAD_PARMSW     *LPMCI_LOAD_PARMSW;
        !          2080: 
        !          2081: #ifdef UNICODE
        !          2082: #define MCI_LOAD_PARMS     MCI_LOAD_PARMSW
        !          2083: #define PMCI_LOAD_PARMS    PMCI_LOAD_PARMSW
        !          2084: #define LPMCI_LOAD_PARMS   LPMCI_LOAD_PARMSW
        !          2085: #else
        !          2086: #define MCI_LOAD_PARMS     MCI_LOAD_PARMSA
        !          2087: #define PMCI_LOAD_PARMS    PMCI_LOAD_PARMSA
        !          2088: #define LPMCI_LOAD_PARMS   LPMCI_LOAD_PARMSA
        !          2089: #endif
        !          2090: 
        !          2091: // parameter block for MCI_RECORD command message
        !          2092: typedef struct tagMCI_RECORD_PARMS {
        !          2093:     DWORD   dwCallback;
        !          2094:     DWORD   dwFrom;
        !          2095:     DWORD   dwTo;
        !          2096: } MCI_RECORD_PARMS;
        !          2097: typedef MCI_RECORD_PARMS     *PMCI_RECORD_PARMS;
        !          2098: typedef MCI_RECORD_PARMS     *LPMCI_RECORD_PARMS;
        !          2099: 
        !          2100: /*****************************************************************************
        !          2101: *    Standard command parameters for videodisc drivers                       *
        !          2102: *****************************************************************************/
        !          2103: 
        !          2104: // string resource ID's for videodisc players
        !          2105: // return ID's for videodisc status command
        !          2106: // flag for dwReturn field of MCI_STATUS_PARMS
        !          2107: // MCI_STATUS command, (dwItem == MCI_STATUS_MODE)
        !          2108: #define MCI_VD_MODE_PARK                (MCI_VD_OFFSET + 1)
        !          2109: 
        !          2110: // return ID's for videodisc MCI_GETDEVCAPS command
        !          2111: 
        !          2112: // flag for dwReturn field of MCI_STATUS_PARMS
        !          2113: // MCI_STATUS command, (dwItem == MCI_VD_STATUS_MEDIA_TYPE)
        !          2114: #define MCI_VD_MEDIA_CLV                (MCI_VD_OFFSET + 2)
        !          2115: #define MCI_VD_MEDIA_CAV                (MCI_VD_OFFSET + 3)
        !          2116: #define MCI_VD_MEDIA_OTHER              (MCI_VD_OFFSET + 4)
        !          2117: 
        !          2118: #define MCI_VD_FORMAT_TRACK             0x4001
        !          2119: 
        !          2120: // flags for dwFlags parameter of MCI_PLAY command message
        !          2121: #define MCI_VD_PLAY_REVERSE             0x00010000L
        !          2122: #define MCI_VD_PLAY_FAST                0x00020000L
        !          2123: #define MCI_VD_PLAY_SPEED               0x00040000L
        !          2124: #define MCI_VD_PLAY_SCAN                0x00080000L
        !          2125: #define MCI_VD_PLAY_SLOW                0x00100000L
        !          2126: 
        !          2127: // flag for dwFlags parameter of MCI_SEEK command message
        !          2128: #define MCI_VD_SEEK_REVERSE             0x00010000L
        !          2129: 
        !          2130: // flags for dwItem field of MCI_STATUS_PARMS parameter block
        !          2131: #define MCI_VD_STATUS_SPEED             0x00004002L
        !          2132: #define MCI_VD_STATUS_FORWARD           0x00004003L
        !          2133: #define MCI_VD_STATUS_MEDIA_TYPE        0x00004004L
        !          2134: #define MCI_VD_STATUS_SIDE              0x00004005L
        !          2135: #define MCI_VD_STATUS_DISC_SIZE         0x00004006L
        !          2136: 
        !          2137: // flags for dwFlags parameter of MCI_GETDEVCAPS command message
        !          2138: #define MCI_VD_GETDEVCAPS_CLV           0x00010000L
        !          2139: #define MCI_VD_GETDEVCAPS_CAV           0x00020000L
        !          2140: 
        !          2141: #define MCI_VD_SPIN_UP                  0x00010000L
        !          2142: #define MCI_VD_SPIN_DOWN                0x00020000L
        !          2143: 
        !          2144: // flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block
        !          2145: #define MCI_VD_GETDEVCAPS_CAN_REVERSE   0x00004002L
        !          2146: #define MCI_VD_GETDEVCAPS_FAST_RATE     0x00004003L
        !          2147: #define MCI_VD_GETDEVCAPS_SLOW_RATE     0x00004004L
        !          2148: #define MCI_VD_GETDEVCAPS_NORMAL_RATE   0x00004005L
        !          2149: 
        !          2150: // flags for the dwFlags parameter of MCI_STEP command message
        !          2151: #define MCI_VD_STEP_FRAMES              0x00010000L
        !          2152: #define MCI_VD_STEP_REVERSE             0x00020000L
        !          2153: 
        !          2154: // flag for the MCI_ESCAPE command message
        !          2155: #define MCI_VD_ESCAPE_STRING            0x00000100L
        !          2156: 
        !          2157: // parameter block for MCI_PLAY command message
        !          2158: typedef struct tagMCI_VD_PLAY_PARMS {
        !          2159:     DWORD   dwCallback;
        !          2160:     DWORD   dwFrom;
        !          2161:     DWORD   dwTo;
        !          2162:     DWORD   dwSpeed;
        !          2163: } MCI_VD_PLAY_PARMS;
        !          2164: typedef MCI_VD_PLAY_PARMS     *PMCI_VD_PLAY_PARMS;
        !          2165: typedef MCI_VD_PLAY_PARMS     *LPMCI_VD_PLAY_PARMS;
        !          2166: 
        !          2167: // parameter block for MCI_STEP command message
        !          2168: typedef struct tagMCI_VD_STEP_PARMS {
        !          2169:     DWORD   dwCallback;
        !          2170:     DWORD   dwFrames;
        !          2171: } MCI_VD_STEP_PARMS;
        !          2172: typedef MCI_VD_STEP_PARMS     *PMCI_VD_STEP_PARMS;
        !          2173: typedef MCI_VD_STEP_PARMS     *LPMCI_VD_STEP_PARMS;
        !          2174: 
        !          2175: // parameter block for MCI_ESCAPE command message (ascii version)
        !          2176: typedef struct tagMCI_VD_ESCAPE_PARMSA {
        !          2177:     DWORD   dwCallback;
        !          2178:     LPCSTR   lpstrCommand;
        !          2179: } MCI_VD_ESCAPE_PARMSA;
        !          2180: typedef MCI_VD_ESCAPE_PARMSA     *PMCI_VD_ESCAPE_PARMSA;
        !          2181: typedef MCI_VD_ESCAPE_PARMSA     *LPMCI_VD_ESCAPE_PARMSA;
        !          2182: 
        !          2183: // parameter block for MCI_ESCAPE command message (unicode version)
        !          2184: typedef struct tagMCI_VD_ESCAPE_PARMSW {
        !          2185:     DWORD   dwCallback;
        !          2186:     LPCWSTR   lpstrCommand;
        !          2187: } MCI_VD_ESCAPE_PARMSW;
        !          2188: typedef MCI_VD_ESCAPE_PARMSW     *PMCI_VD_ESCAPE_PARMSW;
        !          2189: typedef MCI_VD_ESCAPE_PARMSW     *LPMCI_VD_ESCAPE_PARMSW;
        !          2190: 
        !          2191: #ifdef UNICODE
        !          2192: #define MCI_VD_ESCAPE_PARMS     MCI_VD_ESCAPE_PARMSW
        !          2193: #define PMCI_VD_ESCAPE_PARMS    PMCI_VD_ESCAPE_PARMSW
        !          2194: #define LPMCI_VD_ESCAPE_PARMS   LPMCI_VD_ESCAPE_PARMSW
        !          2195: #else
        !          2196: #define MCI_VD_ESCAPE_PARMS     MCI_VD_ESCAPE_PARMSA
        !          2197: #define PMCI_VD_ESCAPE_PARMS    PMCI_VD_ESCAPE_PARMSWA
        !          2198: #define LPMCI_VD_ESCAPE_PARMS   LPMCI_VD_ESCAPE_PARMSA
        !          2199: #endif
        !          2200: 
        !          2201: /*****************************************************************************
        !          2202: *   Standard command parameters for waveform audio drivers
        !          2203: *****************************************************************************/
        !          2204: 
        !          2205: #define MCI_WAVE_PCM            (MCI_WAVE_OFFSET+0)
        !          2206: #define MCI_WAVE_MAPPER         (MCI_WAVE_OFFSET+1)
        !          2207: 
        !          2208: // flags for the dwFlags parameter of MCI_OPEN command message
        !          2209: #define MCI_WAVE_OPEN_BUFFER            0x00010000L
        !          2210: 
        !          2211: // flags for the dwFlags parameter of MCI_SET command message
        !          2212: #define MCI_WAVE_SET_FORMATTAG          0x00010000L
        !          2213: #define MCI_WAVE_SET_CHANNELS           0x00020000L
        !          2214: #define MCI_WAVE_SET_SAMPLESPERSEC      0x00040000L
        !          2215: #define MCI_WAVE_SET_AVGBYTESPERSEC     0x00080000L
        !          2216: #define MCI_WAVE_SET_BLOCKALIGN         0x00100000L
        !          2217: #define MCI_WAVE_SET_BITSPERSAMPLE      0x00200000L
        !          2218: 
        !          2219: // flags for the dwFlags parameter of MCI_STATUS, MCI_SET command messages
        !          2220: #define MCI_WAVE_INPUT                  0x00400000L
        !          2221: #define MCI_WAVE_OUTPUT                 0x00800000L
        !          2222: 
        !          2223: // flags for the dwItem field of MCI_STATUS_PARMS parameter block
        !          2224: #define MCI_WAVE_STATUS_FORMATTAG       0x00004001L
        !          2225: #define MCI_WAVE_STATUS_CHANNELS        0x00004002L
        !          2226: #define MCI_WAVE_STATUS_SAMPLESPERSEC   0x00004003L
        !          2227: #define MCI_WAVE_STATUS_AVGBYTESPERSEC  0x00004004L
        !          2228: #define MCI_WAVE_STATUS_BLOCKALIGN      0x00004005L
        !          2229: #define MCI_WAVE_STATUS_BITSPERSAMPLE   0x00004006L
        !          2230: #define MCI_WAVE_STATUS_LEVEL           0x00004007L
        !          2231: 
        !          2232: // flags for the dwFlags parameter of MCI_SET command message
        !          2233: #define MCI_WAVE_SET_ANYINPUT           0x04000000L
        !          2234: #define MCI_WAVE_SET_ANYOUTPUT          0x08000000L
        !          2235: 
        !          2236: // flags for the dwFlags parameter of MCI_GETDEVCAPS command message
        !          2237: #define MCI_WAVE_GETDEVCAPS_INPUTS      0x00004001L
        !          2238: #define MCI_WAVE_GETDEVCAPS_OUTPUTS     0x00004002L
        !          2239: 
        !          2240: // parameter block for MCI_OPEN command message (ascii version)
        !          2241: typedef struct tagMCI_WAVE_OPEN_PARMSA {
        !          2242:     DWORD   dwCallback;
        !          2243:     MCIDEVICEID wDeviceID;
        !          2244: //  MCIDEVICEID wReserved0;    // While MCIDEVICEID is a WORD - remove when a UINT
        !          2245:     LPCSTR   lpstrDeviceType;
        !          2246:     LPCSTR   lpstrElementName;
        !          2247:     LPCSTR   lpstrAlias;
        !          2248:     DWORD   dwBufferSeconds;
        !          2249: } MCI_WAVE_OPEN_PARMSA;
        !          2250: typedef MCI_WAVE_OPEN_PARMSA     *PMCI_WAVE_OPEN_PARMSA;
        !          2251: typedef MCI_WAVE_OPEN_PARMSA     *LPMCI_WAVE_OPEN_PARMSA;
        !          2252: 
        !          2253: // parameter block for MCI_OPEN command message (unicode version)
        !          2254: typedef struct tagMCI_WAVE_OPEN_PARMSW {
        !          2255:     DWORD   dwCallback;
        !          2256:     MCIDEVICEID wDeviceID;
        !          2257: //  MCIDEVICEID wReserved0;    // While MCIDEVICEID is a WORD - remove when a UINT
        !          2258:     LPCWSTR   lpstrDeviceType;
        !          2259:     LPCWSTR   lpstrElementName;
        !          2260:     LPCWSTR   lpstrAlias;
        !          2261:     DWORD   dwBufferSeconds;
        !          2262: } MCI_WAVE_OPEN_PARMSW;
        !          2263: typedef MCI_WAVE_OPEN_PARMSW     *PMCI_WAVE_OPEN_PARMSW;
        !          2264: typedef MCI_WAVE_OPEN_PARMSW     *LPMCI_WAVE_OPEN_PARMSW;
        !          2265: 
        !          2266: #ifdef UNICODE
        !          2267: #define MCI_WAVE_OPEN_PARMS     MCI_WAVE_OPEN_PARMSW
        !          2268: #define PMCI_WAVE_OPEN_PARMS    PMCI_WAVE_OPEN_PARMSW
        !          2269: #define LPMCI_WAVE_OPEN_PARMS   LPMCI_WAVE_OPEN_PARMSW
        !          2270: #else
        !          2271: #define MCI_WAVE_OPEN_PARMS     MCI_WAVE_OPEN_PARMSA
        !          2272: #define PMCI_WAVE_OPEN_PARMS    PMCI_WAVE_OPEN_PARMSWA
        !          2273: #define LPMCI_WAVE_OPEN_PARMS   LPMCI_WAVE_OPEN_PARMSA
        !          2274: #endif
        !          2275: 
        !          2276: // parameter block for MCI_DELETE command message
        !          2277: typedef struct tagMCI_WAVE_DELETE_PARMS {
        !          2278:     DWORD   dwCallback;
        !          2279:     DWORD   dwFrom;
        !          2280:     DWORD   dwTo;
        !          2281: } MCI_WAVE_DELETE_PARMS;
        !          2282: typedef MCI_WAVE_DELETE_PARMS     *PMCI_WAVE_DELETE_PARMS;
        !          2283: typedef MCI_WAVE_DELETE_PARMS     *LPMCI_WAVE_DELETE_PARMS;
        !          2284: 
        !          2285: // parameter block for MCI_SET command message
        !          2286: typedef struct tagMCI_WAVE_SET_PARMS {
        !          2287:     DWORD   dwCallback;
        !          2288:     DWORD   dwTimeFormat;
        !          2289:     DWORD   dwAudio;
        !          2290:     UINT    wInput;
        !          2291:     UINT    wOutput;
        !          2292:     WORD    wFormatTag;                // corresponds to WAVEFORMAT structure
        !          2293:     WORD    wReserved2;
        !          2294:     WORD    nChannels;                 // corresponds to WAVEFORMAT structure
        !          2295:     WORD    wReserved3;
        !          2296:     DWORD   nSamplesPerSec;
        !          2297:     DWORD   nAvgBytesPerSec;
        !          2298:     WORD    nBlockAlign;               // corresponds to WAVEFORMAT structure
        !          2299:     WORD    wReserved4;
        !          2300:     WORD    wBitsPerSample;            // corresponds to PCMWAVEFORMAT structure
        !          2301:     WORD    wReserved5;
        !          2302: } MCI_WAVE_SET_PARMS;
        !          2303: typedef MCI_WAVE_SET_PARMS     * PMCI_WAVE_SET_PARMS;
        !          2304: typedef MCI_WAVE_SET_PARMS     * LPMCI_WAVE_SET_PARMS;
        !          2305: 
        !          2306: /*****************************************************************************
        !          2307: *   Standard command parameters for CD audio drivers
        !          2308: *****************************************************************************/
        !          2309: 
        !          2310: // None
        !          2311: 
        !          2312: /*****************************************************************************
        !          2313: *        Standard command parameters for Sequencer drivers
        !          2314: *****************************************************************************/
        !          2315: 
        !          2316: // string resource ID's for sequencers
        !          2317: // return ids for status division type
        !          2318: 
        !          2319: // flags for the dwReturn field of MCI_STATUS_PARMS parameter block
        !          2320: // MCI_STATUS command, (dwItem == MCI_SEQ_STATUS_DIVTYPE)
        !          2321: #define     MCI_SEQ_DIV_PPQN              (0 + MCI_SEQ_OFFSET)
        !          2322: #define     MCI_SEQ_DIV_SMPTE_24        (1 + MCI_SEQ_OFFSET)
        !          2323: #define     MCI_SEQ_DIV_SMPTE_25        (2 + MCI_SEQ_OFFSET)
        !          2324: #define     MCI_SEQ_DIV_SMPTE_30DROP    (3 + MCI_SEQ_OFFSET)
        !          2325: #define     MCI_SEQ_DIV_SMPTE_30        (4 + MCI_SEQ_OFFSET)
        !          2326: 
        !          2327: // flags for the dwMaster field of MCI_SEQ_SET_PARMS parameter block
        !          2328: // MCI_SET command, (dwFlags == MCI_SEQ_SET_MASTER)
        !          2329: #define     MCI_SEQ_FORMAT_SONGPTR      0x4001
        !          2330: #define     MCI_SEQ_FILE                0x4002
        !          2331: #define     MCI_SEQ_MIDI                0x4003
        !          2332: #define     MCI_SEQ_SMPTE               0x4004
        !          2333: #define     MCI_SEQ_NONE                65533
        !          2334: 
        !          2335: #define     MCI_SEQ_MAPPER          65535
        !          2336: 
        !          2337: // flags for the dwItem field of MCI_STATUS_PARMS parameter block
        !          2338: #define MCI_SEQ_STATUS_TEMPO              0x00004002L
        !          2339: #define MCI_SEQ_STATUS_PORT              0x00004003L
        !          2340: #define MCI_SEQ_STATUS_SLAVE             0x00004007L
        !          2341: #define MCI_SEQ_STATUS_MASTER           0x00004008L
        !          2342: #define MCI_SEQ_STATUS_OFFSET             0x00004009L
        !          2343: #define MCI_SEQ_STATUS_DIVTYPE          0x0000400AL
        !          2344: 
        !          2345: // flags for the dwFlags parameter of MCI_SET command message
        !          2346: #define MCI_SEQ_SET_TEMPO                 0x00010000L
        !          2347: #define MCI_SEQ_SET_PORT                  0x00020000L
        !          2348: #define MCI_SEQ_SET_SLAVE               0x00040000L
        !          2349: #define MCI_SEQ_SET_MASTER              0x00080000L
        !          2350: #define MCI_SEQ_SET_OFFSET                0x01000000L
        !          2351: 
        !          2352: // parameter block for MCI_SET command message
        !          2353: typedef struct tagMCI_SEQ_SET_PARMS {
        !          2354:     DWORD   dwCallback;
        !          2355:     DWORD   dwTimeFormat;
        !          2356:     DWORD   dwAudio;
        !          2357:     DWORD   dwTempo;
        !          2358:     DWORD   dwPort;
        !          2359:     DWORD   dwSlave;
        !          2360:     DWORD   dwMaster;
        !          2361:     DWORD   dwOffset;
        !          2362: } MCI_SEQ_SET_PARMS;
        !          2363: typedef MCI_SEQ_SET_PARMS     * PMCI_SEQ_SET_PARMS;
        !          2364: typedef MCI_SEQ_SET_PARMS     * LPMCI_SEQ_SET_PARMS;
        !          2365: 
        !          2366: /*****************************************************************************
        !          2367: *      Standard command parameters for animation
        !          2368: *****************************************************************************/
        !          2369: 
        !          2370: 
        !          2371: // flags for dwFlags parameter of MCI_OPEN command message
        !          2372: #define MCI_ANIM_OPEN_WS                0x00010000L
        !          2373: #define MCI_ANIM_OPEN_PARENT            0x00020000L
        !          2374: #define MCI_ANIM_OPEN_NOSTATIC          0x00040000L
        !          2375: 
        !          2376: // flags for dwFlags parameter of MCI_PLAY command message
        !          2377: #define MCI_ANIM_PLAY_SPEED             0x00010000L
        !          2378: #define MCI_ANIM_PLAY_REVERSE           0x00020000L
        !          2379: #define MCI_ANIM_PLAY_FAST              0x00040000L
        !          2380: #define MCI_ANIM_PLAY_SLOW              0x00080000L
        !          2381: #define MCI_ANIM_PLAY_SCAN              0x00100000L
        !          2382: 
        !          2383: // flags for dwFlags parameter of MCI_STEP command message
        !          2384: #define MCI_ANIM_STEP_REVERSE           0x00010000L
        !          2385: #define MCI_ANIM_STEP_FRAMES            0x00020000L
        !          2386: 
        !          2387: // flags for dwItem field of MCI_STATUS_PARMS parameter block
        !          2388: #define MCI_ANIM_STATUS_SPEED           0x00004001L
        !          2389: #define MCI_ANIM_STATUS_FORWARD         0x00004002L
        !          2390: #define MCI_ANIM_STATUS_HWND            0x00004003L
        !          2391: #define MCI_ANIM_STATUS_HPAL            0x00004004L
        !          2392: #define MCI_ANIM_STATUS_STRETCH         0x00004005L
        !          2393: 
        !          2394: // flags for the dwFlags parameter of MCI_INFO command message
        !          2395: #define MCI_ANIM_INFO_TEXT              0x00010000L
        !          2396: 
        !          2397: // flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block
        !          2398: #define MCI_ANIM_GETDEVCAPS_CAN_REVERSE 0x00004001L
        !          2399: #define MCI_ANIM_GETDEVCAPS_FAST_RATE   0x00004002L
        !          2400: #define MCI_ANIM_GETDEVCAPS_SLOW_RATE   0x00004003L
        !          2401: #define MCI_ANIM_GETDEVCAPS_NORMAL_RATE 0x00004004L
        !          2402: #define MCI_ANIM_GETDEVCAPS_PALETTES    0x00004006L
        !          2403: #define MCI_ANIM_GETDEVCAPS_CAN_STRETCH 0x00004007L
        !          2404: #define MCI_ANIM_GETDEVCAPS_MAX_WINDOWS 0x00004008L
        !          2405: 
        !          2406: // flags for the MCI_REALIZE command message
        !          2407: #define MCI_ANIM_REALIZE_NORM           0x00010000L
        !          2408: #define MCI_ANIM_REALIZE_BKGD           0x00020000L
        !          2409: 
        !          2410: // flags for dwFlags parameter of MCI_WINDOW command message
        !          2411: #define MCI_ANIM_WINDOW_HWND            0x00010000L
        !          2412: #define MCI_ANIM_WINDOW_STATE           0x00040000L
        !          2413: #define MCI_ANIM_WINDOW_TEXT            0x00080000L
        !          2414: #define MCI_ANIM_WINDOW_ENABLE_STRETCH  0x00100000L
        !          2415: #define MCI_ANIM_WINDOW_DISABLE_STRETCH 0x00200000L
        !          2416: 
        !          2417: // flags for hWnd field of MCI_ANIM_WINDOW_PARMS parameter block
        !          2418: // MCI_WINDOW command message, (dwFlags == MCI_ANIM_WINDOW_HWND)
        !          2419: #define MCI_ANIM_WINDOW_DEFAULT         0x00000000L
        !          2420: 
        !          2421: // flags for dwFlags parameter of MCI_PUT command message
        !          2422: #define MCI_ANIM_RECT                   0x00010000L
        !          2423: #define MCI_ANIM_PUT_SOURCE             0x00020000L  // also  MCI_WHERE
        !          2424: #define MCI_ANIM_PUT_DESTINATION        0x00040000L  // also  MCI_WHERE
        !          2425: 
        !          2426: // flags for dwFlags parameter of MCI_WHERE command message
        !          2427: #define MCI_ANIM_WHERE_SOURCE           0x00020000L
        !          2428: #define MCI_ANIM_WHERE_DESTINATION      0x00040000L
        !          2429: 
        !          2430: // flags for dwFlags parameter of MCI_UPDATE command message
        !          2431: #define MCI_ANIM_UPDATE_HDC             0x00020000L
        !          2432: 
        !          2433: // parameter block for MCI_OPEN command message (ascii version)
        !          2434: typedef struct tagMCI_ANIM_OPEN_PARMSA {
        !          2435:     DWORD   dwCallback;
        !          2436:     MCIDEVICEID wDeviceID;
        !          2437: //  MCIDEVICEID wReserved0;    // While MCIDEVICEID is a WORD
        !          2438:     LPCSTR   lpstrDeviceType;
        !          2439:     LPCSTR   lpstrElementName;
        !          2440:     LPCSTR   lpstrAlias;
        !          2441:     DWORD   dwStyle;
        !          2442:     HWND    hWndParent;
        !          2443: } MCI_ANIM_OPEN_PARMSA;
        !          2444: typedef MCI_ANIM_OPEN_PARMSA     *PMCI_ANIM_OPEN_PARMSA;
        !          2445: typedef MCI_ANIM_OPEN_PARMSA     *LPMCI_ANIM_OPEN_PARMSA;
        !          2446: 
        !          2447: // parameter block for MCI_OPEN command message (unicode version)
        !          2448: typedef struct tagMCI_ANIM_OPEN_PARMSW {
        !          2449:     DWORD   dwCallback;
        !          2450:     MCIDEVICEID wDeviceID;
        !          2451: //  MCIDEVICEID wReserved0;    // While MCIDEVICEID is a WORD
        !          2452:     LPCWSTR   lpstrDeviceType;
        !          2453:     LPCWSTR   lpstrElementName;
        !          2454:     LPCWSTR   lpstrAlias;
        !          2455:     DWORD   dwStyle;
        !          2456:     HWND    hWndParent;
        !          2457: } MCI_ANIM_OPEN_PARMSW;
        !          2458: typedef MCI_ANIM_OPEN_PARMSW     *PMCI_ANIM_OPEN_PARMSW;
        !          2459: typedef MCI_ANIM_OPEN_PARMSW     *LPMCI_ANIM_OPEN_PARMSW;
        !          2460: 
        !          2461: #ifdef UNICODE
        !          2462: #define MCI_ANIM_OPEN_PARMS     MCI_ANIM_OPEN_PARMSW
        !          2463: #define PMCI_ANIM_OPEN_PARMS    PMCI_ANIM_OPEN_PARMSW
        !          2464: #define LPMCI_ANIM_OPEN_PARMS   LPMCI_ANIM_OPEN_PARMSW
        !          2465: #else
        !          2466: #define MCI_ANIM_OPEN_PARMS     MCI_ANIM_OPEN_PARMSA
        !          2467: #define PMCI_ANIM_OPEN_PARMS    PMCI_ANIM_OPEN_PARMSWA
        !          2468: #define LPMCI_ANIM_OPEN_PARMS   LPMCI_ANIM_OPEN_PARMSA
        !          2469: #endif
        !          2470: 
        !          2471: // parameter block for MCI_PLAY command message
        !          2472: typedef struct tagMCI_ANIM_PLAY_PARMS {
        !          2473:     DWORD   dwCallback;
        !          2474:     DWORD   dwFrom;
        !          2475:     DWORD   dwTo;
        !          2476:     DWORD   dwSpeed;
        !          2477: } MCI_ANIM_PLAY_PARMS;
        !          2478: typedef MCI_ANIM_PLAY_PARMS     *PMCI_ANIM_PLAY_PARMS;
        !          2479: typedef MCI_ANIM_PLAY_PARMS     *LPMCI_ANIM_PLAY_PARMS;
        !          2480: 
        !          2481: // parameter block for MCI_STEP command message
        !          2482: typedef struct tagMCI_ANIM_STEP_PARMS {
        !          2483:     DWORD   dwCallback;
        !          2484:     DWORD   dwFrames;
        !          2485: } MCI_ANIM_STEP_PARMS;
        !          2486: typedef MCI_ANIM_STEP_PARMS     *PMCI_ANIM_STEP_PARMS;
        !          2487: typedef MCI_ANIM_STEP_PARMS     *LPMCI_ANIM_STEP_PARMS;
        !          2488: 
        !          2489: // paramter block for MCI_ANIM_SET                 new ???
        !          2490: typedef struct tagMCI_ANIM_SET_PARMS {
        !          2491:     DWORD   dwCallback;
        !          2492:     DWORD   dwTimeFormat;
        !          2493:     DWORD   dwAudio;
        !          2494: } MCI_ANIM_SET_PARMS;
        !          2495: typedef MCI_ANIM_SET_PARMS     * PMCI_ANIM_SET_PARMS;
        !          2496: typedef MCI_ANIM_SET_PARMS     * LPMCI_ANIM_SET_PARMS;
        !          2497: 
        !          2498: // parameter block for MCI_WINDOW command message (ascii version)
        !          2499: typedef struct tagMCI_ANIM_WINDOW_PARMSA {
        !          2500:     DWORD   dwCallback;
        !          2501:     WORD    hWnd;
        !          2502:     UINT    nCmdShow;
        !          2503:     LPCSTR  lpstrText;
        !          2504: } MCI_ANIM_WINDOW_PARMSA;
        !          2505: typedef MCI_ANIM_WINDOW_PARMSA     * PMCI_ANIM_WINDOW_PARMSA;
        !          2506: typedef MCI_ANIM_WINDOW_PARMSA     * LPMCI_ANIM_WINDOW_PARMSA;
        !          2507: 
        !          2508: // parameter block for MCI_WINDOW command message (unicode version)
        !          2509: typedef struct tagMCI_ANIM_WINDOW_PARMSW {
        !          2510:     DWORD   dwCallback;
        !          2511:     WORD    hWnd;
        !          2512:     UINT    nCmdShow;
        !          2513:     LPCWSTR  lpstrText;
        !          2514: } MCI_ANIM_WINDOW_PARMSW;
        !          2515: typedef MCI_ANIM_WINDOW_PARMSW     * PMCI_ANIM_WINDOW_PARMSW;
        !          2516: typedef MCI_ANIM_WINDOW_PARMSW     * LPMCI_ANIM_WINDOW_PARMSW;
        !          2517: 
        !          2518: #ifdef UNICODE
        !          2519: #define MCI_ANIM_WINDOW_PARMS     MCI_ANIM_WINDOW_PARMSW
        !          2520: #define PMCI_ANIM_WINDOW_PARMS    PMCI_ANIM_WINDOW_PARMSW
        !          2521: #define LPMCI_ANIM_WINDOW_PARMS   LPMCI_ANIM_WINDOW_PARMSW
        !          2522: #else
        !          2523: #define MCI_ANIM_WINDOW_PARMS     MCI_ANIM_WINDOW_PARMSA
        !          2524: #define PMCI_ANIM_WINDOW_PARMS    PMCI_ANIM_WINDOW_PARMSWA
        !          2525: #define LPMCI_ANIM_WINDOW_PARMS   LPMCI_ANIM_WINDOW_PARMSA
        !          2526: #endif
        !          2527: 
        !          2528: // parameter block for MCI_PUT, MCI_UPDATE, MCI_WHERE command messages
        !          2529: typedef struct tagMCI_ANIM_RECT_PARMS {
        !          2530:     DWORD   dwCallback;
        !          2531: #ifdef MCI_USE_OFFEXT
        !          2532:     POINT   ptOffset;
        !          2533:     POINT   ptExtent;
        !          2534: #else   //ifdef MCI_USE_OFFEXT
        !          2535:     RECT    rc;
        !          2536: #endif  //ifdef MCI_USE_OFFEXT
        !          2537: } MCI_ANIM_RECT_PARMS;
        !          2538: typedef MCI_ANIM_RECT_PARMS     * PMCI_ANIM_RECT_PARMS;
        !          2539: typedef MCI_ANIM_RECT_PARMS     * LPMCI_ANIM_RECT_PARMS;
        !          2540: 
        !          2541: // parameter block for MCI_UPDATE PARMS
        !          2542: typedef struct tagMCI_ANIM_UPDATE_PARMS {
        !          2543:     DWORD   dwCallback;
        !          2544:     RECT    rc;
        !          2545:     HDC     hDC;
        !          2546: } MCI_ANIM_UPDATE_PARMS;
        !          2547: typedef MCI_ANIM_UPDATE_PARMS     * PMCI_ANIM_UPDATE_PARMS;
        !          2548: typedef MCI_ANIM_UPDATE_PARMS     * LPMCI_ANIM_UPDATE_PARMS;
        !          2549: 
        !          2550: 
        !          2551: /*****************************************************************************
        !          2552: 
        !          2553:     Standard command parameters for overlay
        !          2554: 
        !          2555: *****************************************************************************/
        !          2556: 
        !          2557: 
        !          2558: // flags for dwFlags parameter of MCI_OPEN command message
        !          2559: #define MCI_OVLY_OPEN_WS                0x00010000L
        !          2560: #define MCI_OVLY_OPEN_PARENT            0x00020000L
        !          2561: 
        !          2562: // flags for dwFlags parameter of MCI_STATUS command message
        !          2563: #define MCI_OVLY_STATUS_HWND            0x00004001L
        !          2564: #define MCI_OVLY_STATUS_STRETCH         0x00004002L
        !          2565: 
        !          2566: // flags for dwFlags parameter of MCI_INFO command message
        !          2567: #define MCI_OVLY_INFO_TEXT              0x00010000L
        !          2568: 
        !          2569: // flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block
        !          2570: #define MCI_OVLY_GETDEVCAPS_CAN_STRETCH 0x00004001L
        !          2571: #define MCI_OVLY_GETDEVCAPS_CAN_FREEZE  0x00004002L
        !          2572: #define MCI_OVLY_GETDEVCAPS_MAX_WINDOWS 0x00004003L
        !          2573: 
        !          2574: // flags for dwFlags parameter of MCI_WINDOW command message
        !          2575: #define MCI_OVLY_WINDOW_HWND            0x00010000L
        !          2576: #define MCI_OVLY_WINDOW_STATE           0x00040000L
        !          2577: #define MCI_OVLY_WINDOW_TEXT            0x00080000L
        !          2578: #define MCI_OVLY_WINDOW_ENABLE_STRETCH  0x00100000L
        !          2579: #define MCI_OVLY_WINDOW_DISABLE_STRETCH 0x00200000L
        !          2580: 
        !          2581: // flags for hWnd parameter of MCI_OVLY_WINDOW_PARMS parameter block
        !          2582: #define MCI_OVLY_WINDOW_DEFAULT         0x00000000L
        !          2583: 
        !          2584: // flags for dwFlags parameter of MCI_PUT command message
        !          2585: #define MCI_OVLY_RECT                   0x00010000L
        !          2586: #define MCI_OVLY_PUT_SOURCE             0x00020000L
        !          2587: #define MCI_OVLY_PUT_DESTINATION        0x00040000L
        !          2588: #define MCI_OVLY_PUT_FRAME              0x00080000L
        !          2589: #define MCI_OVLY_PUT_VIDEO              0x00100000L
        !          2590: 
        !          2591: // flags for dwFlags parameter of MCI_WHERE command message
        !          2592: #define MCI_OVLY_WHERE_SOURCE           0x00020000L
        !          2593: #define MCI_OVLY_WHERE_DESTINATION      0x00040000L
        !          2594: #define MCI_OVLY_WHERE_FRAME            0x00080000L
        !          2595: #define MCI_OVLY_WHERE_VIDEO            0x00100000L
        !          2596: 
        !          2597: #define MCI_OVLY_UPDATE_HDC             0x00020000L  // MCI_UPDATE
        !          2598: 
        !          2599: // parameter block for MCI_OPEN command message (ascii version)
        !          2600: typedef struct tagMCI_OVLY_OPEN_PARMSA {
        !          2601:     DWORD   dwCallback;
        !          2602:     MCIDEVICEID wDeviceID;
        !          2603: //  MCIDEVICEID wReserved0;    // While MCIDEVICEID is a WORD
        !          2604:     LPCSTR   lpstrDeviceType;
        !          2605:     LPCSTR   lpstrElementName;
        !          2606:     LPCSTR   lpstrAlias;
        !          2607:     DWORD   dwStyle;
        !          2608:     HWND    hWndParent;
        !          2609:  } MCI_OVLY_OPEN_PARMSA;
        !          2610: typedef MCI_OVLY_OPEN_PARMSA     *PMCI_OVLY_OPEN_PARMSA;
        !          2611: typedef MCI_OVLY_OPEN_PARMSA     *LPMCI_OVLY_OPEN_PARMSA;
        !          2612: 
        !          2613: // parameter block for MCI_OPEN command message (unicode version)
        !          2614: typedef struct tagMCI_OVLY_OPEN_PARMSW {
        !          2615:     DWORD   dwCallback;
        !          2616:     MCIDEVICEID wDeviceID;
        !          2617: //  MCIDEVICEID wReserved0;    // While MCIDEVICEID is a WORD
        !          2618:     LPCWSTR   lpstrDeviceType;
        !          2619:     LPCWSTR   lpstrElementName;
        !          2620:     LPCWSTR   lpstrAlias;
        !          2621:     DWORD   dwStyle;
        !          2622:     HWND    hWndParent;
        !          2623:  } MCI_OVLY_OPEN_PARMSW;
        !          2624: typedef MCI_OVLY_OPEN_PARMSW     *PMCI_OVLY_OPEN_PARMSW;
        !          2625: typedef MCI_OVLY_OPEN_PARMSW     *LPMCI_OVLY_OPEN_PARMSW;
        !          2626: 
        !          2627: #ifdef UNICODE
        !          2628: #define MCI_OVLY_OPEN_PARMS     MCI_OVLY_OPEN_PARMSW
        !          2629: #define PMCI_OVLY_OPEN_PARMS    PMCI_OVLY_OPEN_PARMSW
        !          2630: #define LPMCI_OVLY_OPEN_PARMS   LPMCI_OVLY_OPEN_PARMSW
        !          2631: #else
        !          2632: #define MCI_OVLY_OPEN_PARMS     MCI_OVLY_OPEN_PARMSA
        !          2633: #define PMCI_OVLY_OPEN_PARMS    PMCI_OVLY_OPEN_PARMSWA
        !          2634: #define LPMCI_OVLY_OPEN_PARMS   LPMCI_OVLY_OPEN_PARMSA
        !          2635: #endif
        !          2636: 
        !          2637: // parameter block for MCI_WINDOW command message (ascii version)
        !          2638: typedef struct tagMCI_OVLY_WINDOW_PARMSA {
        !          2639:     DWORD   dwCallback;
        !          2640:     HWND    hWnd;
        !          2641:     UINT    nCmdShow;
        !          2642:     LPCSTR   lpstrText;
        !          2643: } MCI_OVLY_WINDOW_PARMSA;
        !          2644: typedef MCI_OVLY_WINDOW_PARMSA     * PMCI_OVLY_WINDOW_PARMSA;
        !          2645: typedef MCI_OVLY_WINDOW_PARMSA     * LPMCI_OVLY_WINDOW_PARMSA;
        !          2646: 
        !          2647: // parameter block for MCI_WINDOW command message (unicode version)
        !          2648: typedef struct tagMCI_OVLY_WINDOW_PARMSW {
        !          2649:     DWORD   dwCallback;
        !          2650:     HWND    hWnd;
        !          2651:     UINT    nCmdShow;
        !          2652:     LPCWSTR   lpstrText;
        !          2653: } MCI_OVLY_WINDOW_PARMSW;
        !          2654: typedef MCI_OVLY_WINDOW_PARMSW     * PMCI_OVLY_WINDOW_PARMSW;
        !          2655: typedef MCI_OVLY_WINDOW_PARMSW     * LPMCI_OVLY_WINDOW_PARMSW;
        !          2656: 
        !          2657: #ifdef UNICODE
        !          2658: #define MCI_OVLY_WINDOW_PARMS     MCI_OVLY_WINDOW_PARMSW
        !          2659: #define PMCI_OVLY_WINDOW_PARMS    PMCI_OVLY_WINDOW_PARMSW
        !          2660: #define LPMCI_OVLY_WINDOW_PARMS   LPMCI_OVLY_WINDOW_PARMSW
        !          2661: #else
        !          2662: #define MCI_OVLY_WINDOW_PARMS     MCI_OVLY_WINDOW_PARMSA
        !          2663: #define PMCI_OVLY_WINDOW_PARMS    PMCI_OVLY_WINDOW_PARMSWA
        !          2664: #define LPMCI_OVLY_WINDOW_PARMS   LPMCI_OVLY_WINDOW_PARMSA
        !          2665: #endif
        !          2666: 
        !          2667: // parameter block for MCI_PUT, MCI_UPDATE, and MCI_WHERE command messages
        !          2668: typedef struct tagMCI_OVLY_RECT_PARMS {
        !          2669:     DWORD   dwCallback;
        !          2670: #ifdef MCI_USE_OFFEXT
        !          2671:     POINT   ptOffset;
        !          2672:     POINT   ptExtent;
        !          2673: #else   //ifdef MCI_USE_OFFEXT
        !          2674:     RECT    rc;
        !          2675: #endif  //ifdef MCI_USE_OFFEXT
        !          2676: } MCI_OVLY_RECT_PARMS;
        !          2677: typedef MCI_OVLY_RECT_PARMS     * PMCI_OVLY_RECT_PARMS;
        !          2678: typedef MCI_OVLY_RECT_PARMS     * LPMCI_OVLY_RECT_PARMS;
        !          2679: 
        !          2680: 
        !          2681: typedef struct tagMCI_OVLY_UPDATE_PARMS {            // new ???
        !          2682:     DWORD   dwCallback;
        !          2683:     RECT    rc;
        !          2684:     HDC     hDC;
        !          2685: } MCI_OVLY_UPDATE_PARMS;
        !          2686: typedef MCI_OVLY_UPDATE_PARMS   * PMCI_OVLY_UPDATE_PARMS;
        !          2687: typedef MCI_OVLY_UPDATE_PARMS   * LPMCI_OVLY_UPDATE_PARMS;
        !          2688: 
        !          2689: // parameter block for MCI_SAVE command message (ascii version)
        !          2690: typedef struct tagMCI_OVLY_SAVE_PARMSA {
        !          2691:     DWORD   dwCallback;
        !          2692:     LPCSTR   lpfilename;
        !          2693:     RECT    rc;
        !          2694: } MCI_OVLY_SAVE_PARMSA;
        !          2695: typedef MCI_OVLY_SAVE_PARMSA     * PMCI_OVLY_SAVE_PARMSA;
        !          2696: typedef MCI_OVLY_SAVE_PARMSA     * LPMCI_OVLY_SAVE_PARMSA;
        !          2697: 
        !          2698: // parameter block for MCI_SAVE command message (unicode version)
        !          2699: typedef struct tagMCI_OVLY_SAVE_PARMSW {
        !          2700:     DWORD   dwCallback;
        !          2701:     LPCWSTR   lpfilename;
        !          2702:     RECT    rc;
        !          2703: } MCI_OVLY_SAVE_PARMSW;
        !          2704: typedef MCI_OVLY_SAVE_PARMSW     * PMCI_OVLY_SAVE_PARMSW;
        !          2705: typedef MCI_OVLY_SAVE_PARMSW     * LPMCI_OVLY_SAVE_PARMSW;
        !          2706: 
        !          2707: #ifdef UNICODE
        !          2708: #define MCI_OVLY_SAVE_PARMS     MCI_OVLY_SAVE_PARMSW
        !          2709: #define PMCI_OVLY_SAVE_PARMS    PMCI_OVLY_SAVE_PARMSW
        !          2710: #define LPMCI_OVLY_SAVE_PARMS   LPMCI_OVLY_SAVE_PARMSW
        !          2711: #else
        !          2712: #define MCI_OVLY_SAVE_PARMS     MCI_OVLY_SAVE_PARMSA
        !          2713: #define PMCI_OVLY_SAVE_PARMS    PMCI_OVLY_SAVE_PARMSWA
        !          2714: #define LPMCI_OVLY_SAVE_PARMS   LPMCI_OVLY_SAVE_PARMSA
        !          2715: #endif
        !          2716: 
        !          2717: // parameter block for MCI_LOAD command message (ascii version)
        !          2718: typedef struct tagMCI_OVLY_LOAD_PARMSA {
        !          2719:     DWORD   dwCallback;
        !          2720:     LPCSTR   lpfilename;
        !          2721:     RECT    rc;
        !          2722: } MCI_OVLY_LOAD_PARMSA;
        !          2723: typedef MCI_OVLY_LOAD_PARMSA     * PMCI_OVLY_LOAD_PARMSA;
        !          2724: typedef MCI_OVLY_LOAD_PARMSA     * LPMCI_OVLY_LOAD_PARMSA;
        !          2725: 
        !          2726: // parameter block for MCI_LOAD command message (unicode version)
        !          2727: typedef struct tagMCI_OVLY_LOAD_PARMSW {
        !          2728:     DWORD   dwCallback;
        !          2729:     LPCWSTR   lpfilename;
        !          2730:     RECT    rc;
        !          2731: } MCI_OVLY_LOAD_PARMSW;
        !          2732: typedef MCI_OVLY_LOAD_PARMSW     * PMCI_OVLY_LOAD_PARMSW;
        !          2733: typedef MCI_OVLY_LOAD_PARMSW     * LPMCI_OVLY_LOAD_PARMSW;
        !          2734: 
        !          2735: #ifdef UNICODE
        !          2736: #define MCI_OVLY_LOAD_PARMS     MCI_OVLY_LOAD_PARMSW
        !          2737: #define PMCI_OVLY_LOAD_PARMS    PMCI_OVLY_LOAD_PARMSW
        !          2738: #define LPMCI_OVLY_LOAD_PARMS   LPMCI_OVLY_LOAD_PARMSW
        !          2739: #else
        !          2740: #define MCI_OVLY_LOAD_PARMS     MCI_OVLY_LOAD_PARMSA
        !          2741: #define PMCI_OVLY_LOAD_PARMS    PMCI_OVLY_LOAD_PARMSWA
        !          2742: #define LPMCI_OVLY_LOAD_PARMS   LPMCI_OVLY_LOAD_PARMSA
        !          2743: #endif
        !          2744: 
        !          2745: 
        !          2746: 
        !          2747: #endif  //ifndef MMNOMCI
        !          2748: 
        !          2749: 
        !          2750: /****************************************************************************
        !          2751: 
        !          2752:                         DISPLAY Driver extensions
        !          2753: 
        !          2754: ****************************************************************************/
        !          2755: 
        !          2756: #ifndef C1_TRANSPARENT
        !          2757:     #define CAPS1           94          // other caps
        !          2758:     #define C1_TRANSPARENT  0x0001      // new raster cap
        !          2759:     #define NEWTRANSPARENT  3           // use with SetBkMode()
        !          2760: 
        !          2761:     #define QUERYROPSUPPORT 40          // use to determine ROP support
        !          2762: #endif  //ifndef C1_TRANSPARENT
        !          2763: 
        !          2764: /****************************************************************************
        !          2765: 
        !          2766:                         DIB Driver extensions
        !          2767: 
        !          2768: ****************************************************************************/
        !          2769: 
        !          2770: #define SELECTDIB       41                      // DIB.DRV select dib escape
        !          2771: #define DIBINDEX(n)     MAKELONG((n),0x10FF)
        !          2772: 
        !          2773: 
        !          2774: /****************************************************************************
        !          2775: 
        !          2776:                         ScreenSaver support
        !          2777: 
        !          2778:     The current application will receive a syscommand of SC_SCREENSAVE just
        !          2779:     before the screen saver is invoked.  If the app wishes to prevent a
        !          2780:     screen save, return non-zero value, otherwise call DefWindowProc().
        !          2781: 
        !          2782: ****************************************************************************/
        !          2783: 
        !          2784: #ifndef SC_SCREENSAVE
        !          2785: 
        !          2786:     #define SC_SCREENSAVE   0xF140
        !          2787: 
        !          2788: #endif  //ifndef SC_SCREENSAVE
        !          2789: 
        !          2790: #endif // _MMSYSTEM_

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.