#
#
#            Nimrod's Runtime Library
#        (c) Copyright 2006 Andreas Rumpf
#
#    See the file "copying.txt", included in this
#    distribution, for details about the copyright.
#

#*********************************
#*******************************
# Generated by c2pas32  v0.9b
#     Fixed by P.V.Ozerski
# (c) 2001 Oleg Bulychov
#     Original C header file
# Gladiators Software
#     (created at Dec-03-1998)
# http://www.astonshell.com/
#   from LCC-win32 is used
#*********************************
#   LCC-win32 (c) Jacob Navia
#*******************************

{.deadCodeElim: on.}

import
  windows

type
  MMRESULT* = UINT
  MMVERSION* = UINT
  HWAVEOUT* = THandle
  LPHWAVEOUT* = ptr HWAVEOUT
  HWAVEIN* = THandle
  LPHWAVEIN* = ptr HWAVEOUT
  HWAVE* = THandle
  LPHWAVE* = ptr THandle
  LPUINT* = ptr UINT

const
  MAXPNAMELEN* = 32
  MAXERRORLENGTH* = 256
  MAX_JOYSTICKOEMVXDNAME* = 260
  MM_MIDI_MAPPER* = 1
  MM_WAVE_MAPPER* = 2
  MM_SNDBLST_MIDIOUT* = 3
  MM_SNDBLST_MIDIIN* = 4
  MM_SNDBLST_SYNTH* = 5
  MM_SNDBLST_WAVEOUT* = 6
  MM_SNDBLST_WAVEIN* = 7
  MM_ADLIB* = 9
  MM_MPU401_MIDIOUT* = 10
  MM_MPU401_MIDIIN* = 11
  MM_PC_JOYSTICK* = 12
  TIME_MS* = 1
  TIME_SAMPLES* = 2
  TIME_BYTES* = 4
  TIME_SMPTE* = 8
  TIME_MIDI* = 16
  TIME_TICKS* = 32
  MM_MCINOTIFY* = 0x000003B9
  MM_WOM_OPEN* = 0x000003BB
  MM_WOM_CLOSE* = 0x000003BC
  MM_WOM_DONE* = 0x000003BD
  MM_WIM_OPEN* = 0x000003BE
  MM_WIM_CLOSE* = 0x000003BF
  MM_WIM_DATA* = 0x000003C0
  MM_MIM_OPEN* = 0x000003C1
  MM_MIM_CLOSE* = 0x000003C2
  MM_MIM_DATA* = 0x000003C3
  MM_MIM_LONGDATA* = 0x000003C4
  MM_MIM_ERROR* = 0x000003C5
  MM_MIM_LONGERROR* = 0x000003C6
  MM_MOM_OPEN* = 0x000003C7
  MM_MOM_CLOSE* = 0x000003C8
  MM_MOM_DONE* = 0x000003C9
  MM_DRVM_OPEN* = 0x000003D0
  MM_DRVM_CLOSE* = 0x000003D1
  MM_DRVM_DATA* = 0x000003D2
  MM_DRVM_ERROR* = 0x000003D3
  MM_STREAM_OPEN* = 0x000003D4
  MM_STREAM_CLOSE* = 0x000003D5
  MM_STREAM_DONE* = 0x000003D6
  MM_STREAM_ERROR* = 0x000003D7
  MM_MOM_POSITIONCB* = 0x000003CA
  MM_MCISIGNAL* = 0x000003CB
  WAVE_INVALIDFORMAT* = 0
  WAVE_FORMAT_1M08* = 1
  WAVE_FORMAT_1S08* = 2
  WAVE_FORMAT_1M16* = 4
  WAVE_FORMAT_1S16* = 8
  WAVE_FORMAT_2M08* = 16
  WAVE_FORMAT_2S08* = 32
  WAVE_FORMAT_2M16* = 64
  WAVE_FORMAT_2S16* = 128
  WAVE_FORMAT_4M08* = 256
  WAVE_FORMAT_4S08* = 512
  WAVE_FORMAT_4M16* = 0x00000400
  WAVE_FORMAT_4S16* = 0x00000800
  MM_MIM_MOREDATA* = 0x000003CC
  MM_MIXM_LINE_CHANGE* = 0x000003D0
  MM_MIXM_CONTROL_CHANGE* = 0x000003D1
  MMSYSERR_BASE* = 0
  WAVERR_BASE* = 32
  MIDIERR_BASE* = 64
  TIMERR_BASE* = 96
  JOYERR_BASE* = 160
  MCIERR_BASE* = 256
  MIXERR_BASE* = 1024
  MCI_STRING_OFFSET* = 512
  MCI_VD_OFFSET* = 1024
  MCI_CD_OFFSET* = 1088
  MCI_WAVE_OFFSET* = 1152
  MCI_SEQ_OFFSET* = 1216
  MMSYSERR_NOERROR* = 0
  MMSYSERR_ERROR* = (MMSYSERR_BASE + 1)
  MMSYSERR_BADDEVICEID* = (MMSYSERR_BASE + 2)
  MMSYSERR_NOTENABLED* = (MMSYSERR_BASE + 3)
  MMSYSERR_ALLOCATED* = (MMSYSERR_BASE + 4)
  MMSYSERR_INVALHANDLE* = (MMSYSERR_BASE + 5)
  MMSYSERR_NODRIVER* = (MMSYSERR_BASE + 6)
  MMSYSERR_NOMEM* = (MMSYSERR_BASE + 7)
  MMSYSERR_NOTSUPPORTED* = (MMSYSERR_BASE + 8)
  MMSYSERR_BADERRNUM* = (MMSYSERR_BASE + 9)
  MMSYSERR_INVALFLAG* = (MMSYSERR_BASE + 10)
  MMSYSERR_INVALPARAM* = (MMSYSERR_BASE + 11)
  MMSYSERR_HANDLEBUSY* = (MMSYSERR_BASE + 12)
  MMSYSERR_INVALIDALIAS* = (MMSYSERR_BASE + 13)
  MMSYSERR_BADDB* = (MMSYSERR_BASE + 14)
  MMSYSERR_KEYNOTFOUND* = (MMSYSERR_BASE + 15)
  MMSYSERR_READERROR* = (MMSYSERR_BASE + 16)
  MMSYSERR_WRITEERROR* = (MMSYSERR_BASE + 17)
  MMSYSERR_DELETEERROR* = (MMSYSERR_BASE + 18)
  MMSYSERR_VALNOTFOUND* = (MMSYSERR_BASE + 19)
  MMSYSERR_NODRIVERCB* = (MMSYSERR_BASE + 20)
  MMSYSERR_LASTERROR* = (MMSYSERR_BASE + 20)
  MM_JOY1MOVE* = 0x000003A0
  MM_JOY2MOVE* = 0x000003A1
  MM_JOY1ZMOVE* = 0x000003A2
  MM_JOY2ZMOVE* = 0x000003A3
  MM_JOY1BUTTONDOWN* = 0x000003B5
  MM_JOY2BUTTONDOWN* = 0x000003B6
  MM_JOY1BUTTONUP* = 0x000003B7
  MM_JOY2BUTTONUP* = 0x000003B8
  CALLBACK_TYPEMASK* = 0x00070000
  CALLBACK_NULL* = 0
  CALLBACK_EVENT* = 0x00050000
  CALLBACK_WINDOW* = 0x00010000
  CALLBACK_TASK* = 0x00020000
  CALLBACK_THREAD* = CALLBACK_TASK
  CALLBACK_FUNCTION* = 0x00030000

type
  HDRVR* = THandle

const
  DRV_LOAD* = 1
  DRV_ENABLE* = 2
  DRV_OPEN* = 0x00000003
  DRV_CLOSE* = 4
  DRV_DISABLE* = 0x00000005
  DRV_FREE* = 0x00000006
  DRV_CONFIGURE* = 0x00000007
  DRV_QUERYCONFIGURE* = 8
  DRV_INSTALL* = 0x00000009
  DRV_REMOVE* = 0x0000000A
  DRV_EXITSESSION* = 0x0000000B
  DRV_POWER* = 0x0000000F
  DRV_RESERVED* = 0x00000800
  DRV_USER* = 0x00004000
  DRVCNF_CANCEL* = 0
  DRVCNF_OK* = 1
  DRVCNF_RESTART* = 2
  DRV_CANCEL* = DRVCNF_CANCEL
  DRV_OK* = DRVCNF_OK
  DRV_RESTART* = DRVCNF_RESTART
  DRV_MCI_FIRST* = DRV_RESERVED
  DRV_MCI_LAST* = (DRV_RESERVED + 0x00000FFF)

type
  PDRVCALLBACK* = proc (hdrvr: tHandle, uMsg: UINT, dwUser, dw1, dw2: DWORD){.
      stdcall.}

proc sndPlaySoundA*(Name: LPCSTR, flags: UINT): BOOL{.stdcall,
    dynlib: "winmm.dll", importc: "sndPlaySoundA".}
proc sndPlaySoundW*(Name: LPCWSTR, flags: UINT): BOOL{.stdcall,
    dynlib: "winmm.dll", importc: "sndPlaySoundW".}
when defined(winUNICODE):
  proc sndPlaySound*(Name: cstring, flags: UINT): BOOL{.stdcall,
      dynlib: "winmm.dll", importc: "sndPlaySoundW".}
else:
  proc sndPlaySound*(Name: cstring, flags: UINT): BOOL{.stdcall,
      dynlib: "winmm.dll", importc: "sndPlaySoundA".}
const
  SND_NODEFAULT* = 2
  SND_MEMORY* = 4
  SND_LOOP* = 8
  SND_NOSTOP* = 16
  SND_SYNC* = 0
  SND_ASYNC* = 1
  SND_PURGE* = 64
  SND_APPLICATION* = 128
  SND_ALIAS_START* = 0
  SND_ALIAS_SYSTEMHAND* = 18515
  SND_ALIAS_SYSTEMEXCLAMATION* = 8531
  SND_ALIAS_SYSTEMASTERISK* = 10835
  SND_ALIAS_SYSTEMQUESTION* = 16211
  SND_ALIAS_SYSTEMDEFAULT* = 17491
  SND_ALIAS_SYSTEMEXIT* = 17747
  SND_ALIAS_SYSTEMSTART* = 21331
  SND_ALIAS_SYSTEMWELCOME* = 22355
  SND_NOWAIT* = 0x00002000
  SND_ALIAS* = 0x00010000
  SND_ALIAS_ID* = 0x00110000
  SND_FILENAME* = 0x00020000
  SND_RESOURCE* = 0x00040004
  WAVERR_BADFORMAT* = (WAVERR_BASE + 0)
  WAVERR_STILLPLAYING* = (WAVERR_BASE + 1)
  WAVERR_UNPREPARED* = (WAVERR_BASE + 2)
  WAVERR_SYNC* = (WAVERR_BASE + 3)
  WAVERR_LASTERROR* = (WAVERR_BASE + 3)
  WOM_OPEN* = MM_WOM_OPEN
  WOM_CLOSE* = MM_WOM_CLOSE
  WOM_DONE* = MM_WOM_DONE
  WIM_OPEN* = MM_WIM_OPEN
  WIM_CLOSE* = MM_WIM_CLOSE
  WIM_DATA* = MM_WIM_DATA
  WAVE_MAPPER* = UINT(- 1)
  WAVE_FORMAT_QUERY* = 1
  WAVE_ALLOWSYNC* = 2
  WAVE_MAPPED* = 4
  WAVE_FORMAT_DIRECT* = 8
  WAVE_FORMAT_DIRECT_QUERY* = (WAVE_FORMAT_QUERY Or WAVE_FORMAT_DIRECT)
  MIM_OPEN* = MM_MIM_OPEN
  MIM_CLOSE* = MM_MIM_CLOSE
  MIM_DATA* = MM_MIM_DATA
  MIM_LONGDATA* = MM_MIM_LONGDATA
  MIM_ERROR* = MM_MIM_ERROR
  MIM_LONGERROR* = MM_MIM_LONGERROR
  MOM_OPEN* = MM_MOM_OPEN
  MOM_CLOSE* = MM_MOM_CLOSE
  MOM_DONE* = MM_MOM_DONE
  MIM_MOREDATA* = MM_MIM_MOREDATA
  MOM_POSITIONCB* = MM_MOM_POSITIONCB
  MIDIMAPPER* = UINT(- 1)
  MIDI_IO_STATUS* = 32
  MIDI_CACHE_ALL* = 1
  MIDI_CACHE_BESTFIT* = 2
  MIDI_CACHE_QUERY* = 3
  MIDI_UNCACHE* = 4
  WHDR_DONE* = 1
  WHDR_PREPARED* = 2
  WHDR_BEGINLOOP* = 0x00000004
  WHDR_ENDLOOP* = 0x00000008
  WHDR_INQUEUE* = 0x00000010
  MOD_MIDIPORT* = 1
  MOD_SYNTH* = 2
  MOD_SQSYNTH* = 3
  MOD_FMSYNTH* = 4
  MOD_MAPPER* = 5
  MIDICAPS_VOLUME* = 1
  MIDICAPS_LRVOLUME* = 2
  MIDICAPS_CACHE* = 4
  MIDICAPS_STREAM* = 8
  MHDR_DONE* = 1
  MHDR_PREPARED* = 2
  MHDR_INQUEUE* = 0x00000004
  MHDR_ISSTRM* = 0x00000008
  MEVT_F_SHORT* = 0
  MEVT_F_LONG* = 0x80000000
  MEVT_F_CALLBACK* = 0x40000000

