Annotation of mstools/h/mmsystem.h, revision 1.1.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.