proc MEVT_EVENTTYPE*(x: int8): int8
proc MEVT_EVENTPARM*(x: DWORD): DWORD
const
  MEVT_SHORTMSG* = 0
  MEVT_TEMPO* = 0x00000001
  MEVT_NOP* = 0x00000002
  MEVT_LONGMSG* = 0x00000080
  MEVT_COMMENT* = 0x00000082
  MEVT_VERSION* = 0x00000084
  MIDISTRM_ERROR* = - 2
  MIDIPROP_SET* = 0x80000000
  MIDIPROP_GET* = 0x40000000
  MIDIPROP_TIMEDIV* = 1
  MIDIPROP_TEMPO* = 2
  MIXERLINE_LINEF_ACTIVE* = 1
  MIXERLINE_LINEF_DISCONNECTED* = 0x00008000
  MIXERLINE_LINEF_SOURCE* = 0x80000000
  MIXERLINE_COMPONENTTYPE_DST_FIRST* = 0
  MIXERLINE_COMPONENTTYPE_DST_UNDEFINED* = (MIXERLINE_COMPONENTTYPE_DST_FIRST)
  MIXERLINE_COMPONENTTYPE_DST_DIGITAL* = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 1)
  MIXERLINE_COMPONENTTYPE_DST_LINE* = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 2)
  MIXERLINE_COMPONENTTYPE_DST_MONITOR* = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 3)
  MIXERLINE_COMPONENTTYPE_DST_SPEAKERS* = (MIXERLINE_COMPONENTTYPE_DST_FIRST +
      4)
  MIXERLINE_COMPONENTTYPE_DST_HEADPHONES* = (
    MIXERLINE_COMPONENTTYPE_DST_FIRST + 5)
  MIXERLINE_COMPONENTTYPE_DST_TELEPHONE* = (
    MIXERLINE_COMPONENTTYPE_DST_FIRST + 6)
  MIXERLINE_COMPONENTTYPE_DST_WAVEIN* = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 7)
  MIXERLINE_COMPONENTTYPE_DST_VOICEIN* = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
  MIXERLINE_COMPONENTTYPE_DST_LAST* = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
  MIXERLINE_COMPONENTTYPE_SRC_FIRST* = 0x00001000
  MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED* = (
    MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0)
  MIXERLINE_COMPONENTTYPE_SRC_DIGITAL* = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1)
  MIXERLINE_COMPONENTTYPE_SRC_LINE* = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)
  MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE* = (
    MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3)
  MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER* = (
    MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4)
  MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC* = (
    MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5)
  MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE* = (
    MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6)
  MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER* = (
    MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7)
  MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT* = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8)
  MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY* = (
    MIXERLINE_COMPONENTTYPE_SRC_FIRST + 9)
  MIXERLINE_COMPONENTTYPE_SRC_ANALOG* = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
  MIXERLINE_COMPONENTTYPE_SRC_LAST* = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
  MIXERLINE_TARGETTYPE_UNDEFINED* = 0
  MIXERLINE_TARGETTYPE_WAVEOUT* = 1
  MIXERLINE_TARGETTYPE_WAVEIN* = 2
  MIXERLINE_TARGETTYPE_MIDIOUT* = 3
  MIXERLINE_TARGETTYPE_MIDIIN* = 4
  MIXERLINE_TARGETTYPE_AUX* = 5
  MIDIERR_UNPREPARED* = (MIDIERR_BASE + 0)
  MIDIERR_STILLPLAYING* = (MIDIERR_BASE + 1)
  MIDIERR_NOMAP* = (MIDIERR_BASE + 2)
  MIDIERR_NOTREADY* = (MIDIERR_BASE + 3)
  MIDIERR_NODEVICE* = (MIDIERR_BASE + 4)
  MIDIERR_INVALIDSETUP* = (MIDIERR_BASE + 5)
  MIDIERR_BADOPENMODE* = (MIDIERR_BASE + 6)
  MIDIERR_DONT_CONTINUE* = (MIDIERR_BASE + 7)
  MIDIERR_LASTERROR* = (MIDIERR_BASE + 7)
  MIXERCONTROL_CONTROLF_UNIFORM* = 1
  MIXERCONTROL_CONTROLF_MULTIPLE* = 2
  MIXERCONTROL_CONTROLF_DISABLED* = 0x80000000
  MIXERCONTROL_CT_CLASS_MASK* = 0xF0000000
  MIXERCONTROL_CT_CLASS_CUSTOM* = 0
  MIXERCONTROL_CT_CLASS_METER* = 0x10000000
  MIXERCONTROL_CT_CLASS_SWITCH* = 0x20000000
  MIXERCONTROL_CT_CLASS_NUMBER* = 0x30000000
  MIXERCONTROL_CT_CLASS_SLIDER* = 0x40000000
  MIXERCONTROL_CT_CLASS_FADER* = 0x50000000
  MIXERCONTROL_CT_CLASS_TIME* = 0x60000000
  MIXERCONTROL_CT_CLASS_LIST* = 0x70000000
  MIXERCONTROL_CT_SUBCLASS_MASK* = 0x0F000000
  MIXERCONTROL_CT_SC_SWITCH_BOOLEAN* = 0
  MIXERCONTROL_CT_SC_SWITCH_BUTTON* = 0x01000000
  MIXERCONTROL_CT_SC_METER_POLLED* = 0
  MIXERCONTROL_CT_SC_TIME_MICROSECS* = 0
  MIXERCONTROL_CT_SC_TIME_MILLISECS* = 0x01000000
  MIXERCONTROL_CT_SC_LIST_SINGLE* = 0
  MIXERCONTROL_CT_SC_LIST_MULTIPLE* = 0x01000000
  MIXERCONTROL_CT_UNITS_MASK* = 0x00FF0000
  MIXERCONTROL_CT_UNITS_CUSTOM* = 0
  MIXERCONTROL_CT_UNITS_BOOLEAN* = 0x00010000
  MIXERCONTROL_CT_UNITS_SIGNED* = 0x00020000
  MIXERCONTROL_CT_UNITS_UNSIGNED* = 0x00030000
  MIXERCONTROL_CT_UNITS_DECIBELS* = 0x00040000
  MIXERCONTROL_CT_UNITS_PERCENT* = 0x00050000
  MIXERCONTROL_CONTROLTYPE_CUSTOM* = (
    MIXERCONTROL_CT_CLASS_CUSTOM Or MIXERCONTROL_CT_UNITS_CUSTOM)
  MIXERCONTROL_CONTROLTYPE_BOOLEANMETER* = (MIXERCONTROL_CT_CLASS_METER Or
      MIXERCONTROL_CT_SC_METER_POLLED Or MIXERCONTROL_CT_UNITS_BOOLEAN)
  MIXERCONTROL_CONTROLTYPE_SIGNEDMETER* = (MIXERCONTROL_CT_CLASS_METER Or
      MIXERCONTROL_CT_SC_METER_POLLED Or MIXERCONTROL_CT_UNITS_SIGNED)
  MIXERCONTROL_CONTROLTYPE_PEAKMETER* = (
    MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1)
  MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER* = (MIXERCONTROL_CT_CLASS_METER Or
      MIXERCONTROL_CT_SC_METER_POLLED Or MIXERCONTROL_CT_UNITS_UNSIGNED)
  MIXERCONTROL_CONTROLTYPE_BOOLEAN* = (MIXERCONTROL_CT_CLASS_SWITCH Or
      MIXERCONTROL_CT_SC_SWITCH_BOOLEAN Or MIXERCONTROL_CT_UNITS_BOOLEAN)
  MIXERCONTROL_CONTROLTYPE_ONOFF* = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 1)
  MIXERCONTROL_CONTROLTYPE_MUTE* = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 2)
  MIXERCONTROL_CONTROLTYPE_MONO* = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 3)
  MIXERCONTROL_CONTROLTYPE_LOUDNESS* = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 4)
  MIXERCONTROL_CONTROLTYPE_STEREOENH* = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 5)
  MIXERCONTROL_CONTROLTYPE_BUTTON* = (MIXERCONTROL_CT_CLASS_SWITCH Or
      MIXERCONTROL_CT_SC_SWITCH_BUTTON Or MIXERCONTROL_CT_UNITS_BOOLEAN)
  MIXERCONTROL_CONTROLTYPE_DECIBELS* = (
    MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_DECIBELS)
  MIXERCONTROL_CONTROLTYPE_SIGNED* = (
    MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_SIGNED)
  MIXERCONTROL_CONTROLTYPE_UNSIGNED* = (
    MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_UNSIGNED)
  MIXERCONTROL_CONTROLTYPE_PERCENT* = (
    MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_PERCENT)
  MIXERCONTROL_CONTROLTYPE_SLIDER* = (
    MIXERCONTROL_CT_CLASS_SLIDER Or MIXERCONTROL_CT_UNITS_SIGNED)
  MIXERCONTROL_CONTROLTYPE_PAN* = (MIXERCONTROL_CONTROLTYPE_SLIDER + 1)
  MIXERCONTROL_CONTROLTYPE_QSOUNDPAN* = (MIXERCONTROL_CONTROLTYPE_SLIDER + 2)
  MIXERCONTROL_CONTROLTYPE_FADER* = (
    MIXERCONTROL_CT_CLASS_FADER Or MIXERCONTROL_CT_UNITS_UNSIGNED)
  MIXERCONTROL_CONTROLTYPE_VOLUME* = (MIXERCONTROL_CONTROLTYPE_FADER + 1)
  MIXERCONTROL_CONTROLTYPE_BASS* = (MIXERCONTROL_CONTROLTYPE_FADER + 2)
  MIXERCONTROL_CONTROLTYPE_TREBLE* = (MIXERCONTROL_CONTROLTYPE_FADER + 3)
  MIXERCONTROL_CONTROLTYPE_EQUALIZER* = (MIXERCONTROL_CONTROLTYPE_FADER + 4)
  MIXERCONTROL_CONTROLTYPE_SINGLESELECT* = (MIXERCONTROL_CT_CLASS_LIST Or
      MIXERCONTROL_CT_SC_LIST_SINGLE Or MIXERCONTROL_CT_UNITS_BOOLEAN)
  MIXERCONTROL_CONTROLTYPE_MUX* = (MIXERCONTROL_CONTROLTYPE_SINGLESELECT + 1)
  MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT* = (MIXERCONTROL_CT_CLASS_LIST Or
      MIXERCONTROL_CT_SC_LIST_MULTIPLE Or MIXERCONTROL_CT_UNITS_BOOLEAN)
  MIXERCONTROL_CONTROLTYPE_MIXER* = (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT +
      1)
  MIXERCONTROL_CONTROLTYPE_MICROTIME* = (MIXERCONTROL_CT_CLASS_TIME Or
      MIXERCONTROL_CT_SC_TIME_MICROSECS Or MIXERCONTROL_CT_UNITS_UNSIGNED)
  MIXERCONTROL_CONTROLTYPE_MILLITIME* = (MIXERCONTROL_CT_CLASS_TIME Or
      MIXERCONTROL_CT_SC_TIME_MILLISECS Or MIXERCONTROL_CT_UNITS_UNSIGNED)
  MIXER_SHORT_NAME_CHARS* = 16
  MIXER_LONG_NAME_CHARS* = 64
  MIXERR_INVALLINE* = (MIXERR_BASE + 0)
  MIXERR_INVALCONTROL* = (MIXERR_BASE + 1)
  MIXERR_INVALVALUE* = (MIXERR_BASE + 2)
  MIXERR_LASTERROR* = (MIXERR_BASE + 2)
  MIXER_OBJECTF_HANDLE* = 0x80000000
  MIXER_OBJECTF_MIXER* = 0
  MIXER_OBJECTF_HMIXER* = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_MIXER)
  MIXER_OBJECTF_WAVEOUT* = 0x10000000
  MIXER_OBJECTF_HWAVEOUT* = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_WAVEOUT)
  MIXER_OBJECTF_WAVEIN* = 0x20000000
  MIXER_OBJECTF_HWAVEIN* = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_WAVEIN)
  MIXER_OBJECTF_MIDIOUT* = 0x30000000
  MIXER_OBJECTF_HMIDIOUT* = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_MIDIOUT)
  MIXER_OBJECTF_MIDIIN* = 0x40000000
  MIXER_OBJECTF_HMIDIIN* = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_MIDIIN)
  MIXER_OBJECTF_AUX* = 0x50000000
  MIXER_GETCONTROLDETAILSF_VALUE* = 0
  MIXER_GETCONTROLDETAILSF_LISTTEXT* = 1
  MIXER_GETCONTROLDETAILSF_QUERYMASK* = 0x0000000F
  MIXER_SETCONTROLDETAILSF_VALUE* = 0
  MIXER_SETCONTROLDETAILSF_CUSTOM* = 1
  MIXER_SETCONTROLDETAILSF_QUERYMASK* = 0x0000000F
  JOYERR_NOERROR* = (0)
  JOYERR_PARMS* = (JOYERR_BASE + 5)
  JOYERR_NOCANDO* = (JOYERR_BASE + 6)
  JOYERR_UNPLUGGED* = (JOYERR_BASE + 7)
  JOY_BUTTON1* = 1
  JOY_BUTTON2* = 2
  JOY_BUTTON3* = 4
  JOY_BUTTON4* = 8
  JOY_BUTTON1CHG* = 256
  JOY_BUTTON2CHG* = 512
  JOY_BUTTON3CHG* = 0x00000400
  JOY_BUTTON4CHG* = 0x00000800
  JOY_BUTTON5* = 16
  JOY_BUTTON6* = 32
  JOY_BUTTON7* = 64
  JOY_BUTTON8* = 128
  JOY_BUTTON9* = 256
  JOY_BUTTON10* = 512
  JOY_BUTTON11* = 0x00000400
  JOY_BUTTON12* = 0x00000800
  JOY_BUTTON13* = 0x00001000
  JOY_BUTTON14* = 0x00002000
  JOY_BUTTON15* = 0x00004000
  JOY_BUTTON16* = 0x00008000
  JOY_BUTTON17* = 0x00010000
  JOY_BUTTON18* = 0x00020000
  JOY_BUTTON19* = 0x00040000
  JOY_BUTTON20* = 0x00080000
  JOY_BUTTON21* = 0x00100000
  JOY_BUTTON22* = 0x00200000
  JOY_BUTTON23* = 0x00400000
  JOY_BUTTON24* = 0x00800000
  JOY_BUTTON25* = 0x01000000
  JOY_BUTTON26* = 0x02000000
  JOY_BUTTON27* = 0x04000000
  JOY_BUTTON28* = 0x08000000
  JOY_BUTTON29* = 0x10000000
  JOY_BUTTON30* = 0x20000000
  JOY_BUTTON31* = 0x40000000
  JOY_BUTTON32* = 0x80000000
  JOY_POVCENTERED* = - 1
  JOY_POVFORWARD* = 0
  JOY_POVRIGHT* = 9000
  JOY_POVBACKWARD* = 18000
  JOY_POVLEFT* = 27000
  JOY_RETURNX* = 1
  JOY_RETURNY* = 2
  JOY_RETURNZ* = 4
  JOY_RETURNR* = 8
  JOY_RETURNU* = 16
  JOY_RETURNV* = 32
  JOY_RETURNPOV* = 64
  JOY_RETURNBUTTONS* = 128
  JOY_RETURNRAWDATA* = 256
  JOY_RETURNPOVCTS* = 512
  JOY_RETURNCENTERED* = 0x00000400
  JOY_USEDEADZONE* = 0x00000800
  JOY_RETURNALL* = (JOY_RETURNX Or JOY_RETURNY Or JOY_RETURNZ Or JOY_RETURNR Or
      JOY_RETURNU Or JOY_RETURNV Or JOY_RETURNPOV Or JOY_RETURNBUTTONS)
  JOY_CAL_READALWAYS* = 0x00010000
  JOY_CAL_READXYONLY* = 0x00020000
  JOY_CAL_READ3* = 0x00040000
  JOY_CAL_READ4* = 0x00080000
  JOY_CAL_READXONLY* = 0x00100000
  JOY_CAL_READYONLY* = 0x00200000
  JOY_CAL_READ5* = 0x00400000
  JOY_CAL_READ6* = 0x00800000
  JOY_CAL_READZONLY* = 0x01000000
  JOY_CAL_READRONLY* = 0x02000000
  JOY_CAL_READUONLY* = 0x04000000
  JOY_CAL_READVONLY* = 0x08000000
  JOYSTICKID1* = 0
  JOYSTICKID2* = 1
  JOYCAPS_HASZ* = 1
  JOYCAPS_HASR* = 2
  JOYCAPS_HASU* = 4
  JOYCAPS_HASV* = 8
  JOYCAPS_HASPOV* = 16
  JOYCAPS_POV4DIR* = 32
  JOYCAPS_POVCTS* = 64
  MMIOERR_BASE* = 256
  MMIOERR_FILENOTFOUND* = (MMIOERR_BASE + 1)
  MMIOERR_OUTOFMEMORY* = (MMIOERR_BASE + 2)
  MMIOERR_CANNOTOPEN* = (MMIOERR_BASE + 3)
  MMIOERR_CANNOTCLOSE* = (MMIOERR_BASE + 4)
  MMIOERR_CANNOTREAD* = (MMIOERR_BASE + 5)
  MMIOERR_CANNOTWRITE* = (MMIOERR_BASE + 6)
  MMIOERR_CANNOTSEEK* = (MMIOERR_BASE + 7)
  MMIOERR_CANNOTEXPAND* = (MMIOERR_BASE + 8)
  MMIOERR_CHUNKNOTFOUND* = (MMIOERR_BASE + 9)
  MMIOERR_UNBUFFERED* = (MMIOERR_BASE + 10)
  MMIOERR_PATHNOTFOUND* = (MMIOERR_BASE + 11)
  MMIOERR_ACCESSDENIED* = (MMIOERR_BASE + 12)
  MMIOERR_SHARINGVIOLATION* = (MMIOERR_BASE + 13)
  MMIOERR_NETWORKERROR* = (MMIOERR_BASE + 14)
  MMIOERR_TOOMANYOPENFILES* = (MMIOERR_BASE + 15)
  MMIOERR_INVALIDFILE* = (MMIOERR_BASE + 16)
  CFSEPCHAR* = '+'
  WAVECAPS_PITCH* = 1
  WAVECAPS_PLAYBACKRATE* = 2
  WAVECAPS_VOLUME* = 4
  WAVECAPS_LRVOLUME* = 8
  WAVECAPS_SYNC* = 16
  WAVECAPS_SAMPLEACCURATE* = 32
  WAVECAPS_DIRECTSOUND* = 64
  MIXER_GETLINEINFOF_DESTINATION* = 0
  MIXER_GETLINEINFOF_SOURCE* = 1
  MIXER_GETLINEINFOF_LINEID* = 2
  MIXER_GETLINEINFOF_COMPONENTTYPE* = 3
  MIXER_GETLINEINFOF_TARGETTYPE* = 4
  MIXER_GETLINEINFOF_QUERYMASK* = 0x0000000F
  MMIO_RWMODE* = 3
  MMIO_SHAREMODE* = 0x00000070
  MMIO_CREATE* = 0x00001000
  MMIO_PARSE* = 256
  MMIO_DELETE* = 512
  MMIO_EXIST* = 0x00004000
  MMIO_ALLOCBUF* = 0x00010000
  MMIO_GETTEMP* = 0x00020000
  MMIO_DIRTY* = 0x10000000
  cMMIO_READ* = 0
  cMMIO_WRITE* = 1
  MMIO_READWRITE* = 2
  MMIO_COMPAT* = 0
  MMIO_EXCLUSIVE* = 16
  MMIO_DENYWRITE* = 32
  MMIO_DENYREAD* = 0x00000030
  MMIO_DENYNONE* = 64
  MMIO_FHOPEN* = 16
  MMIO_EMPTYBUF* = 16
  MMIO_TOUPPER* = 16
  MMIO_INSTALLPROC* = 0x00010000
  MMIO_GLOBALPROC* = 0x10000000
  MMIO_REMOVEPROC* = 0x00020000
  MMIO_UNICODEPROC* = 0x01000000
  MMIO_FINDPROC* = 0x00040000
  MMIO_FINDCHUNK* = 16
  MMIO_FINDRIFF* = 32
  MMIO_FINDLIST* = 64
  MMIO_CREATERIFF* = 32
  MMIO_CREATELIST* = 64
  MMIOM_READ* = cMMIO_READ
  MMIOM_WRITE* = cMMIO_WRITE
  MMIOM_SEEK* = 2
  MMIOM_OPEN* = 3
  MMIOM_CLOSE* = 4
  MMIOM_WRITEFLUSH* = 5
  MMIOM_RENAME* = 6
  MMIOM_USER* = 0x00008000
  FOURCC_RIFF* = 0x46464952   #'R','I','F','F'
  FOURCC_LIST* = 0x5453494C   #'L','I','S','T'
  FOURCC_DOS* = 0x20532F44    #'D','O','S',' '
  FOURCC_MEM* = 0x204D454D    #'M','E','M',' '
  SEEK_SET* = 0
  SEEK_CUR* = 1
  SEEK_END* = 2
  MMIO_DEFAULTBUFFER* = 8192
  MCIERR_INVALID_DEVICE_ID* = (MCIERR_BASE + 1)
  MCIERR_UNRECOGNIZED_KEYWORD* = (MCIERR_BASE + 3)
  MCIERR_UNRECOGNIZED_COMMAND* = (MCIERR_BASE + 5)
  MCIERR_HARDWARE* = (MCIERR_BASE + 6)
  MCIERR_INVALID_DEVICE_NAME* = (MCIERR_BASE + 7)
  MCIERR_OUT_OF_MEMORY* = (MCIERR_BASE + 8)
  MCIERR_DEVICE_OPEN* = (MCIERR_BASE + 9)
  MCIERR_CANNOT_LOAD_DRIVER* = (MCIERR_BASE + 10)
  MCIERR_MISSING_COMMAND_STRING* = (MCIERR_BASE + 11)
  MCIERR_PARAM_OVERFLOW* = (MCIERR_BASE + 12)
  MCIERR_MISSING_STRING_ARGUMENT* = (MCIERR_BASE + 13)
  MCIERR_BAD_INTEGER* = (MCIERR_BASE + 14)
  MCIERR_PARSER_INTERNAL* = (MCIERR_BASE + 15)
  MCIERR_DRIVER_INTERNAL* = (MCIERR_BASE + 16)
  MCIERR_MISSING_PARAMETER* = (MCIERR_BASE + 17)
  MCIERR_UNSUPPORTED_FUNCTION* = (MCIERR_BASE + 18)
  MCIERR_FILE_NOT_FOUND* = (MCIERR_BASE + 19)
  MCIERR_DEVICE_NOT_READY* = (MCIERR_BASE + 20)
  MCIERR_INTERNAL* = (MCIERR_BASE + 21)
  MCIERR_DRIVER* = (MCIERR_BASE + 22)
  MCIERR_CANNOT_USE_ALL* = (MCIERR_BASE + 23)
  MCIERR_MULTIPLE* = (MCIERR_BASE + 24)
  MCIERR_EXTENSION_NOT_FOUND* = (MCIERR_BASE + 25)
  MCIERR_OUTOFRANGE* = (MCIERR_BASE + 26)
  MCIERR_FLAGS_NOT_COMPATIBLE* = (MCIERR_BASE + 28)
  MCIERR_FILE_NOT_SAVED* = (MCIERR_BASE + 30)
  MCIERR_DEVICE_TYPE_REQUIRED* = (MCIERR_BASE + 31)
  MCIERR_DEVICE_LOCKED* = (MCIERR_BASE + 32)
  MCIERR_DUPLICATE_ALIAS* = (MCIERR_BASE + 33)
  MCIERR_BAD_CONSTANT* = (MCIERR_BASE + 34)
  MCIERR_MUST_USE_SHAREABLE* = (MCIERR_BASE + 35)
  MCIERR_MISSING_DEVICE_NAME* = (MCIERR_BASE + 36)
  MCIERR_BAD_TIME_FORMAT* = (MCIERR_BASE + 37)
  MCIERR_NO_CLOSING_QUOTE* = (MCIERR_BASE + 38)
  MCIERR_DUPLICATE_FLAGS* = (MCIERR_BASE + 39)
  MCIERR_INVALID_FILE* = (MCIERR_BASE + 40)
  MCIERR_NULL_PARAMETER_BLOCK* = (MCIERR_BASE + 41)
  MCIERR_UNNAMED_RESOURCE* = (MCIERR_BASE + 42)
  MCIERR_NEW_REQUIRES_ALIAS* = (MCIERR_BASE + 43)
  MCIERR_NOTIFY_ON_AUTO_OPEN* = (MCIERR_BASE + 44)
  MCIERR_NO_ELEMENT_ALLOWED* = (MCIERR_BASE + 45)
  MCIERR_NONAPPLICABLE_FUNCTION* = (MCIERR_BASE + 46)
  MCIERR_ILLEGAL_FOR_AUTO_OPEN* = (MCIERR_BASE + 47)
  MCIERR_FILENAME_REQUIRED* = (MCIERR_BASE + 48)
  MCIERR_EXTRA_CHARACTERS* = (MCIERR_BASE + 49)
  MCIERR_DEVICE_NOT_INSTALLED* = (MCIERR_BASE + 50)
  MCIERR_GET_CD* = (MCIERR_BASE + 51)
  MCIERR_SET_CD* = (MCIERR_BASE + 52)
  MCIERR_SET_DRIVE* = (MCIERR_BASE + 53)
  MCIERR_DEVICE_LENGTH* = (MCIERR_BASE + 54)
  MCIERR_DEVICE_ORD_LENGTH* = (MCIERR_BASE + 55)
  MCIERR_NO_INTEGER* = (MCIERR_BASE + 56)
  MCIERR_WAVE_OUTPUTSINUSE* = (MCIERR_BASE + 64)
  MCIERR_WAVE_SETOUTPUTINUSE* = (MCIERR_BASE + 65)
  MCIERR_WAVE_INPUTSINUSE* = (MCIERR_BASE + 66)
  MCIERR_WAVE_SETINPUTINUSE* = (MCIERR_BASE + 67)
  MCIERR_WAVE_OUTPUTUNSPECIFIED* = (MCIERR_BASE + 68)
  MCIERR_WAVE_INPUTUNSPECIFIED* = (MCIERR_BASE + 69)
  MCIERR_WAVE_OUTPUTSUNSUITABLE* = (MCIERR_BASE + 70)
  MCIERR_WAVE_SETOUTPUTUNSUITABLE* = (MCIERR_BASE + 71)
  MCIERR_WAVE_INPUTSUNSUITABLE* = (MCIERR_BASE + 72)
  MCIERR_WAVE_SETINPUTUNSUITABLE* = (MCIERR_BASE + 73)
  MCIERR_SEQ_DIV_INCOMPATIBLE* = (MCIERR_BASE + 80)
  MCIERR_SEQ_PORT_INUSE* = (MCIERR_BASE + 81)
  MCIERR_SEQ_PORT_NONEXISTENT* = (MCIERR_BASE + 82)
  MCIERR_SEQ_PORT_MAPNODEVICE* = (MCIERR_BASE + 83)
  MCIERR_SEQ_PORT_MISCERROR* = (MCIERR_BASE + 84)
  MCIERR_SEQ_TIMER* = (MCIERR_BASE + 85)
  MCIERR_SEQ_PORTUNSPECIFIED* = (MCIERR_BASE + 86)
  MCIERR_SEQ_NOMIDIPRESENT* = (MCIERR_BASE + 87)
  MCIERR_NO_WINDOW* = (MCIERR_BASE + 90)
  MCIERR_CREATEWINDOW* = (MCIERR_BASE + 91)
  MCIERR_FILE_READ* = (MCIERR_BASE + 92)
  MCIERR_FILE_WRITE* = (MCIERR_BASE + 93)
  MCIERR_NO_IDENTITY* = (MCIERR_BASE + 94)
  MCIERR_CUSTOM_DRIVER_BASE* = (MCIERR_BASE + 256)
  MCI_FIRST* = DRV_MCI_FIRST
  MCI_ESCAPE* = 0x00000805
  MCI_PLAY* = 0x00000806
  MCI_SEEK* = 0x00000807
  MCI_STOP* = 0x00000808
  MCI_PAUSE* = 0x00000809
  MCI_INFO* = 0x0000080A
  MCI_GETDEVCAPS* = 0x0000080B
  MCI_BREAK* = 0x00000811
  MCI_WHERE* = 0x00000843
  MCI_FREEZE* = 0x00000844
  MCI_UNFREEZE* = 0x00000845
  MCI_LOAD* = 0x00000850
  MCI_CUT* = 0x00000851
  MCI_COPY* = 0x00000852
  MCI_PASTE* = 0x00000853
  MCI_UPDATE* = 0x00000854
  MCI_RESUME* = 0x00000855
  MCI_DELETE* = 0x00000856
  MCI_SET* = 0x0000080D
  MCI_STEP* = 0x0000080E
  MCI_SAVE* = 0x00000813
  MCI_SPIN* = 0x0000080C
  MCI_STATUS* = 0x00000814
  MCI_CUE* = 0x00000830
  MCI_REALIZE* = 0x00000840
  MCI_WINDOW* = 0x00000841
  MCI_PUT* = 0x00000842
  MCI_RECORD* = 0x0000080F
  MCI_SYSINFO* = 0x00000810
  MCI_OPEN* = 0x00000803
  MCI_CLOSE* = 0x00000804
  MCI_USER_MESSAGES* = (DRV_MCI_FIRST + 0x00000400)
  MCI_LAST* = 0x00000FFF
  MCI_ALL_DEVICE_ID* = - 1
  MCI_DEVTYPE_VCR* = 513
  MCI_DEVTYPE_VIDEODISC* = 514
  MCI_DEVTYPE_OVERLAY* = 515
  MCI_DEVTYPE_CD_AUDIO* = 516
  MCI_DEVTYPE_DAT* = 517
  MCI_DEVTYPE_SCANNER* = 518
  MCI_DEVTYPE_ANIMATION* = 519
  MCI_DEVTYPE_DIGITAL_VIDEO* = 520
  MCI_DEVTYPE_OTHER* = 521
  MCI_DEVTYPE_WAVEFORM_AUDIO* = 522
  MCI_DEVTYPE_SEQUENCER* = 523
  MCI_DEVTYPE_FIRST* = MCI_DEVTYPE_VCR
  MCI_DEVTYPE_LAST* = MCI_DEVTYPE_SEQUENCER
  MCI_DEVTYPE_FIRST_USER* = 0x00001000
  MCI_MODE_NOT_READY* = (MCI_STRING_OFFSET + 12)
  MCI_MODE_STOP* = (MCI_STRING_OFFSET + 13)
  MCI_MODE_PLAY* = (MCI_STRING_OFFSET + 14)
  MCI_MODE_RECORD* = (MCI_STRING_OFFSET + 15)
  MCI_MODE_SEEK* = (MCI_STRING_OFFSET + 16)
  MCI_MODE_PAUSE* = (MCI_STRING_OFFSET + 17)
  MCI_MODE_OPEN* = (MCI_STRING_OFFSET + 18)
  MCI_FORMAT_MILLISECONDS* = 0
  MCI_FORMAT_HMS* = 1
  MCI_FORMAT_MSF* = 2
  MCI_FORMAT_FRAMES* = 3
  MCI_FORMAT_SMPTE_24* = 4
  MCI_FORMAT_SMPTE_25* = 5
  MCI_FORMAT_SMPTE_30* = 6
  MCI_FORMAT_SMPTE_30DROP* = 7
  MCI_FORMAT_BYTES* = 8
  MCI_FORMAT_SAMPLES* = 9
  MCI_FORMAT_TMSF* = 10

proc MCI_MSF_MINUTE*(msf: int32): int8
proc MCI_MSF_SECOND*(msf: int32): int8
proc MCI_MSF_FRAME*(msf: int32): int8
proc MCI_MAKE_MSF*(m, s, f: int8): int32
const
  MCI_SET_DOOR_OPEN* = 256
  MCI_SET_DOOR_CLOSED* = 512
  MCI_SET_TIME_FORMAT* = 0x00000400
  MCI_SET_AUDIO* = 0x00000800
  MCI_SET_VIDEO* = 0x00001000
  MCI_SET_ON* = 0x00002000
  MCI_SET_OFF* = 0x00004000
  MCI_SET_AUDIO_ALL* = 0
  MCI_SET_AUDIO_LEFT* = 1
  MCI_SET_AUDIO_RIGHT* = 2

proc MCI_TMSF_TRACK*(tmsf: int32): int8
proc MCI_TMSF_MINUTE*(tmsf: int32): int8
proc MCI_TMSF_SECOND*(tmsf: int32): int8
proc MCI_TMSF_FRAME*(tmsf: int32): int8
proc MCI_HMS_HOUR*(h: int32): int8
proc MCI_HMS_MINUTE*(h: int32): int8
proc MCI_HMS_SECOND*(h: int32): int8
proc MCI_MAKE_HMS*(h, m, s: int8): int32
const
  MCI_INFO_PRODUCT* = 256
  MCI_INFO_FILE* = 512
  MCI_INFO_MEDIA_UPC* = 0x00000400
  MCI_INFO_MEDIA_IDENTITY* = 0x00000800
  MCI_INFO_NAME* = 0x00001000
  MCI_INFO_COPYRIGHT* = 0x00002000

proc MCI_MAKE_TMSF*(t, m, s, f: int8): int32
const
  MCI_WAIT* = 2
  MCI_FROM* = 4
  MCI_TO* = 8
  MCI_TRACK* = 16
  MCI_SEEK_TO_START* = 256
  MCI_SEEK_TO_END* = 512
  MCI_STATUS_ITEM* = 256
  MCI_STATUS_START* = 512
  MCI_STATUS_LENGTH* = 1
  MCI_STATUS_POSITION* = 2
  MCI_STATUS_NUMBER_OF_TRACKS* = 3
  MCI_STATUS_MODE* = 4
  MCI_STATUS_MEDIA_PRESENT* = 5
  MCI_STATUS_TIME_FORMAT* = 6
  MCI_STATUS_READY* = 7
  MCI_STATUS_CURRENT_TRACK* = 8
  MCI_OPEN_SHAREABLE* = 256
  MCI_OPEN_ELEMENT* = 512
  MCI_OPEN_ALIAS* = 0x00000400
  MCI_OPEN_ELEMENT_ID* = 0x00000800
  MCI_OPEN_TYPE_ID* = 0x00001000
  MCI_OPEN_TYPE* = 0x00002000
  MCI_GETDEVCAPS_ITEM* = 256
  MCI_GETDEVCAPS_CAN_RECORD* = 1
  MCI_GETDEVCAPS_HAS_AUDIO* = 2
  MCI_GETDEVCAPS_HAS_VIDEO* = 3
  MCI_GETDEVCAPS_DEVICE_TYPE* = 4
  MCI_GETDEVCAPS_USES_FILES* = 5
  MCI_GETDEVCAPS_COMPOUND_DEVICE* = 6
  MCI_GETDEVCAPS_CAN_EJECT* = 7
  MCI_GETDEVCAPS_CAN_PLAY* = 8
  MCI_GETDEVCAPS_CAN_SAVE* = 9
  MCI_SYSINFO_QUANTITY* = 256
  MCI_SYSINFO_OPEN* = 512
  MCI_SYSINFO_NAME* = 0x00000400
  MCI_SYSINFO_INSTALLNAME* = 0x00000800
  MCI_NOTIFY_SUCCESSFUL* = 1
  MCI_NOTIFY_SUPERSEDED* = 2
  MCI_NOTIFY_ABORTED* = 4
  MCI_NOTIFY_FAILURE* = 8
  MCI_NOTIFY* = 1
  MCI_BREAK_KEY* = 256
  MCI_BREAK_HWND* = 512
  MCI_BREAK_OFF* = 0x00000400
  MCI_RECORD_INSERT* = 256
  MCI_RECORD_OVERWRITE* = 512
  MCI_SAVE_FILE* = 256
  MCI_LOAD_FILE* = 256
  MCI_VD_GETDEVCAPS_FAST_RATE* = 0x00004003
  MCI_VD_GETDEVCAPS_SLOW_RATE* = 0x00004004
  MCI_VD_GETDEVCAPS_NORMAL_RATE* = 0x00004005
  MCI_VD_STEP_FRAMES* = 0x00010000
  MCI_VD_STEP_REVERSE* = 0x00020000
  MCI_VD_ESCAPE_STRING* = 256
  MCI_VD_FORMAT_TRACK* = 0x00004001
  MCI_VD_PLAY_REVERSE* = 0x00010000
  MCI_VD_PLAY_FAST* = 0x00020000
  MCI_VD_MODE_PARK* = (MCI_VD_OFFSET + 1)
  MCI_VD_GETDEVCAPS_CAV* = 0x00020000
  MCI_VD_SPIN_UP* = 0x00010000
  MCI_VD_SPIN_DOWN* = 0x00020000
  MCI_VD_SEEK_REVERSE* = 0x00010000
  MCI_VD_STATUS_SPEED* = 0x00004002
  MCI_VD_STATUS_FORWARD* = 0x00004003
  MCI_VD_STATUS_MEDIA_TYPE* = 0x00004004
  MCI_VD_STATUS_SIDE* = 0x00004005
  MCI_VD_GETDEVCAPS_CAN_REVERSE* = 0x00004002
  MCI_VD_MEDIA_CLV* = (MCI_VD_OFFSET + 2)
  MCI_VD_MEDIA_CAV* = (MCI_VD_OFFSET + 3)
  MCI_VD_MEDIA_OTHER* = (MCI_VD_OFFSET + 4)
  MCI_VD_STATUS_DISC_SIZE* = 0x00004006
  MCI_VD_GETDEVCAPS_CLV* = 0x00010000
  MCI_VD_PLAY_SPEED* = 0x00040000
  MCI_VD_PLAY_SCAN* = 0x00080000
  MCI_VD_PLAY_SLOW* = 0x00100000
  MCI_WAVE_STATUS_CHANNELS* = 0x00004002
  MCI_WAVE_STATUS_SAMPLESPERSEC* = 0x00004003
  MCI_WAVE_PCM* = MCI_WAVE_OFFSET
  MCI_WAVE_MAPPER* = (MCI_WAVE_OFFSET + 1)
  MCI_WAVE_OPEN_BUFFER* = 0x00010000
  MCI_WAVE_STATUS_BITSPERSAMPLE* = 0x00004006
  MCI_WAVE_STATUS_LEVEL* = 0x00004007
  MCI_WAVE_SET_FORMATTAG* = 0x00010000
  MCI_WAVE_SET_CHANNELS* = 0x00020000
  MCI_WAVE_SET_SAMPLESPERSEC* = 0x00040000
  MCI_WAVE_SET_AVGBYTESPERSEC* = 0x00080000
  MCI_WAVE_SET_BLOCKALIGN* = 0x00100000
  MCI_WAVE_SET_BITSPERSAMPLE* = 0x00200000
  MCI_WAVE_INPUT* = 0x00400000
  MCI_WAVE_OUTPUT* = 0x00800000
  MCI_WAVE_STATUS_FORMATTAG* = 0x00004001
  MCI_WAVE_SET_ANYINPUT* = 0x04000000
  MCI_WAVE_SET_ANYOUTPUT* = 0x08000000
  MCI_WAVE_GETDEVCAPS_INPUTS* = 0x00004001
  MCI_WAVE_GETDEVCAPS_OUTPUTS* = 0x00004002
  MCI_WAVE_STATUS_AVGBYTESPERSEC* = 0x00004004
  MCI_WAVE_STATUS_BLOCKALIGN* = 0x00004005
  MCI_CDA_STATUS_TYPE_TRACK* = 0x00004001
  MCI_CDA_TRACK_AUDIO* = (MCI_CD_OFFSET)
  MCI_CDA_TRACK_OTHER* = (MCI_CD_OFFSET + 1)
  MCI_SEQ_DIV_PPQN* = (MCI_SEQ_OFFSET)
  MCI_SEQ_DIV_SMPTE_24* = (MCI_SEQ_OFFSET + 1)
  MCI_SEQ_DIV_SMPTE_25* = (MCI_SEQ_OFFSET + 2)
  MCI_SEQ_DIV_SMPTE_30DROP* = (MCI_SEQ_OFFSET + 3)
  MCI_SEQ_DIV_SMPTE_30* = (MCI_SEQ_OFFSET + 4)
  MCI_SEQ_FORMAT_SONGPTR* = 0x00004001
  MCI_SEQ_FILE* = 0x00004002
  MCI_SEQ_MIDI* = 0x00004003
  MCI_SEQ_SMPTE* = 0x00004004
  MCI_SEQ_NONE* = 65533
  MCI_SEQ_MAPPER* = 65535
  MCI_SEQ_STATUS_TEMPO* = 0x00004002
  MCI_SEQ_STATUS_PORT* = 0x00004003
  MCI_SEQ_STATUS_SLAVE* = 0x00004007
  MCI_SEQ_STATUS_MASTER* = 0x00004008
  MCI_SEQ_STATUS_OFFSET* = 0x00004009
  MCI_SEQ_STATUS_DIVTYPE* = 0x0000400A
  MCI_SEQ_STATUS_NAME* = 0x0000400B
  MCI_SEQ_STATUS_COPYRIGHT* = 0x0000400C
  MCI_SEQ_SET_TEMPO* = 0x00010000
  MCI_SEQ_SET_PORT* = 0x00020000
  MCI_SEQ_SET_SLAVE* = 0x00040000
  MCI_SEQ_SET_MASTER* = 0x00080000
  MCI_SEQ_SET_OFFSET* = 0x01000000
  MCI_ANIM_PLAY_SLOW* = 0x00080000
  MCI_ANIM_PLAY_SCAN* = 0x00100000
  MCI_ANIM_GETDEVCAPS_SLOW_RATE* = 0x00004003
  MCI_ANIM_GETDEVCAPS_NORMAL_RATE* = 0x00004004
  MCI_ANIM_STEP_REVERSE* = 0x00010000
  MCI_ANIM_STEP_FRAMES* = 0x00020000
  MCI_ANIM_STATUS_SPEED* = 0x00004001
  MCI_ANIM_GETDEVCAPS_PALETTES* = 0x00004006
  MCI_ANIM_OPEN_WS* = 0x00010000
  MCI_ANIM_OPEN_PARENT* = 0x00020000
  MCI_ANIM_OPEN_NOSTATIC* = 0x00040000
  MCI_ANIM_GETDEVCAPS_FAST_RATE* = 0x00004002
  MCI_ANIM_PLAY_SPEED* = 0x00010000
  MCI_ANIM_PLAY_REVERSE* = 0x00020000
  MCI_ANIM_PLAY_FAST* = 0x00040000
  MCI_ANIM_STATUS_FORWARD* = 0x00004002
  MCI_ANIM_STATUS_HWND* = 0x00004003
  MCI_ANIM_STATUS_HPAL* = 0x00004004
  MCI_ANIM_STATUS_STRETCH* = 0x00004005
  MCI_ANIM_INFO_TEXT* = 0x00010000
  MCI_ANIM_GETDEVCAPS_CAN_REVERSE* = 0x00004001
  MCI_ANIM_WINDOW_TEXT* = 0x00080000
  MCI_ANIM_WINDOW_ENABLE_STRETCH* = 0x00100000
  MCI_ANIM_WINDOW_DISABLE_STRETCH* = 0x00200000
  MCI_ANIM_WINDOW_DEFAULT* = 0
  MCI_ANIM_RECT* = 0x00010000
  MCI_ANIM_PUT_SOURCE* = 0x00020000
  MCI_ANIM_PUT_DESTINATION* = 0x00040000
  MCI_ANIM_WHERE_SOURCE* = 0x00020000
  MCI_ANIM_WHERE_DESTINATION* = 0x00040000
  MCI_ANIM_UPDATE_HDC* = 0x00020000
  MCI_ANIM_GETDEVCAPS_CAN_STRETCH* = 0x00004007
  MCI_ANIM_GETDEVCAPS_MAX_WINDOWS* = 0x00004008
  MCI_ANIM_REALIZE_NORM* = 0x00010000
  MCI_ANIM_REALIZE_BKGD* = 0x00020000
  MCI_ANIM_WINDOW_HWND* = 0x00010000
  MCI_ANIM_WINDOW_STATE* = 0x00040000
  TIMERR_NOERROR* = 0
  TIMERR_NOCANDO* = (TIMERR_BASE + 1)
  TIMERR_STRUCT* = (TIMERR_BASE + 33)
  TIME_ONESHOT* = 0
  TIME_PERIODIC* = 1
  TIME_CALLBACK_FUNCTION* = 0
  TIME_CALLBACK_EVENT_SET* = 16
  TIME_CALLBACK_EVENT_PULSE* = 32
  MCI_OVLY_OPEN_WS* = 0x00010000
  MCI_OVLY_OPEN_PARENT* = 0x00020000
  MCI_OVLY_STATUS_HWND* = 0x00004001
  MCI_OVLY_STATUS_STRETCH* = 0x00004002
  MCI_OVLY_INFO_TEXT* = 0x00010000
  MCI_OVLY_GETDEVCAPS_CAN_STRETCH* = 0x00004001
  MCI_OVLY_GETDEVCAPS_CAN_FREEZE* = 0x00004002
  MCI_OVLY_GETDEVCAPS_MAX_WINDOWS* = 0x00004003
  MCI_OVLY_WINDOW_HWND* = 0x00010000
  MCI_OVLY_WINDOW_STATE* = 0x00040000
  MCI_OVLY_WINDOW_TEXT* = 0x00080000
  MCI_OVLY_WINDOW_ENABLE_STRETCH* = 0x00100000
  MCI_OVLY_WINDOW_DISABLE_STRETCH* = 0x00200000
  MCI_OVLY_WINDOW_DEFAULT* = 0
  MCI_OVLY_RECT* = 0x00010000
  MCI_OVLY_PUT_SOURCE* = 0x00020000
  MCI_OVLY_PUT_DESTINATION* = 0x00040000
  MCI_OVLY_PUT_FRAME* = 0x00080000
  MCI_OVLY_PUT_VIDEO* = 0x00100000
  MCI_OVLY_WHERE_SOURCE* = 0x00020000
  MCI_OVLY_WHERE_DESTINATION* = 0x00040000
  MCI_OVLY_WHERE_FRAME* = 0x00080000
  MCI_OVLY_WHERE_VIDEO* = 0x00100000
  AUX_MAPPER* = - 1
  MIXER_GETLINECONTROLSF_ONEBYID* = 1
  MIXER_GETLINECONTROLSF_ONEBYTYPE* = 2
  MIXER_GETLINECONTROLSF_ALL* = 0
  MIXER_GETLINECONTROLSF_QUERYMASK* = 0x0000000F
  NEWTRANSPARENT* = 3
  QUERYROPSUPPORT* = 40
  SELECTDIB* = 41

proc DIBINDEX*(n: int32): int32
const
  SC_SCREENSAVE* = 0x0000F140
  AUXCAPS_CDAUDIO* = 1
  AUXCAPS_AUXIN* = 2
  AUXCAPS_VOLUME* = 1
  AUXCAPS_LRVOLUME* = 2 #/////////////////////////////////////////////////////////
                        # Structures and typedefs
                        #/////////////////////////////////////////////////////////

type
  mmtime* {.final.} = object
    wType*: UINT
    hour*, min*, sec*, frame*, fps*, dummy*: int8
    pad*: array[0..1, int8]

  PMMTIME* = ptr mmtime
  NPMMTIME* = ptr mmtime
  LPMMTIME* = ptr mmtime
  PWAVEHDR* = ptr wavehdr
  TMMTime* = mmtime
  wavehdr* {.final.} = object
    lpData*: cstring
    dwBufferLength*: DWORD
    dwBytesRecorded*: DWORD
    dwUser*: DWORD
    dwFlags*: DWORD
    dwLoops*: DWORD
    lpNext*: PWAVEHDR
    reserved*: DWORD

  TWAVEHDR* = WAVEHDR
  NPWAVEHDR* = ptr wavehdr
  LPWAVEHDR* = ptr wavehdr
  WAVEOUTCAPSA* {.final.} = object
    wMid*: int16
    wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..Pred(MAXPNAMELEN), CHAR]
    dwFormats*: DWORD
    wChannels*: int16
    wReserved1*: int16
    dwSupport*: DWORD

  TWAVEOUTCAPSA* = WAVEOUTCAPSA
  PWAVEOUTCAPSA* = ptr WAVEOUTCAPSA
  NPWAVEOUTCAPSA* = ptr WAVEOUTCAPSA
  LPWAVEOUTCAPSA* = ptr WAVEOUTCAPSA
  WAVEOUTCAPSW* {.final.} = object
    wMid*: int16
    wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..Pred(MAXPNAMELEN), WCHAR]
    dwFormats*: DWORD
    wChannels*: int16
    wReserved1*: int16
    dwSupport*: DWORD

  PWAVEOUTCAPSW* = ptr WAVEOUTCAPSW
  NPWAVEOUTCAPSW* = ptr WAVEOUTCAPSW
  LPWAVEOUTCAPSW* = ptr WAVEOUTCAPSW
  TWAVEOUTCAPSW* = WAVEOUTCAPSW

when defined(UNICODE):
  type
    WAVEOUTCAPS* = WAVEOUTCAPSW
    PWAVEOUTCAPS* = PWAVEOUTCAPSW
    NPWAVEOUTCAPS* = NPWAVEOUTCAPSW
    LPWAVEOUTCAPS* = LPWAVEOUTCAPSW
else:
  type
    WAVEOUTCAPS* = WAVEOUTCAPSA
    PWAVEOUTCAPS* = PWAVEOUTCAPSA
    NPWAVEOUTCAPS* = NPWAVEOUTCAPSA
    LPWAVEOUTCAPS* = LPWAVEOUTCAPSA
type
  TWAVEOUTCAPS* = WAVEOUTCAPS
  WAVEINCAPSA* {.final.} = object
    wMid*: int16
    wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..Pred(MAXPNAMELEN), CHAR]
    dwFormats*: DWORD
    wChannels*: int16
    wReserved1*: int16

  PWAVEINCAPSA* = ptr WAVEINCAPSA
  NPWAVEINCAPSA* = ptr WAVEINCAPSA
  LPWAVEINCAPSA* = ptr WAVEINCAPSA
  TWAVEINCAPSA* = WAVEINCAPSA
  WAVEINCAPSW* {.final.} = object
    wMid*: int16
    wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..Pred(MAXPNAMELEN), WCHAR]
    dwFormats*: DWORD
    wChannels*: int16
    wReserved1*: int16

  PWAVEINCAPSW* = ptr WAVEINCAPSW
  NPWAVEINCAPSW* = ptr WAVEINCAPSW
  LPWAVEINCAPSW* = ptr WAVEINCAPSW
  TWAVEINCAPSW* = WAVEINCAPSW

when defined(UNICODE):
  type
    WAVEINCAPS* = WAVEINCAPSW
    PWAVEINCAPS* = PWAVEINCAPSW
    NPWAVEINCAPS* = NPWAVEINCAPSW
    LPWAVEINCAPS* = LPWAVEINCAPSW
else:
  type
    WAVEINCAPS* = WAVEINCAPSA
    PWAVEINCAPS* = PWAVEINCAPSA
    NPWAVEINCAPS* = NPWAVEINCAPSA
    LPWAVEINCAPS* = LPWAVEINCAPSA
type
  TWAVEINCAPS* = WAVEINCAPS
  waveformat* {.final.} = object
    wFormatTag*: int16
    nChannels*: int16
    nSamplesPerSec*: DWORD
    nAvgBytesPerSec*: DWORD
    nBlockAlign*: int16

  PWAVEFORMAT* = ptr waveformat
  NPWAVEFORMAT* = ptr waveformat
  LPWAVEFORMAT* = ptr waveformat
  TWAVEFORMAT* = waveformat

const
  WAVE_FORMAT_PCM* = 1

type
  pcmwaveformat* {.final.} = object
    wf*: WAVEFORMAT
    wBitsPerSample*: int16

  PPCMWAVEFORMAT* = ptr pcmwaveformat
  NPPCMWAVEFORMAT* = ptr pcmwaveformat
  LPPCMWAVEFORMAT* = ptr pcmwaveformat
  TPCMWAVEFORMAT* = PCMWAVEFORMAT
  WAVEFORMATEX* {.final.} = object
    wFormatTag*: int16
    nChannels*: int16
    nSamplesPerSec*: DWORD
    nAvgBytesPerSec*: DWORD
    nBlockAlign*: int16
    wBitsPerSample*: int16
    cbSize*: int16

  PWAVEFORMATEX* = ptr WAVEFORMATEX
  NPWAVEFORMATEX* = ptr WAVEFORMATEX
  LPWAVEFORMATEX* = ptr WAVEFORMATEX
  LPCWAVEFORMATEX* = ptr WAVEFORMATEX
  TWAVEFORMATEX* = WAVEFORMATEX
  HMIDI* = THandle
  HMIDIIN* = THandle
  HMIDIOUT* = THandle
  HMIDISTRM* = THandle
  LPHMIDI* = ptr HMIDI
  LPHMIDIIN* = ptr HMIDIIN
  LPHMIDIOUT* = ptr HMIDIOUT
  LPHMIDISTRM* = ptr HMIDISTRM
  LPMIDICALLBACK* = PDRVCALLBACK

const
  MIDIPATCHSIZE* = 128

type
  PATCHARRAY* = array[0..Pred(MIDIPATCHSIZE), int16]
  LPPATCHARRAY* = ptr int16
  KEYARRAY* = array[0..Pred(MIDIPATCHSIZE), int16]
  LPKEYARRAY* = ptr int16
  MIDIOUTCAPSA* {.final.} = object
    wMid*: int16
    wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..Pred(MAXPNAMELEN), CHAR]
    wTechnology*: int16
    wVoices*: int16
    wNotes*: int16
    wChannelMask*: int16
    dwSupport*: DWORD

  PMIDIOUTCAPSA* = ptr MIDIOUTCAPSA
  NPMIDIOUTCAPSA* = ptr MIDIOUTCAPSA
  LPMIDIOUTCAPSA* = ptr MIDIOUTCAPSA
  TMIDIOUTCAPSA* = MIDIOUTCAPSA
  MIDIOUTCAPSW* {.final.} = object
    wMid*: int16
    wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..Pred(MAXPNAMELEN), WCHAR]
    wTechnology*: int16
    wVoices*: int16
    wNotes*: int16
    wChannelMask*: int16
    dwSupport*: DWORD

  PMIDIOUTCAPSW* = ptr MIDIOUTCAPSW
  NPMIDIOUTCAPSW* = ptr MIDIOUTCAPSW
  LPMIDIOUTCAPSW* = ptr MIDIOUTCAPSW
  TMIDIOUTCAPSW* = MIDIOUTCAPSW
  MIDIINCAPSA* {.final.} = object
    wMid*: int16
    wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..Pred(MAXPNAMELEN), CHAR]
    dwSupport*: DWORD

  PMIDIINCAPSA* = ptr MIDIINCAPSA
  NPMIDIINCAPSA* = ptr MIDIINCAPSA
  LPMIDIINCAPSA* = ptr MIDIINCAPSA
  TMIDIINCAPSA* = MIDIINCAPSA
  MIDIINCAPSW* {.final.} = object
    wMid*: int16
    wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..Pred(MAXPNAMELEN), WCHAR]
    dwSupport*: DWORD

  PMIDIINCAPSW* = ptr MIDIINCAPSW
  NPMIDIINCAPSW* = ptr MIDIINCAPSW
  LPMIDIINCAPSW* = ptr MIDIINCAPSW
  TMIDIINCAPSW* = MIDIINCAPSW

when defined(UNICODE):
  type
    MIDIINCAPS* = MIDIINCAPSW
    PMIDIINCAPS* = PMIDIINCAPSW
    NPMIDIINCAPS* = NPMIDIINCAPSW
    LPMIDIINCAPS* = LPMIDIINCAPSW
    MIDIOUTCAPS* = MIDIOUTCAPSW
    PMIDIOUTCAPS* = PMIDIOUTCAPSW
    NPMIDIOUTCAPS* = NPMIDIOUTCAPSW
    LPMIDIOUTCAPS* = LPMIDIOUTCAPSW
else:
  type
    MIDIOUTCAPS* = MIDIOUTCAPSA
    PMIDIOUTCAPS* = PMIDIOUTCAPSA
    NPMIDIOUTCAPS* = NPMIDIOUTCAPSA
    LPMIDIOUTCAPS* = LPMIDIOUTCAPSA
    MIDIINCAPS* = MIDIINCAPSA
    PMIDIINCAPS* = PMIDIINCAPSA
    NPMIDIINCAPS* = NPMIDIINCAPSA
    LPMIDIINCAPS* = LPMIDIINCAPSA
type
  TMIDIINCAPS* = MIDIINCAPS
  PMIDIHDR* = ptr midihdr
  midihdr* {.final.} = object
    lpData*: cstring
    dwBufferLength*: DWORD
    dwBytesRecorded*: DWORD
    dwUser*: DWORD
    dwFlags*: DWORD
    lpNext*: PMIDIHDR
    reserved*: DWORD
    dwOffset*: DWORD
    dwReserved*: array[0..Pred(8), DWORD]

  NPMIDIHDR* = ptr midihdr
  LPMIDIHDR* = ptr midihdr
  TMIDIHDR* = MIDIHDR
  midievent* {.final.} = object
    dwDeltaTime*: DWORD
    dwStreamID*: DWORD
    dwEvent*: DWORD
    dwParms*: array[0..Pred(1), DWORD]

  TMIDIEVENT* = MIDIEVENT
  midistrmbuffver* {.final.} = object
    dwVersion*: DWORD
    dwMid*: DWORD
    dwOEMVersion*: DWORD

  TMIDISTRMBUFFVER* = MIDISTRMBUFFVER
  Tmidiproptimediv* {.final.} = object
    cbStruct*: DWORD
    dwTimeDiv*: DWORD

  LPMIDIPROPTIMEDIV* = ptr Tmidiproptimediv
  Tmidiproptempo* {.final.} = object
    cbStruct*: DWORD
    dwTempo*: DWORD

  LPMIDIPROPTEMPO* = ptr Tmidiproptempo
  AUXCAPSA* {.final.} = object
    wMid*: int16
    wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..Pred(MAXPNAMELEN), CHAR]
    wTechnology*: int16
    wReserved1*: int16
    dwSupport*: DWORD

  PAUXCAPSA* = ptr AUXCAPSA
  NPAUXCAPSA* = ptr AUXCAPSA
  LPAUXCAPSA* = ptr AUXCAPSA
  TAUXCAPSA* = AUXCAPSA
  AUXCAPSW* {.final.} = object
    wMid*: int16
    wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..Pred(MAXPNAMELEN), WCHAR]
    wTechnology*: int16
    wReserved1*: int16
    dwSupport*: DWORD

  PAUXCAPSW* = ptr AUXCAPSW
  NPAUXCAPSW* = ptr AUXCAPSW
  LPAUXCAPSW* = ptr AUXCAPSW
  TAUXCAPSW* = AUXCAPSW

when defined(UNICODE):
  type
    AUXCAPS* = AUXCAPSW
    PAUXCAPS* = PAUXCAPSW
    NPAUXCAPS* = NPAUXCAPSW
    LPAUXCAPS* = LPAUXCAPSW
else:
  type
    AUXCAPS* = AUXCAPSA
    PAUXCAPS* = PAUXCAPSA
    NPAUXCAPS* = NPAUXCAPSA
    LPAUXCAPS* = LPAUXCAPSA
type
  TAUXCAPS* = AUXCAPS
  HMIXEROBJ* = THandle
  LPHMIXEROBJ* = ptr HMIXEROBJ
  HMIXER* = THandle
  LPHMIXER* = ptr HMIXER

proc mixerGetNumDevs*(): UINT{.stdcall, dynlib: "winmm.dll",
                               importc: "mixerGetNumDevs".}
type
  MIXERCAPSA* {.final.} = object
    wMid*: int16
    wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..Pred(MAXPNAMELEN), CHAR]
    fdwSupport*: DWORD
    cDestinations*: DWORD

  PMIXERCAPSA* = ptr MIXERCAPSA
  LPMIXERCAPSA* = ptr MIXERCAPSA
  TMIXERCAPSA* = MIXERCAPSA
  MIXERCAPSW* {.final.} = object
    wMid*: int16
    wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..Pred(MAXPNAMELEN), WCHAR]
    fdwSupport*: DWORD
    cDestinations*: DWORD

  PMIXERCAPSW* = ptr MIXERCAPSW
  LPMIXERCAPSW* = ptr MIXERCAPSW
  TMIXERCAPSW* = MIXERCAPSW

when defined(UNICODE):
  type
    MIXERCAPS* = MIXERCAPSW
    PMIXERCAPS* = PMIXERCAPSW
    LPMIXERCAPS* = LPMIXERCAPSW
else:
  type
    MIXERCAPS* = MIXERCAPSA
    PMIXERCAPS* = PMIXERCAPSA
    LPMIXERCAPS* = LPMIXERCAPSA
type
  TMIXERCAPS* = MIXERCAPS
  MIXERLINEA* {.final.} = object
    cbStruct*: DWORD
    dwDestination*: DWORD
    dwSource*: DWORD
    dwLineID*: DWORD
    fdwLine*: DWORD
    dwUser*: DWORD
    dwComponentType*: DWORD
    cChannels*: DWORD
    cConnections*: DWORD
    cControls*: DWORD
    szShortName*: array[0..Pred(MIXER_SHORT_NAME_CHARS), CHAR]
    szName*: array[0..Pred(MIXER_LONG_NAME_CHARS), CHAR]
    dwType*, dwDeviceID*: DWORD
    wMid*, wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..pred(MAXPNAMELEN), Char]

  PMIXERLINEA* = ptr MIXERLINEA
  LPMIXERLINEA* = ptr MIXERLINEA
  TMIXERLINEA* = MIXERLINEA
  MIXERLINEW* {.final.} = object
    cbStruct*: DWORD
    dwDestination*: DWORD
    dwSource*: DWORD
    dwLineID*: DWORD
    fdwLine*: DWORD
    dwUser*: DWORD
    dwComponentType*: DWORD
    cChannels*: DWORD
    cConnections*: DWORD
    cControls*: DWORD
    szShortName*: array[0..Pred(MIXER_SHORT_NAME_CHARS), WCHAR]
    szName*: array[0..Pred(MIXER_LONG_NAME_CHARS), WCHAR]
    dwType*, dwDeviceID*: DWORD
    wMid*, wPid*: int16
    vDriverVersion*: MMVERSION
    szPname*: array[0..pred(MAXPNAMELEN), WChar]

  TMIXERLINEW* = MIXERLINEW
  PMIXERLINEW* = ptr MIXERLINEW
  LPMIXERLINEW* = ptr MIXERLINEW

when defined(UNICODE):
  type
    MIXERLINE* = MIXERLINEW
    PMIXERLINE* = PMIXERLINEW
    LPMIXERLINE* = LPMIXERLINEW
else:
  type
    MIXERLINE* = MIXERLINEA
    PMIXERLINE* = PMIXERLINEA
    LPMIXERLINE* = LPMIXERLINEA
type
  TMIXERLINE* = MIXERLINE
  MIXERCONTROLA* {.final.} = object
    cbStruct*: DWORD
    dwControlID*: DWORD
    dwControlType*: DWORD
    fdwControl*: DWORD
    cMultipleItems*: DWORD
    szShortName*: array[0..Pred(MIXER_SHORT_NAME_CHARS), CHAR]
    szName*: array[0..Pred(MIXER_LONG_NAME_CHARS), CHAR]
    dwMinimum*, dwMaximum*: DWORD
    dwReserved*: array[0..3, DWORD]
    cSteps*: DWORD
    dwReserved2*: array[0..4, DWORD]

  PMIXERCONTROLA* = ptr MIXERCONTROLA
  LPMIXERCONTROLA* = ptr MIXERCONTROLA
  TMIXERCONTROLA* = MIXERCONTROLA
  MIXERCONTROLW* {.final.} = object
    cbStruct*: DWORD
    dwControlID*: DWORD
    dwControlType*: DWORD
    fdwControl*: DWORD
    cMultipleItems*: DWORD
    szShortName*: array[0..Pred(MIXER_SHORT_NAME_CHARS), WCHAR]
    szName*: array[0..Pred(MIXER_LONG_NAME_CHARS), WCHAR]
    dwMinimum*, dwMaximum*: DWORD
    dwReserved*: array[0..3, DWORD]
    cSteps*: DWORD
    dwReserved2*: array[0..4, DWORD]

  PMIXERCONTROLW* = ptr MIXERCONTROLW
  LPMIXERCONTROLW* = ptr MIXERCONTROLW
  TMIXERCONTROLW* = MIXERCONTROLW

when defined(UNICODE):
  type
    MIXERCONTROL* = MIXERCONTROLW
    PMIXERCONTROL* = PMIXERCONTROLW
    LPMIXERCONTROL* = LPMIXERCONTROLW
else:
  type
    MIXERCONTROL* = MIXERCONTROLA
    PMIXERCONTROL* = PMIXERCONTROLA
    LPMIXERCONTROL* = LPMIXERCONTROLA
type
  TMIXERCONTROL* = MIXERCONTROL
  MIXERLINECONTROLSA* {.final.} = object
    cbStruct*: DWORD
    dwLineID*: DWORD
    dwControlType*, cControls*, cbmxctrl*: DWORD
    pamxctrl*: PMIXERCONTROLA

  PMIXERLINECONTROLSA* = ptr MIXERLINECONTROLSA
  LPMIXERLINECONTROLSA* = ptr MIXERLINECONTROLSA
  TMIXERLINECONTROLSA* = MIXERLINECONTROLSA
  MIXERLINECONTROLSW* {.final.} = object
    cbStruct*: DWORD
    dwLineID*: DWORD
    dwControlType*, cControls*, cbmxctrl*: DWORD
    pamxctrl*: PMIXERCONTROLW

  PMIXERLINECONTROLSW* = ptr MIXERLINECONTROLSW
  LPMIXERLINECONTROLSW* = ptr MIXERLINECONTROLSW
  TMIXERLINECONTROLSW* = MIXERLINECONTROLSW

when defined(UNICODE):
  type
    MIXERLINECONTROLS* = MIXERLINECONTROLSW
    PMIXERLINECONTROLS* = PMIXERLINECONTROLSW
    LPMIXERLINECONTROLS* = LPMIXERLINECONTROLSW
else:
  type
    MIXERLINECONTROLS* = MIXERLINECONTROLSA
    PMIXERLINECONTROLS* = PMIXERLINECONTROLSA
    LPMIXERLINECONTROLS* = LPMIXERLINECONTROLSA
type
  TMIXERLINECONTROLS* = MIXERLINECONTROLS
  TMIXERCONTROLDETAILS* {.final.} = object
    cbStruct*: DWORD
    dwControlID*: DWORD
    cChannels*: DWORD
    cMultipleItems*, cbDetails*: DWORD
    paDetails*: Pointer

  MIXERCONTROLDETAILS* = tMIXERCONTROLDETAILS
  PMIXERCONTROLDETAILS* = ptr tMIXERCONTROLDETAILS
  LPMIXERCONTROLDETAILS* = ptr tMIXERCONTROLDETAILS
  MIXERCONTROLDETAILS_LISTTEXTA* {.final.} = object
    dwParam1*: DWORD
    dwParam2*: DWORD
    szName*: array[0..Pred(MIXER_LONG_NAME_CHARS), CHAR]

  PMIXERCONTROLDETAILS_LISTTEXTA* = ptr MIXERCONTROLDETAILS_LISTTEXTA
  LPMIXERCONTROLDETAILS_LISTTEXTA* = ptr MIXERCONTROLDETAILS_LISTTEXTA
  TMIXERCONTROLDETAILS_LISTTEXTA* = MIXERCONTROLDETAILS_LISTTEXTA
  MIXERCONTROLDETAILS_LISTTEXTW* {.final.} = object
    dwParam1*: DWORD
    dwParam2*: DWORD
    szName*: array[0..Pred(MIXER_LONG_NAME_CHARS), WCHAR]

  PMIXERCONTROLDETAILS_LISTTEXTW* = ptr MIXERCONTROLDETAILS_LISTTEXTW
  LPMIXERCONTROLDETAILS_LISTTEXTW* = ptr MIXERCONTROLDETAILS_LISTTEXTW
  TMIXERCONTROLDETAILS_LISTTEXTW* = MIXERCONTROLDETAILS_LISTTEXTW

when defined(UNICODE):
  type
    MIXERCONTROLDETAILS_LISTTEXT* = MIXERCONTROLDETAILS_LISTTEXTW
    PMIXERCONTROLDETAILS_LISTTEXT* = PMIXERCONTROLDETAILS_LISTTEXTW
    LPMIXERCONTROLDETAILS_LISTTEXT* = LPMIXERCONTROLDETAILS_LISTTEXTW
else:
  type
    MIXERCONTROLDETAILS_LISTTEXT* = MIXERCONTROLDETAILS_LISTTEXTA
    PMIXERCONTROLDETAILS_LISTTEXT* = PMIXERCONTROLDETAILS_LISTTEXTA
    LPMIXERCONTROLDETAILS_LISTTEXT* = LPMIXERCONTROLDETAILS_LISTTEXTA
type
  TMIXERCONTROLDETAILS_LISTTEXT* = MIXERCONTROLDETAILS_LISTTEXT
  MIXERCONTROLDETAILS_BOOLEAN* {.final.} = object
    fValue*: int32

  PMIXERCONTROLDETAILS_BOOLEAN* = ptr MIXERCONTROLDETAILS_BOOLEAN
  LPMIXERCONTROLDETAILS_BOOLEAN* = ptr MIXERCONTROLDETAILS_BOOLEAN
  TMIXERCONTROLDETAILS_BOOLEAN* = MIXERCONTROLDETAILS_BOOLEAN
  MIXERCONTROLDETAILS_SIGNED* {.final.} = object
    lValue*: int32

  PMIXERCONTROLDETAILS_SIGNED* = ptr MIXERCONTROLDETAILS_SIGNED
  LPMIXERCONTROLDETAILS_SIGNED* = ptr MIXERCONTROLDETAILS_SIGNED
  TMIXERCONTROLDETAILS_SIGNED* = MIXERCONTROLDETAILS_SIGNED
  MIXERCONTROLDETAILS_UNSIGNED* {.final.} = object
    dwValue*: DWORD

  PMIXERCONTROLDETAILS_UNSIGNED* = ptr MIXERCONTROLDETAILS_UNSIGNED
  LPMIXERCONTROLDETAILS_UNSIGNED* = ptr MIXERCONTROLDETAILS_UNSIGNED
  TMIXERCONTROLDETAILS_UNSIGNED* = MIXERCONTROLDETAILS_UNSIGNED
  LPTIMECALLBACK* = proc (uTimerID, uMsg: UINT, dwUser, dw1, dw2: DWORD){.
      stdcall.}
  TTIMECALLBACK* = LPTIMECALLBACK
  timecaps* {.final.} = object
    wPeriodMin*: UINT
    wPeriodMax*: UINT

  PTIMECAPS* = ptr timecaps
  NPTIMECAPS* = ptr timecaps
  LPTIMECAPS* = ptr timecaps
  TTIMECAS* = TIMECAPS
  JOYCAPSA* {.final.} = object
    wMid*: int16
    wPid*: int16
    szPname*: array[0..Pred(MAXPNAMELEN), CHAR]
    wXmin*: UINT
    wXmax*: UINT
    wYmin*: UINT
    wYmax*: UINT
    wZmin*: UINT
    wZmax*: UINT
    wNumButtons*: UINT
    wPeriodMin*: UINT
    wPeriodMax*: UINT
    wRmin*: UINT
    wRmax*: UINT
    wUmin*: UINT
    wUmax*: UINT
    wVmin*: UINT
    wVmax*: UINT
    wCaps*: UINT
    wMaxAxes*: UINT
    wNumAxes*: UINT
    wMaxButtons*: UINT
    szRegKey*: array[0..Pred(MAXPNAMELEN), CHAR]
    szOEMVxD*: array[0..Pred(MAX_JOYSTICKOEMVXDNAME), CHAR]

  PJOYCAPSA* = ptr JOYCAPSA
  NPJOYCAPSA* = ptr JOYCAPSA
  LPJOYCAPSA* = ptr JOYCAPSA
  TJOYCAPSA* = JOYCAPSA
  JOYCAPSW* {.final.} = object
    wMid*: int16
    wPid*: int16
    szPname*: array[0..Pred(MAXPNAMELEN), WCHAR]
    wXmin*: UINT
    wXmax*: UINT
    wYmin*: UINT
    wYmax*: UINT
    wZmin*: UINT
    wZmax*: UINT
    wNumButtons*: UINT
    wPeriodMin*: UINT
    wPeriodMax*: UINT
    wRmin*: UINT
    wRmax*: UINT
    wUmin*: UINT
    wUmax*: UINT
    wVmin*: UINT
    wVmax*: UINT
    wCaps*: UINT
    wMaxAxes*: UINT
    wNumAxes*: UINT
    wMaxButtons*: UINT
    szRegKey*: array[0..Pred(MAXPNAMELEN), WCHAR]
    szOEMVxD*: array[0..Pred(MAX_JOYSTICKOEMVXDNAME), WCHAR]

  PJOYCAPSW* = ptr JOYCAPSW
  NPJOYCAPSW* = ptr JOYCAPSW
  LPJOYCAPSW* = ptr JOYCAPSW
  TJOYCAPSW* = JOYCAPSW

when defined(UNICODE):
  type
    JOYCAPS* = JOYCAPSW
    PJOYCAPS* = PJOYCAPSW
    NPJOYCAPS* = NPJOYCAPSW
    LPJOYCAPS* = LPJOYCAPSW
else:
  type
    JOYCAPS* = JOYCAPSA
    PJOYCAPS* = PJOYCAPSA
    NPJOYCAPS* = NPJOYCAPSA
    LPJOYCAPS* = LPJOYCAPSA
type
  TJOYCAPS* = JOYCAPS
  joyinfo* {.final.} = object
    wXpos*: UINT
    wYpos*: UINT
    wZpos*: UINT
    wButtons*: UINT

  PJOYINFO* = ptr joyinfo
  NPJOYINFO* = ptr joyinfo
  LPJOYINFO* = ptr joyinfo
  TJOYINFO* = JOYINFO
  joyinfoex* {.final.} = object
    dwSize*: DWORD
    dwFlags*: DWORD
    wXpos*: UINT
    wYpos*: UINT
    wZpos*: UINT
    dwRpos*: DWORD
    dwUpos*: DWORD
    dwVpos*: DWORD
    wButtons*: UINT
    dwButtonNumber*: DWORD
    dwPOV*: DWORD
    dwReserved1*: DWORD
    dwReserved2*: DWORD

  PJOYINFOEX* = ptr joyinfoex
  NPJOYINFOEX* = ptr joyinfoex
  LPJOYINFOEX* = ptr joyinfoex
  TJOYINFOEX* = JOYINFOEX
  FOURCC* = DWORD
  HPSTR* = cstring
  HMMIO* = THandle
  LPMMIOPROC* = proc (x1: LPSTR, x2: UINT, x3, x4: LPARAM): LRESULT{.stdcall.}
  TMMIOPROC* = LPMMIOPROC
  MMIOINFO* {.final.} = object
    dwFlags*: DWORD
    fccIOProc*: FOURCC
    pIOProc*: LPMMIOPROC
    wErrorRet*: UINT
    htask*: HTASK
    cchBuffer*: int32
    pchBuffer*: HPSTR
    pchNext*: HPSTR
    pchEndRead*: HPSTR
    pchEndWrite*: HPSTR
    lBufOffset*: int32
    lDiskOffset*: int32
    adwInfo*: array[0..Pred(3), DWORD]
    dwReserved1*: DWORD
    dwReserved2*: DWORD
    hmmio*: HMMIO

  PMMIOINFO* = ptr MMIOINFO
  NPMMIOINFO* = ptr MMIOINFO
  LPMMIOINFO* = ptr MMIOINFO
  LPCMMIOINFO* = ptr MMIOINFO
  TMMIOINFO* = MMIOINFO
  MMCKINFO* {.final.} = object
    ckid*: FOURCC
    cksize*: DWORD
    fccType*: FOURCC
    dwDataOffset*: DWORD
    dwFlags*: DWORD

  PMMCKINFO* = ptr MMCKINFO
  NPMMCKINFO* = ptr MMCKINFO
  LPMMCKINFO* = ptr MMCKINFO
  LPCMMCKINFO* = ptr MMCKINFO
  TMMCKINFO* = MMCKINFO
  MCIERROR* = DWORD
  MCIDEVICEID* = UINT
  YIELDPROC* = proc (mciId: MCIDEVICEID, dwYieldData: DWORD): UINT{.stdcall.}
  TYIELDPROC* = YIELDPROC
  MCI_GENERIC_PARMS* {.final.} = object
    dwCallback*: DWORD

  PMCI_GENERIC_PARMS* = ptr MCI_GENERIC_PARMS
  LPMCI_GENERIC_PARMS* = ptr MCI_GENERIC_PARMS
  TMCI_GENERIC_PARMS* = MCI_GENERIC_PARMS
  MCI_OPEN_PARMSA* {.final.} = object
    dwCallback*: DWORD
    wDeviceID*: MCIDEVICEID
    lpstrDeviceType*: LPCSTR
    lpstrElementName*: LPCSTR
    lpstrAlias*: LPCSTR

  PMCI_OPEN_PARMSA* = ptr MCI_OPEN_PARMSA
  LPMCI_OPEN_PARMSA* = ptr MCI_OPEN_PARMSA
  TMCI_OPEN_PARMSA* = MCI_OPEN_PARMSA
  MCI_OPEN_PARMSW* {.final.} = object
    dwCallback*: DWORD
    wDeviceID*: MCIDEVICEID
    lpstrDeviceType*: LPCWSTR
    lpstrElementName*: LPCWSTR
    lpstrAlias*: LPCWSTR

  PMCI_OPEN_PARMSW* = ptr MCI_OPEN_PARMSW
  LPMCI_OPEN_PARMSW* = ptr MCI_OPEN_PARMSW
  TMCI_OPEN_PARMSW* = MCI_OPEN_PARMSW

when defined(UNICODE):
  type
    MCI_OPEN_PARMS* = MCI_OPEN_PARMSW
    PMCI_OPEN_PARMS* = PMCI_OPEN_PARMSW
    LPMCI_OPEN_PARMS* = LPMCI_OPEN_PARMSW
else:
  type
    MCI_OPEN_PARMS* = MCI_OPEN_PARMSA
    PMCI_OPEN_PARMS* = PMCI_OPEN_PARMSA
    LPMCI_OPEN_PARMS* = LPMCI_OPEN_PARMSA
type
  TMCI_OPEN_PARMS* = MCI_OPEN_PARMS
  MCI_PLAY_PARMS* {.final.} = object
    dwCallback*: DWORD
    dwFrom*: DWORD
    dwTo*: DWORD

  PMCI_PLAY_PARMS* = ptr MCI_PLAY_PARMS
  LPMCI_PLAY_PARMS* = ptr MCI_PLAY_PARMS
  TMCI_PLAY_PARMS* = MCI_PLAY_PARMS
  MCI_SEEK_PARMS* {.final.} = object
    dwCallback*: DWORD
    dwTo*: DWORD

  PMCI_SEEK_PARMS* = ptr MCI_SEEK_PARMS
  LPMCI_SEEK_PARMS* = ptr MCI_SEEK_PARMS
  TMCI_SEEK_PARMS* = MCI_SEEK_PARMS
  MCI_STATUS_PARMS* {.final.} = object
    dwCallback*: DWORD
    dwReturn*: DWORD
    dwItem*: DWORD
    dwTrack*: DWORD

  PMCI_STATUS_PARMS* = ptr MCI_STATUS_PARMS
  LPMCI_STATUS_PARMS* = ptr MCI_STATUS_PARMS
  TMCI_STATUS_PARMS* = MCI_STATUS_PARMS
  MCI_INFO_PARMSA* {.final.} = object
    dwCallback*: DWORD
    lpstrReturn*: cstring
    dwRetSize*: DWORD

  LPMCI_INFO_PARMSA* = ptr MCI_INFO_PARMSA
  TMCI_INFO_PARMSA* = MCI_INFO_PARMSA
  MCI_INFO_PARMSW* {.final.} = object
    dwCallback*: DWORD
    lpstrReturn*: LPWSTR
    dwRetSize*: DWORD

  LPMCI_INFO_PARMSW* = ptr MCI_INFO_PARMSW
  TMCI_INFO_PARMSW* = MCI_INFO_PARMSW

when defined(UNICODE):
  type
    MCI_INFO_PARMS* = MCI_INFO_PARMSW
    LPMCI_INFO_PARMS* = LPMCI_INFO_PARMSW
else:
  type
    MCI_INFO_PARMS* = MCI_INFO_PARMSA
    LPMCI_INFO_PARMS* = LPMCI_INFO_PARMSA
type
  TMCI_INFO_PARMS* = MCI_INFO_PARMS
  MCI_GETDEVCAPS_PARMS* {.final.} = object
    dwCallback*: DWORD
    dwReturn*: DWORD
    dwItem*: DWORD

  PMCI_GETDEVCAPS_PARMS* = ptr MCI_GETDEVCAPS_PARMS
  LPMCI_GETDEVCAPS_PARMS* = ptr MCI_GETDEVCAPS_PARMS
  TMCI_GETDEVCAPS_PARMS* = MCI_GETDEVCAPS_PARMS
  MCI_SYSINFO_PARMSA* {.final.} = object
    dwCallback*: DWORD
    lpstrReturn*: cstring
    dwRetSize*: DWORD
    dwNumber*: DWORD
    wDeviceType*: UINT

  PMCI_SYSINFO_PARMSA* = ptr MCI_SYSINFO_PARMSA
  LPMCI_SYSINFO_PARMSA* = ptr MCI_SYSINFO_PARMSA
  TMCI_SYSINFO_PARMSA* = MCI_SYSINFO_PARMSA
  MCI_SYSINFO_PARMSW* {.final.} = object
    dwCallback*: DWORD
    lpstrReturn*: LPWSTR
    dwRetSize*: DWORD
    dwNumber*: DWORD
    wDeviceType*: UINT

  PMCI_SYSINFO_PARMSW* = ptr MCI_SYSINFO_PARMSW
  LPMCI_SYSINFO_PARMSW* = ptr MCI_SYSINFO_PARMSW
  TMCI_SYSINFO_PARMSW* = MCI_SYSINFO_PARMSW

when defined(UNICODE):
  type
    MCI_SYSINFO_PARMS* = MCI_SYSINFO_PARMSW
    PMCI_SYSINFO_PARMS* = PMCI_SYSINFO_PARMSW
    LPMCI_SYSINFO_PARMS* = LPMCI_SYSINFO_PARMSW
else:
  type
    MCI_SYSINFO_PARMS* = MCI_SYSINFO_PARMSA
    PMCI_SYSINFO_PARMS* = PMCI_SYSINFO_PARMSA
    LPMCI_SYSINFO_PARMS* = LPMCI_SYSINFO_PARMSA
type
  TMCI_SYSINFO_PARMS* = MCI_SYSINFO_PARMS
  MCI_SET_PARMS* {.final.} = object
    dwCallback*: DWORD
    dwTimeFormat*: DWORD
    dwAudio*: DWORD

  PMCI_SET_PARMS* = ptr MCI_SET_PARMS
  LPMCI_SET_PARMS* = ptr MCI_SET_PARMS
  TMCI_SET_PARMS* = MCI_SET_PARMS
  MCI_BREAK_PARMS* {.final.} = object
    dwCallback*: DWORD
    nVirtKey*: int32
    hwndBreak*: HWND

  PMCI_BREAK_PARMS* = ptr MCI_BREAK_PARMS
  LPMCI_BREAK_PARMS* = ptr MCI_BREAK_PARMS
  TMCI_BREAK_PARMS* = MCI_BREAK_PARMS
  MCI_SAVE_PARMSA* {.final.} = object
    dwCallback*: DWORD
    lpfilename*: LPCSTR

  PMCI_SAVE_PARMSA* = ptr MCI_SAVE_PARMSA
  LPMCI_SAVE_PARMSA* = ptr MCI_SAVE_PARMSA
  TMCI_SAVE_PARMSA* = MCI_SAVE_PARMSA
  MCI_SAVE_PARMSW* {.final.} = object
    dwCallback*: DWORD
    lpfilename*: LPCWSTR

  PMCI_SAVE_PARMSW* = ptr MCI_SAVE_PARMSW
  LPMCI_SAVE_PARMSW* = ptr MCI_SAVE_PARMSW
  TMCI_SAVE_PARMSW* = MCI_SAVE_PARMSW

when defined(UNICODE):
  type
    MCI_SAVE_PARMS* = MCI_SAVE_PARMSW
    PMCI_SAVE_PARMS* = PMCI_SAVE_PARMSW
    LPMCI_SAVE_PARMS* = LPMCI_SAVE_PARMSW
else:
  type
    MCI_SAVE_PARMS* = MCI_SAVE_PARMSA
    PMCI_SAVE_PARMS* = PMCI_SAVE_PARMSA
    LPMCI_SAVE_PARMS* = LPMCI_SAVE_PARMSA
type
  TMCI_SAVE_PARMS* = MCI_SAVE_PARMS
  MCI_LOAD_PARMSA* {.final.} = object
    dwCallback*: DWORD
    lpfilename*: LPCSTR

  PMCI_LOAD_PARMSA* = ptr MCI_LOAD_PARMSA
  LPMCI_LOAD_PARMSA* = ptr MCI_LOAD_PARMSA
  TMCI_LOAD_PARMSA* = MCI_LOAD_PARMSA
  MCI_LOAD_PARMSW* {.final.} = object
    dwCallback*: DWORD
    lpfilename*: LPCWSTR

  PMCI_LOAD_PARMSW* = ptr MCI_LOAD_PARMSW
  LPMCI_LOAD_PARMSW* = ptr MCI_LOAD_PARMSW
  TMCI_LOAD_PARMSW* = MCI_LOAD_PARMSW

when defined(UNICODE):
  type
    MCI_LOAD_PARMS* = MCI_LOAD_PARMSW
    PMCI_LOAD_PARMS* = PMCI_LOAD_PARMSW
    LPMCI_LOAD_PARMS* = LPMCI_LOAD_PARMSW
else:
  type
    MCI_LOAD_PARMS* = MCI_LOAD_PARMSA
    PMCI_LOAD_PARMS* = PMCI_LOAD_PARMSA
    LPMCI_LOAD_PARMS* = LPMCI_LOAD_PARMSA
type
  TMCI_LOAD_PARMS* = MCI_LOAD_PARMS
  MCI_RECORD_PARMS* {.final.} = object
    dwCallback*: DWORD
    dwFrom*: DWORD
    dwTo*: DWORD

  LPMCI_RECORD_PARMS* = ptr MCI_RECORD_PARMS
  TMCI_RECORD_PARMS* = MCI_RECORD_PARMS
  MCI_VD_PLAY_PARMS* {.final.} = object
    dwCallback*: DWORD
    dwFrom*: DWORD
    dwTo*: DWORD
    dwSpeed*: DWORD

  PMCI_VD_PLAY_PARMS* = ptr MCI_VD_PLAY_PARMS
  LPMCI_VD_PLAY_PARMS* = ptr MCI_VD_PLAY_PARMS
  TMCI_VD_PLAY_PARMS* = MCI_VD_PLAY_PARMS
  MCI_VD_STEP_PARMS* {.final.} = object
    dwCallback*: DWORD
    dwFrames*: DWORD

  PMCI_VD_STEP_PARMS* = ptr MCI_VD_STEP_PARMS
  LPMCI_VD_STEP_PARMS* = ptr MCI_VD_STEP_PARMS
  MCI_VD_ESCAPE_PARMSA* {.final.} = object
    dwCallback*: DWORD
    lpstrCommand*: LPCSTR

  PMCI_VD_ESCAPE_PARMSA* = ptr MCI_VD_ESCAPE_PARMSA
  LPMCI_VD_ESCAPE_PARMSA* = ptr MCI_VD_ESCAPE_PARMSA
  TMCI_VD_ESCAPE_PARMSA* = MCI_VD_ESCAPE_PARMSA
  MCI_VD_ESCAPE_PARMSW* {.final.} = object
    dwCallback*: DWORD
    lpstrCommand*: LPCWSTR

  PMCI_VD_ESCAPE_PARMSW* = ptr MCI_VD_ESCAPE_PARMSW
  LPMCI_VD_ESCAPE_PARMSW* = ptr MCI_VD_ESCAPE_PARMSW
  TMCI_VD_ESCAPE_PARMSW* = MCI_VD_ESCAPE_PARMSW

when defined(UNICODE):
  type
    MCI_VD_ESCAPE_PARMS* = MCI_VD_ESCAPE_PARMSW
    PMCI_VD_ESCAPE_PARMS* = PMCI_VD_ESCAPE_PARMSW
    LPMCI_VD_ESCAPE_PARMS* = LPMCI_VD_ESCAPE_PARMSW
else:
  type
    MCI_VD_ESCAPE_PARMS* = MCI_VD_ESCAPE_PARMSA
    PMCI_VD_ESCAPE_PARMS* = PMCI_VD_ESCAPE_PARMSA
    LPMCI_VD_ESCAPE_PARMS* = LPMCI_VD_ESCAPE_PARMSA
type
  TMCI_VD_ESCAPE_PARMS* = MCI_VD_ESCAPE_PARMS
  MCI_WAVE_OPEN_PARMSA* {.final.} = object
    dwCallback*: DWORD
    wDeviceID*: MCIDEVICEID
    lpstrDeviceType*: LPCSTR
    lpstrElementName*: LPCSTR
    lpstrAlias*: LPCSTR
    dwBufferSeconds*: DWORD

  PMCI_WAVE_OPEN_PARMSA* = ptr MCI_WAVE_OPEN_PARMSA
  LPMCI_WAVE_OPEN_PARMSA* = ptr MCI_WAVE_OPEN_PARMSA
  TMCI_WAVE_OPEN_PARMSA* = MCI_WAVE_OPEN_PARMSA
  MCI_WAVE_OPEN_PARMSW* {.final.} = object
    dwCallback*: DWORD
    wDeviceID*: MCIDEVICEID
    lpstrDeviceType*: LPCWSTR
    lpstrElementName*: LPCWSTR
    lpstrAlias*: LPCWSTR
    dwBufferSeconds*: DWORD

  PMCI_WAVE_OPEN_PARMSW* = ptr MCI_WAVE_OPEN_PARMSW
  LPMCI_WAVE_OPEN_PARMSW* = ptr MCI_WAVE_OPEN_PARMSW
  TMCI_WAVE_OPEN_PARMSW* = MCI_WAVE_OPEN_PARMSW

when defined(UNICODE):
  type
    MCI_WAVE_OPEN_PARMS* = MCI_WAVE_OPEN_PARMSW
    PMCI_WAVE_OPEN_PARMS* = PMCI_WAVE_OPEN_PARMSW
    LPMCI_WAVE_OPEN_PARMS* = LPMCI_WAVE_OPEN_PARMSW
else:
  type
    MCI_WAVE_OPEN_PARMS* = MCI_WAVE_OPEN_PARMSA
    PMCI_WAVE_OPEN_PARMS* = PMCI_WAVE_OPEN_PARMSA
    LPMCI_WAVE_OPEN_PARMS* = LPMCI_WAVE_OPEN_PARMSA
type
  TMCI_WAVE_OPEN_PARMS* = MCI_WAVE_OPEN_PARMS
  MCI_WAVE_DELETE_PARMS* {.final.} = object
    dwCallback*: DWORD
    dwFrom*: DWORD
    dwTo*: DWORD

  PMCI_WAVE_DELETE_PARMS* = ptr MCI_WAVE_DELETE_PARMS
  LPMCI_WAVE_DELETE_PARMS* = ptr MCI_WAVE_DELETE_PARMS
  TMCI_WAVE_DELETE_PARMS* = MCI_WAVE_DELETE_PARMS
  MCI_WAVE_SET_PARMS* {.final.} = object
    dwCallback*: DWORD
    dwTimeFormat*: DWORD
    dwAudio*: DWORD
    wInput*: UINT
    wOutput*: UINT
    wFormatTag*: int16
    wReserved2*: int16
    nChannels*: int16
    wReserved3*: int16
    nSamplesPerSec*: DWORD
    nAvgBytesPerSec*: DWORD
    nBlockAlign*: int16
    wReserved4*: int16
    wBitsPerSample*: int16
    wReserved5*: int16

  PMCI_WAVE_SET_PARMS* = ptr MCI_WAVE_SET_PARMS
  LPMCI_WAVE_SET_PARMS* = ptr MCI_WAVE_SET_PARMS
  TMCI_WAVE_SET_PARMS* = MCI_WAVE_SET_PARMS
  MCI_SEQ_SET_PARMS* {.final.} = object
    dwCallback*: DWORD
    dwTimeFormat*: DWORD
    dwAudio*: DWORD
    dwTempo*: DWORD
    dwPort*: DWORD
    dwSlave*: DWORD
    dwMaster*: DWORD
    dwOffset*: DWORD

  PMCI_SEQ_SET_PARMS* = ptr MCI_SEQ_SET_PARMS
  LPMCI_SEQ_SET_PARMS* = ptr MCI_SEQ_SET_PARMS
  TMCI_SEQ_SET_PARMS* = MCI_SEQ_SET_PARMS
  MCI_ANIM_OPEN_PARMSA* {.final.} = object
    dwCallback*: DWORD
    wDeviceID*: MCIDEVICEID
    lpstrDeviceType*: LPCSTR
    lpstrElementName*: LPCSTR
    lpstrAlias*: LPCSTR
    dwStyle*: DWORD
    hWndParent*: HWND

  PMCI_ANIM_OPEN_PARMSA* = ptr MCI_ANIM_OPEN_PARMSA
  LPMCI_ANIM_OPEN_PARMSA* = ptr MCI_ANIM_OPEN_PARMSA
  TMCI_ANIM_OPEN_PARMSA* = MCI_ANIM_OPEN_PARMSA
  MCI_ANIM_OPEN_PARMSW* {.final.} = object
    dwCallback*: DWORD
    wDeviceID*: MCIDEVICEID
    lpstrDeviceType*: LPCWSTR
    lpstrElementName*: LPCWSTR
    lpstrAlias*: LPCWSTR
    dwStyle*: DWORD
    hWndParent*: HWND

  PMCI_ANIM_OPEN_PARMSW* = ptr MCI_ANIM_OPEN_PARMSW
  LPMCI_ANIM_OPEN_PARMSW* = ptr MCI_ANIM_OPEN_PARMSW

when defined(UNICODE):
  type
    MCI_ANIM_OPEN_PARMS* = MCI_ANIM_OPEN_PARMSW
    PMCI_ANIM_OPEN_PARMS* = PMCI_ANIM_OPEN_PARMSW
    LPMCI_ANIM_OPEN_PARMS* = LPMCI_ANIM_OPEN_PARMSW
else:
  type
    MCI_ANIM_OPEN_PARMS* = MCI_ANIM_OPEN_PARMSA
    PMCI_ANIM_OPEN_PARMS* = PMCI_ANIM_OPEN_PARMSA
    LPMCI_ANIM_OPEN_PARMS* = LPMCI_ANIM_OPEN_PARMSA
type
  TMCI_ANIM_OPEN_PARMS* = MCI_ANIM_OPEN_PARMS
  MCI_ANIM_WINDOW_PARMSW* {.final.} = object
    dwCallback*: DWORD
    hWnd*: HWND
    nCmdShow*: UINT
    lpstrText*: LPCWSTR

  PMCI_ANIM_WINDOW_PARMSW* = ptr MCI_ANIM_WINDOW_PARMSW
  LPMCI_ANIM_WINDOW_PARMSW* = ptr MCI_ANIM_WINDOW_PARMSW
  TMCI_ANIM_WINDOW_PARMSW* = MCI_ANIM_WINDOW_PARMSW
  MCI_ANIM_STEP_PARMS* {.final.} = object
    dwCallback*: DWORD
    dwFrames*: DWORD

  PMCI_ANIM_STEP_PARMS* = ptr MCI_ANIM_STEP_PARMS
  LPMCI_ANIM_STEP_PARMS* = ptr MCI_ANIM_STEP_PARMS
  TMCI_ANIM_STEP_PARMS* = MCI_ANIM_STEP_PARMS
  MCI_ANIM_WINDOW_PARMSA* {.final.} = object
    dwCallback*: DWORD
    hWnd*: HWND
    nCmdShow*: UINT
    lpstrText*: LPCSTR

  PMCI_ANIM_WINDOW_PARMSA* = ptr MCI_ANIM_WINDOW_PARMSA
  LPMCI_ANIM_WINDOW_PARMSA* = ptr MCI_ANIM_WINDOW_PARMSA
  TMCI_ANIM_WINDOW_PARMSA* = MCI_ANIM_WINDOW_PARMSA
  MCI_ANIM_PLAY_PARMS* {.final.} = object
    dwCallback*: DWORD
    dwFrom*: DWORD
    dwTo*: DWORD
    dwSpeed*: DWORD

  PMCI_ANIM_PLAY_PARMS* = ptr MCI_ANIM_PLAY_PARMS
  LPMCI_ANIM_PLAY_PARMS* = ptr MCI_ANIM_PLAY_PARMS

when defined(UNICODE):
  type
    MCI_ANIM_WINDOW_PARMS* = MCI_ANIM_WINDOW_PARMSW
    PMCI_ANIM_WINDOW_PARMS* = PMCI_ANIM_WINDOW_PARMSW
    LPMCI_ANIM_WINDOW_PARMS* = LPMCI_ANIM_WINDOW_PARMSW
else:
  type
    MCI_ANIM_WINDOW_PARMS* = MCI_ANIM_WINDOW_PARMSA
    PMCI_ANIM_WINDOW_PARMS* = PMCI_ANIM_WINDOW_PARMSA
    LPMCI_ANIM_WINDOW_PARMS* = LPMCI_ANIM_WINDOW_PARMSA
type
  MCI_ANIM_RECT_PARMS* {.final.} = object
    dwCallback*: DWORD
    rc*: TRECT

  PMCI_ANIM_RECT_PARMS* = ptr MCI_ANIM_RECT_PARMS
  LPMCI_ANIM_RECT_PARMS* = ptr MCI_ANIM_RECT_PARMS
  TMCI_ANIM_RECT_PARMS* = MCI_ANIM_RECT_PARMS
  MCI_ANIM_UPDATE_PARMS* {.final.} = object
    dwCallback*: DWORD
    rc*: TRECT
    hDC*: HDC

  PMCI_ANIM_UPDATE_PARMS* = ptr MCI_ANIM_UPDATE_PARMS
  LPMCI_ANIM_UPDATE_PARMS* = ptr MCI_ANIM_UPDATE_PARMS
  TMCI_ANIM_UPDATE_PARMS* = MCI_ANIM_UPDATE_PARMS
  MCI_OVLY_OPEN_PARMSA* {.final.} = object
    dwCallback*: DWORD
    wDeviceID*: MCIDEVICEID
    lpstrDeviceType*: LPCSTR
    lpstrElementName*: LPCSTR
    lpstrAlias*: LPCSTR
    dwStyle*: DWORD
    hWndParent*: HWND

  PMCI_OVLY_OPEN_PARMSA* = ptr MCI_OVLY_OPEN_PARMSA
  LPMCI_OVLY_OPEN_PARMSA* = ptr MCI_OVLY_OPEN_PARMSA
  TMCI_OVLY_OPEN_PARMSA* = MCI_OVLY_OPEN_PARMSA
  MCI_OVLY_OPEN_PARMSW* {.final.} = object
    dwCallback*: DWORD
    wDeviceID*: MCIDEVICEID
    lpstrDeviceType*: LPCWSTR
    lpstrElementName*: LPCWSTR
    lpstrAlias*: LPCWSTR
    dwStyle*: DWORD
    hWndParent*: HWND

  PMCI_OVLY_OPEN_PARMSW* = ptr MCI_OVLY_OPEN_PARMSW
  LPMCI_OVLY_OPEN_PARMSW* = ptr MCI_OVLY_OPEN_PARMSW
  TMCI_OVLY_OPEN_PARMSW* = MCI_OVLY_OPEN_PARMSW

when defined(UNICODE):
  type
    MCI_OVLY_OPEN_PARMS* = MCI_OVLY_OPEN_PARMSW
    PMCI_OVLY_OPEN_PARMS* = PMCI_OVLY_OPEN_PARMSW
    LPMCI_OVLY_OPEN_PARMS* = LPMCI_OVLY_OPEN_PARMSW
else:
  type
    MCI_OVLY_OPEN_PARMS* = MCI_OVLY_OPEN_PARMSA
    PMCI_OVLY_OPEN_PARMS* = PMCI_OVLY_OPEN_PARMSA
    LPMCI_OVLY_OPEN_PARMS* = LPMCI_OVLY_OPEN_PARMSA
type
  TMCI_OVLY_OPEN_PARMS* = MCI_OVLY_OPEN_PARMS
  MCI_OVLY_WINDOW_PARMSA* {.final.} = object
    dwCallback*: DWORD
    hWnd*: HWND
    nCmdShow*: UINT
    lpstrText*: LPCSTR

  PMCI_OVLY_WINDOW_PARMSA* = ptr MCI_OVLY_WINDOW_PARMSA
  LPMCI_OVLY_WINDOW_PARMSA* = ptr MCI_OVLY_WINDOW_PARMSA
  TMCI_OVLY_WINDOW_PARMSA* = MCI_OVLY_WINDOW_PARMSA
  MCI_OVLY_WINDOW_PARMSW* {.final.} = object
    dwCallback*: DWORD
    hWnd*: HWND
    nCmdShow*: UINT
    lpstrText*: LPCWSTR

  PMCI_OVLY_WINDOW_PARMSW* = ptr MCI_OVLY_WINDOW_PARMSW
  LPMCI_OVLY_WINDOW_PARMSW* = ptr MCI_OVLY_WINDOW_PARMSW
  TMCI_OVLY_WINDOW_PARMSW* = MCI_OVLY_WINDOW_PARMSW

when defined(UNICODE):
  type
    MCI_OVLY_WINDOW_PARMS* = MCI_OVLY_WINDOW_PARMSW
    PMCI_OVLY_WINDOW_PARMS* = PMCI_OVLY_WINDOW_PARMSW
    LPMCI_OVLY_WINDOW_PARMS* = LPMCI_OVLY_WINDOW_PARMSW
else:
  type
    MCI_OVLY_WINDOW_PARMS* = MCI_OVLY_WINDOW_PARMSA
    PMCI_OVLY_WINDOW_PARMS* = PMCI_OVLY_WINDOW_PARMSA
    LPMCI_OVLY_WINDOW_PARMS* = LPMCI_OVLY_WINDOW_PARMSA
type
  TMCI_OVLY_WINDOW_PARMS* = MCI_OVLY_WINDOW_PARMSW
  MCI_OVLY_RECT_PARMS* {.final.} = object
    dwCallback*: DWORD
    rc*: TRECT

  PMCI_OVLY_RECT_PARMS* = ptr MCI_OVLY_RECT_PARMS
  LPMCI_OVLY_RECT_PARMS* = ptr MCI_OVLY_RECT_PARMS
  TMCI_OVLY_RECT_PARMS* = MCI_OVLY_RECT_PARMS
  MCI_OVLY_SAVE_PARMSA* {.final.} = object
    dwCallback*: DWORD
    lpfilename*: LPCSTR
    rc*: TRECT

  PMCI_OVLY_SAVE_PARMSA* = ptr MCI_OVLY_SAVE_PARMSA
  LPMCI_OVLY_SAVE_PARMSA* = ptr MCI_OVLY_SAVE_PARMSA
  TMCI_OVLY_SAVE_PARMSA* = MCI_OVLY_SAVE_PARMSA
  MCI_OVLY_SAVE_PARMSW* {.final.} = object
    dwCallback*: DWORD
    lpfilename*: LPCWSTR
    rc*: TRECT

  PMCI_OVLY_SAVE_PARMSW* = ptr MCI_OVLY_SAVE_PARMSW
  LPMCI_OVLY_SAVE_PARMSW* = ptr MCI_OVLY_SAVE_PARMSW
  TMCI_OVLY_SAVE_PARMSW* = MCI_OVLY_SAVE_PARMSW

when defined(UNICODE):
  type
    MCI_OVLY_SAVE_PARMS* = MCI_OVLY_SAVE_PARMSW
    PMCI_OVLY_SAVE_PARMS* = PMCI_OVLY_SAVE_PARMSW
    LPMCI_OVLY_SAVE_PARMS* = LPMCI_OVLY_SAVE_PARMSW
else:
  type
    MCI_OVLY_SAVE_PARMS* = MCI_OVLY_SAVE_PARMSA
    PMCI_OVLY_SAVE_PARMS* = PMCI_OVLY_SAVE_PARMSA
    LPMCI_OVLY_SAVE_PARMS* = LPMCI_OVLY_SAVE_PARMSA
type
  TMCI_OVLY_SAVE_PARMS* = MCI_OVLY_SAVE_PARMS
  MCI_OVLY_LOAD_PARMSA* {.final.} = object
    dwCallback*: DWORD
    lpfilename*: LPCSTR
    rc*: TRECT

  PMCI_OVLY_LOAD_PARMSA* = ptr MCI_OVLY_LOAD_PARMSA
  LPMCI_OVLY_LOAD_PARMSA* = ptr MCI_OVLY_LOAD_PARMSA
  TMCI_OVLY_LOAD_PARMSA* = MCI_OVLY_LOAD_PARMSA
  MCI_OVLY_LOAD_PARMSW* {.final.} = object
    dwCallback*: DWORD
    lpfilename*: LPCWSTR
    rc*: TRECT

  PMCI_OVLY_LOAD_PARMSW* = ptr MCI_OVLY_LOAD_PARMSW
  LPMCI_OVLY_LOAD_PARMSW* = ptr MCI_OVLY_LOAD_PARMSW
  TMCI_OVLY_LOAD_PARMSW* = MCI_OVLY_LOAD_PARMSW

when defined(UNICODE):
  type
    MCI_OVLY_LOAD_PARMS* = MCI_OVLY_LOAD_PARMSW
    PMCI_OVLY_LOAD_PARMS* = PMCI_OVLY_LOAD_PARMSW
    LPMCI_OVLY_LOAD_PARMS* = LPMCI_OVLY_LOAD_PARMSW
else:
  type
    MCI_OVLY_LOAD_PARMS* = MCI_OVLY_LOAD_PARMSA
    PMCI_OVLY_LOAD_PARMS* = PMCI_OVLY_LOAD_PARMSA
    LPMCI_OVLY_LOAD_PARMS* = LPMCI_OVLY_LOAD_PARMSA
type
  TMCI_OVLY_LOAD_PARMS* = MCI_OVLY_LOAD_PARMS

type
  pcmwaveformat_tag* = PCMWAVEFORMAT

proc mmioStringToFOURCCA*(x1: LPCSTR, x2: UINT): FOURCC{.stdcall,
    dynlib: "winmm.dll", importc: "mmioStringToFOURCCA".}
proc mmioStringToFOURCCW*(x1: LPCWSTR, x2: UINT): FOURCC{.stdcall,
    dynlib: "winmm.dll", importc: "mmioStringToFOURCCW".}
proc mmioStringToFOURCC*(x1: cstring, x2: UINT): FOURCC{.stdcall,
    dynlib: "winmm.dll", importc: "mmioStringToFOURCCA".}
proc mmioInstallIOProcA*(x1: FOURCC, x2: LPMMIOPROC, x3: DWORD): LPMMIOPROC{.
    stdcall, dynlib: "winmm.dll", importc: "mmioInstallIOProcA".}
proc mmioInstallIOProcW*(x1: FOURCC, x2: LPMMIOPROC, x3: DWORD): LPMMIOPROC{.
    stdcall, dynlib: "winmm.dll", importc: "mmioInstallIOProcW".}
proc mmioInstallIOProc*(x1: FOURCC, x2: LPMMIOPROC, x3: DWORD): LPMMIOPROC{.
    stdcall, dynlib: "winmm.dll", importc: "mmioInstallIOProcA".}
proc mmioOpenA*(x1: LPSTR, x2: LPMMIOINFO, x3: DWORD): HMMIO{.stdcall,
    dynlib: "winmm.dll", importc: "mmioOpenA".}
proc mmioOpenW*(x1: LPWSTR, x2: LPMMIOINFO, x3: DWORD): HMMIO{.stdcall,
    dynlib: "winmm.dll", importc: "mmioOpenW".}
proc mmioOpen*(x1: cstring, x2: LPMMIOINFO, x3: DWORD): HMMIO{.stdcall,
    dynlib: "winmm.dll", importc: "mmioOpenA".}
proc mmioRenameA*(x1: LPCSTR, x2: LPCSTR, x3: LPCMMIOINFO, x4: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mmioRenameA".}
proc mmioRenameW*(x1: LPCWSTR, x2: LPCWSTR, x3: LPCMMIOINFO, x4: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mmioRenameW".}
proc mmioRename*(x1: cstring, x2: cstring, x3: LPCMMIOINFO, x4: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mmioRenameA".}
proc mmioClose*(x1: HMMIO, x2: UINT): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "mmioClose".}
proc mmioRead*(x1: HMMIO, x2: HPSTR, x3: LONG): LONG{.stdcall,
    dynlib: "winmm.dll", importc: "mmioRead".}
proc mmioWrite*(x1: HMMIO, x2: cstring, x3: LONG): LONG{.stdcall,
    dynlib: "winmm.dll", importc: "mmioWrite".}
proc mmioSeek*(x1: HMMIO, x2: LONG, x3: WINT): LONG{.stdcall,
    dynlib: "winmm.dll", importc: "mmioSeek".}
proc mmioGetInfo*(x1: HMMIO, x2: LPMMIOINFO, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "mmioGetInfo".}
proc mmioSetInfo*(x1: HMMIO, x2: LPCMMIOINFO, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "mmioSetInfo".}
proc mmioSetBuffer*(x1: HMMIO, x2: LPSTR, x3: LONG, x4: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mmioSetBuffer".}
proc mmioFlush*(x1: HMMIO, x2: UINT): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "mmioFlush".}
proc mmioAdvance*(x1: HMMIO, x2: LPMMIOINFO, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "mmioAdvance".}
proc mmioSendMessage*(x1: HMMIO, x2: UINT, x3: LPARAM, x4: LPARAM): LRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mmioSendMessage".}
proc mmioDescend*(x1: HMMIO, x2: LPMMCKINFO, x3: PMMCKINFO, x4: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mmioDescend".}
proc mmioAscend*(x1: HMMIO, x2: LPMMCKINFO, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "mmioAscend".}
proc mmioCreateChunk*(x1: HMMIO, x2: LPMMCKINFO, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "mmioCreateChunk".}
proc mciSendCommandA*(x1: MCIDEVICEID, x2: UINT, x3: DWORD, x4: DWORD): MCIERROR{.
    stdcall, dynlib: "winmm.dll", importc: "mciSendCommandA".}
proc mciSendCommandW*(x1: MCIDEVICEID, x2: UINT, x3: DWORD, x4: DWORD): MCIERROR{.
    stdcall, dynlib: "winmm.dll", importc: "mciSendCommandW".}
proc mciSendCommand*(x1: MCIDEVICEID, x2: UINT, x3: DWORD, x4: DWORD): MCIERROR{.
    stdcall, dynlib: "winmm.dll", importc: "mciSendCommandA".}
proc mciSendStringA*(x1: LPCSTR, x2: LPSTR, x3: UINT, x4: HWND): MCIERROR{.
    stdcall, dynlib: "winmm.dll", importc: "mciSendStringA".}
proc mciSendStringW*(x1: LPCWSTR, x2: LPWSTR, x3: UINT, x4: HWND): MCIERROR{.
    stdcall, dynlib: "winmm.dll", importc: "mciSendStringW".}
proc mciSendString*(x1: cstring, x2: cstring, x3: UINT, x4: HWND): MCIERROR{.
    stdcall, dynlib: "winmm.dll", importc: "mciSendStringA".}
proc mciGetDeviceIDA*(x1: LPCSTR): MCIDEVICEID{.stdcall, dynlib: "winmm.dll",
    importc: "mciGetDeviceIDA".}
proc mciGetDeviceIDW*(x1: LPCWSTR): MCIDEVICEID{.stdcall, dynlib: "winmm.dll",
    importc: "mciGetDeviceIDW".}
proc mciGetDeviceID*(x1: cstring): MCIDEVICEID{.stdcall, dynlib: "winmm.dll",
    importc: "mciGetDeviceIDA".}
proc mciGetDeviceIDFromElementIDA*(x1: DWORD, x2: LPCSTR): MCIDEVICEID{.stdcall,
    dynlib: "winmm.dll", importc: "mciGetDeviceIDFromElementIDA".}
proc mciGetDeviceIDFromElementIDW*(x1: DWORD, x2: LPCWSTR): MCIDEVICEID{.
    stdcall, dynlib: "winmm.dll", importc: "mciGetDeviceIDFromElementIDW".}
proc mciGetDeviceIDFromElementID*(x1: DWORD, x2: cstring): MCIDEVICEID{.stdcall,
    dynlib: "winmm.dll", importc: "mciGetDeviceIDFromElementIDA".}
proc mciGetErrorStringA*(x1: MCIERROR, x2: LPSTR, x3: UINT): BOOL{.stdcall,
    dynlib: "winmm.dll", importc: "mciGetErrorStringA".}
proc mciGetErrorStringW*(x1: MCIERROR, x2: LPWSTR, x3: UINT): BOOL{.stdcall,
    dynlib: "winmm.dll", importc: "mciGetErrorStringW".}
proc mciGetErrorString*(x1: MCIERROR, x2: cstring, x3: UINT): BOOL{.stdcall,
    dynlib: "winmm.dll", importc: "mciGetErrorStringA".}
proc mciSetYieldProc*(x1: MCIDEVICEID, x2: YIELDPROC, x3: DWORD): BOOL{.stdcall,
    dynlib: "winmm.dll", importc: "mciSetYieldProc".}
proc mciGetCreatorTask*(x1: MCIDEVICEID): HTASK{.stdcall, dynlib: "winmm.dll",
    importc: "mciGetCreatorTask".}
proc mciGetYieldProc*(x1: MCIDEVICEID, x2: LPDWORD): YIELDPROC{.stdcall,
    dynlib: "winmm.dll", importc: "mciGetYieldProc".}
proc mciExecute*(x1: LPCSTR): BOOL{.stdcall, dynlib: "winmm.dll",
                                    importc: "mciExecute".}
proc joyGetPos*(x1: UINT, x2: LPJOYINFO): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "joyGetPos".}
proc joyGetPosEx*(x1: UINT, x2: LPJOYINFOEX): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "joyGetPosEx".}
proc joyGetThreshold*(x1: UINT, x2: LPUINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "joyGetThreshold".}
proc joyReleaseCapture*(x1: UINT): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "joyReleaseCapture".}
proc joySetCapture*(x1: HWND, x2: UINT, x3: UINT, x4: BOOL): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "joySetCapture".}
proc joySetThreshold*(x1: UINT, x2: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "joySetThreshold".}
proc waveOutGetNumDevs*(): UINT{.stdcall, dynlib: "winmm.dll",
                                 importc: "waveOutGetNumDevs".}
proc waveOutGetDevCapsA*(x1: UINT, x2: LPWAVEOUTCAPSA, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveOutGetDevCapsA".}
proc waveOutGetDevCapsW*(x1: UINT, x2: LPWAVEOUTCAPSW, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveOutGetDevCapsW".}
proc waveOutGetDevCaps*(x1: UINT, x2: LPWAVEOUTCAPS, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveOutGetDevCapsA".}
proc waveOutGetVolume*(x1: HWAVEOUT, x2: LPDWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "waveOutGetVolume".}
proc waveOutSetVolume*(x1: HWAVEOUT, x2: DWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "waveOutSetVolume".}
proc waveOutGetErrorTextA*(x1: MMRESULT, x2: LPSTR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveOutGetErrorTextA".}
proc waveOutGetErrorTextW*(x1: MMRESULT, x2: LPWSTR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveOutGetErrorTextW".}
proc waveOutGetErrorText*(x1: MMRESULT, x2: cstring, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveOutGetErrorTextA".}
proc waveOutOpen*(x1: LPHWAVEOUT, x2: UINT, x3: LPCWAVEFORMATEX, x4: DWORD,
                  x5: DWORD, x6: DWORD): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "waveOutOpen".}
proc waveOutClose*(x1: HWAVEOUT): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "waveOutClose".}
proc waveOutPrepareHeader*(x1: HWAVEOUT, x2: LPWAVEHDR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveOutPrepareHeader".}
proc waveOutUnprepareHeader*(x1: HWAVEOUT, x2: LPWAVEHDR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveOutUnprepareHeader".}
proc waveOutWrite*(x1: HWAVEOUT, x2: LPWAVEHDR, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "waveOutWrite".}
proc waveOutPause*(x1: HWAVEOUT): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "waveOutPause".}
proc waveOutRestart*(x1: HWAVEOUT): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "waveOutRestart".}
proc waveOutReset*(x1: HWAVEOUT): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "waveOutReset".}
proc waveOutBreakLoop*(x1: HWAVEOUT): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "waveOutBreakLoop".}
proc waveOutGetPosition*(x1: HWAVEOUT, x2: LPMMTIME, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveOutGetPosition".}
proc waveOutGetPitch*(x1: HWAVEOUT, x2: LPDWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "waveOutGetPitch".}
proc waveOutSetPitch*(x1: HWAVEOUT, x2: DWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "waveOutSetPitch".}
proc waveOutGetPlaybackRate*(x1: HWAVEOUT, x2: LPDWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "waveOutGetPlaybackRate".}
proc waveOutSetPlaybackRate*(x1: HWAVEOUT, x2: DWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "waveOutSetPlaybackRate".}
proc waveOutGetID*(x1: HWAVEOUT, x2: LPUINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "waveOutGetID".}
proc waveOutMessage*(x1: HWAVEOUT, x2: UINT, x3: DWORD, x4: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveOutMessage".}
proc waveInGetNumDevs*(): UINT{.stdcall, dynlib: "winmm.dll",
                                importc: "waveInGetNumDevs".}
proc waveInGetDevCapsA*(x1: UINT, x2: LPWAVEINCAPSA, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveInGetDevCapsA".}
proc waveInGetDevCapsW*(x1: UINT, x2: LPWAVEINCAPSW, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveInGetDevCapsW".}
proc waveInGetDevCaps*(x1: UINT, x2: LPWAVEINCAPS, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "waveInGetDevCapsA".}
proc waveInGetErrorTextA*(x1: MMRESULT, x2: LPSTR, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "waveInGetErrorTextA".}
proc waveInGetErrorTextW*(x1: MMRESULT, x2: LPWSTR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveInGetErrorTextW".}
proc waveInGetErrorText*(x1: MMRESULT, x2: cstring, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveInGetErrorTextA".}
proc waveInOpen*(x1: LPHWAVEIN, x2: UINT, x3: LPCWAVEFORMATEX, x4: DWORD,
                 x5: DWORD, x6: DWORD): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "waveInOpen".}
proc waveInClose*(x1: HWAVEIN): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "waveInClose".}
proc waveInPrepareHeader*(x1: HWAVEIN, x2: LPWAVEHDR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveInPrepareHeader".}
proc waveInUnprepareHeader*(x1: HWAVEIN, x2: LPWAVEHDR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveInUnprepareHeader".}
proc waveInAddBuffer*(x1: HWAVEIN, x2: LPWAVEHDR, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "waveInAddBuffer".}
proc waveInStart*(x1: HWAVEIN): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "waveInStart".}
proc waveInStop*(x1: HWAVEIN): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "waveInStop".}
proc waveInReset*(x1: HWAVEIN): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "waveInReset".}
proc waveInGetPosition*(x1: HWAVEIN, x2: LPMMTIME, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "waveInGetPosition".}
proc waveInGetID*(x1: HWAVEIN, x2: LPUINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "waveInGetID".}
proc waveInMessage*(x1: HWAVEIN, x2: UINT, x3: DWORD, x4: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "waveInMessage".}
proc mixerGetLineControlsA*(x1: HMIXEROBJ, x2: LPMIXERLINECONTROLSA, x3: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mixerGetLineControlsA".}
proc mixerGetLineControlsW*(x1: HMIXEROBJ, x2: LPMIXERLINECONTROLSW, x3: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mixerGetLineControlsW".}
proc mixerGetLineControls*(x1: HMIXEROBJ, x2: LPMIXERLINECONTROLS, x3: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mixerGetLineControlsA".}
proc joyGetNumDevs*(): UINT{.stdcall, dynlib: "winmm.dll",
                             importc: "joyGetNumDevs".}
proc joyGetDevCapsA*(x1: UINT, x2: LPJOYCAPSA, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "joyGetDevCapsA".}
proc joyGetDevCapsW*(x1: UINT, x2: LPJOYCAPSW, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "joyGetDevCapsW".}
proc joyGetDevCaps*(x1: UINT, x2: LPJOYCAPS, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "joyGetDevCapsA".}
proc mixerGetControlDetailsA*(x1: HMIXEROBJ, x2: LPMIXERCONTROLDETAILS,
                              x3: DWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "mixerGetControlDetailsA".}
proc mixerGetControlDetailsW*(x1: HMIXEROBJ, x2: LPMIXERCONTROLDETAILS,
                              x3: DWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "mixerGetControlDetailsW".}
proc mixerGetControlDetails*(x1: HMIXEROBJ, x2: LPMIXERCONTROLDETAILS, x3: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mixerGetControlDetailsA".}
proc timeGetSystemTime*(x1: LPMMTIME, x2: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "timeGetSystemTime".}
proc timeGetTime*(): DWORD{.stdcall, dynlib: "winmm.dll", importc: "timeGetTime".}
proc timeSetEvent*(x1: UINT, x2: UINT, x3: LPTIMECALLBACK, x4: DWORD, x5: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "timeSetEvent".}
proc timeKillEvent*(x1: UINT): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "timeKillEvent".}
proc timeGetDevCaps*(x1: LPTIMECAPS, x2: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "timeGetDevCaps".}
proc timeBeginPeriod*(x1: UINT): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "timeBeginPeriod".}
proc timeEndPeriod*(x1: UINT): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "timeEndPeriod".}
proc mixerGetDevCapsA*(x1: UINT, x2: LPMIXERCAPSA, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "mixerGetDevCapsA".}
proc mixerGetDevCapsW*(x1: UINT, x2: LPMIXERCAPSW, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "mixerGetDevCapsW".}
proc mixerGetDevCaps*(x1: UINT, x2: LPMIXERCAPS, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "mixerGetDevCapsA".}
proc mixerOpen*(x1: LPHMIXER, x2: UINT, x3: DWORD, x4: DWORD, x5: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mixerOpen".}
proc mixerClose*(x1: HMIXER): MMRESULT{.stdcall, dynlib: "winmm.dll",
                                        importc: "mixerClose".}
proc mixerMessage*(x1: HMIXER, x2: UINT, x3: DWORD, x4: DWORD): DWORD{.stdcall,
    dynlib: "winmm.dll", importc: "mixerMessage".}
proc auxGetNumDevs*(): UINT{.stdcall, dynlib: "winmm.dll",
                             importc: "auxGetNumDevs".}
proc auxGetDevCapsA*(x1: UINT, x2: LPAUXCAPSA, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "auxGetDevCapsA".}
proc auxGetDevCapsW*(x1: UINT, x2: LPAUXCAPSW, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "auxGetDevCapsW".}
proc auxGetDevCaps*(x1: UINT, x2: LPAUXCAPS, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "auxGetDevCapsA".}
proc auxSetVolume*(x1: UINT, x2: DWORD): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "auxSetVolume".}
proc auxGetVolume*(x1: UINT, x2: LPDWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "auxGetVolume".}
proc auxOutMessage*(x1: UINT, x2: UINT, x3: DWORD, x4: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "auxOutMessage".}
proc midiOutGetNumDevs*(): UINT{.stdcall, dynlib: "winmm.dll",
                                 importc: "midiOutGetNumDevs".}
proc midiStreamOpen*(x1: LPHMIDISTRM, x2: LPUINT, x3: DWORD, x4: DWORD,
                     x5: DWORD, x6: DWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "midiStreamOpen".}
proc midiStreamClose*(x1: HMIDISTRM): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "midiStreamClose".}
proc midiStreamProperty*(x1: HMIDISTRM, x2: LPBYTE, x3: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiStreamProperty".}
proc midiStreamPosition*(x1: HMIDISTRM, x2: LPMMTIME, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiStreamPosition".}
proc midiStreamOut*(x1: HMIDISTRM, x2: LPMIDIHDR, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "midiStreamOut".}
proc midiStreamPause*(x1: HMIDISTRM): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "midiStreamPause".}
proc midiStreamRestart*(x1: HMIDISTRM): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "midiStreamRestart".}
proc midiStreamStop*(x1: HMIDISTRM): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "midiStreamStop".}
proc midiConnect*(x1: HMIDI, x2: HMIDIOUT, x3: pointer): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "midiConnect".}
proc midiDisconnect*(x1: HMIDI, x2: HMIDIOUT, x3: pointer): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "midiDisconnect".}
proc midiOutGetDevCapsA*(x1: UINT, x2: LPMIDIOUTCAPSA, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiOutGetDevCapsA".}
proc midiOutGetDevCapsW*(x1: UINT, x2: LPMIDIOUTCAPSW, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiOutGetDevCapsW".}
proc midiOutGetDevCaps*(x1: UINT, x2: LPMIDIOUTCAPS, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiOutGetDevCapsA".}
proc midiOutGetVolume*(x1: HMIDIOUT, x2: LPDWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "midiOutGetVolume".}
proc midiOutSetVolume*(x1: HMIDIOUT, x2: DWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "midiOutSetVolume".}
proc midiOutGetErrorTextA*(x1: MMRESULT, x2: LPSTR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiOutGetErrorTextA".}
proc midiOutGetErrorTextW*(x1: MMRESULT, x2: LPWSTR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiOutGetErrorTextW".}
proc midiOutGetErrorText*(x1: MMRESULT, x2: cstring, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiOutGetErrorTextA".}
proc midiOutOpen*(x1: LPHMIDIOUT, x2: UINT, x3: DWORD, x4: DWORD, x5: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiOutOpen".}
proc midiOutClose*(x1: HMIDIOUT): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "midiOutClose".}
proc midiOutPrepareHeader*(x1: HMIDIOUT, x2: LPMIDIHDR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiOutPrepareHeader".}
proc midiOutUnprepareHeader*(x1: HMIDIOUT, x2: LPMIDIHDR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiOutUnprepareHeader".}
proc midiOutShortMsg*(x1: HMIDIOUT, x2: DWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "midiOutShortMsg".}
proc midiOutLongMsg*(x1: HMIDIOUT, x2: LPMIDIHDR, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "midiOutLongMsg".}
proc midiOutReset*(x1: HMIDIOUT): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "midiOutReset".}
proc midiOutCachePatches*(x1: HMIDIOUT, x2: UINT, x3: LPWORD, x4: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiOutCachePatches".}
proc midiOutCacheDrumPatches*(x1: HMIDIOUT, x2: UINT, x3: LPWORD, x4: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiOutCacheDrumPatches".}
proc midiOutGetID*(x1: HMIDIOUT, x2: LPUINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "midiOutGetID".}
proc midiOutMessage*(x1: HMIDIOUT, x2: UINT, x3: DWORD, x4: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiOutMessage".}
proc midiInGetNumDevs*(): UINT{.stdcall, dynlib: "winmm.dll",
                                importc: "midiInGetNumDevs".}
proc midiInGetDevCapsA*(x1: UINT, x2: LPMIDIINCAPSA, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiInGetDevCapsA".}
proc midiInGetDevCapsW*(x1: UINT, x2: LPMIDIINCAPSW, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiInGetDevCapsW".}
proc midiInGetDevCaps*(x1: UINT, x2: LPMIDIINCAPS, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "midiInGetDevCapsA".}
proc midiInGetErrorTextA*(x1: MMRESULT, x2: LPSTR, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "midiInGetErrorTextA".}
proc midiInGetErrorTextW*(x1: MMRESULT, x2: LPWSTR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiInGetErrorTextW".}
proc midiInGetErrorText*(x1: MMRESULT, x2: cstring, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiInGetErrorTextA".}
proc midiInOpen*(x1: LPHMIDIIN, x2: UINT, x3: DWORD, x4: DWORD, x5: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiInOpen".}
proc midiInClose*(x1: HMIDIIN): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "midiInClose".}
proc midiInPrepareHeader*(x1: HMIDIIN, x2: LPMIDIHDR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiInPrepareHeader".}
proc midiInUnprepareHeader*(x1: HMIDIIN, x2: LPMIDIHDR, x3: UINT): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiInUnprepareHeader".}
proc midiInAddBuffer*(x1: HMIDIIN, x2: LPMIDIHDR, x3: UINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "midiInAddBuffer".}
proc midiInStart*(x1: HMIDIIN): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "midiInStart".}
proc midiInStop*(x1: HMIDIIN): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "midiInStop".}
proc midiInReset*(x1: HMIDIIN): MMRESULT{.stdcall, dynlib: "winmm.dll",
    importc: "midiInReset".}
proc midiInGetID*(x1: HMIDIIN, x2: LPUINT): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "midiInGetID".}
proc midiInMessage*(x1: HMIDIIN, x2: UINT, x3: DWORD, x4: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "midiInMessage".}
proc mixerGetLineInfoA*(x1: HMIXEROBJ, x2: LPMIXERLINEA, x3: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mixerGetLineInfoA".}
proc mixerGetLineInfoW*(x1: HMIXEROBJ, x2: LPMIXERLINEW, x3: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mixerGetLineInfoW".}
proc mixerGetLineInfo*(x1: HMIXEROBJ, x2: LPMIXERLINE, x3: DWORD): MMRESULT{.
    stdcall, dynlib: "winmm.dll", importc: "mixerGetLineInfoA".}
proc mixerGetID*(x1: HMIXEROBJ, x2: var UINT, x3: DWORD): MMRESULT{.stdcall,
    dynlib: "winmm.dll", importc: "mixerGetID".}
proc PlaySoundA*(x1: LPCSTR, x2: HMODULE, x3: DWORD): BOOL{.stdcall,
    dynlib: "winmm.dll", importc: "PlaySoundA".}
proc PlaySoundW*(x1: LPCWSTR, x2: HMODULE, x3: DWORD): BOOL{.stdcall,
    dynlib: "winmm.dll", importc: "PlaySoundW".}
proc PlaySound*(x1: cstring, x2: HMODULE, x3: DWORD): BOOL{.stdcall,
    dynlib: "winmm.dll", importc: "PlaySoundA".}
# implementation

proc MEVT_EVENTTYPE(x: int8): int8 =
  result = toU8(x shr 24)

proc MEVT_EVENTPARM(x: DWORD): DWORD =
  result = x And 0x00FFFFFF

proc MCI_MSF_MINUTE(msf: int32): int8 =
  result = toU8(msf and 0xff)

proc MCI_TMSF_TRACK(tmsf: int32): int8 =
  result = toU8(tmsf and 0xff)

proc MCI_HMS_HOUR(h: int32): int8 =
  result = toU8(h and 0xff)

proc MCI_MSF_SECOND(msf: int32): int8 =
  result = toU8(msf shr 8)

proc MCI_TMSF_MINUTE(tmsf: int32): int8 =
  result = toU8(tmsf shr 8)

proc MCI_HMS_MINUTE(h: int32): int8 =
  result = toU8(h shr 8)

proc MCI_MSF_FRAME(msf: int32): int8 =
  result = toU8(msf shr 16)

proc MCI_TMSF_SECOND(tmsf: int32): int8 =
  result = toU8(tmsf shr 16)

proc MCI_HMS_SECOND(h: int32): int8 =
  result = toU8(h shr 16)

proc MCI_MAKE_MSF(m, s, f: int8): int32 =
  result = toU32(ze(m) or ze(s) shl 8 or ze(f) shl 16)

proc MCI_MAKE_HMS(h, m, s: int8): int32 =
  result = toU32(ze(h) or ze(m) shl 8 or ze(s) shl 16)

proc MCI_TMSF_FRAME(tmsf: int32): int8 =
  result = toU8(tmsf shr 24)

proc mci_Make_TMSF(t, m, s, f: int8): int32 =
  result = (ze(t) or ze(m) shl 8 or ze(s) shl 16 or ze(f) shl 24).int32

proc DIBINDEX(n: int32): int32 =
  result = n Or 0x000010FF'i32 shl 16'i32
