home *** CD-ROM | disk | FTP | other *** search
/ PC World Plus! (NZ) 2001 June / HDC50.iso / Runimage / Delphi50 / Source / Rtl / Win / MMSYSTEM.PAS < prev    next >
Pascal/Delphi Source File  |  1999-08-11  |  188KB  |  4,669 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Run-time Library                 }
  5. {       Win32 multimedia API Interface Unit             }
  6. {                                                       }
  7. {       Copyright (c) 1985-1999, Microsoft Corporation  }
  8. {                                                       }
  9. {       Translator: Inprise Corporation                 }
  10. {                                                       }
  11. {*******************************************************}
  12.  
  13. unit MMSystem;
  14.  
  15. {$WEAKPACKAGEUNIT}
  16.  
  17. interface
  18.  
  19. (*$HPPEMIT '' *)
  20. (*$HPPEMIT '#include <mmsystem.h>' *)
  21. (*$HPPEMIT '' *)
  22.  
  23. uses Windows;
  24.  
  25.  
  26. {***************************************************************************
  27.  
  28.                     General constants and data types
  29.  
  30. ***************************************************************************}
  31.  
  32. { general constants }
  33. const
  34.   {$EXTERNALSYM MAXPNAMELEN}
  35.   MAXPNAMELEN      =  32;    { max product name length (including nil) }
  36.   {$EXTERNALSYM MAXERRORLENGTH}
  37.   MAXERRORLENGTH   = 128;    { max error text length (including nil) }
  38.   {$EXTERNALSYM MAX_JOYSTICKOEMVXDNAME}
  39.   MAX_JOYSTICKOEMVXDNAME = 260; { max oem vxd name length (including nil) }
  40.  
  41. {***************************************************************************
  42.  
  43.                          Manufacturer and product IDs
  44.  
  45.     Used with wMid and wPid fields in WAVEOUTCAPS, WAVEINCAPS,
  46.     MIDIOUTCAPS, MIDIINCAPS, AUXCAPS, JOYCAPS structures.
  47.  
  48. ***************************************************************************}
  49.  
  50. { manufacturer IDs }
  51. const
  52.   {$EXTERNALSYM MM_MICROSOFT}
  53.   MM_MICROSOFT            = 1;       { Microsoft Corp. }
  54.  
  55. { product IDs }
  56.   {$EXTERNALSYM MM_MIDI_MAPPER}
  57.   MM_MIDI_MAPPER          = 1;       { MIDI Mapper }
  58.   {$EXTERNALSYM MM_WAVE_MAPPER}
  59.   MM_WAVE_MAPPER          = 2;       { Wave Mapper }
  60.   {$EXTERNALSYM MM_SNDBLST_MIDIOUT}
  61.   MM_SNDBLST_MIDIOUT      = 3;       { Sound Blaster MIDI output port }
  62.   {$EXTERNALSYM MM_SNDBLST_MIDIIN}
  63.   MM_SNDBLST_MIDIIN       = 4;       { Sound Blaster MIDI input port  }
  64.   {$EXTERNALSYM MM_SNDBLST_SYNTH}
  65.   MM_SNDBLST_SYNTH        = 5;       { Sound Blaster internal synthesizer }
  66.   {$EXTERNALSYM MM_SNDBLST_WAVEOUT}
  67.   MM_SNDBLST_WAVEOUT      = 6;       { Sound Blaster waveform output }
  68.   {$EXTERNALSYM MM_SNDBLST_WAVEIN}
  69.   MM_SNDBLST_WAVEIN       = 7;       { Sound Blaster waveform input }
  70.   {$EXTERNALSYM MM_ADLIB}
  71.   MM_ADLIB                = 9;       { Ad Lib-compatible synthesizer }
  72.   {$EXTERNALSYM MM_MPU401_MIDIOUT}
  73.   MM_MPU401_MIDIOUT       = 10;      { MPU401-compatible MIDI output port }
  74.   {$EXTERNALSYM MM_MPU401_MIDIIN}
  75.   MM_MPU401_MIDIIN        = 11;      { MPU401-compatible MIDI input port }
  76.   {$EXTERNALSYM MM_PC_JOYSTICK}
  77.   MM_PC_JOYSTICK          = 12;      { Joystick adapter }
  78.  
  79.  
  80. { general data types }
  81. type
  82.   {$EXTERNALSYM VERSION}
  83.   VERSION = UINT;               { major (high byte), minor (low byte) }
  84.   {$EXTERNALSYM MMVERSION}
  85.   MMVERSION = UINT;             { major (high byte), minor (low byte) }
  86.   {$EXTERNALSYM MMRESULT}
  87.   MMRESULT = UINT;              { error return code, 0 means no error }
  88.  
  89. { types for wType field in MMTIME struct }
  90. const
  91.   {$EXTERNALSYM TIME_MS}
  92.   TIME_MS         = $0001;  { time in milliseconds }
  93.   {$EXTERNALSYM TIME_SAMPLES}
  94.   TIME_SAMPLES    = $0002;  { number of wave samples }
  95.   {$EXTERNALSYM TIME_BYTES}
  96.   TIME_BYTES      = $0004;  { current byte offset }
  97.   {$EXTERNALSYM TIME_SMPTE}
  98.   TIME_SMPTE      = $0008;  { SMPTE time }
  99.   {$EXTERNALSYM TIME_MIDI}
  100.   TIME_MIDI       = $0010;  { MIDI time }
  101.   {$EXTERNALSYM TIME_TICKS}
  102.   TIME_TICKS      = $0020;  { Ticks within MIDI stream }
  103.  
  104. { MMTIME data structure }
  105. type
  106.   PMMTime = ^TMMTime;
  107.   {$EXTERNALSYM mmtime_tag}
  108.   mmtime_tag = record
  109.     case wType: UINT of        { indicates the contents of the variant record }
  110.      TIME_MS:      (ms: DWORD);
  111.      TIME_SAMPLES: (sample: DWORD);
  112.      TIME_BYTES:   (cb: DWORD);
  113.      TIME_TICKS:   (ticks: DWORD);
  114.      TIME_SMPTE: (
  115.         hour: Byte;
  116.         min: Byte;
  117.         sec: Byte;
  118.         frame: Byte;
  119.         fps: Byte;
  120.         dummy: Byte;
  121.         pad: array[0..1] of Byte);
  122.       TIME_MIDI : (songptrpos: DWORD);
  123.   end;
  124.   TMMTime = mmtime_tag;
  125.   {$EXTERNALSYM MMTIME}
  126.   MMTIME = mmtime_tag;
  127.  
  128.  
  129. {***************************************************************************
  130.  
  131.                     Multimedia Extensions Window Messages
  132.  
  133. ***************************************************************************}
  134.  
  135. { joystick }
  136. const
  137.   {$EXTERNALSYM MM_JOY1MOVE}
  138.   MM_JOY1MOVE         = $3A0;
  139.   {$EXTERNALSYM MM_JOY2MOVE}
  140.   MM_JOY2MOVE         = $3A1;
  141.   {$EXTERNALSYM MM_JOY1ZMOVE}
  142.   MM_JOY1ZMOVE        = $3A2;
  143.   {$EXTERNALSYM MM_JOY2ZMOVE}
  144.   MM_JOY2ZMOVE        = $3A3;
  145.   {$EXTERNALSYM MM_JOY1BUTTONDOWN}
  146.   MM_JOY1BUTTONDOWN   = $3B5;
  147.   {$EXTERNALSYM MM_JOY2BUTTONDOWN}
  148.   MM_JOY2BUTTONDOWN   = $3B6;
  149.   {$EXTERNALSYM MM_JOY1BUTTONUP}
  150.   MM_JOY1BUTTONUP     = $3B7;
  151.   {$EXTERNALSYM MM_JOY2BUTTONUP}
  152.   MM_JOY2BUTTONUP     = $3B8;
  153.  
  154. { MCI }
  155.   {$EXTERNALSYM MM_MCINOTIFY}
  156.   MM_MCINOTIFY        = $3B9;
  157.  
  158. { waveform output }
  159.   {$EXTERNALSYM MM_WOM_OPEN}
  160.   MM_WOM_OPEN         = $3BB;
  161.   {$EXTERNALSYM MM_WOM_CLOSE}
  162.   MM_WOM_CLOSE        = $3BC;
  163.   {$EXTERNALSYM MM_WOM_DONE}
  164.   MM_WOM_DONE         = $3BD;
  165.  
  166. { waveform input }
  167.   {$EXTERNALSYM MM_WIM_OPEN}
  168.   MM_WIM_OPEN         = $3BE;
  169.   {$EXTERNALSYM MM_WIM_CLOSE}
  170.   MM_WIM_CLOSE        = $3BF;
  171.   {$EXTERNALSYM MM_WIM_DATA}
  172.   MM_WIM_DATA         = $3C0;
  173.  
  174. { MIDI input }
  175.   {$EXTERNALSYM MM_MIM_OPEN}
  176.   MM_MIM_OPEN         = $3C1;
  177.   {$EXTERNALSYM MM_MIM_CLOSE}
  178.   MM_MIM_CLOSE        = $3C2;
  179.   {$EXTERNALSYM MM_MIM_DATA}
  180.   MM_MIM_DATA         = $3C3;
  181.   {$EXTERNALSYM MM_MIM_LONGDATA}
  182.   MM_MIM_LONGDATA     = $3C4;
  183.   {$EXTERNALSYM MM_MIM_ERROR}
  184.   MM_MIM_ERROR        = $3C5;
  185.   {$EXTERNALSYM MM_MIM_LONGERROR}
  186.   MM_MIM_LONGERROR    = $3C6;
  187.  
  188. { MIDI output }
  189.   {$EXTERNALSYM MM_MOM_OPEN}
  190.   MM_MOM_OPEN         = $3C7;
  191.   {$EXTERNALSYM MM_MOM_CLOSE}
  192.   MM_MOM_CLOSE        = $3C8;
  193.   {$EXTERNALSYM MM_MOM_DONE}
  194.   MM_MOM_DONE         = $3C9;
  195.  
  196.   {$EXTERNALSYM MM_DRVM_OPEN}
  197.   MM_DRVM_OPEN        = $3D0;
  198.   {$EXTERNALSYM MM_DRVM_CLOSE}
  199.   MM_DRVM_CLOSE       = $3D1;
  200.   {$EXTERNALSYM MM_DRVM_DATA}
  201.   MM_DRVM_DATA        = $3D2;
  202.   {$EXTERNALSYM MM_DRVM_ERROR}
  203.   MM_DRVM_ERROR       = $3D3;
  204.  
  205.   {$EXTERNALSYM MM_STREAM_OPEN}
  206.   MM_STREAM_OPEN        = $3D4;
  207.   {$EXTERNALSYM MM_STREAM_CLOSE}
  208.   MM_STREAM_CLOSE        = $3D5;
  209.   {$EXTERNALSYM MM_STREAM_DONE}
  210.   MM_STREAM_DONE        = $3D6;
  211.   {$EXTERNALSYM MM_STREAM_ERROR}
  212.   MM_STREAM_ERROR        = $3D7;
  213.  
  214.   {$EXTERNALSYM MM_MOM_POSITIONCB}
  215.   MM_MOM_POSITIONCB   = $3CA;
  216.  
  217.   {$EXTERNALSYM MM_MCISIGNAL}
  218.   MM_MCISIGNAL        = $3CB;
  219.   {$EXTERNALSYM MM_MIM_MOREDATA}
  220.   MM_MIM_MOREDATA     = $3CC;
  221.  
  222.   {$EXTERNALSYM MM_MIXM_LINE_CHANGE}
  223.   MM_MIXM_LINE_CHANGE     = $3D0;
  224.   {$EXTERNALSYM MM_MIXM_CONTROL_CHANGE}
  225.   MM_MIXM_CONTROL_CHANGE  = $3D1;
  226.  
  227. {***************************************************************************
  228.  
  229.                 String resource number bases (internal use)
  230.  
  231. ***************************************************************************}
  232.  
  233. const
  234.   {$EXTERNALSYM MMSYSERR_BASE}
  235.   MMSYSERR_BASE          = 0;
  236.   {$EXTERNALSYM WAVERR_BASE}
  237.   WAVERR_BASE            = 32;
  238.   {$EXTERNALSYM MIDIERR_BASE}
  239.   MIDIERR_BASE           = 64;
  240.   {$EXTERNALSYM TIMERR_BASE}
  241.   TIMERR_BASE            = 96;
  242.   {$EXTERNALSYM JOYERR_BASE}
  243.   JOYERR_BASE            = 160;
  244.   {$EXTERNALSYM MCIERR_BASE}
  245.   MCIERR_BASE            = 256;
  246.   {$EXTERNALSYM MIXERR_BASE}
  247.   MIXERR_BASE            = 1024;
  248.  
  249.   {$EXTERNALSYM MCI_STRING_OFFSET}
  250.   MCI_STRING_OFFSET      = 512;
  251.   {$EXTERNALSYM MCI_VD_OFFSET}
  252.   MCI_VD_OFFSET          = 1024;
  253.   {$EXTERNALSYM MCI_CD_OFFSET}
  254.   MCI_CD_OFFSET          = 1088;
  255.   {$EXTERNALSYM MCI_WAVE_OFFSET}
  256.   MCI_WAVE_OFFSET        = 1152;
  257.   {$EXTERNALSYM MCI_SEQ_OFFSET}
  258.   MCI_SEQ_OFFSET         = 1216;
  259.  
  260. {***************************************************************************
  261.  
  262.                         General error return values
  263.  
  264. ***************************************************************************}
  265.  
  266. { general error return values }
  267. const
  268.   {$EXTERNALSYM MMSYSERR_NOERROR}
  269.   MMSYSERR_NOERROR      = 0;                  { no error }
  270.   {$EXTERNALSYM MMSYSERR_ERROR}
  271.   MMSYSERR_ERROR        = MMSYSERR_BASE + 1;  { unspecified error }
  272.   {$EXTERNALSYM MMSYSERR_BADDEVICEID}
  273.   MMSYSERR_BADDEVICEID  = MMSYSERR_BASE + 2;  { device ID out of range }
  274.   {$EXTERNALSYM MMSYSERR_NOTENABLED}
  275.   MMSYSERR_NOTENABLED   = MMSYSERR_BASE + 3;  { driver failed enable }
  276.   {$EXTERNALSYM MMSYSERR_ALLOCATED}
  277.   MMSYSERR_ALLOCATED    = MMSYSERR_BASE + 4;  { device already allocated }
  278.   {$EXTERNALSYM MMSYSERR_INVALHANDLE}
  279.   MMSYSERR_INVALHANDLE  = MMSYSERR_BASE + 5;  { device handle is invalid }
  280.   {$EXTERNALSYM MMSYSERR_NODRIVER}
  281.   MMSYSERR_NODRIVER     = MMSYSERR_BASE + 6;  { no device driver present }
  282.   {$EXTERNALSYM MMSYSERR_NOMEM}
  283.   MMSYSERR_NOMEM        = MMSYSERR_BASE + 7;  { memory allocation error }
  284.   {$EXTERNALSYM MMSYSERR_NOTSUPPORTED}
  285.   MMSYSERR_NOTSUPPORTED = MMSYSERR_BASE + 8;  { function isn't supported }
  286.   {$EXTERNALSYM MMSYSERR_BADERRNUM}
  287.   MMSYSERR_BADERRNUM    = MMSYSERR_BASE + 9;  { error value out of range }
  288.   {$EXTERNALSYM MMSYSERR_INVALFLAG}
  289.   MMSYSERR_INVALFLAG    = MMSYSERR_BASE + 10; { invalid flag passed }
  290.   {$EXTERNALSYM MMSYSERR_INVALPARAM}
  291.   MMSYSERR_INVALPARAM   = MMSYSERR_BASE + 11; { invalid parameter passed }
  292.   {$EXTERNALSYM MMSYSERR_HANDLEBUSY}
  293.   MMSYSERR_HANDLEBUSY   = MMSYSERR_BASE + 12; { handle being used
  294.                                                 simultaneously on another
  295.                                                 thread (eg callback) }
  296.   {$EXTERNALSYM MMSYSERR_INVALIDALIAS}
  297.   MMSYSERR_INVALIDALIAS = MMSYSERR_BASE + 13; { specified alias not found }
  298.   {$EXTERNALSYM MMSYSERR_BADDB}
  299.   MMSYSERR_BADDB        = MMSYSERR_BASE + 14; { bad registry database }
  300.   {$EXTERNALSYM MMSYSERR_KEYNOTFOUND}
  301.   MMSYSERR_KEYNOTFOUND  = MMSYSERR_BASE + 15; { registry key not found }
  302.   {$EXTERNALSYM MMSYSERR_READERROR}
  303.   MMSYSERR_READERROR    = MMSYSERR_BASE + 16; { registry read error }
  304.   {$EXTERNALSYM MMSYSERR_WRITEERROR}
  305.   MMSYSERR_WRITEERROR   = MMSYSERR_BASE + 17; { registry write error }
  306.   {$EXTERNALSYM MMSYSERR_DELETEERROR}
  307.   MMSYSERR_DELETEERROR  = MMSYSERR_BASE + 18; { registry delete error }
  308.   {$EXTERNALSYM MMSYSERR_VALNOTFOUND}
  309.   MMSYSERR_VALNOTFOUND  = MMSYSERR_BASE + 19; { registry value not found }
  310.   {$EXTERNALSYM MMSYSERR_NODRIVERCB}
  311.   MMSYSERR_NODRIVERCB   = MMSYSERR_BASE + 20; { driver does not call DriverCallback }
  312.   {$EXTERNALSYM MMSYSERR_LASTERROR}
  313.   MMSYSERR_LASTERROR    = MMSYSERR_BASE + 20; { last error in range }
  314.  
  315. type
  316.   {$EXTERNALSYM HDRVR}
  317.   HDRVR = Integer;
  318.  
  319. {***************************************************************************
  320.  
  321.                         Installable driver support
  322.  
  323. ***************************************************************************}
  324.  
  325. type
  326.   PDrvConfigInfoEx = ^TDrvConfigInfoEx;
  327.   {$EXTERNALSYM DRVCONFIGINFOEX}
  328.   DRVCONFIGINFOEX = packed record
  329.     dwDCISize: DWORD;
  330.     lpszDCISectionName: PWideChar;
  331.     lpszDCIAliasName: PWideChar;
  332.     dnDevNode: DWORD;
  333.   end;
  334.   TDrvConfigInfoEx = DRVCONFIGINFOEX;
  335.  
  336. const
  337. { Driver messages }
  338.   {$EXTERNALSYM DRV_LOAD}
  339.   DRV_LOAD                = $0001;
  340.   {$EXTERNALSYM DRV_ENABLE}
  341.   DRV_ENABLE              = $0002;
  342.   {$EXTERNALSYM DRV_OPEN}
  343.   DRV_OPEN                = $0003;
  344.   {$EXTERNALSYM DRV_CLOSE}
  345.   DRV_CLOSE               = $0004;
  346.   {$EXTERNALSYM DRV_DISABLE}
  347.   DRV_DISABLE             = $0005;
  348.   {$EXTERNALSYM DRV_FREE}
  349.   DRV_FREE                = $0006;
  350.   {$EXTERNALSYM DRV_CONFIGURE}
  351.   DRV_CONFIGURE           = $0007;
  352.   {$EXTERNALSYM DRV_QUERYCONFIGURE}
  353.   DRV_QUERYCONFIGURE      = $0008;
  354.   {$EXTERNALSYM DRV_INSTALL}
  355.   DRV_INSTALL             = $0009;
  356.   {$EXTERNALSYM DRV_REMOVE}
  357.   DRV_REMOVE              = $000A;
  358.   {$EXTERNALSYM DRV_EXITSESSION}
  359.   DRV_EXITSESSION         = $000B;
  360.   {$EXTERNALSYM DRV_POWER}
  361.   DRV_POWER               = $000F;
  362.   {$EXTERNALSYM DRV_RESERVED}
  363.   DRV_RESERVED            = $0800;
  364.   {$EXTERNALSYM DRV_USER}
  365.   DRV_USER                = $4000;
  366.  
  367. type
  368. { LPARAM of DRV_CONFIGURE message }
  369.   PDrvConfigInfo = ^TDrvConfigInfo;
  370.   {$EXTERNALSYM tagDRVCONFIGINFO}
  371.   tagDRVCONFIGINFO = packed record
  372.     dwDCISize: DWORD;
  373.     lpszDCISectionName: PWideChar;
  374.     lpszDCIAliasName: PWideChar;
  375.   end;
  376.   TDrvConfigInfo = tagDRVCONFIGINFO;
  377.   {$EXTERNALSYM DRVCONFIGINFO}
  378.   DRVCONFIGINFO = tagDRVCONFIGINFO;
  379.  
  380. const
  381. { Supported return values for DRV_CONFIGURE message }
  382.   {$EXTERNALSYM DRVCNF_CANCEL}
  383.   DRVCNF_CANCEL           = $0000;
  384.   {$EXTERNALSYM DRVCNF_OK}
  385.   DRVCNF_OK               = $0001;
  386.   {$EXTERNALSYM DRVCNF_RESTART}
  387.   DRVCNF_RESTART          = $0002;
  388.  
  389.  
  390. { installable driver function prototypes }
  391. type 
  392.   TFNDriverProc = function(dwDriverId: DWORD; hdrvr: HDRVR; 
  393.     msg: UINT; lparam1, lparam2: LPARAM): Longint stdcall;
  394.  
  395. {$EXTERNALSYM CloseDriver}
  396. function CloseDriver(hDriver: HDRVR; lParam1, lParam2: Longint): Longint; stdcall;
  397. {$EXTERNALSYM OpenDriver}
  398. function OpenDriver(szDriverName: PWideChar; szSectionName: PWideChar; lParam2: Longint): HDRVR; stdcall;
  399. {$EXTERNALSYM SendDriverMessage}
  400. function SendDriverMessage(hDriver: HDRVR; message: UINT; lParam1, lParam2: Longint): Longint; stdcall;
  401. {$EXTERNALSYM DrvGetModuleHandle}
  402. function DrvGetModuleHandle(hDriver: HDRVR): HMODULE; stdcall;
  403. {$EXTERNALSYM GetDriverModuleHandle}
  404. function GetDriverModuleHandle(hDriver: HDRVR): HMODULE; stdcall;
  405. {$EXTERNALSYM DefDriverProc}
  406. function DefDriverProc(dwDriverIdentifier: DWORD; hdrvr: HDRVR; uMsg: UINT; 
  407.   lParam1, lParam2: LPARAM): Longint; stdcall;
  408.  
  409. { return values from DriverProc() function }
  410. const
  411.   {$EXTERNALSYM DRV_CANCEL}
  412.   DRV_CANCEL             = DRVCNF_CANCEL;
  413.   {$EXTERNALSYM DRV_OK}
  414.   DRV_OK                 = DRVCNF_OK;
  415.   {$EXTERNALSYM DRV_RESTART}
  416.   DRV_RESTART            = DRVCNF_RESTART;
  417.  
  418.   {$EXTERNALSYM DRV_MCI_FIRST}
  419.   DRV_MCI_FIRST          = DRV_RESERVED;
  420.   {$EXTERNALSYM DRV_MCI_LAST}
  421.   DRV_MCI_LAST           = DRV_RESERVED + $FFF;
  422.  
  423.  
  424. {***************************************************************************
  425.  
  426.                           Driver callback support
  427.  
  428. ***************************************************************************}
  429.  
  430. { flags used with waveOutOpen(), waveInOpen(), midiInOpen(), and }
  431. { midiOutOpen() to specify the type of the dwCallback parameter. }
  432.  
  433. const
  434.   {$EXTERNALSYM CALLBACK_TYPEMASK}
  435.   CALLBACK_TYPEMASK   = $00070000;    { callback type mask }
  436.   {$EXTERNALSYM CALLBACK_NULL}
  437.   CALLBACK_NULL       = $00000000;    { no callback }
  438.   {$EXTERNALSYM CALLBACK_WINDOW}
  439.   CALLBACK_WINDOW     = $00010000;    { dwCallback is a HWND }
  440.   {$EXTERNALSYM CALLBACK_TASK}
  441.   CALLBACK_TASK       = $00020000;    { dwCallback is a HTASK }
  442.   {$EXTERNALSYM CALLBACK_FUNCTION}
  443.   CALLBACK_FUNCTION   = $00030000;    { dwCallback is a FARPROC }
  444.   {$EXTERNALSYM CALLBACK_THREAD}
  445.   CALLBACK_THREAD     = CALLBACK_TASK;{ thread ID replaces 16 bit task }
  446.   {$EXTERNALSYM CALLBACK_EVENT}
  447.   CALLBACK_EVENT      = $00050000;    { dwCallback is an EVENT Handle }
  448.  
  449. { driver callback prototypes }
  450.  
  451. type
  452.   TFNDrvCallBack = procedure(hdrvr: HDRVR; uMsg: UINT; dwUser: DWORD;
  453.     dw1, dw2: DWORD) stdcall;
  454.  
  455.  
  456. {***************************************************************************
  457.  
  458.                     General MMSYSTEM support
  459.  
  460. ***************************************************************************}
  461.  
  462. {$EXTERNALSYM mmsystemGetVersion}
  463. function mmsystemGetVersion: UINT; stdcall;
  464.  
  465. {***************************************************************************
  466.  
  467.                             Sound support
  468.  
  469. ***************************************************************************}
  470.  
  471. {$EXTERNALSYM sndPlaySoundA}
  472. function sndPlaySoundA(lpszSoundName: PAnsiChar; uFlags: UINT): BOOL; stdcall;
  473. {$EXTERNALSYM sndPlaySoundW}
  474. function sndPlaySoundW(lpszSoundName: PWideChar; uFlags: UINT): BOOL; stdcall;
  475. {$EXTERNALSYM sndPlaySound}
  476. function sndPlaySound(lpszSoundName: PChar; uFlags: UINT): BOOL; stdcall;
  477.  
  478. { flag values for wFlags parameter }
  479. const
  480.   {$EXTERNALSYM SND_SYNC}
  481.   SND_SYNC            = $0000;  { play synchronously (default) }
  482.   {$EXTERNALSYM SND_ASYNC}
  483.   SND_ASYNC           = $0001;  { play asynchronously }
  484.   {$EXTERNALSYM SND_NODEFAULT}
  485.   SND_NODEFAULT       = $0002;  { don't use default sound }
  486.   {$EXTERNALSYM SND_MEMORY}
  487.   SND_MEMORY          = $0004;  { lpszSoundName points to a memory file }
  488.   {$EXTERNALSYM SND_LOOP}
  489.   SND_LOOP            = $0008;  { loop the sound until next sndPlaySound }
  490.   {$EXTERNALSYM SND_NOSTOP}
  491.   SND_NOSTOP          = $0010;  { don't stop any currently playing sound }
  492.  
  493.   {$EXTERNALSYM SND_NOWAIT}
  494.   SND_NOWAIT          = $00002000;  { don't wait if the driver is busy }
  495.   {$EXTERNALSYM SND_ALIAS}
  496.   SND_ALIAS           = $00010000;  { name is a registry alias }
  497.   {$EXTERNALSYM SND_ALIAS_ID}
  498.   SND_ALIAS_ID        = $00110000;  { alias is a predefined ID }
  499.   {$EXTERNALSYM SND_FILENAME}
  500.   SND_FILENAME        = $00020000;  { name is file name }
  501.   {$EXTERNALSYM SND_RESOURCE}
  502.   SND_RESOURCE        = $00040004;  { name is resource name or atom }
  503.   {$EXTERNALSYM SND_PURGE}
  504.   SND_PURGE           = $0040;      { purge non-static events for task }
  505.   {$EXTERNALSYM SND_APPLICATION}
  506.   SND_APPLICATION     = $0080;      { look for application specific association }
  507.  
  508.   {$EXTERNALSYM SND_ALIAS_START}
  509.   SND_ALIAS_START     = 0;   { alias base }
  510.  
  511.   {$EXTERNALSYM SND_ALIAS_SYSTEMASTERISK}
  512.   SND_ALIAS_SYSTEMASTERISK       = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('*')) shl 8));
  513.   {$EXTERNALSYM SND_ALIAS_SYSTEMQUESTION}
  514.   SND_ALIAS_SYSTEMQUESTION       = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('?')) shl 8));
  515.   {$EXTERNALSYM SND_ALIAS_SYSTEMHAND}
  516.   SND_ALIAS_SYSTEMHAND           = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('H')) shl 8));
  517.   {$EXTERNALSYM SND_ALIAS_SYSTEMEXIT}
  518.   SND_ALIAS_SYSTEMEXIT           = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('E')) shl 8));
  519.   {$EXTERNALSYM SND_ALIAS_SYSTEMSTART}
  520.   SND_ALIAS_SYSTEMSTART          = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('S')) shl 8));
  521.   {$EXTERNALSYM SND_ALIAS_SYSTEMWELCOME}
  522.   SND_ALIAS_SYSTEMWELCOME        = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('W')) shl 8));
  523.   {$EXTERNALSYM SND_ALIAS_SYSTEMEXCLAMATION}
  524.   SND_ALIAS_SYSTEMEXCLAMATION    = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('!')) shl 8));
  525.   {$EXTERNALSYM SND_ALIAS_SYSTEMDEFAULT}
  526.   SND_ALIAS_SYSTEMDEFAULT        = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('D')) shl 8));
  527.  
  528. {$EXTERNALSYM PlaySoundA}
  529. function PlaySoundA(pszSound: PAnsiChar; hmod: HMODULE; fdwSound: DWORD): BOOL; stdcall;
  530. {$EXTERNALSYM PlaySoundW}
  531. function PlaySoundW(pszSound: PWideChar; hmod: HMODULE; fdwSound: DWORD): BOOL; stdcall;
  532. {$EXTERNALSYM PlaySound}
  533. function PlaySound(pszSound: PChar; hmod: HMODULE; fdwSound: DWORD): BOOL; stdcall;
  534.  
  535. {***************************************************************************
  536.  
  537.                         Waveform audio support
  538.  
  539. ***************************************************************************}
  540.  
  541. { waveform audio error return values }
  542. const
  543.   {$EXTERNALSYM WAVERR_BADFORMAT}
  544.   WAVERR_BADFORMAT      = WAVERR_BASE + 0;    { unsupported wave format }
  545.   {$EXTERNALSYM WAVERR_STILLPLAYING}
  546.   WAVERR_STILLPLAYING   = WAVERR_BASE + 1;    { still something playing }
  547.   {$EXTERNALSYM WAVERR_UNPREPARED}
  548.   WAVERR_UNPREPARED     = WAVERR_BASE + 2;    { header not prepared }
  549.   {$EXTERNALSYM WAVERR_SYNC}
  550.   WAVERR_SYNC           = WAVERR_BASE + 3;    { device is synchronous }
  551.   {$EXTERNALSYM WAVERR_LASTERROR}
  552.   WAVERR_LASTERROR      = WAVERR_BASE + 3;    { last error in range }
  553.  
  554. { waveform audio data types }
  555. type
  556.   PHWAVE = ^HWAVE;
  557.   {$EXTERNALSYM HWAVE}
  558.   HWAVE = Integer;
  559.   PHWAVEIN = ^HWAVEIN;
  560.   {$EXTERNALSYM HWAVEIN}
  561.   HWAVEIN = Integer;
  562.   PHWAVEOUT = ^HWAVEOUT;
  563.   {$EXTERNALSYM HWAVEOUT}
  564.   HWAVEOUT = Integer;
  565.  
  566. type
  567.   TFNWaveCallBack = TFNDrvCallBack;
  568.  
  569. { wave callback messages }
  570. const
  571.   {$EXTERNALSYM WOM_OPEN}
  572.   WOM_OPEN        = MM_WOM_OPEN;
  573.   {$EXTERNALSYM WOM_CLOSE}
  574.   WOM_CLOSE       = MM_WOM_CLOSE;
  575.   {$EXTERNALSYM WOM_DONE}
  576.   WOM_DONE        = MM_WOM_DONE;
  577.   {$EXTERNALSYM WIM_OPEN}
  578.   WIM_OPEN        = MM_WIM_OPEN;
  579.   {$EXTERNALSYM WIM_CLOSE}
  580.   WIM_CLOSE       = MM_WIM_CLOSE;
  581.   {$EXTERNALSYM WIM_DATA}
  582.   WIM_DATA        = MM_WIM_DATA;
  583.  
  584. { device ID for wave device mapper }
  585.   {$EXTERNALSYM WAVE_MAPPER}
  586.   WAVE_MAPPER     = UINT(-1);
  587.  
  588. { flags for dwFlags parameter in waveOutOpen() and waveInOpen() }
  589.   {$EXTERNALSYM WAVE_FORMAT_QUERY}
  590.   WAVE_FORMAT_QUERY     = $0001;
  591.   {$EXTERNALSYM WAVE_ALLOWSYNC}
  592.   WAVE_ALLOWSYNC        = $0002;
  593.   {$EXTERNALSYM WAVE_MAPPED}
  594.   WAVE_MAPPED           = $0004;
  595.  
  596. { wave data block header }
  597. type
  598.   PWaveHdr = ^TWaveHdr;
  599.   {$EXTERNALSYM wavehdr_tag}
  600.   wavehdr_tag = record
  601.     lpData: PChar;              { pointer to locked data buffer }
  602.     dwBufferLength: DWORD;      { length of data buffer }
  603.     dwBytesRecorded: DWORD;     { used for input only }
  604.     dwUser: DWORD;              { for client's use }
  605.     dwFlags: DWORD;             { assorted flags (see defines) }
  606.     dwLoops: DWORD;             { loop control counter }
  607.     lpNext: PWaveHdr;           { reserved for driver }
  608.     reserved: DWORD;            { reserved for driver }
  609.   end;
  610.   TWaveHdr = wavehdr_tag;
  611.   {$EXTERNALSYM WAVEHDR}
  612.   WAVEHDR = wavehdr_tag;
  613.  
  614.  
  615. { flags for dwFlags field of WAVEHDR }
  616. const
  617.   {$EXTERNALSYM WHDR_DONE}
  618.   WHDR_DONE       = $00000001;  { done bit }
  619.   {$EXTERNALSYM WHDR_PREPARED}
  620.   WHDR_PREPARED   = $00000002;  { set if this header has been prepared }
  621.   {$EXTERNALSYM WHDR_BEGINLOOP}
  622.   WHDR_BEGINLOOP  = $00000004;  { loop start block }
  623.   {$EXTERNALSYM WHDR_ENDLOOP}
  624.   WHDR_ENDLOOP    = $00000008;  { loop end block }
  625.   {$EXTERNALSYM WHDR_INQUEUE}
  626.   WHDR_INQUEUE    = $00000010;  { reserved for driver }
  627.  
  628. { waveform output device capabilities structure }
  629. type
  630.   PWaveOutCapsA = ^TWaveOutCapsA;
  631.   PWaveOutCapsW = ^TWaveOutCapsW;
  632.   PWaveOutCaps = PWaveOutCapsA;
  633.   {$EXTERNALSYM tagWAVEOUTCAPSA}
  634.   tagWAVEOUTCAPSA = record
  635.     wMid: Word;                 { manufacturer ID }
  636.     wPid: Word;                 { product ID }
  637.     vDriverVersion: MMVERSION;       { version of the driver }
  638.     szPname: array[0..MAXPNAMELEN-1] of AnsiChar;  { product name (NULL terminated string) }
  639.     dwFormats: DWORD;          { formats supported }
  640.     wChannels: Word;            { number of sources supported }
  641.     dwSupport: DWORD;          { functionality supported by driver }
  642.   end;
  643.   {$EXTERNALSYM tagWAVEOUTCAPSW}
  644.   tagWAVEOUTCAPSW = record
  645.     wMid: Word;                 { manufacturer ID }
  646.     wPid: Word;                 { product ID }
  647.     vDriverVersion: MMVERSION;       { version of the driver }
  648.     szPname: array[0..MAXPNAMELEN-1] of WideChar;  { product name (NULL terminated string) }
  649.     dwFormats: DWORD;          { formats supported }
  650.     wChannels: Word;            { number of sources supported }
  651.     dwSupport: DWORD;          { functionality supported by driver }
  652.   end;
  653.   {$EXTERNALSYM tagWAVEOUTCAPS}
  654.   tagWAVEOUTCAPS = tagWAVEOUTCAPSA;
  655.   TWaveOutCapsA = tagWAVEOUTCAPSA;
  656.   TWaveOutCapsW = tagWAVEOUTCAPSW;
  657.   TWaveOutCaps = TWaveOutCapsA;
  658.   {$EXTERNALSYM WAVEOUTCAPSA}
  659.   WAVEOUTCAPSA = tagWAVEOUTCAPSA;
  660.   {$EXTERNALSYM WAVEOUTCAPSW}
  661.   WAVEOUTCAPSW = tagWAVEOUTCAPSW;
  662.   {$EXTERNALSYM WAVEOUTCAPS}
  663.   WAVEOUTCAPS = WAVEOUTCAPSA;
  664.  
  665.  
  666. { flags for dwSupport field of WAVEOUTCAPS }
  667. const
  668.   {$EXTERNALSYM WAVECAPS_PITCH}
  669.   WAVECAPS_PITCH          = $0001;   { supports pitch control }
  670.   {$EXTERNALSYM WAVECAPS_PLAYBACKRATE}
  671.   WAVECAPS_PLAYBACKRATE   = $0002;   { supports playback rate control }
  672.   {$EXTERNALSYM WAVECAPS_VOLUME}
  673.   WAVECAPS_VOLUME         = $0004;   { supports volume control }
  674.   {$EXTERNALSYM WAVECAPS_LRVOLUME}
  675.   WAVECAPS_LRVOLUME       = $0008;   { separate left-right volume control }
  676.   {$EXTERNALSYM WAVECAPS_SYNC}
  677.   WAVECAPS_SYNC           = $0010;
  678.   {$EXTERNALSYM WAVECAPS_SAMPLEACCURATE}
  679.   WAVECAPS_SAMPLEACCURATE = $0020;
  680.   {$EXTERNALSYM WAVECAPS_DIRECTSOUND}
  681.   WAVECAPS_DIRECTSOUND    = $0040;
  682.  
  683. { waveform input device capabilities structure }
  684. type
  685.   PWaveInCapsA = ^TWaveInCapsA;
  686.   PWaveInCapsW = ^TWaveInCapsW;
  687.   PWaveInCaps = PWaveInCapsA;
  688.   {$EXTERNALSYM tagWAVEINCAPSA}
  689.   tagWAVEINCAPSA = record
  690.     wMid: Word;                   { manufacturer ID }
  691.     wPid: Word;                   { product ID }
  692.     vDriverVersion: MMVERSION;         { version of the driver }
  693.     szPname: array[0..MAXPNAMELEN-1] of AnsiChar;    { product name (NULL terminated string) }
  694.     dwFormats: DWORD;             { formats supported }
  695.     wChannels: Word;              { number of channels supported }
  696.     wReserved1: Word;             { structure packing }
  697.   end;
  698.   {$EXTERNALSYM tagWAVEINCAPSW}
  699.   tagWAVEINCAPSW = record
  700.     wMid: Word;                   { manufacturer ID }
  701.     wPid: Word;                   { product ID }
  702.     vDriverVersion: MMVERSION;         { version of the driver }
  703.     szPname: array[0..MAXPNAMELEN-1] of WideChar;    { product name (NULL terminated string) }
  704.     dwFormats: DWORD;             { formats supported }
  705.     wChannels: Word;              { number of channels supported }
  706.     wReserved1: Word;             { structure packing }
  707.   end;
  708.   {$EXTERNALSYM tagWAVEINCAPS}
  709.   tagWAVEINCAPS = tagWAVEINCAPSA;
  710.   TWaveInCapsA = tagWAVEINCAPSA;
  711.   TWaveInCapsW = tagWAVEINCAPSW;
  712.   TWaveInCaps = TWaveInCapsA;
  713.   {$EXTERNALSYM WAVEINCAPSA}
  714.   WAVEINCAPSA = tagWAVEINCAPSA;
  715.   {$EXTERNALSYM WAVEINCAPSW}
  716.   WAVEINCAPSW = tagWAVEINCAPSW;
  717.   {$EXTERNALSYM WAVEINCAPS}
  718.   WAVEINCAPS = WAVEINCAPSA;
  719.  
  720.  
  721. { defines for dwFormat field of WAVEINCAPS and WAVEOUTCAPS }
  722. const
  723.   {$EXTERNALSYM WAVE_INVALIDFORMAT}
  724.   WAVE_INVALIDFORMAT     = $00000000;       { invalid format }
  725.   {$EXTERNALSYM WAVE_FORMAT_1M08}
  726.   WAVE_FORMAT_1M08       = $00000001;       { 11.025 kHz, Mono,   8-bit  }
  727.   {$EXTERNALSYM WAVE_FORMAT_1S08}
  728.   WAVE_FORMAT_1S08       = $00000002;       { 11.025 kHz, Stereo, 8-bit  }
  729.   {$EXTERNALSYM WAVE_FORMAT_1M16}
  730.   WAVE_FORMAT_1M16       = $00000004;       { 11.025 kHz, Mono,   16-bit }
  731.   {$EXTERNALSYM WAVE_FORMAT_1S16}
  732.   WAVE_FORMAT_1S16       = $00000008;       { 11.025 kHz, Stereo, 16-bit }
  733.   {$EXTERNALSYM WAVE_FORMAT_2M08}
  734.   WAVE_FORMAT_2M08       = $00000010;       { 22.05  kHz, Mono,   8-bit  }
  735.   {$EXTERNALSYM WAVE_FORMAT_2S08}
  736.   WAVE_FORMAT_2S08       = $00000020;       { 22.05  kHz, Stereo, 8-bit  }
  737.   {$EXTERNALSYM WAVE_FORMAT_2M16}
  738.   WAVE_FORMAT_2M16       = $00000040;       { 22.05  kHz, Mono,   16-bit }
  739.   {$EXTERNALSYM WAVE_FORMAT_2S16}
  740.   WAVE_FORMAT_2S16       = $00000080;       { 22.05  kHz, Stereo, 16-bit }
  741.   {$EXTERNALSYM WAVE_FORMAT_4M08}
  742.   WAVE_FORMAT_4M08       = $00000100;       { 44.1   kHz, Mono,   8-bit  }
  743.   {$EXTERNALSYM WAVE_FORMAT_4S08}
  744.   WAVE_FORMAT_4S08       = $00000200;       { 44.1   kHz, Stereo, 8-bit  }
  745.   {$EXTERNALSYM WAVE_FORMAT_4M16}
  746.   WAVE_FORMAT_4M16       = $00000400;       { 44.1   kHz, Mono,   16-bit }
  747.   {$EXTERNALSYM WAVE_FORMAT_4S16}
  748.   WAVE_FORMAT_4S16       = $00000800;       { 44.1   kHz, Stereo, 16-bit }
  749.  
  750. { general waveform format structure (information common to all formats) }
  751. type
  752.   PWaveFormat = ^TWaveFormat;
  753.   {$EXTERNALSYM waveformat_tag}
  754.   waveformat_tag = packed record
  755.     wFormatTag: Word;         { format type }
  756.     nChannels: Word;          { number of channels (i.e. mono, stereo, etc.) }
  757.     nSamplesPerSec: DWORD;  { sample rate }
  758.     nAvgBytesPerSec: DWORD; { for buffer estimation }
  759.     nBlockAlign: Word;      { block size of data }
  760.   end;
  761.   TWaveFormat = waveformat_tag;
  762.   {$EXTERNALSYM WAVEFORMAT}
  763.   WAVEFORMAT = waveformat_tag;
  764.  
  765. { flags for wFormatTag field of WAVEFORMAT }
  766. const
  767.   {$EXTERNALSYM WAVE_FORMAT_PCM}
  768.   WAVE_FORMAT_PCM     = 1;
  769.  
  770. { specific waveform format structure for PCM data }
  771. type
  772.   PPCMWaveFormat = ^TPCMWaveFormat;
  773.   {$EXTERNALSYM pcmwaveformat_tag}
  774.   pcmwaveformat_tag = record
  775.       wf: TWaveFormat;
  776.       wBitsPerSample: Word;
  777.    end;
  778.   TPCMWaveFormat = pcmwaveformat_tag;
  779.   {$EXTERNALSYM PCMWAVEFORMAT}
  780.   PCMWAVEFORMAT = pcmwaveformat_tag;
  781.  
  782.  
  783. { extended waveform format structure used for all non-PCM formats. this
  784.   structure is common to all non-PCM formats. }
  785.  
  786.   PWaveFormatEx = ^TWaveFormatEx;
  787.   {$EXTERNALSYM tWAVEFORMATEX}
  788.   tWAVEFORMATEX = packed record
  789.     wFormatTag: Word;         { format type }
  790.     nChannels: Word;          { number of channels (i.e. mono, stereo, etc.) }
  791.     nSamplesPerSec: DWORD;  { sample rate }
  792.     nAvgBytesPerSec: DWORD; { for buffer estimation }
  793.     nBlockAlign: Word;      { block size of data }
  794.     wBitsPerSample: Word;   { number of bits per sample of mono data }
  795.     cbSize: Word;           { the count in bytes of the size of }
  796.   end;
  797.  
  798.  
  799. { waveform audio function prototypes }
  800. {$EXTERNALSYM waveOutGetNumDevs}
  801. function waveOutGetNumDevs: UINT; stdcall;
  802.  
  803. {$EXTERNALSYM waveOutGetDevCapsA}
  804. function waveOutGetDevCapsA(uDeviceID: UINT; lpCaps: PWaveOutCapsA; uSize: UINT): MMRESULT; stdcall;
  805. {$EXTERNALSYM waveOutGetDevCapsW}
  806. function waveOutGetDevCapsW(uDeviceID: UINT; lpCaps: PWaveOutCapsW; uSize: UINT): MMRESULT; stdcall;
  807. {$EXTERNALSYM waveOutGetDevCaps}
  808. function waveOutGetDevCaps(uDeviceID: UINT; lpCaps: PWaveOutCaps; uSize: UINT): MMRESULT; stdcall;
  809. {$EXTERNALSYM waveOutGetVolume}
  810. function waveOutGetVolume(hwo: HWAVEOUT; lpdwVolume: PDWORD): MMRESULT; stdcall;
  811. {$EXTERNALSYM waveOutSetVolume}
  812. function waveOutSetVolume(hwo: HWAVEOUT; dwVolume: DWORD): MMRESULT; stdcall;
  813. {$EXTERNALSYM waveOutGetErrorTextA}
  814. function waveOutGetErrorTextA(mmrError: MMRESULT; lpText: PAnsiChar; uSize: UINT): MMRESULT; stdcall;
  815. {$EXTERNALSYM waveOutGetErrorTextW}
  816. function waveOutGetErrorTextW(mmrError: MMRESULT; lpText: PWideChar; uSize: UINT): MMRESULT; stdcall;
  817. {$EXTERNALSYM waveOutGetErrorText}
  818. function waveOutGetErrorText(mmrError: MMRESULT; lpText: PChar; uSize: UINT): MMRESULT; stdcall;
  819. {$EXTERNALSYM waveOutOpen}
  820. function waveOutOpen(lphWaveOut: PHWaveOut; uDeviceID: UINT;
  821.   lpFormat: PWaveFormatEx; dwCallback, dwInstance, dwFlags: DWORD): MMRESULT; stdcall;
  822. {$EXTERNALSYM waveOutClose}
  823. function waveOutClose(hWaveOut: HWAVEOUT): MMRESULT; stdcall;
  824. {$EXTERNALSYM waveOutPrepareHeader}
  825. function waveOutPrepareHeader(hWaveOut: HWAVEOUT; lpWaveOutHdr: PWaveHdr;
  826.   uSize: UINT): MMRESULT; stdcall;
  827. {$EXTERNALSYM waveOutUnprepareHeader}
  828. function waveOutUnprepareHeader(hWaveOut: HWAVEOUT; lpWaveOutHdr: PWaveHdr;
  829.   uSize: UINT): MMRESULT; stdcall;
  830. {$EXTERNALSYM waveOutWrite}
  831. function waveOutWrite(hWaveOut: HWAVEOUT; lpWaveOutHdr: PWaveHdr;
  832.   uSize: UINT): MMRESULT; stdcall;
  833. {$EXTERNALSYM waveOutPause}
  834. function waveOutPause(hWaveOut: HWAVEOUT): MMRESULT; stdcall;
  835. {$EXTERNALSYM waveOutRestart}
  836. function waveOutRestart(hWaveOut: HWAVEOUT): MMRESULT; stdcall;
  837. {$EXTERNALSYM waveOutReset}
  838. function waveOutReset(hWaveOut: HWAVEOUT): MMRESULT; stdcall;
  839. {$EXTERNALSYM waveOutBreakLoop}
  840. function waveOutBreakLoop(hWaveOut: HWAVEOUT): MMRESULT; stdcall;
  841. {$EXTERNALSYM waveOutGetPosition}
  842. function waveOutGetPosition(hWaveOut: HWAVEOUT; lpInfo: PMMTime; uSize: UINT): MMRESULT; stdcall;
  843. {$EXTERNALSYM waveOutGetPitch}
  844. function waveOutGetPitch(hWaveOut: HWAVEOUT; lpdwPitch: PDWORD): MMRESULT; stdcall;
  845. {$EXTERNALSYM waveOutSetPitch}
  846. function waveOutSetPitch(hWaveOut: HWAVEOUT; dwPitch: DWORD): MMRESULT; stdcall;
  847. {$EXTERNALSYM waveOutGetPlaybackRate}
  848. function waveOutGetPlaybackRate(hWaveOut: HWAVEOUT; lpdwRate: PDWORD): MMRESULT; stdcall;
  849. {$EXTERNALSYM waveOutSetPlaybackRate}
  850. function waveOutSetPlaybackRate(hWaveOut: HWAVEOUT; dwRate: DWORD): MMRESULT; stdcall;
  851. {$EXTERNALSYM waveOutGetID}
  852. function waveOutGetID(hWaveOut: HWAVEOUT; lpuDeviceID: PUINT): MMRESULT; stdcall;
  853. {$EXTERNALSYM waveOutMessage}
  854. function waveOutMessage(hWaveOut: HWAVEOUT; uMessage: UINT; dw1, dw2: DWORD): Longint; stdcall;
  855. {$EXTERNALSYM waveInGetNumDevs}
  856. function waveInGetNumDevs: UINT; stdcall;
  857. {$EXTERNALSYM waveInGetDevCapsA}
  858. function waveInGetDevCapsA(hwo: HWAVEOUT; lpCaps: PWaveInCapsA; uSize: UINT): MMRESULT; stdcall;
  859. {$EXTERNALSYM waveInGetDevCapsW}
  860. function waveInGetDevCapsW(hwo: HWAVEOUT; lpCaps: PWaveInCapsW; uSize: UINT): MMRESULT; stdcall;
  861. {$EXTERNALSYM waveInGetDevCaps}
  862. function waveInGetDevCaps(hwo: HWAVEOUT; lpCaps: PWaveInCaps; uSize: UINT): MMRESULT; stdcall;
  863. {$EXTERNALSYM waveInGetErrorTextA}
  864. function waveInGetErrorTextA(mmrError: MMRESULT; lpText: PAnsiChar; uSize: UINT): MMRESULT; stdcall;
  865. {$EXTERNALSYM waveInGetErrorTextW}
  866. function waveInGetErrorTextW(mmrError: MMRESULT; lpText: PWideChar; uSize: UINT): MMRESULT; stdcall;
  867. {$EXTERNALSYM waveInGetErrorText}
  868. function waveInGetErrorText(mmrError: MMRESULT; lpText: PChar; uSize: UINT): MMRESULT; stdcall;
  869. {$EXTERNALSYM waveInOpen}
  870. function waveInOpen(lphWaveIn: PHWAVEIN; uDeviceID: UINT;
  871.   lpFormatEx: PWaveFormatEx; dwCallback, dwInstance, dwFlags: DWORD): MMRESULT; stdcall;
  872. {$EXTERNALSYM waveInClose}
  873. function waveInClose(hWaveIn: HWAVEIN): MMRESULT; stdcall;
  874. {$EXTERNALSYM waveInPrepareHeader}
  875. function waveInPrepareHeader(hWaveIn: HWAVEIN; lpWaveInHdr: PWaveHdr;
  876.   uSize: UINT): MMRESULT; stdcall;
  877. {$EXTERNALSYM waveInUnprepareHeader}
  878. function waveInUnprepareHeader(hWaveIn: HWAVEIN; lpWaveInHdr: PWaveHdr;
  879.   uSize: UINT): MMRESULT; stdcall;
  880. {$EXTERNALSYM waveInAddBuffer}
  881. function waveInAddBuffer(hWaveIn: HWAVEIN; lpWaveInHdr: PWaveHdr;
  882.   uSize: UINT): MMRESULT; stdcall;
  883. {$EXTERNALSYM waveInStart}
  884. function waveInStart(hWaveIn: HWAVEIN): MMRESULT; stdcall;
  885. {$EXTERNALSYM waveInStop}
  886. function waveInStop(hWaveIn: HWAVEIN): MMRESULT; stdcall;
  887. {$EXTERNALSYM waveInReset}
  888. function waveInReset(hWaveIn: HWAVEIN): MMRESULT; stdcall;
  889. {$EXTERNALSYM waveInGetPosition}
  890. function waveInGetPosition(hWaveIn: HWAVEIN; lpInfo: PMMTime;
  891.   uSize: UINT): MMRESULT; stdcall;
  892. {$EXTERNALSYM waveInGetID}
  893. function waveInGetID(hWaveIn: HWAVEIN; lpuDeviceID: PUINT): MMRESULT; stdcall;
  894. {$EXTERNALSYM waveInMessage}
  895. function waveInMessage(hWaveIn: HWAVEIN; uMessage: UINT;
  896.   dw1, dw2: DWORD): MMRESULT; stdcall;
  897.  
  898. {***************************************************************************
  899.  
  900.                             MIDI audio support
  901.  
  902. ***************************************************************************}
  903.  
  904. { MIDI error return values }
  905. const
  906.   {$EXTERNALSYM MIDIERR_UNPREPARED}
  907.   MIDIERR_UNPREPARED    = MIDIERR_BASE + 0;   { header not prepared }
  908.   {$EXTERNALSYM MIDIERR_STILLPLAYING}
  909.   MIDIERR_STILLPLAYING  = MIDIERR_BASE + 1;   { still something playing }
  910.   {$EXTERNALSYM MIDIERR_NOMAP}
  911.   MIDIERR_NOMAP         = MIDIERR_BASE + 2;   { no current map }
  912.   {$EXTERNALSYM MIDIERR_NOTREADY}
  913.   MIDIERR_NOTREADY      = MIDIERR_BASE + 3;   { hardware is still busy }
  914.   {$EXTERNALSYM MIDIERR_NODEVICE}
  915.   MIDIERR_NODEVICE      = MIDIERR_BASE + 4;   { port no longer connected }
  916.   {$EXTERNALSYM MIDIERR_INVALIDSETUP}
  917.   MIDIERR_INVALIDSETUP  = MIDIERR_BASE + 5;   { invalid setup }
  918.   {$EXTERNALSYM MIDIERR_BADOPENMODE}
  919.   MIDIERR_BADOPENMODE   = MIDIERR_BASE + 6;   { operation unsupported w/ open mode }
  920.   {$EXTERNALSYM MIDIERR_DONT_CONTINUE}
  921.   MIDIERR_DONT_CONTINUE = MIDIERR_BASE + 7;   { thru device 'eating' a message }
  922.   {$EXTERNALSYM MIDIERR_LASTERROR}
  923.   MIDIERR_LASTERROR     = MIDIERR_BASE + 5;   { last error in range }
  924.  
  925. { MIDI audio data types }
  926. type
  927.   PHMIDI = ^HMIDI;
  928.   {$EXTERNALSYM HMIDI}
  929.   HMIDI = Integer;
  930.   PHMIDIIN = ^HMIDIIN;
  931.   {$EXTERNALSYM HMIDIIN}
  932.   HMIDIIN = Integer;
  933.   PHMIDIOUT = ^HMIDIOUT;
  934.   {$EXTERNALSYM HMIDIOUT}
  935.   HMIDIOUT = Integer;
  936.   PHMIDISTRM = ^HMIDISTRM;
  937.   {$EXTERNALSYM HMIDISTRM}
  938.   HMIDISTRM = Integer;
  939.  
  940. type
  941.   TFNMidiCallBack = TFNDrvCallBack;
  942.  
  943. const
  944.   {$EXTERNALSYM MIDIPATCHSIZE}
  945.   MIDIPATCHSIZE   = 128;
  946.  
  947. type
  948.   PPatchArray = ^TPatchArray;
  949.   TPatchArray = array[0..MIDIPATCHSIZE-1] of Word;
  950.  
  951.   PKeyArray = ^TKeyArray;
  952.   TKeyArray = array[0..MIDIPATCHSIZE-1] of Word;
  953.  
  954.  
  955. { MIDI callback messages }
  956. const
  957.   {$EXTERNALSYM MIM_OPEN}
  958.   MIM_OPEN        = MM_MIM_OPEN;
  959.   {$EXTERNALSYM MIM_CLOSE}
  960.   MIM_CLOSE       = MM_MIM_CLOSE;
  961.   {$EXTERNALSYM MIM_DATA}
  962.   MIM_DATA        = MM_MIM_DATA;
  963.   {$EXTERNALSYM MIM_LONGDATA}
  964.   MIM_LONGDATA    = MM_MIM_LONGDATA;
  965.   {$EXTERNALSYM MIM_ERROR}
  966.   MIM_ERROR       = MM_MIM_ERROR;
  967.   {$EXTERNALSYM MIM_LONGERROR}
  968.   MIM_LONGERROR   = MM_MIM_LONGERROR;
  969.   {$EXTERNALSYM MOM_OPEN}
  970.   MOM_OPEN        = MM_MOM_OPEN;
  971.   {$EXTERNALSYM MOM_CLOSE}
  972.   MOM_CLOSE       = MM_MOM_CLOSE;
  973.   {$EXTERNALSYM MOM_DONE}
  974.   MOM_DONE        = MM_MOM_DONE;
  975.  
  976.   {$EXTERNALSYM MIM_MOREDATA}
  977.   MIM_MOREDATA    = MM_MIM_MOREDATA;
  978.   {$EXTERNALSYM MOM_POSITIONCB}
  979.   MOM_POSITIONCB  = MM_MOM_POSITIONCB;
  980.  
  981. { device ID for MIDI mapper }
  982.   {$EXTERNALSYM MIDIMAPPER}
  983.   MIDIMAPPER     = UINT(-1);
  984.   {$EXTERNALSYM MIDI_MAPPER}
  985.   MIDI_MAPPER    = UINT(-1);
  986.  
  987. { flags for dwFlags parm of midiInOpen() }
  988.   {$EXTERNALSYM MIDI_IO_STATUS}
  989.   MIDI_IO_STATUS = $00000020;
  990.  
  991. { flags for wFlags parm of midiOutCachePatches(), midiOutCacheDrumPatches() }
  992.   {$EXTERNALSYM MIDI_CACHE_ALL}
  993.   MIDI_CACHE_ALL      = 1;
  994.   {$EXTERNALSYM MIDI_CACHE_BESTFIT}
  995.   MIDI_CACHE_BESTFIT  = 2;
  996.   {$EXTERNALSYM MIDI_CACHE_QUERY}
  997.   MIDI_CACHE_QUERY    = 3;
  998.   {$EXTERNALSYM MIDI_UNCACHE}
  999.   MIDI_UNCACHE        = 4;
  1000.  
  1001. { MIDI output device capabilities structure }
  1002. type
  1003.   PMidiOutCapsA = ^TMidiOutCapsA;
  1004.   PMidiOutCapsW = ^TMidiOutCapsW;
  1005.   PMidiOutCaps = PMidiOutCapsA;
  1006.   {$EXTERNALSYM tagMIDIOUTCAPSA}
  1007.   tagMIDIOUTCAPSA = record
  1008.     wMid: Word;                  { manufacturer ID }
  1009.     wPid: Word;                  { product ID }
  1010.     vDriverVersion: MMVERSION;        { version of the driver }
  1011.     szPname: array[0..MAXPNAMELEN-1] of AnsiChar;  { product name (NULL terminated string) }
  1012.     wTechnology: Word;           { type of device }
  1013.     wVoices: Word;               { # of voices (internal synth only) }
  1014.     wNotes: Word;                { max # of notes (internal synth only) }
  1015.     wChannelMask: Word;          { channels used (internal synth only) }
  1016.     dwSupport: DWORD;            { functionality supported by driver }
  1017.   end;
  1018.   {$EXTERNALSYM tagMIDIOUTCAPSW}
  1019.   tagMIDIOUTCAPSW = record
  1020.     wMid: Word;                  { manufacturer ID }
  1021.     wPid: Word;                  { product ID }
  1022.     vDriverVersion: MMVERSION;        { version of the driver }
  1023.     szPname: array[0..MAXPNAMELEN-1] of WideChar;  { product name (NULL terminated string) }
  1024.     wTechnology: Word;           { type of device }
  1025.     wVoices: Word;               { # of voices (internal synth only) }
  1026.     wNotes: Word;                { max # of notes (internal synth only) }
  1027.     wChannelMask: Word;          { channels used (internal synth only) }
  1028.     dwSupport: DWORD;            { functionality supported by driver }
  1029.   end;
  1030.   {$EXTERNALSYM tagMIDIOUTCAPS}
  1031.   tagMIDIOUTCAPS = tagMIDIOUTCAPSA;
  1032.   TMidiOutCapsA = tagMIDIOUTCAPSA;
  1033.   TMidiOutCapsW = tagMIDIOUTCAPSW;
  1034.   TMidiOutCaps = TMidiOutCapsA;
  1035.   {$EXTERNALSYM MIDIOUTCAPSA}
  1036.   MIDIOUTCAPSA = tagMIDIOUTCAPSA;
  1037.   {$EXTERNALSYM MIDIOUTCAPSW}
  1038.   MIDIOUTCAPSW = tagMIDIOUTCAPSW;
  1039.   {$EXTERNALSYM MIDIOUTCAPS}
  1040.   MIDIOUTCAPS = MIDIOUTCAPSA;
  1041.  
  1042.  
  1043. { flags for wTechnology field of MIDIOUTCAPS structure }
  1044. const
  1045.   {$EXTERNALSYM MOD_MIDIPORT}
  1046.   MOD_MIDIPORT    = 1;  { output port }
  1047.   {$EXTERNALSYM MOD_SYNTH}
  1048.   MOD_SYNTH       = 2;  { generic internal synth }
  1049.   {$EXTERNALSYM MOD_SQSYNTH}
  1050.   MOD_SQSYNTH     = 3;  { square wave internal synth }
  1051.   {$EXTERNALSYM MOD_FMSYNTH}
  1052.   MOD_FMSYNTH     = 4;  { FM internal synth }
  1053.   {$EXTERNALSYM MOD_MAPPER}
  1054.   MOD_MAPPER      = 5;  { MIDI mapper }
  1055.  
  1056. { flags for dwSupport field of MIDIOUTCAPS structure }
  1057. const
  1058.   {$EXTERNALSYM MIDICAPS_VOLUME}
  1059.   MIDICAPS_VOLUME          = $0001;  { supports volume control }
  1060.   {$EXTERNALSYM MIDICAPS_LRVOLUME}
  1061.   MIDICAPS_LRVOLUME        = $0002;  { separate left-right volume control }
  1062.   {$EXTERNALSYM MIDICAPS_CACHE}
  1063.   MIDICAPS_CACHE           = $0004;
  1064.   {$EXTERNALSYM MIDICAPS_STREAM}
  1065.   MIDICAPS_STREAM          = $0008;  { driver supports midiStreamOut directly }
  1066.  
  1067. { MIDI output device capabilities structure }
  1068.  
  1069. type
  1070.   PMidiInCapsA = ^TMidiInCapsA;
  1071.   PMidiInCapsW = ^TMidiInCapsW;
  1072.   PMidiInCaps = PMidiInCapsA;
  1073.   {$EXTERNALSYM tagMIDIINCAPSA}
  1074.   tagMIDIINCAPSA = record
  1075.     wMid: Word;                  { manufacturer ID }
  1076.     wPid: Word;                  { product ID }
  1077.     vDriverVersion: MMVERSION;   { version of the driver }
  1078.     szPname: array[0..MAXPNAMELEN-1] of AnsiChar;  { product name (NULL terminated string) }
  1079.     dwSupport: DWORD;            { functionality supported by driver }
  1080.   end;
  1081.   {$EXTERNALSYM tagMIDIINCAPSW}
  1082.   tagMIDIINCAPSW = record
  1083.     wMid: Word;                  { manufacturer ID }
  1084.     wPid: Word;                  { product ID }
  1085.     vDriverVersion: MMVERSION;   { version of the driver }
  1086.     szPname: array[0..MAXPNAMELEN-1] of WideChar;  { product name (NULL terminated string) }
  1087.     dwSupport: DWORD;            { functionality supported by driver }
  1088.   end;
  1089.   {$EXTERNALSYM tagMIDIINCAPS}
  1090.   tagMIDIINCAPS = tagMIDIINCAPSA;
  1091.   TMidiInCapsA = tagMIDIINCAPSA;
  1092.   TMidiInCapsW = tagMIDIINCAPSW;
  1093.   TMidiInCaps = TMidiInCapsA;
  1094.   {$EXTERNALSYM MIDIINCAPSA}
  1095.   MIDIINCAPSA = tagMIDIINCAPSA;
  1096.   {$EXTERNALSYM MIDIINCAPSW}
  1097.   MIDIINCAPSW = tagMIDIINCAPSW;
  1098.   {$EXTERNALSYM MIDIINCAPS}
  1099.   MIDIINCAPS = MIDIINCAPSA;
  1100.  
  1101. { MIDI data block header }
  1102. type
  1103.   PMidiHdr = ^TMidiHdr;
  1104.   {$EXTERNALSYM midihdr_tag}
  1105.   midihdr_tag = record
  1106.     lpData: PChar;               { pointer to locked data block }
  1107.     dwBufferLength: DWORD;       { length of data in data block }
  1108.     dwBytesRecorded: DWORD;      { used for input only }
  1109.     dwUser: DWORD;               { for client's use }
  1110.     dwFlags: DWORD;              { assorted flags (see defines) }
  1111.     lpNext: PMidiHdr;            { reserved for driver }
  1112.     reserved: DWORD;             { reserved for driver }
  1113.     dwOffset: DWORD;             { Callback offset into buffer }
  1114.     dwReserved: array[0..7] of DWORD; { Reserved for MMSYSTEM }
  1115.   end;
  1116.   TMidiHdr = midihdr_tag;
  1117.   {$EXTERNALSYM MIDIHDR}
  1118.   MIDIHDR = midihdr_tag;
  1119.  
  1120.   PMidiEvent = ^TMidiEvent;
  1121.   {$EXTERNALSYM midievent_tag}
  1122.   midievent_tag = record
  1123.     dwDeltaTime: DWORD;          { Ticks since last event }
  1124.     dwStreamID: DWORD;           { Reserved; must be zero }
  1125.     dwEvent: DWORD;              { Event type and parameters }
  1126.     dwParms: array[0..0] of DWORD;  { Parameters if this is a long event }
  1127.   end;
  1128.   TMidiEvent = midievent_tag;
  1129.   {$EXTERNALSYM MIDIEVENT}
  1130.   MIDIEVENT = midievent_tag;
  1131.  
  1132.   PMidiStrmBuffVer = ^TMidiStrmBuffVer;
  1133.   {$EXTERNALSYM midistrmbuffver_tag}
  1134.   midistrmbuffver_tag = record
  1135.     dwVersion: DWORD;                  { Stream buffer format version }
  1136.     dwMid: DWORD;                      { Manufacturer ID as defined in MMREG.H }
  1137.     dwOEMVersion: DWORD;               { Manufacturer version for custom ext }
  1138.   end;
  1139.   TMidiStrmBuffVer = midistrmbuffver_tag;
  1140.   {$EXTERNALSYM MIDISTRMBUFFVER}
  1141.   MIDISTRMBUFFVER = midistrmbuffver_tag;
  1142.  
  1143. { flags for dwFlags field of MIDIHDR structure }
  1144. const
  1145.   {$EXTERNALSYM MHDR_DONE}
  1146.   MHDR_DONE       = $00000001;       { done bit }
  1147.   {$EXTERNALSYM MHDR_PREPARED}
  1148.   MHDR_PREPARED   = $00000002;       { set if header prepared }
  1149.   {$EXTERNALSYM MHDR_INQUEUE}
  1150.   MHDR_INQUEUE    = $00000004;       { reserved for driver }
  1151.   {$EXTERNALSYM MHDR_ISSTRM}
  1152.   MHDR_ISSTRM     = $00000008;       { Buffer is stream buffer }
  1153.  
  1154. (* 
  1155.   Type codes which go in the high byte of the event DWORD of a stream buffer 
  1156.  
  1157.   Type codes 00-7F contain parameters within the low 24 bits 
  1158.   Type codes 80-FF contain a length of their parameter in the low 24 
  1159.   bits, followed by their parameter data in the buffer. The event 
  1160.   DWORD contains the exact byte length; the parm data itself must be 
  1161.   padded to be an even multiple of 4 bytes long. 
  1162. *) 
  1163.  
  1164.   {$EXTERNALSYM MEVT_F_SHORT}
  1165.   MEVT_F_SHORT       = $00000000;
  1166.   {$EXTERNALSYM MEVT_F_LONG}
  1167.   MEVT_F_LONG        = $80000000;
  1168.   {$EXTERNALSYM MEVT_F_CALLBACK}
  1169.   MEVT_F_CALLBACK    = $40000000;
  1170.  
  1171.   {$EXTERNALSYM MEVT_SHORTMSG}
  1172.   MEVT_SHORTMSG     = $00;    { parm = shortmsg for midiOutShortMsg }
  1173.   {$EXTERNALSYM MEVT_TEMPO}
  1174.   MEVT_TEMPO        = $01;    { parm = new tempo in microsec/qn     }
  1175.   {$EXTERNALSYM MEVT_NOP}
  1176.   MEVT_NOP          = $02;    { parm = unused; does nothing         }
  1177.  
  1178. { 0x04-0x7F reserved }
  1179.  
  1180.   {$EXTERNALSYM MEVT_LONGMSG}
  1181.   MEVT_LONGMSG      = $80;    { parm = bytes to send verbatim       }
  1182.   {$EXTERNALSYM MEVT_COMMENT}
  1183.   MEVT_COMMENT      = $82;    { parm = comment data                 }
  1184.   {$EXTERNALSYM MEVT_VERSION}
  1185.   MEVT_VERSION      = $84;    { parm = MIDISTRMBUFFVER struct       }
  1186.  
  1187. { 0x81-0xFF reserved }
  1188.  
  1189.   {$EXTERNALSYM MIDISTRM_ERROR}
  1190.   MIDISTRM_ERROR    =  -2;
  1191.  
  1192. { Structures and defines for midiStreamProperty }
  1193.   {$EXTERNALSYM MIDIPROP_SET}
  1194.   MIDIPROP_SET       = $80000000;
  1195.   {$EXTERNALSYM MIDIPROP_GET}
  1196.   MIDIPROP_GET       = $40000000;
  1197.  
  1198. { These are intentionally both non-zero so the app cannot accidentally
  1199.   leave the operation off and happen to appear to work due to default
  1200.   action. }
  1201.   {$EXTERNALSYM MIDIPROP_TIMEDIV}
  1202.   MIDIPROP_TIMEDIV   = $00000001;
  1203.   {$EXTERNALSYM MIDIPROP_TEMPO}
  1204.   MIDIPROP_TEMPO     = $00000002;
  1205.  
  1206. type
  1207.   PMidiPropTimeDiv = ^TMidiPropTimeDiv;
  1208.   {$EXTERNALSYM midiproptimediv_tag}
  1209.   midiproptimediv_tag = record
  1210.     cbStruct: DWORD;
  1211.     dwTimeDiv: DWORD;
  1212.   end;
  1213.   TMidiPropTimeDiv = midiproptimediv_tag;
  1214.   {$EXTERNALSYM MIDIPROPTIMEDIV}
  1215.   MIDIPROPTIMEDIV = midiproptimediv_tag;
  1216.  
  1217.   PMidiPropTempo = ^TMidiPropTempo;
  1218.   {$EXTERNALSYM midiproptempo_tag}
  1219.   midiproptempo_tag = record
  1220.     cbStruct: DWORD;
  1221.     dwTempo: DWORD;
  1222.   end;
  1223.   TMidiPropTempo = midiproptempo_tag;
  1224.   {$EXTERNALSYM MIDIPROPTEMPO}
  1225.   MIDIPROPTEMPO = midiproptempo_tag;
  1226.  
  1227. { MIDI function prototypes }
  1228.  
  1229. {$EXTERNALSYM midiOutGetNumDevs}
  1230. function midiOutGetNumDevs: UINT; stdcall;
  1231. {$EXTERNALSYM midiStreamOpen}
  1232. function midiStreamOpen(phms: PHMIDISTRM; puDeviceID: PUINT; 
  1233.   cMidi, dwCallback, dwInstance, fdwOpen: DWORD): MMRESULT; stdcall
  1234. {$EXTERNALSYM midiStreamClose}
  1235. function midiStreamClose(hms: HMIDISTRM): MMRESULT; stdcall;
  1236. {$EXTERNALSYM midiStreamProperty}
  1237. function midiStreamProperty(hms: HMIDISTRM; lppropdata: PBYTE; dwProperty: DWORD): MMRESULT; stdcall;
  1238. {$EXTERNALSYM midiStreamPosition}
  1239. function midiStreamPosition(hms: HMIDISTRM; lpmmt: PMMTime; cbmmt: UINT): MMRESULT; stdcall;
  1240. {$EXTERNALSYM midiStreamOut}
  1241. function midiStreamOut(hms: HMIDISTRM; pmh: PMidiHdr; cbmh: UINT): MMRESULT; stdcall;
  1242. {$EXTERNALSYM midiStreamPause}
  1243. function midiStreamPause(hms: HMIDISTRM): MMRESULT; stdcall;
  1244. {$EXTERNALSYM midiStreamRestart}
  1245. function midiStreamRestart(hms: HMIDISTRM): MMRESULT; stdcall;
  1246. {$EXTERNALSYM midiStreamStop}
  1247. function midiStreamStop(hms: HMIDISTRM): MMRESULT; stdcall;
  1248. {$EXTERNALSYM midiConnect}
  1249. function midiConnect(hmi: HMIDI; hmo: HMIDIOUT; pReserved: Pointer): MMRESULT; stdcall;
  1250. {$EXTERNALSYM midiDisconnect}
  1251. function midiDisconnect(hmi: HMIDI; hmo: HMIDIOUT; pReserved: Pointer): MMRESULT; stdcall;
  1252. {$EXTERNALSYM midiOutGetDevCapsA}
  1253. function midiOutGetDevCapsA(uDeviceID: UINT; lpCaps: PMidiOutCapsA; uSize: UINT): MMRESULT; stdcall;
  1254. {$EXTERNALSYM midiOutGetDevCapsW}
  1255. function midiOutGetDevCapsW(uDeviceID: UINT; lpCaps: PMidiOutCapsW; uSize: UINT): MMRESULT; stdcall;
  1256. {$EXTERNALSYM midiOutGetDevCaps}
  1257. function midiOutGetDevCaps(uDeviceID: UINT; lpCaps: PMidiOutCaps; uSize: UINT): MMRESULT; stdcall;
  1258. {$EXTERNALSYM midiOutGetVolume}
  1259. function midiOutGetVolume(hmo: HMIDIOUT; lpdwVolume: PDWORD): MMRESULT; stdcall;
  1260. {$EXTERNALSYM midiOutSetVolume}
  1261. function midiOutSetVolume(hmo: HMIDIOUT; dwVolume: DWORD): MMRESULT; stdcall;
  1262. {$EXTERNALSYM midiOutGetErrorTextA}
  1263. function midiOutGetErrorTextA(mmrError: MMRESULT; pszText: PAnsiChar; uSize: UINT): MMRESULT; stdcall;
  1264. {$EXTERNALSYM midiOutGetErrorTextW}
  1265. function midiOutGetErrorTextW(mmrError: MMRESULT; pszText: PWideChar; uSize: UINT): MMRESULT; stdcall;
  1266. {$EXTERNALSYM midiOutGetErrorText}
  1267. function midiOutGetErrorText(mmrError: MMRESULT; pszText: PChar; uSize: UINT): MMRESULT; stdcall;
  1268. {$EXTERNALSYM midiOutOpen}
  1269. function midiOutOpen(lphMidiOut: PHMIDIOUT; uDeviceID: UINT;
  1270.   dwCallback, dwInstance, dwFlags: DWORD): MMRESULT; stdcall;
  1271. {$EXTERNALSYM midiOutClose}
  1272. function midiOutClose(hMidiOut: HMIDIOUT): MMRESULT; stdcall;
  1273. {$EXTERNALSYM midiOutPrepareHeader}
  1274. function midiOutPrepareHeader(hMidiOut: HMIDIOUT; lpMidiOutHdr: PMidiHdr; uSize: UINT): MMRESULT; stdcall;
  1275. {$EXTERNALSYM midiOutUnprepareHeader}
  1276. function midiOutUnprepareHeader(hMidiOut: HMIDIOUT; lpMidiOutHdr: PMidiHdr; uSize: UINT): MMRESULT; stdcall;
  1277. {$EXTERNALSYM midiOutShortMsg}
  1278. function midiOutShortMsg(hMidiOut: HMIDIOUT; dwMsg: DWORD): MMRESULT; stdcall;
  1279. {$EXTERNALSYM midiOutLongMsg}
  1280. function midiOutLongMsg(hMidiOut: HMIDIOUT; lpMidiOutHdr: PMidiHdr; uSize: UINT): MMRESULT; stdcall;
  1281. {$EXTERNALSYM midiOutReset}
  1282. function midiOutReset(hMidiOut: HMIDIOUT): MMRESULT; stdcall;
  1283. {$EXTERNALSYM midiOutCachePatches}
  1284. function midiOutCachePatches(hMidiOut: HMIDIOUT;
  1285.   uBank: UINT; lpwPatchArray: PWord; uFlags: UINT): MMRESULT; stdcall;
  1286. {$EXTERNALSYM midiOutCacheDrumPatches}
  1287. function midiOutCacheDrumPatches(hMidiOut: HMIDIOUT;
  1288.   uPatch: UINT; lpwKeyArray: PWord; uFlags: UINT): MMRESULT; stdcall;
  1289. {$EXTERNALSYM midiOutGetID}
  1290. function midiOutGetID(hMidiOut: HMIDIOUT; lpuDeviceID: PUINT): MMRESULT; stdcall;
  1291. {$EXTERNALSYM midiOutMessage}
  1292. function midiOutMessage(hMidiOut: HMIDIOUT; uMessage: UINT; dw1, dw2: DWORD): MMRESULT; stdcall;
  1293. {$EXTERNALSYM midiInGetNumDevs}
  1294. function midiInGetNumDevs: UINT; stdcall;
  1295. {$EXTERNALSYM midiInGetDevCapsA}
  1296. function midiInGetDevCapsA(DeviceID: UINT; lpCaps: PMidiInCapsA; uSize: UINT): MMRESULT; stdcall;
  1297. {$EXTERNALSYM midiInGetDevCapsW}
  1298. function midiInGetDevCapsW(DeviceID: UINT; lpCaps: PMidiInCapsW; uSize: UINT): MMRESULT; stdcall;
  1299. {$EXTERNALSYM midiInGetDevCaps}
  1300. function midiInGetDevCaps(DeviceID: UINT; lpCaps: PMidiInCaps; uSize: UINT): MMRESULT; stdcall;
  1301. {$EXTERNALSYM midiInGetErrorTextA}
  1302. function midiInGetErrorTextA(mmrError: MMRESULT; pszText: PAnsiChar; uSize: UINT): MMRESULT; stdcall;
  1303. {$EXTERNALSYM midiInGetErrorTextW}
  1304. function midiInGetErrorTextW(mmrError: MMRESULT; pszText: PWideChar; uSize: UINT): MMRESULT; stdcall;
  1305. {$EXTERNALSYM midiInGetErrorText}
  1306. function midiInGetErrorText(mmrError: MMRESULT; pszText: PChar; uSize: UINT): MMRESULT; stdcall;
  1307. {$EXTERNALSYM midiInOpen}
  1308. function midiInOpen(lphMidiIn: PHMIDIIN; uDeviceID: UINT;
  1309.   dwCallback, dwInstance, dwFlags: DWORD): MMRESULT; stdcall;
  1310. {$EXTERNALSYM midiInClose}
  1311. function midiInClose(hMidiIn: HMIDIIN): MMRESULT; stdcall;
  1312. {$EXTERNALSYM midiInPrepareHeader}
  1313. function midiInPrepareHeader(hMidiIn: HMIDIIN; lpMidiInHdr: PMidiHdr; uSize: UINT): MMRESULT; stdcall;
  1314. {$EXTERNALSYM midiInUnprepareHeader}
  1315. function midiInUnprepareHeader(hMidiIn: HMIDIIN; lpMidiInHdr: PMidiHdr; uSize: UINT): MMRESULT; stdcall;
  1316. {$EXTERNALSYM midiInAddBuffer}
  1317. function midiInAddBuffer(hMidiIn: HMIDIIN; lpMidiInHdr: PMidiHdr; uSize: UINT): MMRESULT; stdcall;
  1318. {$EXTERNALSYM midiInStart}
  1319. function midiInStart(hMidiIn: HMIDIIN): MMRESULT; stdcall;
  1320. {$EXTERNALSYM midiInStop}
  1321. function midiInStop(hMidiIn: HMIDIIN): MMRESULT; stdcall;
  1322. {$EXTERNALSYM midiInReset}
  1323. function midiInReset(hMidiIn: HMIDIIN): MMRESULT; stdcall;
  1324. {$EXTERNALSYM midiInGetID}
  1325. function midiInGetID(hMidiIn: HMIDIIN; lpuDeviceID: PUINT): MMRESULT; stdcall;
  1326. {$EXTERNALSYM midiInMessage}
  1327. function midiInMessage(hMidiIn: HMIDIIN; uMessage: UINT; dw1, dw2: DWORD): MMRESULT; stdcall;
  1328.  
  1329.  
  1330. {***************************************************************************
  1331.  
  1332.                         Auxiliary audio support
  1333.  
  1334. ***************************************************************************}
  1335.  
  1336. { device ID for aux device mapper }
  1337. const
  1338.   {$EXTERNALSYM AUX_MAPPER}
  1339.   AUX_MAPPER     = UINT(-1);
  1340.  
  1341. { Auxiliary audio device capabilities structure }
  1342. type
  1343.   PAuxCapsA = ^TAuxCapsA;
  1344.   PAuxCapsW = ^TAuxCapsW;
  1345.   PAuxCaps = PAuxCapsA;
  1346.   {$EXTERNALSYM tagAUXCAPSA}
  1347.   tagAUXCAPSA = record
  1348.     wMid: Word;                  { manufacturer ID }
  1349.     wPid: Word;                  { product ID }
  1350.     vDriverVersion: MMVERSION;        { version of the driver }
  1351.     szPname: array[0..MAXPNAMELEN-1] of AnsiChar;  { product name (NULL terminated string) }
  1352.     wTechnology: Word;           { type of device }
  1353.     dwSupport: DWORD;            { functionality supported by driver }
  1354.   end;
  1355.   {$EXTERNALSYM tagAUXCAPSW}
  1356.   tagAUXCAPSW = record
  1357.     wMid: Word;                  { manufacturer ID }
  1358.     wPid: Word;                  { product ID }
  1359.     vDriverVersion: MMVERSION;        { version of the driver }
  1360.     szPname: array[0..MAXPNAMELEN-1] of WideChar;  { product name (NULL terminated string) }
  1361.     wTechnology: Word;           { type of device }
  1362.     dwSupport: DWORD;            { functionality supported by driver }
  1363.   end;
  1364.   {$EXTERNALSYM tagAUXCAPS}
  1365.   tagAUXCAPS = tagAUXCAPSA;
  1366.   TAuxCapsA = tagAUXCAPSA;
  1367.   TAuxCapsW = tagAUXCAPSW;
  1368.   TAuxCaps = TAuxCapsA;
  1369.   {$EXTERNALSYM AUXCAPSA}
  1370.   AUXCAPSA = tagAUXCAPSA;
  1371.   {$EXTERNALSYM AUXCAPSW}
  1372.   AUXCAPSW = tagAUXCAPSW;
  1373.   {$EXTERNALSYM AUXCAPS}
  1374.   AUXCAPS = AUXCAPSA;
  1375.  
  1376. { flags for wTechnology field in AUXCAPS structure }
  1377. const
  1378.   {$EXTERNALSYM AUXCAPS_CDAUDIO}
  1379.   AUXCAPS_CDAUDIO    = 1;       { audio from internal CD-ROM drive }
  1380.   {$EXTERNALSYM AUXCAPS_AUXIN}
  1381.   AUXCAPS_AUXIN      = 2;       { audio from auxiliary input jacks }
  1382.  
  1383. { flags for dwSupport field in AUXCAPS structure }
  1384. const
  1385.   {$EXTERNALSYM AUXCAPS_VOLUME}
  1386.   AUXCAPS_VOLUME     = $0001;  { supports volume control }
  1387.   {$EXTERNALSYM AUXCAPS_LRVOLUME}
  1388.   AUXCAPS_LRVOLUME   = $0002;  { separate left-right volume control }
  1389.  
  1390. { auxiliary audio function prototypes }
  1391. {$EXTERNALSYM auxGetNumDevs}
  1392. function auxGetNumDevs: UINT; stdcall;
  1393. {$EXTERNALSYM auxGetDevCapsA}
  1394. function auxGetDevCapsA(uDeviceID: UINT; lpCaps: PAuxCapsA; uSize: UINT): MMRESULT; stdcall;
  1395. {$EXTERNALSYM auxGetDevCapsW}
  1396. function auxGetDevCapsW(uDeviceID: UINT; lpCaps: PAuxCapsW; uSize: UINT): MMRESULT; stdcall;
  1397. {$EXTERNALSYM auxGetDevCaps}
  1398. function auxGetDevCaps(uDeviceID: UINT; lpCaps: PAuxCaps; uSize: UINT): MMRESULT; stdcall;
  1399. {$EXTERNALSYM auxSetVolume}
  1400. function auxSetVolume(uDeviceID: UINT; dwVolume: DWORD): MMRESULT; stdcall;
  1401. {$EXTERNALSYM auxGetVolume}
  1402. function auxGetVolume(uDeviceID: UINT; lpdwVolume: PDWORD): MMRESULT; stdcall;
  1403. {$EXTERNALSYM auxOutMessage}
  1404. function auxOutMessage(uDeviceID, uMessage: UINT; dw1, dw2: DWORD): MMRESULT; stdcall;
  1405.  
  1406.  
  1407. {****************************************************************************
  1408.  
  1409.                 Mixer Support
  1410.  
  1411. ****************************************************************************}
  1412.  
  1413. type
  1414.   PHMIXEROBJ = ^HMIXEROBJ;
  1415.   {$EXTERNALSYM HMIXEROBJ}
  1416.   HMIXEROBJ = Integer;
  1417.  
  1418.   PHMIXER = ^HMIXER;
  1419.   {$EXTERNALSYM HMIXER}
  1420.   HMIXER = Integer;
  1421.  
  1422. const
  1423.   {$EXTERNALSYM MIXER_SHORT_NAME_CHARS}
  1424.   MIXER_SHORT_NAME_CHARS   = 16;
  1425.   {$EXTERNALSYM MIXER_LONG_NAME_CHARS}
  1426.   MIXER_LONG_NAME_CHARS    = 64;
  1427.  
  1428. { MMRESULT error return values specific to the mixer API }
  1429.  
  1430.   {$EXTERNALSYM MIXERR_INVALLINE}
  1431.   MIXERR_INVALLINE            = (MIXERR_BASE + 0);
  1432.   {$EXTERNALSYM MIXERR_INVALCONTROL}
  1433.   MIXERR_INVALCONTROL         = (MIXERR_BASE + 1);
  1434.   {$EXTERNALSYM MIXERR_INVALVALUE}
  1435.   MIXERR_INVALVALUE           = (MIXERR_BASE + 2);
  1436.   {$EXTERNALSYM MIXERR_LASTERROR}
  1437.   MIXERR_LASTERROR            = (MIXERR_BASE + 2);
  1438.  
  1439.   {$EXTERNALSYM MIXER_OBJECTF_HANDLE}
  1440.   MIXER_OBJECTF_HANDLE    = $80000000;
  1441.   {$EXTERNALSYM MIXER_OBJECTF_MIXER}
  1442.   MIXER_OBJECTF_MIXER     = $00000000;
  1443.   {$EXTERNALSYM MIXER_OBJECTF_HMIXER}
  1444.   MIXER_OBJECTF_HMIXER    = (MIXER_OBJECTF_HANDLE or MIXER_OBJECTF_MIXER);
  1445.   {$EXTERNALSYM MIXER_OBJECTF_WAVEOUT}
  1446.   MIXER_OBJECTF_WAVEOUT   = $10000000;
  1447.   {$EXTERNALSYM MIXER_OBJECTF_HWAVEOUT}
  1448.   MIXER_OBJECTF_HWAVEOUT  = (MIXER_OBJECTF_HANDLE or MIXER_OBJECTF_WAVEOUT);
  1449.   {$EXTERNALSYM MIXER_OBJECTF_WAVEIN}
  1450.   MIXER_OBJECTF_WAVEIN    = $20000000;
  1451.   {$EXTERNALSYM MIXER_OBJECTF_HWAVEIN}
  1452.   MIXER_OBJECTF_HWAVEIN   = (MIXER_OBJECTF_HANDLE or MIXER_OBJECTF_WAVEIN);
  1453.   {$EXTERNALSYM MIXER_OBJECTF_MIDIOUT}
  1454.   MIXER_OBJECTF_MIDIOUT   = $30000000;
  1455.   {$EXTERNALSYM MIXER_OBJECTF_HMIDIOUT}
  1456.   MIXER_OBJECTF_HMIDIOUT  = (MIXER_OBJECTF_HANDLE or MIXER_OBJECTF_MIDIOUT);
  1457.   {$EXTERNALSYM MIXER_OBJECTF_MIDIIN}
  1458.   MIXER_OBJECTF_MIDIIN    = $40000000;
  1459.   {$EXTERNALSYM MIXER_OBJECTF_HMIDIIN}
  1460.   MIXER_OBJECTF_HMIDIIN   = (MIXER_OBJECTF_HANDLE or MIXER_OBJECTF_MIDIIN);
  1461.   {$EXTERNALSYM MIXER_OBJECTF_AUX}
  1462.   MIXER_OBJECTF_AUX       = $50000000;
  1463.  
  1464. {$EXTERNALSYM mixerGetNumDevs}
  1465. function mixerGetNumDevs: UINT; stdcall;
  1466.  
  1467. type
  1468.   PMixerCapsA = ^TMixerCapsA;
  1469.   PMixerCapsW = ^TMixerCapsW;
  1470.   PMixerCaps = PMixerCapsA;
  1471.   {$EXTERNALSYM tagMIXERCAPSA}
  1472.   tagMIXERCAPSA = record
  1473.     wMid: WORD;                    { manufacturer id }
  1474.     wPid: WORD;                    { product id }
  1475.     vDriverVersion: MMVERSION;     { version of the driver }
  1476.     szPname: array [0..MAXPNAMELEN - 1] of AnsiChar;   { product name }
  1477.     fdwSupport: DWORD;             { misc. support bits }
  1478.     cDestinations: DWORD;          { count of destinations }
  1479.   end;
  1480.   {$EXTERNALSYM tagMIXERCAPSW}
  1481.   tagMIXERCAPSW = record
  1482.     wMid: WORD;                    { manufacturer id }
  1483.     wPid: WORD;                    { product id }
  1484.     vDriverVersion: MMVERSION;     { version of the driver }
  1485.     szPname: array [0..MAXPNAMELEN - 1] of WideChar;   { product name }
  1486.     fdwSupport: DWORD;             { misc. support bits }
  1487.     cDestinations: DWORD;          { count of destinations }
  1488.   end;
  1489.   {$EXTERNALSYM tagMIXERCAPS}
  1490.   tagMIXERCAPS = tagMIXERCAPSA;
  1491.   TMixerCapsA = tagMIXERCAPSA;
  1492.   TMixerCapsW = tagMIXERCAPSW;
  1493.   TMixerCaps = TMixerCapsA;
  1494.   {$EXTERNALSYM MIXERCAPSA}
  1495.   MIXERCAPSA = tagMIXERCAPSA;
  1496.   {$EXTERNALSYM MIXERCAPSW}
  1497.   MIXERCAPSW = tagMIXERCAPSW;
  1498.   {$EXTERNALSYM MIXERCAPS}
  1499.   MIXERCAPS = MIXERCAPSA;
  1500.  
  1501. function mixerGetDevCapsA(uMxId: UINT; pmxcaps: PMixerCapsA; cbmxcaps: UINT): MMRESULT; stdcall;
  1502. {$EXTERNALSYM mixerGetDevCapsA}
  1503. function mixerGetDevCapsW(uMxId: UINT; pmxcaps: PMixerCapsW; cbmxcaps: UINT): MMRESULT; stdcall;
  1504. {$EXTERNALSYM mixerGetDevCapsW}
  1505. function mixerGetDevCaps(uMxId: UINT; pmxcaps: PMixerCaps; cbmxcaps: UINT): MMRESULT; stdcall;
  1506. {$EXTERNALSYM mixerGetDevCaps}
  1507. function mixerOpen(phmx: PHMIXER; uMxId: UINT; dwCallback, dwInstance, fdwOpen: DWORD): MMRESULT; stdcall;
  1508. {$EXTERNALSYM mixerOpen}
  1509. function mixerClose(hmx: HMIXER): MMRESULT; stdcall;
  1510. {$EXTERNALSYM mixerClose}
  1511. function mixerMessage(hmx: HMIXER; uMsg: UINT; dwParam1, dwParam2: DWORD): DWORD; stdcall;
  1512. {$EXTERNALSYM mixerMessage}
  1513.  
  1514. type
  1515.   PMixerLineA = ^TMixerLineA;
  1516.   PMixerLineW = ^TMixerLineW;
  1517.   PMixerLine = PMixerLineA;
  1518.   {$EXTERNALSYM tagMIXERLINEA}
  1519.   tagMIXERLINEA = record
  1520.     cbStruct: DWORD;               { size of MIXERLINE structure }
  1521.     dwDestination: DWORD;          { zero based destination index }
  1522.     dwSource: DWORD;               { zero based source index (if source) }
  1523.     dwLineID: DWORD;               { unique line id for mixer device }
  1524.     fdwLine: DWORD;                { state/information about line }
  1525.     dwUser: DWORD;                 { driver specific information }
  1526.     dwComponentType: DWORD;        { component type line connects to }
  1527.     cChannels: DWORD;              { number of channels line supports }
  1528.     cConnections: DWORD;           { number of connections [possible] }
  1529.     cControls: DWORD;              { number of controls at this line }
  1530.     szShortName: array[0..MIXER_SHORT_NAME_CHARS - 1] of AnsiChar;
  1531.     szName: array[0..MIXER_LONG_NAME_CHARS - 1] of AnsiChar;
  1532.     Target: record
  1533.       dwType: DWORD;                 { MIXERLINE_TARGETTYPE_xxxx }
  1534.       dwDeviceID: DWORD;             { target device ID of device type }
  1535.       wMid: WORD;                                   { of target device }
  1536.       wPid: WORD;                                   {      " }
  1537.       vDriverVersion: MMVERSION;                    {      " }
  1538.       szPname: array[0..MAXPNAMELEN - 1] of AnsiChar;  {      " }
  1539.      end;
  1540.   end;
  1541.   {$EXTERNALSYM tagMIXERLINEW}
  1542.   tagMIXERLINEW = record
  1543.     cbStruct: DWORD;               { size of MIXERLINE structure }
  1544.     dwDestination: DWORD;          { zero based destination index }
  1545.     dwSource: DWORD;               { zero based source index (if source) }
  1546.     dwLineID: DWORD;               { unique line id for mixer device }
  1547.     fdwLine: DWORD;                { state/information about line }
  1548.     dwUser: DWORD;                 { driver specific information }
  1549.     dwComponentType: DWORD;        { component type line connects to }
  1550.     cChannels: DWORD;              { number of channels line supports }
  1551.     cConnections: DWORD;           { number of connections [possible] }
  1552.     cControls: DWORD;              { number of controls at this line }
  1553.     szShortName: array[0..MIXER_SHORT_NAME_CHARS - 1] of WideChar;
  1554.     szName: array[0..MIXER_LONG_NAME_CHARS - 1] of WideChar;
  1555.     Target: record
  1556.       dwType: DWORD;                 { MIXERLINE_TARGETTYPE_xxxx }
  1557.       dwDeviceID: DWORD;             { target device ID of device type }
  1558.       wMid: WORD;                                   { of target device }
  1559.       wPid: WORD;                                   {      " }
  1560.       vDriverVersion: MMVERSION;                    {      " }
  1561.       szPname: array[0..MAXPNAMELEN - 1] of WideChar;  {      " }
  1562.      end;
  1563.   end;
  1564.   {$EXTERNALSYM tagMIXERLINE}
  1565.   tagMIXERLINE = tagMIXERLINEA;
  1566.   TMixerLineA = tagMIXERLINEA;
  1567.   TMixerLineW = tagMIXERLINEW;
  1568.   TMixerLine = TMixerLineA;
  1569.   {$EXTERNALSYM MIXERLINEA}
  1570.   MIXERLINEA = tagMIXERLINEA;
  1571.   {$EXTERNALSYM MIXERLINEW}
  1572.   MIXERLINEW = tagMIXERLINEW;
  1573.   {$EXTERNALSYM MIXERLINE}
  1574.   MIXERLINE = MIXERLINEA;
  1575.  
  1576. const
  1577. { TMixerLine.fdwLine }
  1578.  
  1579.   {$EXTERNALSYM MIXERLINE_LINEF_ACTIVE}
  1580.   MIXERLINE_LINEF_ACTIVE              = $00000001;
  1581.   {$EXTERNALSYM MIXERLINE_LINEF_DISCONNECTED}
  1582.   MIXERLINE_LINEF_DISCONNECTED        = $00008000;
  1583.   {$EXTERNALSYM MIXERLINE_LINEF_SOURCE}
  1584.   MIXERLINE_LINEF_SOURCE              = $80000000;
  1585.  
  1586. { TMixerLine.dwComponentType
  1587.   component types for destinations and sources }
  1588.  
  1589.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_FIRST}
  1590.   MIXERLINE_COMPONENTTYPE_DST_FIRST       = $00000000;
  1591.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_UNDEFINED}
  1592.   MIXERLINE_COMPONENTTYPE_DST_UNDEFINED   = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 0);
  1593.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_DIGITAL}
  1594.   MIXERLINE_COMPONENTTYPE_DST_DIGITAL     = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 1);
  1595.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_LINE}
  1596.   MIXERLINE_COMPONENTTYPE_DST_LINE        = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 2);
  1597.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_MONITOR}
  1598.   MIXERLINE_COMPONENTTYPE_DST_MONITOR     = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 3);
  1599.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_SPEAKERS}
  1600.   MIXERLINE_COMPONENTTYPE_DST_SPEAKERS    = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4);
  1601.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_HEADPHONES}
  1602.   MIXERLINE_COMPONENTTYPE_DST_HEADPHONES  = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 5);
  1603.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_TELEPHONE}
  1604.   MIXERLINE_COMPONENTTYPE_DST_TELEPHONE   = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 6);
  1605.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_WAVEIN}
  1606.   MIXERLINE_COMPONENTTYPE_DST_WAVEIN      = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 7);
  1607.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_VOICEIN}
  1608.   MIXERLINE_COMPONENTTYPE_DST_VOICEIN     = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8);
  1609.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_LAST}
  1610.   MIXERLINE_COMPONENTTYPE_DST_LAST        = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8);
  1611.  
  1612.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_FIRST}
  1613.   MIXERLINE_COMPONENTTYPE_SRC_FIRST       = $00001000;
  1614.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED}
  1615.   MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED   = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0);
  1616.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_DIGITAL}
  1617.   MIXERLINE_COMPONENTTYPE_SRC_DIGITAL     = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1);
  1618.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_LINE}
  1619.   MIXERLINE_COMPONENTTYPE_SRC_LINE        = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2);
  1620.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE}
  1621.   MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE  = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3);
  1622.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER}
  1623.   MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4);
  1624.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC}
  1625.   MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5);
  1626.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE}
  1627.   MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE   = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6);
  1628.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER}
  1629.   MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER   = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7);
  1630.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT}
  1631.   MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT     = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8);
  1632.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY}
  1633.   MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY   = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 9);
  1634.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_ANALOG}
  1635.   MIXERLINE_COMPONENTTYPE_SRC_ANALOG      = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10);
  1636.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_LAST}
  1637.   MIXERLINE_COMPONENTTYPE_SRC_LAST        = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10);
  1638.  
  1639. { TMixerLine.Target.dwType }
  1640.  
  1641.   {$EXTERNALSYM MIXERLINE_TARGETTYPE_UNDEFINED}
  1642.   MIXERLINE_TARGETTYPE_UNDEFINED      = 0;
  1643.   {$EXTERNALSYM MIXERLINE_TARGETTYPE_WAVEOUT}
  1644.   MIXERLINE_TARGETTYPE_WAVEOUT        = 1;
  1645.   {$EXTERNALSYM MIXERLINE_TARGETTYPE_WAVEIN}
  1646.   MIXERLINE_TARGETTYPE_WAVEIN         = 2;
  1647.   {$EXTERNALSYM MIXERLINE_TARGETTYPE_MIDIOUT}
  1648.   MIXERLINE_TARGETTYPE_MIDIOUT        = 3;
  1649.   {$EXTERNALSYM MIXERLINE_TARGETTYPE_MIDIIN}
  1650.   MIXERLINE_TARGETTYPE_MIDIIN         = 4;
  1651.   {$EXTERNALSYM MIXERLINE_TARGETTYPE_AUX}
  1652.   MIXERLINE_TARGETTYPE_AUX            = 5;
  1653.  
  1654. {$EXTERNALSYM mixerGetLineInfoA}
  1655. function mixerGetLineInfoA(hmxobj: HMIXEROBJ; pmxl: PMixerLineA; 
  1656.   fdwInfo: DWORD): MMRESULT; stdcall;
  1657. {$EXTERNALSYM mixerGetLineInfoW}
  1658. function mixerGetLineInfoW(hmxobj: HMIXEROBJ; pmxl: PMixerLineW; 
  1659.   fdwInfo: DWORD): MMRESULT; stdcall;
  1660. {$EXTERNALSYM mixerGetLineInfo}
  1661. function mixerGetLineInfo(hmxobj: HMIXEROBJ; pmxl: PMixerLine; 
  1662.   fdwInfo: DWORD): MMRESULT; stdcall;
  1663.  
  1664. const
  1665.   {$EXTERNALSYM MIXER_GETLINEINFOF_DESTINATION}
  1666.   MIXER_GETLINEINFOF_DESTINATION      = $00000000;
  1667.   {$EXTERNALSYM MIXER_GETLINEINFOF_SOURCE}
  1668.   MIXER_GETLINEINFOF_SOURCE           = $00000001;
  1669.   {$EXTERNALSYM MIXER_GETLINEINFOF_LINEID}
  1670.   MIXER_GETLINEINFOF_LINEID           = $00000002;
  1671.   {$EXTERNALSYM MIXER_GETLINEINFOF_COMPONENTTYPE}
  1672.   MIXER_GETLINEINFOF_COMPONENTTYPE    = $00000003;
  1673.   {$EXTERNALSYM MIXER_GETLINEINFOF_TARGETTYPE}
  1674.   MIXER_GETLINEINFOF_TARGETTYPE       = $00000004;
  1675.  
  1676.   {$EXTERNALSYM MIXER_GETLINEINFOF_QUERYMASK}
  1677.   MIXER_GETLINEINFOF_QUERYMASK        = $0000000F;
  1678.  
  1679. {$EXTERNALSYM mixerGetID}
  1680. function mixerGetID(hmxobj: HMIXEROBJ; var puMxId: UINT; fdwId: DWORD): MMRESULT; stdcall;
  1681.  
  1682. type
  1683.   PMixerControlA = ^TMixerControlA;
  1684.   PMixerControlW = ^TMixerControlW;
  1685.   PMixerControl = PMixerControlA;
  1686.   {$EXTERNALSYM tagMIXERCONTROLA}
  1687.   tagMIXERCONTROLA = packed record
  1688.     cbStruct: DWORD;           { size in bytes of MIXERCONTROL }
  1689.     dwControlID: DWORD;        { unique control id for mixer device }
  1690.     dwControlType: DWORD;      { MIXERCONTROL_CONTROLTYPE_xxx }
  1691.     fdwControl: DWORD;         { MIXERCONTROL_CONTROLF_xxx }
  1692.     cMultipleItems: DWORD;     { if MIXERCONTROL_CONTROLF_MULTIPLE set }
  1693.     szShortName: array[0..MIXER_SHORT_NAME_CHARS - 1] of AnsiChar;
  1694.     szName: array[0..MIXER_LONG_NAME_CHARS - 1] of AnsiChar;
  1695.     Bounds: record
  1696.       case Integer of
  1697.         0: (lMinimum, lMaximum: Longint);
  1698.         1: (dwMinimum, dwMaximum: DWORD);
  1699.         2: (dwReserved: array[0..5] of DWORD);
  1700.     end;
  1701.     Metrics: record
  1702.       case Integer of
  1703.         0: (cSteps: DWORD);        { # of steps between min & max }
  1704.         1: (cbCustomData: DWORD);  { size in bytes of custom data }
  1705.         2: (dwReserved: array[0..5] of DWORD);
  1706.     end;
  1707.   end;  
  1708.   {$EXTERNALSYM tagMIXERCONTROLW}
  1709.   tagMIXERCONTROLW = packed record
  1710.     cbStruct: DWORD;           { size in bytes of MIXERCONTROL }
  1711.     dwControlID: DWORD;        { unique control id for mixer device }
  1712.     dwControlType: DWORD;      { MIXERCONTROL_CONTROLTYPE_xxx }
  1713.     fdwControl: DWORD;         { MIXERCONTROL_CONTROLF_xxx }
  1714.     cMultipleItems: DWORD;     { if MIXERCONTROL_CONTROLF_MULTIPLE set }
  1715.     szShortName: array[0..MIXER_SHORT_NAME_CHARS - 1] of WideChar;
  1716.     szName: array[0..MIXER_LONG_NAME_CHARS - 1] of WideChar;
  1717.     Bounds: record
  1718.       case Integer of
  1719.         0: (lMinimum, lMaximum: Longint);
  1720.         1: (dwMinimum, dwMaximum: DWORD);
  1721.         2: (dwReserved: array[0..5] of DWORD);
  1722.     end;
  1723.     Metrics: record
  1724.       case Integer of
  1725.         0: (cSteps: DWORD);        { # of steps between min & max }
  1726.         1: (cbCustomData: DWORD);  { size in bytes of custom data }
  1727.         2: (dwReserved: array[0..5] of DWORD);
  1728.     end;
  1729.   end;  
  1730.   {$EXTERNALSYM tagMIXERCONTROL}
  1731.   tagMIXERCONTROL = tagMIXERCONTROLA;
  1732.   TMixerControlA = tagMIXERCONTROLA;
  1733.   TMixerControlW = tagMIXERCONTROLW;
  1734.   TMixerControl = TMixerControlA;
  1735.   {$EXTERNALSYM MIXERCONTROLA}
  1736.   MIXERCONTROLA = tagMIXERCONTROLA;
  1737.   {$EXTERNALSYM MIXERCONTROLW}
  1738.   MIXERCONTROLW = tagMIXERCONTROLW;
  1739.   {$EXTERNALSYM MIXERCONTROL}
  1740.   MIXERCONTROL = MIXERCONTROLA;
  1741.  
  1742. const
  1743. { TMixerControl.fdwControl }
  1744.  
  1745.   {$EXTERNALSYM MIXERCONTROL_CONTROLF_UNIFORM}
  1746.   MIXERCONTROL_CONTROLF_UNIFORM   = $00000001;
  1747.   {$EXTERNALSYM MIXERCONTROL_CONTROLF_MULTIPLE}
  1748.   MIXERCONTROL_CONTROLF_MULTIPLE  = $00000002;
  1749.   {$EXTERNALSYM MIXERCONTROL_CONTROLF_DISABLED}
  1750.   MIXERCONTROL_CONTROLF_DISABLED  = $80000000;
  1751.  
  1752. { MIXERCONTROL_CONTROLTYPE_xxx building block defines }
  1753.  
  1754.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_MASK}
  1755.   MIXERCONTROL_CT_CLASS_MASK          = $F0000000;
  1756.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_CUSTOM}
  1757.   MIXERCONTROL_CT_CLASS_CUSTOM        = $00000000;
  1758.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_METER}
  1759.   MIXERCONTROL_CT_CLASS_METER         = $10000000;
  1760.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_SWITCH}
  1761.   MIXERCONTROL_CT_CLASS_SWITCH        = $20000000;
  1762.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_NUMBER}
  1763.   MIXERCONTROL_CT_CLASS_NUMBER        = $30000000;
  1764.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_SLIDER}
  1765.   MIXERCONTROL_CT_CLASS_SLIDER        = $40000000;
  1766.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_FADER}
  1767.   MIXERCONTROL_CT_CLASS_FADER         = $50000000;
  1768.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_TIME}
  1769.   MIXERCONTROL_CT_CLASS_TIME          = $60000000;
  1770.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_LIST}
  1771.   MIXERCONTROL_CT_CLASS_LIST          = $70000000;
  1772.  
  1773.   {$EXTERNALSYM MIXERCONTROL_CT_SUBCLASS_MASK}
  1774.   MIXERCONTROL_CT_SUBCLASS_MASK       = $0F000000;
  1775.  
  1776.   {$EXTERNALSYM MIXERCONTROL_CT_SC_SWITCH_BOOLEAN}
  1777.   MIXERCONTROL_CT_SC_SWITCH_BOOLEAN   = $00000000;
  1778.   {$EXTERNALSYM MIXERCONTROL_CT_SC_SWITCH_BUTTON}
  1779.   MIXERCONTROL_CT_SC_SWITCH_BUTTON    = $01000000;
  1780.  
  1781.   {$EXTERNALSYM MIXERCONTROL_CT_SC_METER_POLLED}
  1782.   MIXERCONTROL_CT_SC_METER_POLLED     = $00000000;
  1783.  
  1784.   {$EXTERNALSYM MIXERCONTROL_CT_SC_TIME_MICROSECS}
  1785.   MIXERCONTROL_CT_SC_TIME_MICROSECS   = $00000000;
  1786.   {$EXTERNALSYM MIXERCONTROL_CT_SC_TIME_MILLISECS}
  1787.   MIXERCONTROL_CT_SC_TIME_MILLISECS   = $01000000;
  1788.  
  1789.   {$EXTERNALSYM MIXERCONTROL_CT_SC_LIST_SINGLE}
  1790.   MIXERCONTROL_CT_SC_LIST_SINGLE      = $00000000;
  1791.   {$EXTERNALSYM MIXERCONTROL_CT_SC_LIST_MULTIPLE}
  1792.   MIXERCONTROL_CT_SC_LIST_MULTIPLE    = $01000000;
  1793.  
  1794.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_MASK}
  1795.   MIXERCONTROL_CT_UNITS_MASK          = $00FF0000;
  1796.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_CUSTOM}
  1797.   MIXERCONTROL_CT_UNITS_CUSTOM        = $00000000;
  1798.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_BOOLEAN}
  1799.   MIXERCONTROL_CT_UNITS_BOOLEAN       = $00010000;
  1800.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_SIGNED}
  1801.   MIXERCONTROL_CT_UNITS_SIGNED        = $00020000;
  1802.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_UNSIGNED}
  1803.   MIXERCONTROL_CT_UNITS_UNSIGNED      = $00030000;
  1804.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_DECIBELS}
  1805.   MIXERCONTROL_CT_UNITS_DECIBELS      = $00040000; { in 10ths }
  1806.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_PERCENT}
  1807.   MIXERCONTROL_CT_UNITS_PERCENT       = $00050000; { in 10ths }
  1808.  
  1809. { Commonly used control types for specifying TMixerControl.dwControlType }
  1810.  
  1811.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_CUSTOM}
  1812.   MIXERCONTROL_CONTROLTYPE_CUSTOM         = (MIXERCONTROL_CT_CLASS_CUSTOM or MIXERCONTROL_CT_UNITS_CUSTOM);
  1813.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_BOOLEANMETER}
  1814.   MIXERCONTROL_CONTROLTYPE_BOOLEANMETER   = (MIXERCONTROL_CT_CLASS_METER or MIXERCONTROL_CT_SC_METER_POLLED or MIXERCONTROL_CT_UNITS_BOOLEAN);
  1815.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_SIGNEDMETER}
  1816.   MIXERCONTROL_CONTROLTYPE_SIGNEDMETER    = (MIXERCONTROL_CT_CLASS_METER or MIXERCONTROL_CT_SC_METER_POLLED or MIXERCONTROL_CT_UNITS_SIGNED);
  1817.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_PEAKMETER}
  1818.   MIXERCONTROL_CONTROLTYPE_PEAKMETER      = (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1);
  1819.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER}
  1820.   MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER  = (MIXERCONTROL_CT_CLASS_METER or MIXERCONTROL_CT_SC_METER_POLLED or MIXERCONTROL_CT_UNITS_UNSIGNED);
  1821.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_BOOLEAN}
  1822.   MIXERCONTROL_CONTROLTYPE_BOOLEAN        = (MIXERCONTROL_CT_CLASS_SWITCH or MIXERCONTROL_CT_SC_SWITCH_BOOLEAN or 
  1823.     MIXERCONTROL_CT_UNITS_BOOLEAN);
  1824.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_ONOFF}
  1825.   MIXERCONTROL_CONTROLTYPE_ONOFF          = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 1);
  1826.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MUTE}
  1827.   MIXERCONTROL_CONTROLTYPE_MUTE           = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 2);
  1828.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MONO}
  1829.   MIXERCONTROL_CONTROLTYPE_MONO           = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 3);
  1830.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_LOUDNESS}
  1831.   MIXERCONTROL_CONTROLTYPE_LOUDNESS       = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 4);
  1832.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_STEREOENH}
  1833.   MIXERCONTROL_CONTROLTYPE_STEREOENH      = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 5);
  1834.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_BUTTON}
  1835.   MIXERCONTROL_CONTROLTYPE_BUTTON         = (MIXERCONTROL_CT_CLASS_SWITCH or MIXERCONTROL_CT_SC_SWITCH_BUTTON or 
  1836.     MIXERCONTROL_CT_UNITS_BOOLEAN);
  1837.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_DECIBELS}
  1838.   MIXERCONTROL_CONTROLTYPE_DECIBELS       = (MIXERCONTROL_CT_CLASS_NUMBER or MIXERCONTROL_CT_UNITS_DECIBELS);
  1839.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_SIGNED}
  1840.   MIXERCONTROL_CONTROLTYPE_SIGNED         = (MIXERCONTROL_CT_CLASS_NUMBER or MIXERCONTROL_CT_UNITS_SIGNED);
  1841.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_UNSIGNED}
  1842.   MIXERCONTROL_CONTROLTYPE_UNSIGNED       = (MIXERCONTROL_CT_CLASS_NUMBER or MIXERCONTROL_CT_UNITS_UNSIGNED);
  1843.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_PERCENT}
  1844.   MIXERCONTROL_CONTROLTYPE_PERCENT        = (MIXERCONTROL_CT_CLASS_NUMBER or MIXERCONTROL_CT_UNITS_PERCENT);
  1845.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_SLIDER}
  1846.   MIXERCONTROL_CONTROLTYPE_SLIDER         = (MIXERCONTROL_CT_CLASS_SLIDER or MIXERCONTROL_CT_UNITS_SIGNED);
  1847.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_PAN}
  1848.   MIXERCONTROL_CONTROLTYPE_PAN            = (MIXERCONTROL_CONTROLTYPE_SLIDER + 1);
  1849.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_QSOUNDPAN}
  1850.   MIXERCONTROL_CONTROLTYPE_QSOUNDPAN      = (MIXERCONTROL_CONTROLTYPE_SLIDER + 2);
  1851.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_FADER}
  1852.   MIXERCONTROL_CONTROLTYPE_FADER          = (MIXERCONTROL_CT_CLASS_FADER or MIXERCONTROL_CT_UNITS_UNSIGNED);
  1853.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_VOLUME}
  1854.   MIXERCONTROL_CONTROLTYPE_VOLUME         = (MIXERCONTROL_CONTROLTYPE_FADER + 1);
  1855.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_BASS}
  1856.   MIXERCONTROL_CONTROLTYPE_BASS           = (MIXERCONTROL_CONTROLTYPE_FADER + 2);
  1857.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_TREBLE}
  1858.   MIXERCONTROL_CONTROLTYPE_TREBLE         = (MIXERCONTROL_CONTROLTYPE_FADER + 3);
  1859.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_EQUALIZER}
  1860.   MIXERCONTROL_CONTROLTYPE_EQUALIZER      = (MIXERCONTROL_CONTROLTYPE_FADER + 4);
  1861.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_SINGLESELECT}
  1862.   MIXERCONTROL_CONTROLTYPE_SINGLESELECT   = (MIXERCONTROL_CT_CLASS_LIST or MIXERCONTROL_CT_SC_LIST_SINGLE or MIXERCONTROL_CT_UNITS_BOOLEAN);
  1863.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MUX}
  1864.   MIXERCONTROL_CONTROLTYPE_MUX            = (MIXERCONTROL_CONTROLTYPE_SINGLESELECT + 1);
  1865.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT}
  1866.   MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT = (MIXERCONTROL_CT_CLASS_LIST or MIXERCONTROL_CT_SC_LIST_MULTIPLE or MIXERCONTROL_CT_UNITS_BOOLEAN);
  1867.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MIXER}
  1868.   MIXERCONTROL_CONTROLTYPE_MIXER          = (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT + 1);
  1869.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MICROTIME}
  1870.   MIXERCONTROL_CONTROLTYPE_MICROTIME      = (MIXERCONTROL_CT_CLASS_TIME or MIXERCONTROL_CT_SC_TIME_MICROSECS or 
  1871.     MIXERCONTROL_CT_UNITS_UNSIGNED);
  1872.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MILLITIME}
  1873.   MIXERCONTROL_CONTROLTYPE_MILLITIME      = (MIXERCONTROL_CT_CLASS_TIME or MIXERCONTROL_CT_SC_TIME_MILLISECS or 
  1874.     MIXERCONTROL_CT_UNITS_UNSIGNED);
  1875.  
  1876.  
  1877. type
  1878.   PMixerLineControlsA = ^TMixerLineControlsA;
  1879.   PMixerLineControlsW = ^TMixerLineControlsW;
  1880.   PMixerLineControls = PMixerLineControlsA;
  1881.   {$EXTERNALSYM tagMIXERLINECONTROLSA}
  1882.   tagMIXERLINECONTROLSA = record
  1883.     cbStruct: DWORD;               { size in bytes of MIXERLINECONTROLS }
  1884.     dwLineID: DWORD;               { line id (from MIXERLINE.dwLineID) }
  1885.     case Integer of
  1886.       0: (dwControlID: DWORD);     { MIXER_GETLINECONTROLSF_ONEBYID }
  1887.       1: (dwControlType: DWORD;    { MIXER_GETLINECONTROLSF_ONEBYTYPE }
  1888.           cControls: DWORD;        { count of controls pmxctrl points to }
  1889.           cbmxctrl: DWORD;         { size in bytes of _one_ MIXERCONTROL }
  1890.           pamxctrl: PMixerControlA);   { pointer to first MIXERCONTROL array }
  1891.   end;
  1892.   {$EXTERNALSYM tagMIXERLINECONTROLSW}
  1893.   tagMIXERLINECONTROLSW = record
  1894.     cbStruct: DWORD;               { size in bytes of MIXERLINECONTROLS }
  1895.     dwLineID: DWORD;               { line id (from MIXERLINE.dwLineID) }
  1896.     case Integer of
  1897.       0: (dwControlID: DWORD);     { MIXER_GETLINECONTROLSF_ONEBYID }
  1898.       1: (dwControlType: DWORD;    { MIXER_GETLINECONTROLSF_ONEBYTYPE }
  1899.           cControls: DWORD;        { count of controls pmxctrl points to }
  1900.           cbmxctrl: DWORD;         { size in bytes of _one_ MIXERCONTROL }
  1901.           pamxctrl: PMixerControlW);   { pointer to first MIXERCONTROL array }
  1902.   end;
  1903.   {$EXTERNALSYM tagMIXERLINECONTROLS}
  1904.   tagMIXERLINECONTROLS = tagMIXERLINECONTROLSA;
  1905.   TMixerLineControlsA = tagMIXERLINECONTROLSA;
  1906.   TMixerLineControlsW = tagMIXERLINECONTROLSW;
  1907.   TMixerLineControls = TMixerLineControlsA;
  1908.   {$EXTERNALSYM MIXERLINECONTROLSA}
  1909.   MIXERLINECONTROLSA = tagMIXERLINECONTROLSA;
  1910.   {$EXTERNALSYM MIXERLINECONTROLSW}
  1911.   MIXERLINECONTROLSW = tagMIXERLINECONTROLSW;
  1912.   {$EXTERNALSYM MIXERLINECONTROLS}
  1913.   MIXERLINECONTROLS = MIXERLINECONTROLSA;
  1914.  
  1915. {$EXTERNALSYM mixerGetLineControlsA}
  1916. function mixerGetLineControlsA(hmxobj: HMIXEROBJ; pmxlc: PMixerLineControlsA; fdwControls: DWORD): MMRESULT; stdcall;
  1917. {$EXTERNALSYM mixerGetLineControlsW}
  1918. function mixerGetLineControlsW(hmxobj: HMIXEROBJ; pmxlc: PMixerLineControlsW; fdwControls: DWORD): MMRESULT; stdcall;
  1919. {$EXTERNALSYM mixerGetLineControls}
  1920. function mixerGetLineControls(hmxobj: HMIXEROBJ; pmxlc: PMixerLineControls; fdwControls: DWORD): MMRESULT; stdcall;
  1921.  
  1922. const
  1923.   {$EXTERNALSYM MIXER_GETLINECONTROLSF_ALL}
  1924.   MIXER_GETLINECONTROLSF_ALL          = $00000000;
  1925.   {$EXTERNALSYM MIXER_GETLINECONTROLSF_ONEBYID}
  1926.   MIXER_GETLINECONTROLSF_ONEBYID      = $00000001;
  1927.   {$EXTERNALSYM MIXER_GETLINECONTROLSF_ONEBYTYPE}
  1928.   MIXER_GETLINECONTROLSF_ONEBYTYPE    = $00000002;
  1929.  
  1930.   {$EXTERNALSYM MIXER_GETLINECONTROLSF_QUERYMASK}
  1931.   MIXER_GETLINECONTROLSF_QUERYMASK    = $0000000F;
  1932.  
  1933. type
  1934.   PMixerControlDetails = ^TMixerControlDetails;
  1935.   {$EXTERNALSYM tMIXERCONTROLDETAILS}
  1936.   tMIXERCONTROLDETAILS = record
  1937.     cbStruct: DWORD;       { size in bytes of MIXERCONTROLDETAILS }
  1938.     dwControlID: DWORD;    { control id to get/set details on }
  1939.     cChannels: DWORD;      { number of channels in paDetails array }
  1940.     case Integer of
  1941.        0: (hwndOwner: HWND);        { for MIXER_SETCONTROLDETAILSF_CUSTOM }
  1942.        1: (cMultipleItems: DWORD;   { if _MULTIPLE, the number of items per channel }
  1943.            cbDetails: DWORD;        { size of _one_ details_XX struct }
  1944.            paDetails: Pointer);     { pointer to array of details_XX structs }
  1945.   end;
  1946.  
  1947.   PMixerControlDetailsListTextA = ^TMixerControlDetailsListTextA;
  1948.   PMixerControlDetailsListTextW = ^TMixerControlDetailsListTextW;
  1949.   PMixerControlDetailsListText = PMixerControlDetailsListTextA;
  1950.   {$EXTERNALSYM tagMIXERCONTROLDETAILS_LISTTEXTA}
  1951.   tagMIXERCONTROLDETAILS_LISTTEXTA = record
  1952.     dwParam1: DWORD;
  1953.     dwParam2: DWORD;
  1954.     szName: array[0..MIXER_LONG_NAME_CHARS - 1] of AnsiChar;
  1955.   end;
  1956.   {$EXTERNALSYM tagMIXERCONTROLDETAILS_LISTTEXTW}
  1957.   tagMIXERCONTROLDETAILS_LISTTEXTW = record
  1958.     dwParam1: DWORD;
  1959.     dwParam2: DWORD;
  1960.     szName: array[0..MIXER_LONG_NAME_CHARS - 1] of WideChar;
  1961.   end;
  1962.   {$EXTERNALSYM tagMIXERCONTROLDETAILS_LISTTEXT}
  1963.   tagMIXERCONTROLDETAILS_LISTTEXT = tagMIXERCONTROLDETAILS_LISTTEXTA;
  1964.   TMixerControlDetailsListTextA = tagMIXERCONTROLDETAILS_LISTTEXTA;
  1965.   TMixerControlDetailsListTextW = tagMIXERCONTROLDETAILS_LISTTEXTW;
  1966.   TMixerControlDetailsListText = TMixerControlDetailsListTextA;
  1967.   {$EXTERNALSYM MIXERCONTROLDETAILS_LISTTEXTA}
  1968.   MIXERCONTROLDETAILS_LISTTEXTA = tagMIXERCONTROLDETAILS_LISTTEXTA;
  1969.   {$EXTERNALSYM MIXERCONTROLDETAILS_LISTTEXTW}
  1970.   MIXERCONTROLDETAILS_LISTTEXTW = tagMIXERCONTROLDETAILS_LISTTEXTW;
  1971.   {$EXTERNALSYM MIXERCONTROLDETAILS_LISTTEXT}
  1972.   MIXERCONTROLDETAILS_LISTTEXT = MIXERCONTROLDETAILS_LISTTEXTA;
  1973.  
  1974.   PMixerControlDetailsBoolean = ^TMixerControlDetailsBoolean;
  1975.   {$EXTERNALSYM tMIXERCONTROLDETAILS_BOOLEAN}
  1976.   tMIXERCONTROLDETAILS_BOOLEAN = record
  1977.     fValue: Longint;
  1978.   end;
  1979.   TMixerControlDetailsBoolean = tMIXERCONTROLDETAILS_BOOLEAN;
  1980.   {$EXTERNALSYM MIXERCONTROLDETAILS_BOOLEAN}
  1981.   MIXERCONTROLDETAILS_BOOLEAN = tMIXERCONTROLDETAILS_BOOLEAN;
  1982.  
  1983.   PMixerControlDetailsSigned = ^TMixerControlDetailsSigned;
  1984.   {$EXTERNALSYM tMIXERCONTROLDETAILS_SIGNED}
  1985.   tMIXERCONTROLDETAILS_SIGNED = record
  1986.     lValue: Longint;
  1987.   end;
  1988.   TMixerControlDetailsSigned = tMIXERCONTROLDETAILS_SIGNED;
  1989.   {$EXTERNALSYM MIXERCONTROLDETAILS_SIGNED}
  1990.   MIXERCONTROLDETAILS_SIGNED = tMIXERCONTROLDETAILS_SIGNED;
  1991.  
  1992.   PMixerControlDetailsUnsigned = ^TMixerControlDetailsUnsigned;
  1993.   {$EXTERNALSYM tMIXERCONTROLDETAILS_UNSIGNED}
  1994.   tMIXERCONTROLDETAILS_UNSIGNED = record
  1995.     dwValue: DWORD;
  1996.   end;
  1997.   TMixerControlDetailsUnsigned = tMIXERCONTROLDETAILS_UNSIGNED;
  1998.   {$EXTERNALSYM MIXERCONTROLDETAILS_UNSIGNED}
  1999.   MIXERCONTROLDETAILS_UNSIGNED = tMIXERCONTROLDETAILS_UNSIGNED;
  2000.  
  2001. {$EXTERNALSYM mixerGetControlDetailsA}
  2002. function mixerGetControlDetailsA(hmxobj: HMIXEROBJ; pmxcd: PMixerControlDetails; fdwDetails: DWORD): MMRESULT; stdcall;
  2003. {$EXTERNALSYM mixerGetControlDetailsW}
  2004. function mixerGetControlDetailsW(hmxobj: HMIXEROBJ; pmxcd: PMixerControlDetails; fdwDetails: DWORD): MMRESULT; stdcall;
  2005. {$EXTERNALSYM mixerGetControlDetails}
  2006. function mixerGetControlDetails(hmxobj: HMIXEROBJ; pmxcd: PMixerControlDetails; fdwDetails: DWORD): MMRESULT; stdcall;
  2007.  
  2008. const
  2009.   {$EXTERNALSYM MIXER_GETCONTROLDETAILSF_VALUE}
  2010.   MIXER_GETCONTROLDETAILSF_VALUE      = $00000000;
  2011.   {$EXTERNALSYM MIXER_GETCONTROLDETAILSF_LISTTEXT}
  2012.   MIXER_GETCONTROLDETAILSF_LISTTEXT   = $00000001;
  2013.  
  2014.   {$EXTERNALSYM MIXER_GETCONTROLDETAILSF_QUERYMASK}
  2015.   MIXER_GETCONTROLDETAILSF_QUERYMASK  = $0000000F;
  2016.  
  2017. {$EXTERNALSYM mixerSetControlDetails}
  2018. function mixerSetControlDetails(hmxobj: HMIXEROBJ; pmxcd: PMixerControlDetails; fdwDetails: DWORD): MMRESULT; stdcall;
  2019.  
  2020. const
  2021.   {$EXTERNALSYM MIXER_SETCONTROLDETAILSF_VALUE}
  2022.   MIXER_SETCONTROLDETAILSF_VALUE      = $00000000;
  2023.   {$EXTERNALSYM MIXER_SETCONTROLDETAILSF_CUSTOM}
  2024.   MIXER_SETCONTROLDETAILSF_CUSTOM     = $00000001;
  2025.  
  2026.   {$EXTERNALSYM MIXER_SETCONTROLDETAILSF_QUERYMASK}
  2027.   MIXER_SETCONTROLDETAILSF_QUERYMASK  = $0000000F;
  2028.  
  2029. {***************************************************************************
  2030.  
  2031.                             Timer support
  2032.  
  2033. ***************************************************************************}
  2034.  
  2035. { timer error return values }
  2036. const
  2037.   {$EXTERNALSYM TIMERR_NOERROR}
  2038.   TIMERR_NOERROR        = 0;                  { no error }
  2039.   {$EXTERNALSYM TIMERR_NOCANDO}
  2040.   TIMERR_NOCANDO        = TIMERR_BASE+1;      { request not completed }
  2041.   {$EXTERNALSYM TIMERR_STRUCT}
  2042.   TIMERR_STRUCT         = TIMERR_BASE+33;     { time struct size }
  2043.  
  2044. { timer data types }
  2045. type
  2046.   TFNTimeCallBack = procedure(uTimerID, uMessage: UINT; 
  2047.     dwUser, dw1, dw2: DWORD) stdcall;
  2048.  
  2049.  
  2050. { flags for wFlags parameter of timeSetEvent() function }
  2051. const
  2052.   {$EXTERNALSYM TIME_ONESHOT}
  2053.   TIME_ONESHOT    = 0;   { program timer for single event }
  2054.   {$EXTERNALSYM TIME_PERIODIC}
  2055.   TIME_PERIODIC   = 1;   { program for continuous periodic event }
  2056.   {$EXTERNALSYM TIME_CALLBACK_FUNCTION}
  2057.   TIME_CALLBACK_FUNCTION    = $0000;  { callback is function }
  2058.   {$EXTERNALSYM TIME_CALLBACK_EVENT_SET}
  2059.   TIME_CALLBACK_EVENT_SET   = $0010;  { callback is event - use SetEvent }
  2060.   {$EXTERNALSYM TIME_CALLBACK_EVENT_PULSE}
  2061.   TIME_CALLBACK_EVENT_PULSE = $0020;  { callback is event - use PulseEvent }
  2062.  
  2063. { timer device capabilities data structure }
  2064. type
  2065.   PTimeCaps = ^TTimeCaps;
  2066.   {$EXTERNALSYM timecaps_tag}
  2067.   timecaps_tag = record
  2068.     wPeriodMin: UINT;     { minimum period supported  }
  2069.     wPeriodMax: UINT;     { maximum period supported  }
  2070.   end;
  2071.   TTimeCaps = timecaps_tag;
  2072.   {$EXTERNALSYM TIMECAPS}
  2073.   TIMECAPS = timecaps_tag;
  2074.  
  2075. { timer function prototypes }
  2076. {$EXTERNALSYM timeGetSystemTime}
  2077. function timeGetSystemTime(lpTime: PMMTime; uSize: Word): MMRESULT; stdcall;
  2078.  
  2079. {$EXTERNALSYM timeGetTime}
  2080. function timeGetTime: DWORD; stdcall;
  2081. {$EXTERNALSYM timeSetEvent}
  2082. function timeSetEvent(uDelay, uResolution: UINT;
  2083.   lpFunction: TFNTimeCallBack; dwUser: DWORD; uFlags: UINT): MMRESULT; stdcall;
  2084. {$EXTERNALSYM timeKillEvent}
  2085. function timeKillEvent(uTimerID: UINT): MMRESULT; stdcall;
  2086. {$EXTERNALSYM timeGetDevCaps}
  2087. function timeGetDevCaps(lpTimeCaps: PTimeCaps; uSize: UINT): MMRESULT; stdcall;
  2088. {$EXTERNALSYM timeBeginPeriod}
  2089. function timeBeginPeriod(uPeriod: UINT): MMRESULT; stdcall;
  2090. {$EXTERNALSYM timeEndPeriod}
  2091. function timeEndPeriod(uPeriod: UINT): MMRESULT; stdcall;
  2092.  
  2093.  
  2094. {***************************************************************************
  2095.  
  2096.                             Joystick support
  2097.  
  2098. ***************************************************************************}
  2099.  
  2100. { joystick error return values }
  2101. const
  2102.   {$EXTERNALSYM JOYERR_NOERROR}
  2103.   JOYERR_NOERROR        = 0;                  { no error }
  2104.   {$EXTERNALSYM JOYERR_PARMS}
  2105.   JOYERR_PARMS          = JOYERR_BASE+5;      { bad parameters }
  2106.   {$EXTERNALSYM JOYERR_NOCANDO}
  2107.   JOYERR_NOCANDO        = JOYERR_BASE+6;      { request not completed }
  2108.   {$EXTERNALSYM JOYERR_UNPLUGGED}
  2109.   JOYERR_UNPLUGGED      = JOYERR_BASE+7;      { joystick is unplugged }
  2110.  
  2111. { constants used with TJoyInfo and TJoyInfoEx structure and MM_JOY* messages }
  2112. const
  2113.   {$EXTERNALSYM JOY_BUTTON1}
  2114.   JOY_BUTTON1         = $0001;
  2115.   {$EXTERNALSYM JOY_BUTTON2}
  2116.   JOY_BUTTON2         = $0002;
  2117.   {$EXTERNALSYM JOY_BUTTON3}
  2118.   JOY_BUTTON3         = $0004;
  2119.   {$EXTERNALSYM JOY_BUTTON4}
  2120.   JOY_BUTTON4         = $0008;
  2121.   {$EXTERNALSYM JOY_BUTTON1CHG}
  2122.   JOY_BUTTON1CHG      = $0100;
  2123.   {$EXTERNALSYM JOY_BUTTON2CHG}
  2124.   JOY_BUTTON2CHG      = $0200;
  2125.   {$EXTERNALSYM JOY_BUTTON3CHG}
  2126.   JOY_BUTTON3CHG      = $0400;
  2127.   {$EXTERNALSYM JOY_BUTTON4CHG}
  2128.   JOY_BUTTON4CHG      = $0800;
  2129.  
  2130. { constants used with TJoyInfoEx }
  2131.   {$EXTERNALSYM JOY_BUTTON5}
  2132.   JOY_BUTTON5         = $00000010;
  2133.   {$EXTERNALSYM JOY_BUTTON6}
  2134.   JOY_BUTTON6         = $00000020;
  2135.   {$EXTERNALSYM JOY_BUTTON7}
  2136.   JOY_BUTTON7         = $00000040;
  2137.   {$EXTERNALSYM JOY_BUTTON8}
  2138.   JOY_BUTTON8         = $00000080;
  2139.   {$EXTERNALSYM JOY_BUTTON9}
  2140.   JOY_BUTTON9         = $00000100;
  2141.   {$EXTERNALSYM JOY_BUTTON10}
  2142.   JOY_BUTTON10        = $00000200;
  2143.   {$EXTERNALSYM JOY_BUTTON11}
  2144.   JOY_BUTTON11        = $00000400;
  2145.   {$EXTERNALSYM JOY_BUTTON12}
  2146.   JOY_BUTTON12        = $00000800;
  2147.   {$EXTERNALSYM JOY_BUTTON13}
  2148.   JOY_BUTTON13        = $00001000;
  2149.   {$EXTERNALSYM JOY_BUTTON14}
  2150.   JOY_BUTTON14        = $00002000;
  2151.   {$EXTERNALSYM JOY_BUTTON15}
  2152.   JOY_BUTTON15        = $00004000;
  2153.   {$EXTERNALSYM JOY_BUTTON16}
  2154.   JOY_BUTTON16        = $00008000;
  2155.   {$EXTERNALSYM JOY_BUTTON17}
  2156.   JOY_BUTTON17        = $00010000;
  2157.   {$EXTERNALSYM JOY_BUTTON18}
  2158.   JOY_BUTTON18        = $00020000;
  2159.   {$EXTERNALSYM JOY_BUTTON19}
  2160.   JOY_BUTTON19        = $00040000;
  2161.   {$EXTERNALSYM JOY_BUTTON20}
  2162.   JOY_BUTTON20        = $00080000;
  2163.   {$EXTERNALSYM JOY_BUTTON21}
  2164.   JOY_BUTTON21        = $00100000;
  2165.   {$EXTERNALSYM JOY_BUTTON22}
  2166.   JOY_BUTTON22        = $00200000;
  2167.   {$EXTERNALSYM JOY_BUTTON23}
  2168.   JOY_BUTTON23        = $00400000;
  2169.   {$EXTERNALSYM JOY_BUTTON24}
  2170.   JOY_BUTTON24        = $00800000;
  2171.   {$EXTERNALSYM JOY_BUTTON25}
  2172.   JOY_BUTTON25        = $01000000;
  2173.   {$EXTERNALSYM JOY_BUTTON26}
  2174.   JOY_BUTTON26        = $02000000;
  2175.   {$EXTERNALSYM JOY_BUTTON27}
  2176.   JOY_BUTTON27        = $04000000;
  2177.   {$EXTERNALSYM JOY_BUTTON28}
  2178.   JOY_BUTTON28        = $08000000;
  2179.   {$EXTERNALSYM JOY_BUTTON29}
  2180.   JOY_BUTTON29        = $10000000;
  2181.   {$EXTERNALSYM JOY_BUTTON30}
  2182.   JOY_BUTTON30        = $20000000;
  2183.   {$EXTERNALSYM JOY_BUTTON31}
  2184.   JOY_BUTTON31        = $40000000;
  2185.   {$EXTERNALSYM JOY_BUTTON32}
  2186.   JOY_BUTTON32        = $80000000;
  2187.  
  2188. { constants used with TJoyInfoEx }
  2189.   {$EXTERNALSYM JOY_POVCENTERED}
  2190.   JOY_POVCENTERED    = -1;
  2191.   {$EXTERNALSYM JOY_POVFORWARD}
  2192.   JOY_POVFORWARD    = 0;
  2193.   {$EXTERNALSYM JOY_POVRIGHT}
  2194.   JOY_POVRIGHT        = 9000;
  2195.   {$EXTERNALSYM JOY_POVBACKWARD}
  2196.   JOY_POVBACKWARD    = 18000;
  2197.   {$EXTERNALSYM JOY_POVLEFT}
  2198.   JOY_POVLEFT        = 27000;
  2199.  
  2200.   {$EXTERNALSYM JOY_RETURNX}
  2201.   JOY_RETURNX        = $00000001;
  2202.   {$EXTERNALSYM JOY_RETURNY}
  2203.   JOY_RETURNY        = $00000002;
  2204.   {$EXTERNALSYM JOY_RETURNZ}
  2205.   JOY_RETURNZ        = $00000004;
  2206.   {$EXTERNALSYM JOY_RETURNR}
  2207.   JOY_RETURNR        = $00000008;
  2208.   {$EXTERNALSYM JOY_RETURNU}
  2209.   JOY_RETURNU        = $00000010; { axis 5 }
  2210.   {$EXTERNALSYM JOY_RETURNV}
  2211.   JOY_RETURNV        = $00000020; { axis 6 }
  2212.   {$EXTERNALSYM JOY_RETURNPOV}
  2213.   JOY_RETURNPOV        = $00000040;
  2214.   {$EXTERNALSYM JOY_RETURNBUTTONS}
  2215.   JOY_RETURNBUTTONS    = $00000080;
  2216.   {$EXTERNALSYM JOY_RETURNRAWDATA}
  2217.   JOY_RETURNRAWDATA    = $00000100;
  2218.   {$EXTERNALSYM JOY_RETURNPOVCTS}
  2219.   JOY_RETURNPOVCTS    = $00000200;
  2220.   {$EXTERNALSYM JOY_RETURNCENTERED}
  2221.   JOY_RETURNCENTERED    = $00000400;
  2222.   {$EXTERNALSYM JOY_USEDEADZONE}
  2223.   JOY_USEDEADZONE        = $00000800;
  2224.   {$EXTERNALSYM JOY_RETURNALL}
  2225.   JOY_RETURNALL  = (JOY_RETURNX or JOY_RETURNY or JOY_RETURNZ or
  2226.     JOY_RETURNR or JOY_RETURNU or JOY_RETURNV or
  2227.     JOY_RETURNPOV or JOY_RETURNBUTTONS);
  2228.   {$EXTERNALSYM JOY_CAL_READALWAYS}
  2229.   JOY_CAL_READALWAYS    = $00010000;
  2230.   {$EXTERNALSYM JOY_CAL_READXYONLY}
  2231.   JOY_CAL_READXYONLY    = $00020000;
  2232.   {$EXTERNALSYM JOY_CAL_READ3}
  2233.   JOY_CAL_READ3        = $00040000;
  2234.   {$EXTERNALSYM JOY_CAL_READ4}
  2235.   JOY_CAL_READ4        = $00080000;
  2236.   {$EXTERNALSYM JOY_CAL_READXONLY}
  2237.   JOY_CAL_READXONLY    = $00100000;
  2238.   {$EXTERNALSYM JOY_CAL_READYONLY}
  2239.   JOY_CAL_READYONLY    = $00200000;
  2240.   {$EXTERNALSYM JOY_CAL_READ5}
  2241.   JOY_CAL_READ5        = $00400000;
  2242.   {$EXTERNALSYM JOY_CAL_READ6}
  2243.   JOY_CAL_READ6        = $00800000;
  2244.   {$EXTERNALSYM JOY_CAL_READZONLY}
  2245.   JOY_CAL_READZONLY    = $01000000;
  2246.   {$EXTERNALSYM JOY_CAL_READRONLY}
  2247.   JOY_CAL_READRONLY    = $02000000;
  2248.   {$EXTERNALSYM JOY_CAL_READUONLY}
  2249.   JOY_CAL_READUONLY    = $04000000;
  2250.   {$EXTERNALSYM JOY_CAL_READVONLY}
  2251.   JOY_CAL_READVONLY    = $08000000;
  2252.  
  2253. { joystick ID constants }
  2254. const
  2255.   {$EXTERNALSYM JOYSTICKID1}
  2256.   JOYSTICKID1         = 0;
  2257.   {$EXTERNALSYM JOYSTICKID2}
  2258.   JOYSTICKID2         = 1;
  2259.  
  2260. { joystick driver capabilites }
  2261.   {$EXTERNALSYM JOYCAPS_HASZ}
  2262.   JOYCAPS_HASZ        = $0001;
  2263.   {$EXTERNALSYM JOYCAPS_HASR}
  2264.   JOYCAPS_HASR        = $0002;
  2265.   {$EXTERNALSYM JOYCAPS_HASU}
  2266.   JOYCAPS_HASU        = $0004;
  2267.   {$EXTERNALSYM JOYCAPS_HASV}
  2268.   JOYCAPS_HASV        = $0008;
  2269.   {$EXTERNALSYM JOYCAPS_HASPOV}
  2270.   JOYCAPS_HASPOV        = $0010;
  2271.   {$EXTERNALSYM JOYCAPS_POV4DIR}
  2272.   JOYCAPS_POV4DIR        = $0020;
  2273.   {$EXTERNALSYM JOYCAPS_POVCTS}
  2274.   JOYCAPS_POVCTS        = $0040;
  2275.  
  2276. { joystick device capabilities data structure }
  2277. type
  2278.   PJoyCapsA = ^TJoyCapsA;
  2279.   PJoyCapsW = ^TJoyCapsW;
  2280.   PJoyCaps = PJoyCapsA;
  2281.   {$EXTERNALSYM tagJOYCAPSA}
  2282.   tagJOYCAPSA = record
  2283.     wMid: Word;                  { manufacturer ID }
  2284.     wPid: Word;                  { product ID }
  2285.     szPname: array[0..MAXPNAMELEN-1] of AnsiChar;  { product name (NULL terminated string) }
  2286.     wXmin: UINT;                 { minimum x position value }
  2287.     wXmax: UINT;                 { maximum x position value }
  2288.     wYmin: UINT;                 { minimum y position value }
  2289.     wYmax: UINT;                 { maximum y position value }
  2290.     wZmin: UINT;                 { minimum z position value }
  2291.     wZmax: UINT;                 { maximum z position value }
  2292.     wNumButtons: UINT;           { number of buttons }
  2293.     wPeriodMin: UINT;            { minimum message period when captured }
  2294.     wPeriodMax: UINT;            { maximum message period when captured }
  2295.     wRmin: UINT;                 { minimum r position value }
  2296.     wRmax: UINT;                 { maximum r position value }
  2297.     wUmin: UINT;                 { minimum u (5th axis) position value }
  2298.     wUmax: UINT;                 { maximum u (5th axis) position value }
  2299.     wVmin: UINT;                 { minimum v (6th axis) position value }
  2300.     wVmax: UINT;                 { maximum v (6th axis) position value }
  2301.     wCaps: UINT;                 { joystick capabilites }
  2302.     wMaxAxes: UINT;         { maximum number of axes supported }
  2303.     wNumAxes: UINT;         { number of axes in use }
  2304.     wMaxButtons: UINT;         { maximum number of buttons supported }
  2305.     szRegKey: array[0..MAXPNAMELEN - 1] of AnsiChar; { registry key }
  2306.     szOEMVxD: array[0..MAX_JOYSTICKOEMVXDNAME - 1] of AnsiChar; { OEM VxD in use }
  2307.   end;
  2308.   {$EXTERNALSYM tagJOYCAPSW}
  2309.   tagJOYCAPSW = record
  2310.     wMid: Word;                  { manufacturer ID }
  2311.     wPid: Word;                  { product ID }
  2312.     szPname: array[0..MAXPNAMELEN-1] of WideChar;  { product name (NULL terminated string) }
  2313.     wXmin: UINT;                 { minimum x position value }
  2314.     wXmax: UINT;                 { maximum x position value }
  2315.     wYmin: UINT;                 { minimum y position value }
  2316.     wYmax: UINT;                 { maximum y position value }
  2317.     wZmin: UINT;                 { minimum z position value }
  2318.     wZmax: UINT;                 { maximum z position value }
  2319.     wNumButtons: UINT;           { number of buttons }
  2320.     wPeriodMin: UINT;            { minimum message period when captured }
  2321.     wPeriodMax: UINT;            { maximum message period when captured }
  2322.     wRmin: UINT;                 { minimum r position value }
  2323.     wRmax: UINT;                 { maximum r position value }
  2324.     wUmin: UINT;                 { minimum u (5th axis) position value }
  2325.     wUmax: UINT;                 { maximum u (5th axis) position value }
  2326.     wVmin: UINT;                 { minimum v (6th axis) position value }
  2327.     wVmax: UINT;                 { maximum v (6th axis) position value }
  2328.     wCaps: UINT;                 { joystick capabilites }
  2329.     wMaxAxes: UINT;         { maximum number of axes supported }
  2330.     wNumAxes: UINT;         { number of axes in use }
  2331.     wMaxButtons: UINT;         { maximum number of buttons supported }
  2332.     szRegKey: array[0..MAXPNAMELEN - 1] of WideChar; { registry key }
  2333.     szOEMVxD: array[0..MAX_JOYSTICKOEMVXDNAME - 1] of WideChar; { OEM VxD in use }
  2334.   end;
  2335.   {$EXTERNALSYM tagJOYCAPS}
  2336.   tagJOYCAPS = tagJOYCAPSA;
  2337.   TJoyCapsA = tagJOYCAPSA;
  2338.   TJoyCapsW = tagJOYCAPSW;
  2339.   TJoyCaps = TJoyCapsA;
  2340.   {$EXTERNALSYM JOYCAPSA}
  2341.   JOYCAPSA = tagJOYCAPSA;
  2342.   {$EXTERNALSYM JOYCAPSW}
  2343.   JOYCAPSW = tagJOYCAPSW;
  2344.   {$EXTERNALSYM JOYCAPS}
  2345.   JOYCAPS = JOYCAPSA;
  2346.  
  2347. { joystick information data structure }
  2348. type
  2349.   PJoyInfo = ^TJoyInfo;
  2350.   {$EXTERNALSYM joyinfo_tag}
  2351.   joyinfo_tag = record
  2352.     wXpos: UINT;                 { x position }
  2353.     wYpos: UINT;                 { y position }
  2354.     wZpos: UINT;                 { z position }
  2355.     wButtons: UINT;              { button states }
  2356.   end;
  2357.   TJoyInfo = joyinfo_tag;
  2358.   {$EXTERNALSYM JOYINFO}
  2359.   JOYINFO = joyinfo_tag;
  2360.  
  2361.   PJoyInfoEx = ^TJoyInfoEx;
  2362.   {$EXTERNALSYM joyinfoex_tag}
  2363.   joyinfoex_tag = record
  2364.     dwSize: DWORD;         { size of structure }
  2365.     dwFlags: DWORD;         { flags to indicate what to return }
  2366.     wXpos: UINT;         { x position }
  2367.     wYpos: UINT;         { y position }
  2368.     wZpos: UINT;         { z position }
  2369.     dwRpos: DWORD;         { rudder/4th axis position }
  2370.     dwUpos: DWORD;         { 5th axis position }
  2371.     dwVpos: DWORD;         { 6th axis position }
  2372.     wButtons: UINT;      { button states }
  2373.     dwButtonNumber: DWORD;  { current button number pressed }
  2374.     dwPOV: DWORD;           { point of view state }
  2375.     dwReserved1: DWORD;         { reserved for communication between winmm & driver }
  2376.     dwReserved2: DWORD;         { reserved for future expansion }
  2377.   end;
  2378.   TJoyInfoEx = joyinfoex_tag;
  2379.   {$EXTERNALSYM JOYINFOEX}
  2380.   JOYINFOEX = joyinfoex_tag;
  2381.  
  2382. { joystick function prototypes }
  2383. {$EXTERNALSYM joyGetNumDevs}
  2384. function joyGetNumDevs: UINT; stdcall;
  2385. {$EXTERNALSYM joyGetDevCapsA}
  2386. function joyGetDevCapsA(uJoyID: UINT; lpCaps: PJoyCapsA; uSize: UINT): MMRESULT; stdcall;
  2387. {$EXTERNALSYM joyGetDevCapsW}
  2388. function joyGetDevCapsW(uJoyID: UINT; lpCaps: PJoyCapsW; uSize: UINT): MMRESULT; stdcall;
  2389. {$EXTERNALSYM joyGetDevCaps}
  2390. function joyGetDevCaps(uJoyID: UINT; lpCaps: PJoyCaps; uSize: UINT): MMRESULT; stdcall;
  2391. {$EXTERNALSYM joyGetPos}
  2392. function joyGetPos(uJoyID: UINT; lpInfo: PJoyInfo): MMRESULT; stdcall;
  2393. {$EXTERNALSYM joyGetPosEx}
  2394. function joyGetPosEx(uJoyID: UINT; lpInfo: PJoyInfoEx): MMRESULT; stdcall;
  2395. {$EXTERNALSYM joyGetThreshold}
  2396. function joyGetThreshold(uJoyID: UINT; lpuThreshold: PUINT): MMRESULT; stdcall;
  2397. {$EXTERNALSYM joyReleaseCapture}
  2398. function joyReleaseCapture(uJoyID: UINT): MMRESULT; stdcall;
  2399. {$EXTERNALSYM joySetCapture}
  2400. function joySetCapture(Handle: HWND; uJoyID, uPeriod: UINT; bChanged: BOOL): MMRESULT; stdcall;
  2401. {$EXTERNALSYM joySetThreshold}
  2402. function joySetThreshold(uJoyID, uThreshold: UINT): MMRESULT; stdcall;
  2403.  
  2404. {***************************************************************************
  2405.  
  2406.                         Multimedia File I/O support
  2407.  
  2408. ***************************************************************************}
  2409.  
  2410. { MMIO error return values }
  2411. const
  2412.   {$EXTERNALSYM MMIOERR_BASE}
  2413.   MMIOERR_BASE            = 256;
  2414.   {$EXTERNALSYM MMIOERR_FILENOTFOUND}
  2415.   MMIOERR_FILENOTFOUND    = MMIOERR_BASE + 1;  { file not found }
  2416.   {$EXTERNALSYM MMIOERR_OUTOFMEMORY}
  2417.   MMIOERR_OUTOFMEMORY     = MMIOERR_BASE + 2;  { out of memory }
  2418.   {$EXTERNALSYM MMIOERR_CANNOTOPEN}
  2419.   MMIOERR_CANNOTOPEN      = MMIOERR_BASE + 3;  { cannot open }
  2420.   {$EXTERNALSYM MMIOERR_CANNOTCLOSE}
  2421.   MMIOERR_CANNOTCLOSE     = MMIOERR_BASE + 4;  { cannot close }
  2422.   {$EXTERNALSYM MMIOERR_CANNOTREAD}
  2423.   MMIOERR_CANNOTREAD      = MMIOERR_BASE + 5;  { cannot read }
  2424.   {$EXTERNALSYM MMIOERR_CANNOTWRITE}
  2425.   MMIOERR_CANNOTWRITE     = MMIOERR_BASE + 6;  { cannot write }
  2426.   {$EXTERNALSYM MMIOERR_CANNOTSEEK}
  2427.   MMIOERR_CANNOTSEEK      = MMIOERR_BASE + 7;  { cannot seek }
  2428.   {$EXTERNALSYM MMIOERR_CANNOTEXPAND}
  2429.   MMIOERR_CANNOTEXPAND    = MMIOERR_BASE + 8;  { cannot expand file }
  2430.   {$EXTERNALSYM MMIOERR_CHUNKNOTFOUND}
  2431.   MMIOERR_CHUNKNOTFOUND   = MMIOERR_BASE + 9;  { chunk not found }
  2432.   {$EXTERNALSYM MMIOERR_UNBUFFERED}
  2433.   MMIOERR_UNBUFFERED      = MMIOERR_BASE + 10; { file is unbuffered }
  2434.   {$EXTERNALSYM MMIOERR_PATHNOTFOUND}
  2435.   MMIOERR_PATHNOTFOUND        = MMIOERR_BASE + 11;  { path incorrect }
  2436.   {$EXTERNALSYM MMIOERR_ACCESSDENIED}
  2437.   MMIOERR_ACCESSDENIED        = MMIOERR_BASE + 12;  { file was protected }
  2438.   {$EXTERNALSYM MMIOERR_SHARINGVIOLATION}
  2439.   MMIOERR_SHARINGVIOLATION    = MMIOERR_BASE + 13;  { file in use }
  2440.   {$EXTERNALSYM MMIOERR_NETWORKERROR}
  2441.   MMIOERR_NETWORKERROR        = MMIOERR_BASE + 14;  { network not responding }
  2442.   {$EXTERNALSYM MMIOERR_TOOMANYOPENFILES}
  2443.   MMIOERR_TOOMANYOPENFILES    = MMIOERR_BASE + 15;  { no more file handles  }
  2444.   {$EXTERNALSYM MMIOERR_INVALIDFILE}
  2445.   MMIOERR_INVALIDFILE         = MMIOERR_BASE + 16;  { default error file error }
  2446.  
  2447. { MMIO constants }
  2448. const
  2449.   {$EXTERNALSYM CFSEPCHAR}
  2450.   CFSEPCHAR       = '+';             { compound file name separator char. }
  2451.  
  2452. type
  2453. { MMIO data types }
  2454.   {$EXTERNALSYM FOURCC}
  2455.   FOURCC = DWORD;                    { a four character code }
  2456.  
  2457.   PHMMIO = ^HMMIO;
  2458.   {$EXTERNALSYM HMMIO}
  2459.   HMMIO = Integer;      { a handle to an open file }
  2460.  
  2461.   TFNMMIOProc = function(lpmmioinfo: PChar; uMessage: UINT; lParam1, lParam2: LPARAM): Longint stdcall;
  2462.  
  2463. { general MMIO information data structure }
  2464. type
  2465.   PMMIOInfo = ^TMMIOInfo;
  2466.   {$EXTERNALSYM _MMIOINFO}
  2467.   _MMIOINFO = record
  2468.     { general fields }
  2469.     dwFlags: DWORD;        { general status flags }
  2470.     fccIOProc: FOURCC;      { pointer to I/O procedure }
  2471.     pIOProc: TFNMMIOProc;        { pointer to I/O procedure }
  2472.     wErrorRet: UINT;      { place for error to be returned }
  2473.     hTask: HTASK;          { alternate local task }
  2474.  
  2475.     { fields maintained by MMIO functions during buffered I/O }
  2476.     cchBuffer: Longint;      { size of I/O buffer (or 0L) }
  2477.     pchBuffer: PChar;      { start of I/O buffer (or NULL) }
  2478.     pchNext: PChar;        { pointer to next byte to read/write }
  2479.     pchEndRead: PChar;     { pointer to last valid byte to read }
  2480.     pchEndWrite: PChar;    { pointer to last byte to write }
  2481.     lBufOffset: Longint;     { disk offset of start of buffer }
  2482.  
  2483.     { fields maintained by I/O procedure }
  2484.     lDiskOffset: Longint;    { disk offset of next read or write }
  2485.     adwInfo: array[0..2] of DWORD;     { data specific to type of MMIOPROC }
  2486.  
  2487.     { other fields maintained by MMIO }
  2488.     dwReserved1: DWORD;    { reserved for MMIO use }
  2489.     dwReserved2: DWORD;    { reserved for MMIO use }
  2490.     hmmio: HMMIO;          { handle to open file }
  2491.   end;
  2492.   TMMIOInfo = _MMIOINFO;
  2493.   {$EXTERNALSYM MMIOINFO}
  2494.   MMIOINFO = _MMIOINFO;
  2495.  
  2496.  
  2497. { RIFF chunk information data structure }
  2498. type
  2499.  
  2500.   PMMCKInfo = ^TMMCKInfo;
  2501.   {$EXTERNALSYM _MMCKINFO}
  2502.   _MMCKINFO = record
  2503.     ckid: FOURCC;           { chunk ID }
  2504.     cksize: DWORD;         { chunk size }
  2505.     fccType: FOURCC;        { form type or list type }
  2506.     dwDataOffset: DWORD;   { offset of data portion of chunk }
  2507.     dwFlags: DWORD;        { flags used by MMIO functions }
  2508.   end;
  2509.   TMMCKInfo = _MMCKINFO;
  2510.   {$EXTERNALSYM MMCKINFO}
  2511.   MMCKINFO = _MMCKINFO;
  2512.  
  2513. { bit field masks }
  2514. const
  2515.   {$EXTERNALSYM MMIO_RWMODE}
  2516.   MMIO_RWMODE     = $00000003;      { open file for reading/writing/both }
  2517.   {$EXTERNALSYM MMIO_SHAREMODE}
  2518.   MMIO_SHAREMODE  = $00000070;      { file sharing mode number }
  2519.  
  2520. { constants for dwFlags field of MMIOINFO }
  2521. const
  2522.   {$EXTERNALSYM MMIO_CREATE}
  2523.   MMIO_CREATE    = $00001000;     { create new file (or truncate file) }
  2524.   {$EXTERNALSYM MMIO_PARSE}
  2525.   MMIO_PARSE     = $00000100;     { parse new file returning path }
  2526.   {$EXTERNALSYM MMIO_DELETE}
  2527.   MMIO_DELETE    = $00000200;     { create new file (or truncate file) }
  2528.   {$EXTERNALSYM MMIO_EXIST}
  2529.   MMIO_EXIST     = $00004000;     { checks for existence of file }
  2530.   {$EXTERNALSYM MMIO_ALLOCBUF}
  2531.   MMIO_ALLOCBUF  = $00010000;     { mmioOpen() should allocate a buffer }
  2532.   {$EXTERNALSYM MMIO_GETTEMP}
  2533.   MMIO_GETTEMP   = $00020000;     { mmioOpen() should retrieve temp name }
  2534.  
  2535. const
  2536.   {$EXTERNALSYM MMIO_DIRTY}
  2537.   MMIO_DIRTY     = $10000000;     { I/O buffer is dirty }
  2538.  
  2539. { read/write mode numbers (bit field MMIO_RWMODE) }
  2540. const
  2541.   {$EXTERNALSYM MMIO_READ}
  2542.   MMIO_READ       = $00000000;      { open file for reading only }
  2543.   {$EXTERNALSYM MMIO_WRITE}
  2544.   MMIO_WRITE      = $00000001;      { open file for writing only }
  2545.   {$EXTERNALSYM MMIO_READWRITE}
  2546.   MMIO_READWRITE  = $00000002;      { open file for reading and writing }
  2547.  
  2548. { share mode numbers (bit field MMIO_SHAREMODE) }
  2549. const
  2550.   {$EXTERNALSYM MMIO_COMPAT}
  2551.   MMIO_COMPAT     = $00000000;      { compatibility mode }
  2552.   {$EXTERNALSYM MMIO_EXCLUSIVE}
  2553.   MMIO_EXCLUSIVE  = $00000010;      { exclusive-access mode }
  2554.   {$EXTERNALSYM MMIO_DENYWRITE}
  2555.   MMIO_DENYWRITE  = $00000020;      { deny writing to other processes }
  2556.   {$EXTERNALSYM MMIO_DENYREAD}
  2557.   MMIO_DENYREAD   = $00000030;      { deny reading to other processes }
  2558.   {$EXTERNALSYM MMIO_DENYNONE}
  2559.   MMIO_DENYNONE   = $00000040;      { deny nothing to other processes }
  2560.  
  2561. { various MMIO flags }
  2562. const
  2563.   {$EXTERNALSYM MMIO_FHOPEN}
  2564.   MMIO_FHOPEN             = $0010;  { mmioClose: keep file handle open }
  2565.   {$EXTERNALSYM MMIO_EMPTYBUF}
  2566.   MMIO_EMPTYBUF           = $0010;  { mmioFlush: empty the I/O buffer }
  2567.   {$EXTERNALSYM MMIO_TOUPPER}
  2568.   MMIO_TOUPPER            = $0010;  { mmioStringToFOURCC: to u-case }
  2569.   {$EXTERNALSYM MMIO_INSTALLPROC}
  2570.   MMIO_INSTALLPROC    = $00010000;  { mmioInstallIOProc: install MMIOProc }
  2571.   {$EXTERNALSYM MMIO_GLOBALPROC}
  2572.   MMIO_GLOBALPROC     = $10000000;  { mmioInstallIOProc: install globally }
  2573.   {$EXTERNALSYM MMIO_REMOVEPROC}
  2574.   MMIO_REMOVEPROC     = $00020000;  { mmioInstallIOProc: remove MMIOProc }
  2575.   {$EXTERNALSYM MMIO_UNICODEPROC}
  2576.   MMIO_UNICODEPROC    = $01000000;  { mmioInstallIOProc: Unicode MMIOProc }
  2577.   {$EXTERNALSYM MMIO_FINDPROC}
  2578.   MMIO_FINDPROC       = $00040000;  { mmioInstallIOProc: find an MMIOProc }
  2579.   {$EXTERNALSYM MMIO_FINDCHUNK}
  2580.   MMIO_FINDCHUNK          = $0010;  { mmioDescend: find a chunk by ID }
  2581.   {$EXTERNALSYM MMIO_FINDRIFF}
  2582.   MMIO_FINDRIFF           = $0020;  { mmioDescend: find a LIST chunk }
  2583.   {$EXTERNALSYM MMIO_FINDLIST}
  2584.   MMIO_FINDLIST           = $0040;  { mmioDescend: find a RIFF chunk }
  2585.   {$EXTERNALSYM MMIO_CREATERIFF}
  2586.   MMIO_CREATERIFF         = $0020;  { mmioCreateChunk: make a LIST chunk }
  2587.   {$EXTERNALSYM MMIO_CREATELIST}
  2588.   MMIO_CREATELIST         = $0040;  { mmioCreateChunk: make a RIFF chunk }
  2589.  
  2590.  
  2591. { message numbers for MMIOPROC I/O procedure functions }
  2592. const
  2593.   {$EXTERNALSYM MMIOM_READ}
  2594.   MMIOM_READ      = MMIO_READ;       { read }
  2595.   {$EXTERNALSYM MMIOM_WRITE}
  2596.   MMIOM_WRITE    = MMIO_WRITE;       { write }
  2597.   {$EXTERNALSYM MMIOM_SEEK}
  2598.   MMIOM_SEEK              = 2;       { seek to a new position in file }
  2599.   {$EXTERNALSYM MMIOM_OPEN}
  2600.   MMIOM_OPEN              = 3;       { open file }
  2601.   {$EXTERNALSYM MMIOM_CLOSE}
  2602.   MMIOM_CLOSE             = 4;       { close file }
  2603.   {$EXTERNALSYM MMIOM_WRITEFLUSH}
  2604.   MMIOM_WRITEFLUSH        = 5;       { write and flush }
  2605.  
  2606. const
  2607.   {$EXTERNALSYM MMIOM_RENAME}
  2608.   MMIOM_RENAME            = 6;       { rename specified file }
  2609.  
  2610.   {$EXTERNALSYM MMIOM_USER}
  2611.   MMIOM_USER         = $8000;       { beginning of user-defined messages }
  2612.  
  2613. { standard four character codes }
  2614. const
  2615.   {$EXTERNALSYM FOURCC_RIFF}
  2616.   FOURCC_RIFF = $46464952;   { 'RIFF' }
  2617.   {$EXTERNALSYM FOURCC_LIST}
  2618.   FOURCC_LIST = $5453494C;   { 'LIST' }
  2619.  
  2620. { four character codes used to identify standard built-in I/O procedures }
  2621. const
  2622.   {$EXTERNALSYM FOURCC_DOS}
  2623.   FOURCC_DOS  = $20532F44;   { 'DOS '}
  2624.   {$EXTERNALSYM FOURCC_MEM}
  2625.   FOURCC_MEM  = $204D454D;   { 'MEM '}
  2626.  
  2627. { flags for mmioSeek() }
  2628. const
  2629.   {$EXTERNALSYM SEEK_SET}
  2630.   SEEK_SET        = 0;               { seek to an absolute position }
  2631.   {$EXTERNALSYM SEEK_CUR}
  2632.   SEEK_CUR        = 1;               { seek relative to current position }
  2633.   {$EXTERNALSYM SEEK_END}
  2634.   SEEK_END        = 2;               { seek relative to end of file }
  2635.  
  2636. { other constants }
  2637. const
  2638.   {$EXTERNALSYM MMIO_DEFAULTBUFFER}
  2639.   MMIO_DEFAULTBUFFER      = 8192;    { default buffer size }
  2640.  
  2641. { MMIO function prototypes }
  2642. {$EXTERNALSYM mmioStringToFOURCCA}
  2643. function mmioStringToFOURCCA(sz: PAnsiChar; uFlags: UINT): FOURCC; stdcall;
  2644. {$EXTERNALSYM mmioStringToFOURCCW}
  2645. function mmioStringToFOURCCW(sz: PWideChar; uFlags: UINT): FOURCC; stdcall;
  2646. {$EXTERNALSYM mmioStringToFOURCC}
  2647. function mmioStringToFOURCC(sz: PChar; uFlags: UINT): FOURCC; stdcall;
  2648. {$EXTERNALSYM mmioInstallIOProcA}
  2649. function mmioInstallIOProcA(fccIOProc: FOURCC; pIOProc: TFNMMIOProc;
  2650.   dwFlags: DWORD): TFNMMIOProc; stdcall;
  2651. {$EXTERNALSYM mmioInstallIOProcW}
  2652. function mmioInstallIOProcW(fccIOProc: FOURCC; pIOProc: TFNMMIOProc;
  2653.   dwFlags: DWORD): TFNMMIOProc; stdcall;
  2654. {$EXTERNALSYM mmioInstallIOProc}
  2655. function mmioInstallIOProc(fccIOProc: FOURCC; pIOProc: TFNMMIOProc;
  2656.   dwFlags: DWORD): TFNMMIOProc; stdcall;
  2657. {$EXTERNALSYM mmioOpenA}
  2658. function mmioOpenA(szFileName: PChar; lpmmioinfo: PMMIOInfo;
  2659.   dwOpenFlags: DWORD): HMMIO; stdcall;
  2660. {$EXTERNALSYM mmioOpenW}
  2661. function mmioOpenW(szFileName: PChar; lpmmioinfo: PMMIOInfo;
  2662.   dwOpenFlags: DWORD): HMMIO; stdcall;
  2663. {$EXTERNALSYM mmioOpen}
  2664. function mmioOpen(szFileName: PChar; lpmmioinfo: PMMIOInfo;
  2665.   dwOpenFlags: DWORD): HMMIO; stdcall;
  2666. {$EXTERNALSYM mmioRenameA}
  2667. function mmioRenameA(szFileName, szNewFileName: PAnsiChar;
  2668.   lpmmioinfo: PMMIOInfo; dwRenameFlags: DWORD): MMRESULT; stdcall;
  2669. {$EXTERNALSYM mmioRenameW}
  2670. function mmioRenameW(szFileName, szNewFileName: PWideChar;
  2671.   lpmmioinfo: PMMIOInfo; dwRenameFlags: DWORD): MMRESULT; stdcall;
  2672. {$EXTERNALSYM mmioRename}
  2673. function mmioRename(szFileName, szNewFileName: PChar;
  2674.   lpmmioinfo: PMMIOInfo; dwRenameFlags: DWORD): MMRESULT; stdcall;
  2675. {$EXTERNALSYM mmioClose}
  2676. function mmioClose(hmmio: HMMIO; uFlags: UINT): MMRESULT; stdcall;
  2677. {$EXTERNALSYM mmioRead}
  2678. function mmioRead(hmmio: HMMIO; pch: PChar; cch: Longint): Longint; stdcall;
  2679. {$EXTERNALSYM mmioWrite}
  2680. function mmioWrite(hmmio: HMMIO; pch: PChar; cch: Longint): Longint; stdcall;
  2681. {$EXTERNALSYM mmioSeek}
  2682. function mmioSeek(hmmio: HMMIO; lOffset: Longint; 
  2683.   iOrigin: Integer): Longint; stdcall;
  2684. {$EXTERNALSYM mmioGetInfo}
  2685. function mmioGetInfo(hmmio: HMMIO; lpmmioinfo: PMMIOInfo; uFlags: UINT): MMRESULT; stdcall;
  2686. {$EXTERNALSYM mmioSetInfo}
  2687. function mmioSetInfo(hmmio: HMMIO; lpmmioinfo: PMMIOInfo; uFlags: UINT): MMRESULT; stdcall;
  2688. {$EXTERNALSYM mmioSetBuffer}
  2689. function mmioSetBuffer(hmmio: HMMIO; pchBuffer: PChar; cchBuffer: Longint;
  2690.   uFlags: Word): MMRESULT; stdcall;
  2691. {$EXTERNALSYM mmioFlush}
  2692. function mmioFlush(hmmio: HMMIO; uFlags: UINT): MMRESULT; stdcall;
  2693. {$EXTERNALSYM mmioAdvance}
  2694. function mmioAdvance(hmmio: HMMIO; lpmmioinfo: PMMIOInfo; uFlags: UINT): MMRESULT; stdcall;
  2695. {$EXTERNALSYM mmioSendMessage}
  2696. function mmioSendMessage(hmmio: HMMIO; uMessage: UINT;
  2697.   lParam1, lParam2: DWORD): Longint; stdcall;
  2698. {$EXTERNALSYM mmioDescend}
  2699. function mmioDescend(hmmio: HMMIO; lpck: PMMCKInfo;
  2700.   lpckParent: PMMCKInfo; uFlags: UINT): MMRESULT; stdcall;
  2701. {$EXTERNALSYM mmioAscend}
  2702. function mmioAscend(hmmio: HMMIO; lpck: PMMCKInfo; uFlags: UINT): MMRESULT; stdcall;
  2703. {$EXTERNALSYM mmioCreateChunk}
  2704. function mmioCreateChunk(hmmio: HMMIO; lpck: PMMCKInfo; uFlags: UINT): MMRESULT; stdcall;
  2705.  
  2706.  
  2707. {***************************************************************************
  2708.  
  2709.                             MCI support
  2710.  
  2711. ***************************************************************************}
  2712.  
  2713. type
  2714.   {$EXTERNALSYM MCIERROR}
  2715.   MCIERROR = DWORD;     { error return code, 0 means no error }
  2716.   {$EXTERNALSYM MCIDEVICEID}
  2717.   MCIDEVICEID = UINT;   { MCI device ID type }
  2718.  
  2719.   TFNYieldProc = function(mciId: MCIDEVICEID; dwYieldData: DWORD): UINT stdcall;
  2720.  
  2721. { MCI function prototypes }
  2722. {$EXTERNALSYM mciSendCommandA}
  2723. function mciSendCommandA(mciId: MCIDEVICEID; uMessage: UINT;
  2724.   dwParam1, dwParam2: DWORD): MCIERROR; stdcall;
  2725. {$EXTERNALSYM mciSendCommandW}
  2726. function mciSendCommandW(mciId: MCIDEVICEID; uMessage: UINT;
  2727.   dwParam1, dwParam2: DWORD): MCIERROR; stdcall;
  2728. {$EXTERNALSYM mciSendCommand}
  2729. function mciSendCommand(mciId: MCIDEVICEID; uMessage: UINT;
  2730.   dwParam1, dwParam2: DWORD): MCIERROR; stdcall;
  2731. {$EXTERNALSYM mciSendStringA}
  2732. function mciSendStringA(lpstrCommand, lpstrReturnString: PAnsiChar;
  2733.   uReturnLength: UINT; hWndCallback: HWND): MCIERROR; stdcall;
  2734. {$EXTERNALSYM mciSendStringW}
  2735. function mciSendStringW(lpstrCommand, lpstrReturnString: PWideChar;
  2736.   uReturnLength: UINT; hWndCallback: HWND): MCIERROR; stdcall;
  2737. {$EXTERNALSYM mciSendString}
  2738. function mciSendString(lpstrCommand, lpstrReturnString: PChar;
  2739.   uReturnLength: UINT; hWndCallback: HWND): MCIERROR; stdcall;
  2740. {$EXTERNALSYM mciGetDeviceIDA}
  2741. function mciGetDeviceIDA(pszDevice: PAnsiChar): MCIDEVICEID; stdcall;
  2742. {$EXTERNALSYM mciGetDeviceIDW}
  2743. function mciGetDeviceIDW(pszDevice: PWideChar): MCIDEVICEID; stdcall;
  2744. {$EXTERNALSYM mciGetDeviceID}
  2745. function mciGetDeviceID(pszDevice: PChar): MCIDEVICEID; stdcall;
  2746. {$EXTERNALSYM mciGetDeviceIDFromElementIDA}
  2747. function mciGetDeviceIDFromElementIDA(dwElementID: DWORD; lpstrType: PAnsiChar): MCIDEVICEID; stdcall;
  2748. {$EXTERNALSYM mciGetDeviceIDFromElementIDW}
  2749. function mciGetDeviceIDFromElementIDW(dwElementID: DWORD; lpstrType: PWideChar): MCIDEVICEID; stdcall;
  2750. {$EXTERNALSYM mciGetDeviceIDFromElementID}
  2751. function mciGetDeviceIDFromElementID(dwElementID: DWORD; lpstrType: PChar): MCIDEVICEID; stdcall;
  2752. {$EXTERNALSYM mciGetErrorStringA}
  2753. function mciGetErrorStringA(mcierr: MCIERROR; pszText: PAnsiChar; uLength: UINT): BOOL; stdcall;
  2754. {$EXTERNALSYM mciGetErrorStringW}
  2755. function mciGetErrorStringW(mcierr: MCIERROR; pszText: PWideChar; uLength: UINT): BOOL; stdcall;
  2756. {$EXTERNALSYM mciGetErrorString}
  2757. function mciGetErrorString(mcierr: MCIERROR; pszText: PChar; uLength: UINT): BOOL; stdcall;
  2758. {$EXTERNALSYM mciSetYieldProc}
  2759. function mciSetYieldProc(mciId: MCIDEVICEID; fpYieldProc: TFNYieldProc;
  2760.   dwYieldData: DWORD): BOOL; stdcall;
  2761. {$EXTERNALSYM mciGetCreatorTask}
  2762. function mciGetCreatorTask(mciId: MCIDEVICEID): HTASK; stdcall;
  2763. {$EXTERNALSYM mciGetYieldProc}
  2764. function mciGetYieldProc(mciId: MCIDEVICEID; lpdwYieldData: PDWORD): TFNYieldProc; stdcall;
  2765. {$EXTERNALSYM mciExecute}
  2766. function mciExecute(pszCommand: LPCSTR): BOOL; stdcall;
  2767.  
  2768.  
  2769. { MCI error return values }
  2770. const
  2771.   {$EXTERNALSYM MCIERR_INVALID_DEVICE_ID}
  2772.   MCIERR_INVALID_DEVICE_ID        = MCIERR_BASE + 1;
  2773.   {$EXTERNALSYM MCIERR_UNRECOGNIZED_KEYWORD}
  2774.   MCIERR_UNRECOGNIZED_KEYWORD     = MCIERR_BASE + 3;
  2775.   {$EXTERNALSYM MCIERR_UNRECOGNIZED_COMMAND}
  2776.   MCIERR_UNRECOGNIZED_COMMAND     = MCIERR_BASE + 5;
  2777.   {$EXTERNALSYM MCIERR_HARDWARE}
  2778.   MCIERR_HARDWARE                 = MCIERR_BASE + 6;
  2779.   {$EXTERNALSYM MCIERR_INVALID_DEVICE_NAME}
  2780.   MCIERR_INVALID_DEVICE_NAME      = MCIERR_BASE + 7;
  2781.   {$EXTERNALSYM MCIERR_OUT_OF_MEMORY}
  2782.   MCIERR_OUT_OF_MEMORY            = MCIERR_BASE + 8;
  2783.   {$EXTERNALSYM MCIERR_DEVICE_OPEN}
  2784.   MCIERR_DEVICE_OPEN              = MCIERR_BASE + 9;
  2785.   {$EXTERNALSYM MCIERR_CANNOT_LOAD_DRIVER}
  2786.   MCIERR_CANNOT_LOAD_DRIVER       = MCIERR_BASE + 10;
  2787.   {$EXTERNALSYM MCIERR_MISSING_COMMAND_STRING}
  2788.   MCIERR_MISSING_COMMAND_STRING   = MCIERR_BASE + 11;
  2789.   {$EXTERNALSYM MCIERR_PARAM_OVERFLOW}
  2790.   MCIERR_PARAM_OVERFLOW           = MCIERR_BASE + 12;
  2791.   {$EXTERNALSYM MCIERR_MISSING_STRING_ARGUMENT}
  2792.   MCIERR_MISSING_STRING_ARGUMENT  = MCIERR_BASE + 13;
  2793.   {$EXTERNALSYM MCIERR_BAD_INTEGER}
  2794.   MCIERR_BAD_INTEGER              = MCIERR_BASE + 14;
  2795.   {$EXTERNALSYM MCIERR_PARSER_INTERNAL}
  2796.   MCIERR_PARSER_INTERNAL          = MCIERR_BASE + 15;
  2797.   {$EXTERNALSYM MCIERR_DRIVER_INTERNAL}
  2798.   MCIERR_DRIVER_INTERNAL          = MCIERR_BASE + 16;
  2799.   {$EXTERNALSYM MCIERR_MISSING_PARAMETER}
  2800.   MCIERR_MISSING_PARAMETER        = MCIERR_BASE + 17;
  2801.   {$EXTERNALSYM MCIERR_UNSUPPORTED_FUNCTION}
  2802.   MCIERR_UNSUPPORTED_FUNCTION     = MCIERR_BASE + 18;
  2803.   {$EXTERNALSYM MCIERR_FILE_NOT_FOUND}
  2804.   MCIERR_FILE_NOT_FOUND           = MCIERR_BASE + 19;
  2805.   {$EXTERNALSYM MCIERR_DEVICE_NOT_READY}
  2806.   MCIERR_DEVICE_NOT_READY         = MCIERR_BASE + 20;
  2807.   {$EXTERNALSYM MCIERR_INTERNAL}
  2808.   MCIERR_INTERNAL                 = MCIERR_BASE + 21;
  2809.   {$EXTERNALSYM MCIERR_DRIVER}
  2810.   MCIERR_DRIVER                   = MCIERR_BASE + 22;
  2811.   {$EXTERNALSYM MCIERR_CANNOT_USE_ALL}
  2812.   MCIERR_CANNOT_USE_ALL           = MCIERR_BASE + 23;
  2813.   {$EXTERNALSYM MCIERR_MULTIPLE}
  2814.   MCIERR_MULTIPLE                 = MCIERR_BASE + 24;
  2815.   {$EXTERNALSYM MCIERR_EXTENSION_NOT_FOUND}
  2816.   MCIERR_EXTENSION_NOT_FOUND      = MCIERR_BASE + 25;
  2817.   {$EXTERNALSYM MCIERR_OUTOFRANGE}
  2818.   MCIERR_OUTOFRANGE               = MCIERR_BASE + 26;
  2819.   {$EXTERNALSYM MCIERR_FLAGS_NOT_COMPATIBLE}
  2820.   MCIERR_FLAGS_NOT_COMPATIBLE     = MCIERR_BASE + 28;
  2821.   {$EXTERNALSYM MCIERR_FILE_NOT_SAVED}
  2822.   MCIERR_FILE_NOT_SAVED           = MCIERR_BASE + 30;
  2823.   {$EXTERNALSYM MCIERR_DEVICE_TYPE_REQUIRED}
  2824.   MCIERR_DEVICE_TYPE_REQUIRED     = MCIERR_BASE + 31;
  2825.   {$EXTERNALSYM MCIERR_DEVICE_LOCKED}
  2826.   MCIERR_DEVICE_LOCKED            = MCIERR_BASE + 32;
  2827.   {$EXTERNALSYM MCIERR_DUPLICATE_ALIAS}
  2828.   MCIERR_DUPLICATE_ALIAS          = MCIERR_BASE + 33;
  2829.   {$EXTERNALSYM MCIERR_BAD_CONSTANT}
  2830.   MCIERR_BAD_CONSTANT             = MCIERR_BASE + 34;
  2831.   {$EXTERNALSYM MCIERR_MUST_USE_SHAREABLE}
  2832.   MCIERR_MUST_USE_SHAREABLE       = MCIERR_BASE + 35;
  2833.   {$EXTERNALSYM MCIERR_MISSING_DEVICE_NAME}
  2834.   MCIERR_MISSING_DEVICE_NAME      = MCIERR_BASE + 36;
  2835.   {$EXTERNALSYM MCIERR_BAD_TIME_FORMAT}
  2836.   MCIERR_BAD_TIME_FORMAT          = MCIERR_BASE + 37;
  2837.   {$EXTERNALSYM MCIERR_NO_CLOSING_QUOTE}
  2838.   MCIERR_NO_CLOSING_QUOTE         = MCIERR_BASE + 38;
  2839.   {$EXTERNALSYM MCIERR_DUPLICATE_FLAGS}
  2840.   MCIERR_DUPLICATE_FLAGS          = MCIERR_BASE + 39;
  2841.   {$EXTERNALSYM MCIERR_INVALID_FILE}
  2842.   MCIERR_INVALID_FILE             = MCIERR_BASE + 40;
  2843.   {$EXTERNALSYM MCIERR_NULL_PARAMETER_BLOCK}
  2844.   MCIERR_NULL_PARAMETER_BLOCK     = MCIERR_BASE + 41;
  2845.   {$EXTERNALSYM MCIERR_UNNAMED_RESOURCE}
  2846.   MCIERR_UNNAMED_RESOURCE         = MCIERR_BASE + 42;
  2847.   {$EXTERNALSYM MCIERR_NEW_REQUIRES_ALIAS}
  2848.   MCIERR_NEW_REQUIRES_ALIAS       = MCIERR_BASE + 43;
  2849.   {$EXTERNALSYM MCIERR_NOTIFY_ON_AUTO_OPEN}
  2850.   MCIERR_NOTIFY_ON_AUTO_OPEN      = MCIERR_BASE + 44;
  2851.   {$EXTERNALSYM MCIERR_NO_ELEMENT_ALLOWED}
  2852.   MCIERR_NO_ELEMENT_ALLOWED       = MCIERR_BASE + 45;
  2853.   {$EXTERNALSYM MCIERR_NONAPPLICABLE_FUNCTION}
  2854.   MCIERR_NONAPPLICABLE_FUNCTION   = MCIERR_BASE + 46;
  2855.   {$EXTERNALSYM MCIERR_ILLEGAL_FOR_AUTO_OPEN}
  2856.   MCIERR_ILLEGAL_FOR_AUTO_OPEN    = MCIERR_BASE + 47;
  2857.   {$EXTERNALSYM MCIERR_FILENAME_REQUIRED}
  2858.   MCIERR_FILENAME_REQUIRED        = MCIERR_BASE + 48;
  2859.   {$EXTERNALSYM MCIERR_EXTRA_CHARACTERS}
  2860.   MCIERR_EXTRA_CHARACTERS         = MCIERR_BASE + 49;
  2861.   {$EXTERNALSYM MCIERR_DEVICE_NOT_INSTALLED}
  2862.   MCIERR_DEVICE_NOT_INSTALLED     = MCIERR_BASE + 50;
  2863.   {$EXTERNALSYM MCIERR_GET_CD}
  2864.   MCIERR_GET_CD                   = MCIERR_BASE + 51;
  2865.   {$EXTERNALSYM MCIERR_SET_CD}
  2866.   MCIERR_SET_CD                   = MCIERR_BASE + 52;
  2867.   {$EXTERNALSYM MCIERR_SET_DRIVE}
  2868.   MCIERR_SET_DRIVE                = MCIERR_BASE + 53;
  2869.   {$EXTERNALSYM MCIERR_DEVICE_LENGTH}
  2870.   MCIERR_DEVICE_LENGTH            = MCIERR_BASE + 54;
  2871.   {$EXTERNALSYM MCIERR_DEVICE_ORD_LENGTH}
  2872.   MCIERR_DEVICE_ORD_LENGTH        = MCIERR_BASE + 55;
  2873.   {$EXTERNALSYM MCIERR_NO_INTEGER}
  2874.   MCIERR_NO_INTEGER               = MCIERR_BASE + 56;
  2875.  
  2876. const
  2877.   {$EXTERNALSYM MCIERR_WAVE_OUTPUTSINUSE}
  2878.   MCIERR_WAVE_OUTPUTSINUSE        = MCIERR_BASE + 64;
  2879.   {$EXTERNALSYM MCIERR_WAVE_SETOUTPUTINUSE}
  2880.   MCIERR_WAVE_SETOUTPUTINUSE      = MCIERR_BASE + 65;
  2881.   {$EXTERNALSYM MCIERR_WAVE_INPUTSINUSE}
  2882.   MCIERR_WAVE_INPUTSINUSE         = MCIERR_BASE + 66;
  2883.   {$EXTERNALSYM MCIERR_WAVE_SETINPUTINUSE}
  2884.   MCIERR_WAVE_SETINPUTINUSE       = MCIERR_BASE + 67;
  2885.   {$EXTERNALSYM MCIERR_WAVE_OUTPUTUNSPECIFIED}
  2886.   MCIERR_WAVE_OUTPUTUNSPECIFIED   = MCIERR_BASE + 68;
  2887.   {$EXTERNALSYM MCIERR_WAVE_INPUTUNSPECIFIED}
  2888.   MCIERR_WAVE_INPUTUNSPECIFIED    = MCIERR_BASE + 69;
  2889.   {$EXTERNALSYM MCIERR_WAVE_OUTPUTSUNSUITABLE}
  2890.   MCIERR_WAVE_OUTPUTSUNSUITABLE   = MCIERR_BASE + 70;
  2891.   {$EXTERNALSYM MCIERR_WAVE_SETOUTPUTUNSUITABLE}
  2892.   MCIERR_WAVE_SETOUTPUTUNSUITABLE = MCIERR_BASE + 71;
  2893.   {$EXTERNALSYM MCIERR_WAVE_INPUTSUNSUITABLE}
  2894.   MCIERR_WAVE_INPUTSUNSUITABLE    = MCIERR_BASE + 72;
  2895.   {$EXTERNALSYM MCIERR_WAVE_SETINPUTUNSUITABLE}
  2896.   MCIERR_WAVE_SETINPUTUNSUITABLE  = MCIERR_BASE + 73;
  2897.  
  2898.   {$EXTERNALSYM MCIERR_SEQ_DIV_INCOMPATIBLE}
  2899.   MCIERR_SEQ_DIV_INCOMPATIBLE     = MCIERR_BASE + 80;
  2900.   {$EXTERNALSYM MCIERR_SEQ_PORT_INUSE}
  2901.   MCIERR_SEQ_PORT_INUSE           = MCIERR_BASE + 81;
  2902.   {$EXTERNALSYM MCIERR_SEQ_PORT_NONEXISTENT}
  2903.   MCIERR_SEQ_PORT_NONEXISTENT     = MCIERR_BASE + 82;
  2904.   {$EXTERNALSYM MCIERR_SEQ_PORT_MAPNODEVICE}
  2905.   MCIERR_SEQ_PORT_MAPNODEVICE     = MCIERR_BASE + 83;
  2906.   {$EXTERNALSYM MCIERR_SEQ_PORT_MISCERROR}
  2907.   MCIERR_SEQ_PORT_MISCERROR       = MCIERR_BASE + 84;
  2908.   {$EXTERNALSYM MCIERR_SEQ_TIMER}
  2909.   MCIERR_SEQ_TIMER                = MCIERR_BASE + 85;
  2910.   {$EXTERNALSYM MCIERR_SEQ_PORTUNSPECIFIED}
  2911.   MCIERR_SEQ_PORTUNSPECIFIED      = MCIERR_BASE + 86;
  2912.   {$EXTERNALSYM MCIERR_SEQ_NOMIDIPRESENT}
  2913.   MCIERR_SEQ_NOMIDIPRESENT        = MCIERR_BASE + 87;
  2914.  
  2915.   {$EXTERNALSYM MCIERR_NO_WINDOW}
  2916.   MCIERR_NO_WINDOW                = MCIERR_BASE + 90;
  2917.   {$EXTERNALSYM MCIERR_CREATEWINDOW}
  2918.   MCIERR_CREATEWINDOW             = MCIERR_BASE + 91;
  2919.   {$EXTERNALSYM MCIERR_FILE_READ}
  2920.   MCIERR_FILE_READ                = MCIERR_BASE + 92;
  2921.   {$EXTERNALSYM MCIERR_FILE_WRITE}
  2922.   MCIERR_FILE_WRITE               = MCIERR_BASE + 93;
  2923.  
  2924.   {$EXTERNALSYM MCIERR_NO_IDENTITY}
  2925.   MCIERR_NO_IDENTITY              = MCIERR_BASE + 94;
  2926.  
  2927. { all custom device driver errors must be >= this value }
  2928. const
  2929.   {$EXTERNALSYM MCIERR_CUSTOM_DRIVER_BASE}
  2930.   MCIERR_CUSTOM_DRIVER_BASE       = mcierr_Base + 256;
  2931.  
  2932. { MCI command message identifiers }
  2933. const
  2934.   {$EXTERNALSYM MCI_OPEN}
  2935.   MCI_OPEN       = $0803;
  2936.   {$EXTERNALSYM MCI_CLOSE}
  2937.   MCI_CLOSE      = $0804;
  2938.   {$EXTERNALSYM MCI_ESCAPE}
  2939.   MCI_ESCAPE     = $0805;
  2940.   {$EXTERNALSYM MCI_PLAY}
  2941.   MCI_PLAY       = $0806;
  2942.   {$EXTERNALSYM MCI_SEEK}
  2943.   MCI_SEEK       = $0807;
  2944.   {$EXTERNALSYM MCI_STOP}
  2945.   MCI_STOP       = $0808;
  2946.   {$EXTERNALSYM MCI_PAUSE}
  2947.   MCI_PAUSE      = $0809;
  2948.   {$EXTERNALSYM MCI_INFO}
  2949.   MCI_INFO       = $080A;
  2950.   {$EXTERNALSYM MCI_GETDEVCAPS}
  2951.   MCI_GETDEVCAPS = $080B;
  2952.   {$EXTERNALSYM MCI_SPIN}
  2953.   MCI_SPIN       = $080C;
  2954.   {$EXTERNALSYM MCI_SET}
  2955.   MCI_SET        = $080D;
  2956.   {$EXTERNALSYM MCI_STEP}
  2957.   MCI_STEP       = $080E;
  2958.   {$EXTERNALSYM MCI_RECORD}
  2959.   MCI_RECORD     = $080F;
  2960.   {$EXTERNALSYM MCI_SYSINFO}
  2961.   MCI_SYSINFO    = $0810;
  2962.   {$EXTERNALSYM MCI_BREAK}
  2963.   MCI_BREAK      = $0811;
  2964.   MCI_SOUND      = $0812;
  2965.   {$EXTERNALSYM MCI_SAVE}
  2966.   MCI_SAVE       = $0813;
  2967.   {$EXTERNALSYM MCI_STATUS}
  2968.   MCI_STATUS     = $0814;
  2969.   {$EXTERNALSYM MCI_CUE}
  2970.   MCI_CUE        = $0830;
  2971.   {$EXTERNALSYM MCI_REALIZE}
  2972.   MCI_REALIZE    = $0840;
  2973.   {$EXTERNALSYM MCI_WINDOW}
  2974.   MCI_WINDOW     = $0841;
  2975.   {$EXTERNALSYM MCI_PUT}
  2976.   MCI_PUT        = $0842;
  2977.   {$EXTERNALSYM MCI_WHERE}
  2978.   MCI_WHERE      = $0843;
  2979.   {$EXTERNALSYM MCI_FREEZE}
  2980.   MCI_FREEZE     = $0844;
  2981.   {$EXTERNALSYM MCI_UNFREEZE}
  2982.   MCI_UNFREEZE   = $0845;
  2983.   {$EXTERNALSYM MCI_LOAD}
  2984.   MCI_LOAD       = $0850;
  2985.   {$EXTERNALSYM MCI_CUT}
  2986.   MCI_CUT        = $0851;
  2987.   {$EXTERNALSYM MCI_COPY}
  2988.   MCI_COPY       = $0852;
  2989.   {$EXTERNALSYM MCI_PASTE}
  2990.   MCI_PASTE      = $0853;
  2991.   {$EXTERNALSYM MCI_UPDATE}
  2992.   MCI_UPDATE     = $0854;
  2993.   {$EXTERNALSYM MCI_RESUME}
  2994.   MCI_RESUME     = $0855;
  2995.   {$EXTERNALSYM MCI_DELETE}
  2996.   MCI_DELETE     = $0856;
  2997.  
  2998. { all custom MCI command messages must be >= this value }
  2999. const
  3000.   {$EXTERNALSYM MCI_USER_MESSAGES}
  3001.   MCI_USER_MESSAGES               = $400 + drv_MCI_First;
  3002.   {$EXTERNALSYM MCI_LAST}
  3003.   MCI_LAST                        = $0FFF;
  3004.  
  3005. { device ID for "all devices" }
  3006. const
  3007.   {$EXTERNALSYM MCI_ALL_DEVICE_ID}
  3008.   MCI_ALL_DEVICE_ID               = UINT(-1);
  3009.  
  3010. { constants for predefined MCI device types }
  3011. const
  3012.   {$EXTERNALSYM MCI_DEVTYPE_VCR}
  3013.   MCI_DEVTYPE_VCR                 = MCI_STRING_OFFSET + 1;
  3014.   {$EXTERNALSYM MCI_DEVTYPE_VIDEODISC}
  3015.   MCI_DEVTYPE_VIDEODISC           = MCI_STRING_OFFSET + 2;
  3016.   {$EXTERNALSYM MCI_DEVTYPE_OVERLAY}
  3017.   MCI_DEVTYPE_OVERLAY             = MCI_STRING_OFFSET + 3;
  3018.   {$EXTERNALSYM MCI_DEVTYPE_CD_AUDIO}
  3019.   MCI_DEVTYPE_CD_AUDIO            = MCI_STRING_OFFSET + 4;
  3020.   {$EXTERNALSYM MCI_DEVTYPE_DAT}
  3021.   MCI_DEVTYPE_DAT                 = MCI_STRING_OFFSET + 5;
  3022.   {$EXTERNALSYM MCI_DEVTYPE_SCANNER}
  3023.   MCI_DEVTYPE_SCANNER             = MCI_STRING_OFFSET + 6;
  3024.   {$EXTERNALSYM MCI_DEVTYPE_ANIMATION}
  3025.   MCI_DEVTYPE_ANIMATION           = MCI_STRING_OFFSET + 7;
  3026.   {$EXTERNALSYM MCI_DEVTYPE_DIGITAL_VIDEO}
  3027.   MCI_DEVTYPE_DIGITAL_VIDEO       = MCI_STRING_OFFSET + 8;
  3028.   {$EXTERNALSYM MCI_DEVTYPE_OTHER}
  3029.   MCI_DEVTYPE_OTHER               = MCI_STRING_OFFSET + 9;
  3030.   {$EXTERNALSYM MCI_DEVTYPE_WAVEFORM_AUDIO}
  3031.   MCI_DEVTYPE_WAVEFORM_AUDIO      = MCI_STRING_OFFSET + 10;
  3032.   {$EXTERNALSYM MCI_DEVTYPE_SEQUENCER}
  3033.   MCI_DEVTYPE_SEQUENCER           = MCI_STRING_OFFSET + 11;
  3034.  
  3035.   {$EXTERNALSYM MCI_DEVTYPE_FIRST}
  3036.   MCI_DEVTYPE_FIRST              = MCI_DEVTYPE_VCR;
  3037.   {$EXTERNALSYM MCI_DEVTYPE_LAST}
  3038.   MCI_DEVTYPE_LAST               = MCI_DEVTYPE_SEQUENCER;
  3039.  
  3040.   {$EXTERNALSYM MCI_DEVTYPE_FIRST_USER}
  3041.   MCI_DEVTYPE_FIRST_USER         = 1000;
  3042.  
  3043. { return values for 'status mode' command }
  3044. const
  3045.   {$EXTERNALSYM MCI_MODE_NOT_READY}
  3046.   MCI_MODE_NOT_READY              = MCI_STRING_OFFSET + 12;
  3047.   {$EXTERNALSYM MCI_MODE_STOP}
  3048.   MCI_MODE_STOP                   = MCI_STRING_OFFSET + 13;
  3049.   {$EXTERNALSYM MCI_MODE_PLAY}
  3050.   MCI_MODE_PLAY                   = MCI_STRING_OFFSET + 14;
  3051.   {$EXTERNALSYM MCI_MODE_RECORD}
  3052.   MCI_MODE_RECORD                 = MCI_STRING_OFFSET + 15;
  3053.   {$EXTERNALSYM MCI_MODE_SEEK}
  3054.   MCI_MODE_SEEK                   = MCI_STRING_OFFSET + 16;
  3055.   {$EXTERNALSYM MCI_MODE_PAUSE}
  3056.   MCI_MODE_PAUSE                  = MCI_STRING_OFFSET + 17;
  3057.   {$EXTERNALSYM MCI_MODE_OPEN}
  3058.   MCI_MODE_OPEN                   = MCI_STRING_OFFSET + 18;
  3059.  
  3060. { constants used in 'set time format' and 'status time format' commands }
  3061. const
  3062.   {$EXTERNALSYM MCI_FORMAT_MILLISECONDS}
  3063.   MCI_FORMAT_MILLISECONDS         = 0;
  3064.   {$EXTERNALSYM MCI_FORMAT_HMS}
  3065.   MCI_FORMAT_HMS                  = 1;
  3066.   {$EXTERNALSYM MCI_FORMAT_MSF}
  3067.   MCI_FORMAT_MSF                  = 2;
  3068.   {$EXTERNALSYM MCI_FORMAT_FRAMES}
  3069.   MCI_FORMAT_FRAMES               = 3;
  3070.   {$EXTERNALSYM MCI_FORMAT_SMPTE_24}
  3071.   MCI_FORMAT_SMPTE_24             = 4;
  3072.   {$EXTERNALSYM MCI_FORMAT_SMPTE_25}
  3073.   MCI_FORMAT_SMPTE_25             = 5;
  3074.   {$EXTERNALSYM MCI_FORMAT_SMPTE_30}
  3075.   MCI_FORMAT_SMPTE_30             = 6;
  3076.   {$EXTERNALSYM MCI_FORMAT_SMPTE_30DROP}
  3077.   MCI_FORMAT_SMPTE_30DROP         = 7;
  3078.   {$EXTERNALSYM MCI_FORMAT_BYTES}
  3079.   MCI_FORMAT_BYTES                = 8;
  3080.   {$EXTERNALSYM MCI_FORMAT_SAMPLES}
  3081.   MCI_FORMAT_SAMPLES              = 9;
  3082.   {$EXTERNALSYM MCI_FORMAT_TMSF}
  3083.   MCI_FORMAT_TMSF                 = 10;
  3084.  
  3085. { MCI time format conversion macros }
  3086.  
  3087. function mci_MSF_Minute(msf: Longint): Byte;
  3088. {$EXTERNALSYM mci_MSF_Minute}
  3089. function mci_MSF_Second(msf: Longint): Byte;
  3090. {$EXTERNALSYM mci_MSF_Second}
  3091. function mci_MSF_Frame(msf: Longint): Byte;
  3092. {$EXTERNALSYM mci_MSF_Frame}
  3093. function mci_Make_MSF(m, s, f: Byte): Longint;
  3094. {$EXTERNALSYM mci_Make_MSF}
  3095. function mci_TMSF_Track(tmsf: Longint): Byte;
  3096. {$EXTERNALSYM mci_TMSF_Track}
  3097. function mci_TMSF_Minute(tmsf: Longint): Byte;
  3098. {$EXTERNALSYM mci_TMSF_Minute}
  3099. function mci_TMSF_Second(tmsf: Longint): Byte;
  3100. {$EXTERNALSYM mci_TMSF_Second}
  3101. function mci_TMSF_Frame(tmsf: Longint): Byte;
  3102. {$EXTERNALSYM mci_TMSF_Frame}
  3103. function mci_Make_TMSF(t, m, s, f: Byte): Longint;
  3104. {$EXTERNALSYM mci_Make_TMSF}
  3105. function mci_HMS_Hour(hms: Longint): Byte;
  3106. {$EXTERNALSYM mci_HMS_Hour}
  3107. function mci_HMS_Minute(hms: Longint): Byte;
  3108. {$EXTERNALSYM mci_HMS_Minute}
  3109. function mci_HMS_Second(hms: Longint): Byte;
  3110. {$EXTERNALSYM mci_HMS_Second}
  3111. function mci_Make_HMS(h, m, s: Byte): Longint;
  3112. {$EXTERNALSYM mci_Make_HMS}
  3113.  
  3114. { flags for wParam of MM_MCINOTIFY message }
  3115. const
  3116.   {$EXTERNALSYM MCI_NOTIFY_SUCCESSFUL}
  3117.   MCI_NOTIFY_SUCCESSFUL           = $0001;
  3118.   {$EXTERNALSYM MCI_NOTIFY_SUPERSEDED}
  3119.   MCI_NOTIFY_SUPERSEDED           = $0002;
  3120.   {$EXTERNALSYM MCI_NOTIFY_ABORTED}
  3121.   MCI_NOTIFY_ABORTED              = $0004;
  3122.   {$EXTERNALSYM MCI_NOTIFY_FAILURE}
  3123.   MCI_NOTIFY_FAILURE              = $0008;
  3124.  
  3125. { common flags for dwFlags parameter of MCI command messages }
  3126. const
  3127.   {$EXTERNALSYM MCI_NOTIFY}
  3128.   MCI_NOTIFY                      = $00000001;
  3129.   {$EXTERNALSYM MCI_WAIT}
  3130.   MCI_WAIT                        = $00000002;
  3131.   {$EXTERNALSYM MCI_FROM}
  3132.   MCI_FROM                        = $00000004;
  3133.   {$EXTERNALSYM MCI_TO}
  3134.   MCI_TO                          = $00000008;
  3135.   {$EXTERNALSYM MCI_TRACK}
  3136.   MCI_TRACK                       = $00000010;
  3137.  
  3138. { flags for dwFlags parameter of MCI_OPEN command message }
  3139. const
  3140.   {$EXTERNALSYM MCI_OPEN_SHAREABLE}
  3141.   MCI_OPEN_SHAREABLE              = $00000100;
  3142.   {$EXTERNALSYM MCI_OPEN_ELEMENT}
  3143.   MCI_OPEN_ELEMENT                = $00000200;
  3144.   {$EXTERNALSYM MCI_OPEN_ALIAS}
  3145.   MCI_OPEN_ALIAS                  = $00000400;
  3146.   {$EXTERNALSYM MCI_OPEN_ELEMENT_ID}
  3147.   MCI_OPEN_ELEMENT_ID             = $00000800;
  3148.   {$EXTERNALSYM MCI_OPEN_TYPE_ID}
  3149.   MCI_OPEN_TYPE_ID                = $00001000;
  3150.   {$EXTERNALSYM MCI_OPEN_TYPE}
  3151.   MCI_OPEN_TYPE                   = $00002000;
  3152.  
  3153. { flags for dwFlags parameter of MCI_SEEK command message }
  3154. const
  3155.   {$EXTERNALSYM MCI_SEEK_TO_START}
  3156.   MCI_SEEK_TO_START               = $00000100;
  3157.   {$EXTERNALSYM MCI_SEEK_TO_END}
  3158.   MCI_SEEK_TO_END                 = $00000200;
  3159.  
  3160. { flags for dwFlags parameter of MCI_STATUS command message }
  3161. const
  3162.   {$EXTERNALSYM MCI_STATUS_ITEM}
  3163.   MCI_STATUS_ITEM                 = $00000100;
  3164.   {$EXTERNALSYM MCI_STATUS_START}
  3165.   MCI_STATUS_START                = $00000200;
  3166.  
  3167. { flags for dwItem field of the MCI_STATUS_PARMS parameter block }
  3168. const
  3169.   {$EXTERNALSYM MCI_STATUS_LENGTH}
  3170.   MCI_STATUS_LENGTH               = $00000001;
  3171.   {$EXTERNALSYM MCI_STATUS_POSITION}
  3172.   MCI_STATUS_POSITION             = $00000002;
  3173.   {$EXTERNALSYM MCI_STATUS_NUMBER_OF_TRACKS}
  3174.   MCI_STATUS_NUMBER_OF_TRACKS     = $00000003;
  3175.   {$EXTERNALSYM MCI_STATUS_MODE}
  3176.   MCI_STATUS_MODE                 = $00000004;
  3177.   {$EXTERNALSYM MCI_STATUS_MEDIA_PRESENT}
  3178.   MCI_STATUS_MEDIA_PRESENT        = $00000005;
  3179.   {$EXTERNALSYM MCI_STATUS_TIME_FORMAT}
  3180.   MCI_STATUS_TIME_FORMAT          = $00000006;
  3181.   {$EXTERNALSYM MCI_STATUS_READY}
  3182.   MCI_STATUS_READY                = $00000007;
  3183.   {$EXTERNALSYM MCI_STATUS_CURRENT_TRACK}
  3184.   MCI_STATUS_CURRENT_TRACK        = $00000008;
  3185.  
  3186. { flags for dwFlags parameter of MCI_INFO command message }
  3187. const
  3188.   {$EXTERNALSYM MCI_INFO_PRODUCT}
  3189.   MCI_INFO_PRODUCT                = $00000100;
  3190.   {$EXTERNALSYM MCI_INFO_FILE}
  3191.   MCI_INFO_FILE                   = $00000200;
  3192.   {$EXTERNALSYM MCI_INFO_MEDIA_UPC}
  3193.   MCI_INFO_MEDIA_UPC              = $00000400;
  3194.   {$EXTERNALSYM MCI_INFO_MEDIA_IDENTITY}
  3195.   MCI_INFO_MEDIA_IDENTITY         = $00000800;
  3196.   {$EXTERNALSYM MCI_INFO_NAME}
  3197.   MCI_INFO_NAME                   = $00001000;
  3198.   {$EXTERNALSYM MCI_INFO_COPYRIGHT}
  3199.   MCI_INFO_COPYRIGHT              = $00002000;
  3200.  
  3201. { flags for dwFlags parameter of MCI_GETDEVCAPS command message }
  3202. const
  3203.   {$EXTERNALSYM MCI_GETDEVCAPS_ITEM}
  3204.   MCI_GETDEVCAPS_ITEM             = $00000100;
  3205.  
  3206. { flags for dwItem field of the MCI_GETDEVCAPS_PARMS parameter block }
  3207. const
  3208.   {$EXTERNALSYM MCI_GETDEVCAPS_CAN_RECORD}
  3209.   MCI_GETDEVCAPS_CAN_RECORD       = $00000001;
  3210.   {$EXTERNALSYM MCI_GETDEVCAPS_HAS_AUDIO}
  3211.   MCI_GETDEVCAPS_HAS_AUDIO        = $00000002;
  3212.   {$EXTERNALSYM MCI_GETDEVCAPS_HAS_VIDEO}
  3213.   MCI_GETDEVCAPS_HAS_VIDEO        = $00000003;
  3214.   {$EXTERNALSYM MCI_GETDEVCAPS_DEVICE_TYPE}
  3215.   MCI_GETDEVCAPS_DEVICE_TYPE      = $00000004;
  3216.   {$EXTERNALSYM MCI_GETDEVCAPS_USES_FILES}
  3217.   MCI_GETDEVCAPS_USES_FILES       = $00000005;
  3218.   {$EXTERNALSYM MCI_GETDEVCAPS_COMPOUND_DEVICE}
  3219.   MCI_GETDEVCAPS_COMPOUND_DEVICE  = $00000006;
  3220.   {$EXTERNALSYM MCI_GETDEVCAPS_CAN_EJECT}
  3221.   MCI_GETDEVCAPS_CAN_EJECT        = $00000007;
  3222.   {$EXTERNALSYM MCI_GETDEVCAPS_CAN_PLAY}
  3223.   MCI_GETDEVCAPS_CAN_PLAY         = $00000008;
  3224.   {$EXTERNALSYM MCI_GETDEVCAPS_CAN_SAVE}
  3225.   MCI_GETDEVCAPS_CAN_SAVE         = $00000009;
  3226.  
  3227. { flags for dwFlags parameter of MCI_SYSINFO command message }
  3228. const
  3229.   {$EXTERNALSYM MCI_SYSINFO_QUANTITY}
  3230.   MCI_SYSINFO_QUANTITY            = $00000100;
  3231.   {$EXTERNALSYM MCI_SYSINFO_OPEN}
  3232.   MCI_SYSINFO_OPEN                = $00000200;
  3233.   {$EXTERNALSYM MCI_SYSINFO_NAME}
  3234.   MCI_SYSINFO_NAME                = $00000400;
  3235.   {$EXTERNALSYM MCI_SYSINFO_INSTALLNAME}
  3236.   MCI_SYSINFO_INSTALLNAME         = $00000800;
  3237.  
  3238. { flags for dwFlags parameter of MCI_SET command message }
  3239. const
  3240.   {$EXTERNALSYM MCI_SET_DOOR_OPEN}
  3241.   MCI_SET_DOOR_OPEN               = $00000100;
  3242.   {$EXTERNALSYM MCI_SET_DOOR_CLOSED}
  3243.   MCI_SET_DOOR_CLOSED             = $00000200;
  3244.   {$EXTERNALSYM MCI_SET_TIME_FORMAT}
  3245.   MCI_SET_TIME_FORMAT             = $00000400;
  3246.   {$EXTERNALSYM MCI_SET_AUDIO}
  3247.   MCI_SET_AUDIO                   = $00000800;
  3248.   {$EXTERNALSYM MCI_SET_VIDEO}
  3249.   MCI_SET_VIDEO                   = $00001000;
  3250.   {$EXTERNALSYM MCI_SET_ON}
  3251.   MCI_SET_ON                      = $00002000;
  3252.   {$EXTERNALSYM MCI_SET_OFF}
  3253.   MCI_SET_OFF                     = $00004000;
  3254.  
  3255. { flags for dwAudio field of MCI_SET_PARMS or MCI_SEQ_SET_PARMS }
  3256. const
  3257.   {$EXTERNALSYM MCI_SET_AUDIO_ALL}
  3258.   MCI_SET_AUDIO_ALL               = $00000000;
  3259.   {$EXTERNALSYM MCI_SET_AUDIO_LEFT}
  3260.   MCI_SET_AUDIO_LEFT              = $00000001;
  3261.   {$EXTERNALSYM MCI_SET_AUDIO_RIGHT}
  3262.   MCI_SET_AUDIO_RIGHT             = $00000002;
  3263.  
  3264. { flags for dwFlags parameter of MCI_BREAK command message }
  3265. const
  3266.   {$EXTERNALSYM MCI_BREAK_KEY}
  3267.   MCI_BREAK_KEY                   = $00000100;
  3268.   {$EXTERNALSYM MCI_BREAK_HWND}
  3269.   MCI_BREAK_HWND                  = $00000200;
  3270.   {$EXTERNALSYM MCI_BREAK_OFF}
  3271.   MCI_BREAK_OFF                   = $00000400;
  3272.  
  3273. { flags for dwFlags parameter of MCI_RECORD command message }
  3274. const
  3275.   {$EXTERNALSYM MCI_RECORD_INSERT}
  3276.   MCI_RECORD_INSERT               = $00000100;
  3277.   {$EXTERNALSYM MCI_RECORD_OVERWRITE}
  3278.   MCI_RECORD_OVERWRITE            = $00000200;
  3279.  
  3280. { flags for dwFlags parameter of MCI_SOUND command message }
  3281. const
  3282.   MCI_SOUND_NAME                  = $00000100;
  3283.  
  3284. { flags for dwFlags parameter of MCI_SAVE command message }
  3285. const
  3286.   {$EXTERNALSYM MCI_SAVE_FILE}
  3287.   MCI_SAVE_FILE                   = $00000100;
  3288.  
  3289. { flags for dwFlags parameter of MCI_LOAD command message }
  3290. const
  3291.   {$EXTERNALSYM MCI_LOAD_FILE}
  3292.   MCI_LOAD_FILE                   = $00000100;
  3293.  
  3294. { generic parameter block for MCI command messages with no special parameters }
  3295. type
  3296.   PMCI_Generic_Parms = ^TMCI_Generic_Parms;
  3297.   {$EXTERNALSYM tagMCI_GENERIC_PARMS}
  3298.   tagMCI_GENERIC_PARMS = record
  3299.     dwCallback: DWORD;
  3300.   end;
  3301.   TMCI_Generic_Parms = tagMCI_GENERIC_PARMS;
  3302.   {$EXTERNALSYM MCI_GENERIC_PARMS}
  3303.   MCI_GENERIC_PARMS = tagMCI_GENERIC_PARMS;
  3304.  
  3305. { parameter block for MCI_OPEN command message }
  3306. type
  3307.   PMCI_Open_ParmsA = ^TMCI_Open_ParmsA;
  3308.   PMCI_Open_ParmsW = ^TMCI_Open_ParmsW;
  3309.   PMCI_Open_Parms = PMCI_Open_ParmsA;
  3310.   {$EXTERNALSYM tagMCI_OPEN_PARMSA}
  3311.   tagMCI_OPEN_PARMSA = record
  3312.     dwCallback: DWORD;
  3313.     wDeviceID: MCIDEVICEID;
  3314.     lpstrDeviceType: PAnsiChar;
  3315.     lpstrElementName: PAnsiChar;
  3316.     lpstrAlias: PAnsiChar;
  3317.   end;
  3318.   {$EXTERNALSYM tagMCI_OPEN_PARMSW}
  3319.   tagMCI_OPEN_PARMSW = record
  3320.     dwCallback: DWORD;
  3321.     wDeviceID: MCIDEVICEID;
  3322.     lpstrDeviceType: PWideChar;
  3323.     lpstrElementName: PWideChar;
  3324.     lpstrAlias: PWideChar;
  3325.   end;
  3326.   {$EXTERNALSYM tagMCI_OPEN_PARMS}
  3327.   tagMCI_OPEN_PARMS = tagMCI_OPEN_PARMSA;
  3328.   TMCI_Open_ParmsA = tagMCI_OPEN_PARMSA;
  3329.   TMCI_Open_ParmsW = tagMCI_OPEN_PARMSW;
  3330.   TMCI_Open_Parms = TMCI_Open_ParmsA;
  3331.   {$EXTERNALSYM MCI_OPEN_PARMSA}
  3332.   MCI_OPEN_PARMSA = tagMCI_OPEN_PARMSA;
  3333.   {$EXTERNALSYM MCI_OPEN_PARMSW}
  3334.   MCI_OPEN_PARMSW = tagMCI_OPEN_PARMSW;
  3335.   {$EXTERNALSYM MCI_OPEN_PARMS}
  3336.   MCI_OPEN_PARMS = MCI_OPEN_PARMSA;
  3337.  
  3338. { parameter block for MCI_PLAY command message }
  3339. type
  3340.   PMCI_Play_Parms = ^TMCI_Play_Parms;
  3341.   {$EXTERNALSYM tagMCI_PLAY_PARMS}
  3342.   tagMCI_PLAY_PARMS = record
  3343.     dwCallback: DWORD;
  3344.     dwFrom: DWORD;
  3345.     dwTo: DWORD;
  3346.   end;
  3347.   TMCI_Play_Parms = tagMCI_PLAY_PARMS;
  3348.   {$EXTERNALSYM MCI_PLAY_PARMS}
  3349.   MCI_PLAY_PARMS = tagMCI_PLAY_PARMS;
  3350.  
  3351. { parameter block for MCI_SEEK command message }
  3352. type
  3353.   PMCI_Seek_Parms = ^TMCI_Seek_Parms;
  3354.   {$EXTERNALSYM tagMCI_SEEK_PARMS}
  3355.   tagMCI_SEEK_PARMS = record
  3356.     dwCallback: DWORD;
  3357.     dwTo: DWORD;
  3358.   end;
  3359.   TMCI_Seek_Parms = tagMCI_SEEK_PARMS;
  3360.   {$EXTERNALSYM MCI_SEEK_PARMS}
  3361.   MCI_SEEK_PARMS = tagMCI_SEEK_PARMS;
  3362.  
  3363.  
  3364. { parameter block for MCI_STATUS command message }
  3365. type
  3366.   PMCI_Status_Parms = ^TMCI_Status_Parms;
  3367.   {$EXTERNALSYM tagMCI_STATUS_PARMS}
  3368.   tagMCI_STATUS_PARMS = record
  3369.     dwCallback: DWORD;
  3370.     dwReturn: DWORD;
  3371.     dwItem: DWORD;
  3372.     dwTrack: DWORD;
  3373.   end;
  3374.   TMCI_Status_Parms = tagMCI_STATUS_PARMS;
  3375.   {$EXTERNALSYM MCI_STATUS_PARMS}
  3376.   MCI_STATUS_PARMS = tagMCI_STATUS_PARMS;
  3377.  
  3378. { parameter block for MCI_INFO command message }
  3379. type
  3380.   PMCI_Info_ParmsA = ^TMCI_Info_ParmsA;
  3381.   PMCI_Info_ParmsW = ^TMCI_Info_ParmsW;
  3382.   PMCI_Info_Parms = PMCI_Info_ParmsA;
  3383.   {$EXTERNALSYM tagMCI_INFO_PARMSA}
  3384.   tagMCI_INFO_PARMSA = record
  3385.     dwCallback: DWORD;
  3386.     lpstrReturn: PAnsiChar;
  3387.     dwRetSize: DWORD;
  3388.   end;
  3389.   {$EXTERNALSYM tagMCI_INFO_PARMSW}
  3390.   tagMCI_INFO_PARMSW = record
  3391.     dwCallback: DWORD;
  3392.     lpstrReturn: PWideChar;
  3393.     dwRetSize: DWORD;
  3394.   end;
  3395.   {$EXTERNALSYM tagMCI_INFO_PARMS}
  3396.   tagMCI_INFO_PARMS = tagMCI_INFO_PARMSA;
  3397.   TMCI_Info_ParmsA = tagMCI_INFO_PARMSA;
  3398.   TMCI_Info_ParmsW = tagMCI_INFO_PARMSW;
  3399.   TMCI_Info_Parms = TMCI_Info_ParmsA;
  3400.   {$EXTERNALSYM MCI_INFO_PARMSA}
  3401.   MCI_INFO_PARMSA = tagMCI_INFO_PARMSA;
  3402.   {$EXTERNALSYM MCI_INFO_PARMSW}
  3403.   MCI_INFO_PARMSW = tagMCI_INFO_PARMSW;
  3404.   {$EXTERNALSYM MCI_INFO_PARMS}
  3405.   MCI_INFO_PARMS = MCI_INFO_PARMSA;
  3406.  
  3407. { parameter block for MCI_GETDEVCAPS command message }
  3408. type
  3409.   PMCI_GetDevCaps_Parms = ^TMCI_GetDevCaps_Parms;
  3410.   {$EXTERNALSYM tagMCI_GETDEVCAPS_PARMS}
  3411.   tagMCI_GETDEVCAPS_PARMS = record
  3412.     dwCallback: DWORD;
  3413.     dwReturn: DWORD;
  3414.     dwItem: DWORD;
  3415.   end;
  3416.   TMCI_GetDevCaps_Parms = tagMCI_GETDEVCAPS_PARMS;
  3417.   {$EXTERNALSYM MCI_GETDEVCAPS_PARMS}
  3418.   MCI_GETDEVCAPS_PARMS = tagMCI_GETDEVCAPS_PARMS;
  3419.  
  3420. { parameter block for MCI_SYSINFO command message }
  3421. type
  3422.   PMCI_SysInfo_ParmsA = ^TMCI_SysInfo_ParmsA;
  3423.   PMCI_SysInfo_ParmsW = ^TMCI_SysInfo_ParmsW;
  3424.   PMCI_SysInfo_Parms = PMCI_SysInfo_ParmsA;
  3425.   {$EXTERNALSYM tagMCI_SYSINFO_PARMSA}
  3426.   tagMCI_SYSINFO_PARMSA = record
  3427.     dwCallback: DWORD;
  3428.     lpstrReturn: PAnsiChar;
  3429.     dwRetSize: DWORD;
  3430.     dwNumber: DWORD;
  3431.     wDeviceType: UINT;
  3432.   end;
  3433.   {$EXTERNALSYM tagMCI_SYSINFO_PARMSW}
  3434.   tagMCI_SYSINFO_PARMSW = record
  3435.     dwCallback: DWORD;
  3436.     lpstrReturn: PWideChar;
  3437.     dwRetSize: DWORD;
  3438.     dwNumber: DWORD;
  3439.     wDeviceType: UINT;
  3440.   end;
  3441.   {$EXTERNALSYM tagMCI_SYSINFO_PARMS}
  3442.   tagMCI_SYSINFO_PARMS = tagMCI_SYSINFO_PARMSA;
  3443.   TMCI_SysInfo_ParmsA = tagMCI_SYSINFO_PARMSA;
  3444.   TMCI_SysInfo_ParmsW = tagMCI_SYSINFO_PARMSW;
  3445.   TMCI_SysInfo_Parms = TMCI_SysInfo_ParmsA;
  3446.   {$EXTERNALSYM MCI_SYSINFO_PARMSA}
  3447.   MCI_SYSINFO_PARMSA = tagMCI_SYSINFO_PARMSA;
  3448.   {$EXTERNALSYM MCI_SYSINFO_PARMSW}
  3449.   MCI_SYSINFO_PARMSW = tagMCI_SYSINFO_PARMSW;
  3450.   {$EXTERNALSYM MCI_SYSINFO_PARMS}
  3451.   MCI_SYSINFO_PARMS = MCI_SYSINFO_PARMSA;
  3452.  
  3453. { parameter block for MCI_SET command message }
  3454. type
  3455.   PMCI_Set_Parms = ^TMCI_Set_Parms;
  3456.   {$EXTERNALSYM tagMCI_SET_PARMS}
  3457.   tagMCI_SET_PARMS = record
  3458.     dwCallback: DWORD;
  3459.     dwTimeFormat: DWORD;
  3460.     dwAudio: DWORD;
  3461.   end;
  3462.   TMCI_Set_Parms = tagMCI_SET_PARMS;
  3463.   {$EXTERNALSYM MCI_SET_PARMS}
  3464.   MCI_SET_PARMS = tagMCI_SET_PARMS;
  3465.  
  3466.  
  3467. { parameter block for MCI_BREAK command message }
  3468. type
  3469.   PMCI_Break_Parms = ^TMCI_BReak_Parms;
  3470.   {$EXTERNALSYM tagMCI_BREAK_PARMS}
  3471.   tagMCI_BREAK_PARMS = record
  3472.     dwCallback: DWORD;
  3473.     nVirtKey: Integer;
  3474.     hWndBreak: HWND;
  3475.   end;
  3476.   TMCI_BReak_Parms = tagMCI_BREAK_PARMS;
  3477.   {$EXTERNALSYM MCI_BREAK_PARMS}
  3478.   MCI_BREAK_PARMS = tagMCI_BREAK_PARMS;
  3479.  
  3480. { parameter block for MCI_SOUND command message }
  3481. type
  3482.   PMCI_Sound_Parms = ^TMCI_Sound_Parms;
  3483.   TMCI_Sound_Parms = record
  3484.     dwCallback: Longint;
  3485.     lpstrSoundName: PChar;
  3486.   end;
  3487.  
  3488. { parameter block for MCI_SAVE command message }
  3489. type
  3490.   PMCI_Save_ParmsA = ^MCI_SAVE_PARMSA;
  3491.   PMCI_Save_ParmsW = ^MCI_SAVE_PARMSW;
  3492.   PMCI_Save_Parms = PMCI_Save_ParmsA;
  3493.   MCI_SAVE_PARMSA = record
  3494.     dwCallback: DWORD;
  3495.     lpfilename: PAnsiChar;
  3496.   end;
  3497.   MCI_SAVE_PARMSW = record
  3498.     dwCallback: DWORD;
  3499.     lpfilename: PWideChar;
  3500.   end;
  3501.   MCI_SAVE_PARMS = MCI_SAVE_PARMSA;
  3502.   TMCI_SaveParmsA = MCI_SAVE_PARMSA;
  3503.   LPMCI_SAVE_PARMSA = PMCI_Save_ParmsA;
  3504.   TMCI_SaveParmsW = MCI_SAVE_PARMSW;
  3505.   LPMCI_SAVE_PARMSW = PMCI_Save_ParmsW;
  3506.   TMCI_SaveParms = TMCI_SaveParmsA;
  3507.  
  3508. { parameter block for MCI_LOAD command message }
  3509. type
  3510.   PMCI_Load_ParmsA = ^TMCI_Load_ParmsA;
  3511.   PMCI_Load_ParmsW = ^TMCI_Load_ParmsW;
  3512.   PMCI_Load_Parms = PMCI_Load_ParmsA;
  3513.   {$EXTERNALSYM tagMCI_LOAD_PARMSA}
  3514.   tagMCI_LOAD_PARMSA = record
  3515.     dwCallback: DWORD;
  3516.     lpfilename: PAnsiChar;
  3517.   end;
  3518.   {$EXTERNALSYM tagMCI_LOAD_PARMSW}
  3519.   tagMCI_LOAD_PARMSW = record
  3520.     dwCallback: DWORD;
  3521.     lpfilename: PWideChar;
  3522.   end;
  3523.   {$EXTERNALSYM tagMCI_LOAD_PARMS}
  3524.   tagMCI_LOAD_PARMS = tagMCI_LOAD_PARMSA;
  3525.   TMCI_Load_ParmsA = tagMCI_LOAD_PARMSA;
  3526.   TMCI_Load_ParmsW = tagMCI_LOAD_PARMSW;
  3527.   TMCI_Load_Parms = TMCI_Load_ParmsA;
  3528.   {$EXTERNALSYM MCI_LOAD_PARMSA}
  3529.   MCI_LOAD_PARMSA = tagMCI_LOAD_PARMSA;
  3530.   {$EXTERNALSYM MCI_LOAD_PARMSW}
  3531.   MCI_LOAD_PARMSW = tagMCI_LOAD_PARMSW;
  3532.   {$EXTERNALSYM MCI_LOAD_PARMS}
  3533.   MCI_LOAD_PARMS = MCI_LOAD_PARMSA;
  3534.  
  3535. { parameter block for MCI_RECORD command message }
  3536. type
  3537.   PMCI_Record_Parms = ^TMCI_Record_Parms;
  3538.   {$EXTERNALSYM tagMCI_RECORD_PARMS}
  3539.   tagMCI_RECORD_PARMS = record
  3540.     dwCallback: DWORD;
  3541.     dwFrom: DWORD;
  3542.     dwTo: DWORD;
  3543.   end;
  3544.   TMCI_Record_Parms = tagMCI_RECORD_PARMS;
  3545.   {$EXTERNALSYM MCI_RECORD_PARMS}
  3546.   MCI_RECORD_PARMS = tagMCI_RECORD_PARMS;
  3547.  
  3548.  
  3549. { MCI extensions for videodisc devices }
  3550.  
  3551. { flag for dwReturn field of MCI_STATUS_PARMS }
  3552. { MCI_STATUS command, (dwItem == MCI_STATUS_MODE) }
  3553. const
  3554.   {$EXTERNALSYM MCI_VD_MODE_PARK}
  3555.   MCI_VD_MODE_PARK                = MCI_VD_OFFSET + 1;
  3556.  
  3557. { flag for dwReturn field of MCI_STATUS_PARMS }
  3558. { MCI_STATUS command, (dwItem == MCI_VD_STATUS_MEDIA_TYPE) }
  3559. const
  3560.   {$EXTERNALSYM MCI_VD_MEDIA_CLV}
  3561.   MCI_VD_MEDIA_CLV                = MCI_VD_OFFSET + 2;
  3562.   {$EXTERNALSYM MCI_VD_MEDIA_CAV}
  3563.   MCI_VD_MEDIA_CAV                = MCI_VD_OFFSET + 3;
  3564.   {$EXTERNALSYM MCI_VD_MEDIA_OTHER}
  3565.   MCI_VD_MEDIA_OTHER              = MCI_VD_OFFSET + 4;
  3566.  
  3567. const
  3568.   {$EXTERNALSYM MCI_VD_FORMAT_TRACK}
  3569.   MCI_VD_FORMAT_TRACK             = $4001;
  3570.  
  3571. { flags for dwFlags parameter of MCI_PLAY command message }
  3572. const
  3573.   {$EXTERNALSYM MCI_VD_PLAY_REVERSE}
  3574.   MCI_VD_PLAY_REVERSE             = $00010000;
  3575.   {$EXTERNALSYM MCI_VD_PLAY_FAST}
  3576.   MCI_VD_PLAY_FAST                = $00020000;
  3577.   {$EXTERNALSYM MCI_VD_PLAY_SPEED}
  3578.   MCI_VD_PLAY_SPEED               = $00040000;
  3579.   {$EXTERNALSYM MCI_VD_PLAY_SCAN}
  3580.   MCI_VD_PLAY_SCAN                = $00080000;
  3581.   {$EXTERNALSYM MCI_VD_PLAY_SLOW}
  3582.   MCI_VD_PLAY_SLOW                = $00100000;
  3583.  
  3584. { flag for dwFlags parameter of MCI_SEEK command message }
  3585. const
  3586.   {$EXTERNALSYM MCI_VD_SEEK_REVERSE}
  3587.   MCI_VD_SEEK_REVERSE             = $00010000;
  3588.  
  3589. { flags for dwItem field of MCI_STATUS_PARMS parameter block }
  3590. const
  3591.   {$EXTERNALSYM MCI_VD_STATUS_SPEED}
  3592.   MCI_VD_STATUS_SPEED             = $00004002;
  3593.   {$EXTERNALSYM MCI_VD_STATUS_FORWARD}
  3594.   MCI_VD_STATUS_FORWARD           = $00004003;
  3595.   {$EXTERNALSYM MCI_VD_STATUS_MEDIA_TYPE}
  3596.   MCI_VD_STATUS_MEDIA_TYPE        = $00004004;
  3597.   {$EXTERNALSYM MCI_VD_STATUS_SIDE}
  3598.   MCI_VD_STATUS_SIDE              = $00004005;
  3599.   {$EXTERNALSYM MCI_VD_STATUS_DISC_SIZE}
  3600.   MCI_VD_STATUS_DISC_SIZE         = $00004006;
  3601.  
  3602. { flags for dwFlags parameter of MCI_GETDEVCAPS command message }
  3603. const
  3604.   {$EXTERNALSYM MCI_VD_GETDEVCAPS_CLV}
  3605.   MCI_VD_GETDEVCAPS_CLV           = $00010000;
  3606.   {$EXTERNALSYM MCI_VD_GETDEVCAPS_CAV}
  3607.   MCI_VD_GETDEVCAPS_CAV           = $00020000;
  3608.  
  3609.   {$EXTERNALSYM MCI_VD_SPIN_UP}
  3610.   MCI_VD_SPIN_UP                  = $00010000;
  3611.   {$EXTERNALSYM MCI_VD_SPIN_DOWN}
  3612.   MCI_VD_SPIN_DOWN                = $00020000;
  3613.  
  3614. { flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block }
  3615. const
  3616.   {$EXTERNALSYM MCI_VD_GETDEVCAPS_CAN_REVERSE}
  3617.   MCI_VD_GETDEVCAPS_CAN_REVERSE   = $00004002;
  3618.   {$EXTERNALSYM MCI_VD_GETDEVCAPS_FAST_RATE}
  3619.   MCI_VD_GETDEVCAPS_FAST_RATE     = $00004003;
  3620.   {$EXTERNALSYM MCI_VD_GETDEVCAPS_SLOW_RATE}
  3621.   MCI_VD_GETDEVCAPS_SLOW_RATE     = $00004004;
  3622.   {$EXTERNALSYM MCI_VD_GETDEVCAPS_NORMAL_RATE}
  3623.   MCI_VD_GETDEVCAPS_NORMAL_RATE   = $00004005;
  3624.  
  3625. { flags for the dwFlags parameter of MCI_STEP command message }
  3626. const
  3627.   {$EXTERNALSYM MCI_VD_STEP_FRAMES}
  3628.   MCI_VD_STEP_FRAMES              = $00010000;
  3629.   {$EXTERNALSYM MCI_VD_STEP_REVERSE}
  3630.   MCI_VD_STEP_REVERSE             = $00020000;
  3631.  
  3632. { flag for the MCI_ESCAPE command message }
  3633. const
  3634.   {$EXTERNALSYM MCI_VD_ESCAPE_STRING}
  3635.   MCI_VD_ESCAPE_STRING            = $00000100;
  3636.  
  3637. { parameter block for MCI_PLAY command message }
  3638. type
  3639.   PMCI_VD_Play_Parms = ^TMCI_VD_Play_Parms;
  3640.   {$EXTERNALSYM tagMCI_VD_PLAY_PARMS}
  3641.   tagMCI_VD_PLAY_PARMS = record
  3642.     dwCallback: DWORD;
  3643.     dwFrom: DWORD;
  3644.     dwTo: DWORD;
  3645.     dwSpeed: DWORD;
  3646.   end;
  3647.   TMCI_VD_Play_Parms = tagMCI_VD_PLAY_PARMS;
  3648.   {$EXTERNALSYM MCI_VD_PLAY_PARMS}
  3649.   MCI_VD_PLAY_PARMS = tagMCI_VD_PLAY_PARMS;
  3650.  
  3651. { parameter block for MCI_STEP command message }
  3652. type
  3653.   PMCI_VD_Step_Parms = ^TMCI_VD_Step_Parms;
  3654.   {$EXTERNALSYM tagMCI_VD_STEP_PARMS}
  3655.   tagMCI_VD_STEP_PARMS = record
  3656.     dwCallback: DWORD;
  3657.     dwFrames: DWORD;
  3658.   end;
  3659.   TMCI_VD_Step_Parms = tagMCI_VD_STEP_PARMS;
  3660.   {$EXTERNALSYM MCI_VD_STEP_PARMS}
  3661.   MCI_VD_STEP_PARMS = tagMCI_VD_STEP_PARMS;
  3662.  
  3663. { parameter block for MCI_ESCAPE command message }
  3664. type
  3665.   PMCI_VD_Escape_ParmsA = ^TMCI_VD_Escape_ParmsA;
  3666.   PMCI_VD_Escape_ParmsW = ^TMCI_VD_Escape_ParmsW;
  3667.   PMCI_VD_Escape_Parms = PMCI_VD_Escape_ParmsA;
  3668.   {$EXTERNALSYM tagMCI_VD_ESCAPE_PARMSA}
  3669.   tagMCI_VD_ESCAPE_PARMSA = record
  3670.     dwCallback: DWORD;
  3671.     lpstrCommand: PAnsiChar;
  3672.   end;
  3673.   {$EXTERNALSYM tagMCI_VD_ESCAPE_PARMSW}
  3674.   tagMCI_VD_ESCAPE_PARMSW = record
  3675.     dwCallback: DWORD;
  3676.     lpstrCommand: PWideChar;
  3677.   end;
  3678.   {$EXTERNALSYM tagMCI_VD_ESCAPE_PARMS}
  3679.   tagMCI_VD_ESCAPE_PARMS = tagMCI_VD_ESCAPE_PARMSA;
  3680.   TMCI_VD_Escape_ParmsA = tagMCI_VD_ESCAPE_PARMSA;
  3681.   TMCI_VD_Escape_ParmsW = tagMCI_VD_ESCAPE_PARMSW;
  3682.   TMCI_VD_Escape_Parms = TMCI_VD_Escape_ParmsA;
  3683.   {$EXTERNALSYM MCI_VD_ESCAPE_PARMSA}
  3684.   MCI_VD_ESCAPE_PARMSA = tagMCI_VD_ESCAPE_PARMSA;
  3685.   {$EXTERNALSYM MCI_VD_ESCAPE_PARMSW}
  3686.   MCI_VD_ESCAPE_PARMSW = tagMCI_VD_ESCAPE_PARMSW;
  3687.   {$EXTERNALSYM MCI_VD_ESCAPE_PARMS}
  3688.   MCI_VD_ESCAPE_PARMS = MCI_VD_ESCAPE_PARMSA;
  3689.  
  3690. { MCI extensions for CD audio devices }
  3691.  
  3692. { flags for the dwItem field of the MCI_STATUS_PARMS parameter block }
  3693. const
  3694.   {$EXTERNALSYM MCI_CDA_STATUS_TYPE_TRACK}
  3695.   MCI_CDA_STATUS_TYPE_TRACK       = $00004001;
  3696.  
  3697. { flags for the dwReturn field of MCI_STATUS_PARMS parameter block }
  3698. { MCI_STATUS command, (dwItem == MCI_CDA_STATUS_TYPE_TRACK) }
  3699.   {$EXTERNALSYM MCI_CDA_TRACK_AUDIO}
  3700.   MCI_CDA_TRACK_AUDIO             = MCI_CD_OFFSET + 0;
  3701.   {$EXTERNALSYM MCI_CDA_TRACK_OTHER}
  3702.   MCI_CDA_TRACK_OTHER             = MCI_CD_OFFSET + 1;
  3703.  
  3704. { MCI extensions for waveform audio devices }
  3705.   {$EXTERNALSYM MCI_WAVE_PCM}
  3706.   MCI_WAVE_PCM                    = MCI_WAVE_OFFSET + 0;
  3707.   {$EXTERNALSYM MCI_WAVE_MAPPER}
  3708.   MCI_WAVE_MAPPER                 = MCI_WAVE_OFFSET + 1;
  3709.  
  3710. { flags for the dwFlags parameter of MCI_OPEN command message }
  3711. const
  3712.   {$EXTERNALSYM MCI_WAVE_OPEN_BUFFER}
  3713.   MCI_WAVE_OPEN_BUFFER            = $00010000;
  3714.  
  3715. { flags for the dwFlags parameter of MCI_SET command message }
  3716. const
  3717.   {$EXTERNALSYM MCI_WAVE_SET_FORMATTAG}
  3718.   MCI_WAVE_SET_FORMATTAG          = $00010000;
  3719.   {$EXTERNALSYM MCI_WAVE_SET_CHANNELS}
  3720.   MCI_WAVE_SET_CHANNELS           = $00020000;
  3721.   {$EXTERNALSYM MCI_WAVE_SET_SAMPLESPERSEC}
  3722.   MCI_WAVE_SET_SAMPLESPERSEC      = $00040000;
  3723.   {$EXTERNALSYM MCI_WAVE_SET_AVGBYTESPERSEC}
  3724.   MCI_WAVE_SET_AVGBYTESPERSEC     = $00080000;
  3725.   {$EXTERNALSYM MCI_WAVE_SET_BLOCKALIGN}
  3726.   MCI_WAVE_SET_BLOCKALIGN         = $00100000;
  3727.   {$EXTERNALSYM MCI_WAVE_SET_BITSPERSAMPLE}
  3728.   MCI_WAVE_SET_BITSPERSAMPLE      = $00200000;
  3729.  
  3730. { flags for the dwFlags parameter of MCI_STATUS, MCI_SET command messages }
  3731. const
  3732.   {$EXTERNALSYM MCI_WAVE_INPUT}
  3733.   MCI_WAVE_INPUT                  = $00400000;
  3734.   {$EXTERNALSYM MCI_WAVE_OUTPUT}
  3735.   MCI_WAVE_OUTPUT                 = $00800000;
  3736.  
  3737. { flags for the dwItem field of MCI_STATUS_PARMS parameter block }
  3738. const
  3739.   {$EXTERNALSYM MCI_WAVE_STATUS_FORMATTAG}
  3740.   MCI_WAVE_STATUS_FORMATTAG       = $00004001;
  3741.   {$EXTERNALSYM MCI_WAVE_STATUS_CHANNELS}
  3742.   MCI_WAVE_STATUS_CHANNELS        = $00004002;
  3743.   {$EXTERNALSYM MCI_WAVE_STATUS_SAMPLESPERSEC}
  3744.   MCI_WAVE_STATUS_SAMPLESPERSEC   = $00004003;
  3745.   {$EXTERNALSYM MCI_WAVE_STATUS_AVGBYTESPERSEC}
  3746.   MCI_WAVE_STATUS_AVGBYTESPERSEC  = $00004004;
  3747.   {$EXTERNALSYM MCI_WAVE_STATUS_BLOCKALIGN}
  3748.   MCI_WAVE_STATUS_BLOCKALIGN      = $00004005;
  3749.   {$EXTERNALSYM MCI_WAVE_STATUS_BITSPERSAMPLE}
  3750.   MCI_WAVE_STATUS_BITSPERSAMPLE   = $00004006;
  3751.   {$EXTERNALSYM MCI_WAVE_STATUS_LEVEL}
  3752.   MCI_WAVE_STATUS_LEVEL           = $00004007;
  3753.  
  3754. { flags for the dwFlags parameter of MCI_SET command message }
  3755. const
  3756.   {$EXTERNALSYM MCI_WAVE_SET_ANYINPUT}
  3757.   MCI_WAVE_SET_ANYINPUT           = $04000000;
  3758.   {$EXTERNALSYM MCI_WAVE_SET_ANYOUTPUT}
  3759.   MCI_WAVE_SET_ANYOUTPUT          = $08000000;
  3760.  
  3761. { flags for the dwFlags parameter of MCI_GETDEVCAPS command message }
  3762. const
  3763.   {$EXTERNALSYM MCI_WAVE_GETDEVCAPS_INPUTS}
  3764.   MCI_WAVE_GETDEVCAPS_INPUTS      = $00004001;
  3765.   {$EXTERNALSYM MCI_WAVE_GETDEVCAPS_OUTPUTS}
  3766.   MCI_WAVE_GETDEVCAPS_OUTPUTS     = $00004002;
  3767.  
  3768. { parameter block for MCI_OPEN command message }
  3769. type
  3770.   PMCI_Wave_Open_ParmsA = ^TMCI_Wave_Open_ParmsA;
  3771.   PMCI_Wave_Open_ParmsW = ^TMCI_Wave_Open_ParmsW;
  3772.   PMCI_Wave_Open_Parms = PMCI_Wave_Open_ParmsA;
  3773.   {$EXTERNALSYM tagMCI_WAVE_OPEN_PARMSA}
  3774.   tagMCI_WAVE_OPEN_PARMSA = record
  3775.     dwCallback: DWORD;
  3776.     wDeviceID: MCIDEVICEID;
  3777.     lpstrDeviceType: PAnsiChar;
  3778.     lpstrElementName: PAnsiChar;
  3779.     lpstrAlias: PAnsiChar;
  3780.     dwBufferSeconds: DWORD;
  3781.   end;
  3782.   {$EXTERNALSYM tagMCI_WAVE_OPEN_PARMSW}
  3783.   tagMCI_WAVE_OPEN_PARMSW = record
  3784.     dwCallback: DWORD;
  3785.     wDeviceID: MCIDEVICEID;
  3786.     lpstrDeviceType: PWideChar;
  3787.     lpstrElementName: PWideChar;
  3788.     lpstrAlias: PWideChar;
  3789.     dwBufferSeconds: DWORD;
  3790.   end;
  3791.   {$EXTERNALSYM tagMCI_WAVE_OPEN_PARMS}
  3792.   tagMCI_WAVE_OPEN_PARMS = tagMCI_WAVE_OPEN_PARMSA;
  3793.   TMCI_Wave_Open_ParmsA = tagMCI_WAVE_OPEN_PARMSA;
  3794.   TMCI_Wave_Open_ParmsW = tagMCI_WAVE_OPEN_PARMSW;
  3795.   TMCI_Wave_Open_Parms = TMCI_Wave_Open_ParmsA;
  3796.   {$EXTERNALSYM MCI_WAVE_OPEN_PARMSA}
  3797.   MCI_WAVE_OPEN_PARMSA = tagMCI_WAVE_OPEN_PARMSA;
  3798.   {$EXTERNALSYM MCI_WAVE_OPEN_PARMSW}
  3799.   MCI_WAVE_OPEN_PARMSW = tagMCI_WAVE_OPEN_PARMSW;
  3800.   {$EXTERNALSYM MCI_WAVE_OPEN_PARMS}
  3801.   MCI_WAVE_OPEN_PARMS = MCI_WAVE_OPEN_PARMSA;
  3802.  
  3803. { parameter block for MCI_DELETE command message }
  3804. type
  3805.   PMCI_Wave_Delete_Parms = ^TMCI_Wave_Delete_Parms;
  3806.   {$EXTERNALSYM tagMCI_WAVE_DELETE_PARMS}
  3807.   tagMCI_WAVE_DELETE_PARMS = record
  3808.     dwCallback: DWORD;
  3809.     dwFrom: DWORD;
  3810.     dwTo: DWORD;
  3811.   end;
  3812.   TMCI_Wave_Delete_Parms = tagMCI_WAVE_DELETE_PARMS;
  3813.   {$EXTERNALSYM MCI_WAVE_DELETE_PARMS}
  3814.   MCI_WAVE_DELETE_PARMS = tagMCI_WAVE_DELETE_PARMS;
  3815.  
  3816. { parameter block for MCI_SET command message }
  3817. type
  3818.   PMCI_Wave_Set_Parms = ^TMCI_Wave_Set_Parms;
  3819.   {$EXTERNALSYM tagMCI_WAVE_SET_PARMS}
  3820.   tagMCI_WAVE_SET_PARMS = record
  3821.     dwCallback: DWORD;
  3822.     dwTimeFormat: DWORD;
  3823.     dwAudio: DWORD;
  3824.     wInput: UINT;
  3825.     wOutput: UINT;
  3826.     wFormatTag: Word;
  3827.     wReserved2: Word;
  3828.     nChannels: Word;
  3829.     wReserved3: Word;
  3830.     nSamplesPerSec: DWORD;
  3831.     nAvgBytesPerSec: DWORD;
  3832.     nBlockAlign: Word;
  3833.     wReserved4: Word;
  3834.     wBitsPerSample: Word;
  3835.     wReserved5: Word;
  3836.   end;
  3837.   TMCI_Wave_Set_Parms = tagMCI_WAVE_SET_PARMS;
  3838.   {$EXTERNALSYM MCI_WAVE_SET_PARMS}
  3839.   MCI_WAVE_SET_PARMS = tagMCI_WAVE_SET_PARMS;
  3840.  
  3841.  
  3842. { MCI extensions for MIDI sequencer devices }
  3843.  
  3844. { flags for the dwReturn field of MCI_STATUS_PARMS parameter block }
  3845. { MCI_STATUS command, (dwItem == MCI_SEQ_STATUS_DIVTYPE) }
  3846. const
  3847.   {$EXTERNALSYM MCI_SEQ_DIV_PPQN}
  3848.   MCI_SEQ_DIV_PPQN            = 0 + MCI_SEQ_OFFSET;
  3849.   {$EXTERNALSYM MCI_SEQ_DIV_SMPTE_24}
  3850.   MCI_SEQ_DIV_SMPTE_24        = 1 + MCI_SEQ_OFFSET;
  3851.   {$EXTERNALSYM MCI_SEQ_DIV_SMPTE_25}
  3852.   MCI_SEQ_DIV_SMPTE_25        = 2 + MCI_SEQ_OFFSET;
  3853.   {$EXTERNALSYM MCI_SEQ_DIV_SMPTE_30DROP}
  3854.   MCI_SEQ_DIV_SMPTE_30DROP    = 3 + MCI_SEQ_OFFSET;
  3855.   {$EXTERNALSYM MCI_SEQ_DIV_SMPTE_30}
  3856.   MCI_SEQ_DIV_SMPTE_30        = 4 + MCI_SEQ_OFFSET;
  3857.  
  3858. { flags for the dwMaster field of MCI_SEQ_SET_PARMS parameter block }
  3859. { MCI_SET command, (dwFlags == MCI_SEQ_SET_MASTER) }
  3860. const
  3861.   {$EXTERNALSYM MCI_SEQ_FORMAT_SONGPTR}
  3862.   MCI_SEQ_FORMAT_SONGPTR      = $4001;
  3863.   {$EXTERNALSYM MCI_SEQ_FILE}
  3864.   MCI_SEQ_FILE                = $4002;
  3865.   {$EXTERNALSYM MCI_SEQ_MIDI}
  3866.   MCI_SEQ_MIDI                = $4003;
  3867.   {$EXTERNALSYM MCI_SEQ_SMPTE}
  3868.   MCI_SEQ_SMPTE               = $4004;
  3869.   {$EXTERNALSYM MCI_SEQ_NONE}
  3870.   MCI_SEQ_NONE                = 65533;
  3871.   {$EXTERNALSYM MCI_SEQ_MAPPER}
  3872.   MCI_SEQ_MAPPER              = 65535;
  3873.  
  3874. { flags for the dwItem field of MCI_STATUS_PARMS parameter block }
  3875. const
  3876.   {$EXTERNALSYM MCI_SEQ_STATUS_TEMPO}
  3877.   MCI_SEQ_STATUS_TEMPO            = $00004002;
  3878.   {$EXTERNALSYM MCI_SEQ_STATUS_PORT}
  3879.   MCI_SEQ_STATUS_PORT             = $00004003;
  3880.   {$EXTERNALSYM MCI_SEQ_STATUS_SLAVE}
  3881.   MCI_SEQ_STATUS_SLAVE            = $00004007;
  3882.   {$EXTERNALSYM MCI_SEQ_STATUS_MASTER}
  3883.   MCI_SEQ_STATUS_MASTER           = $00004008;
  3884.   {$EXTERNALSYM MCI_SEQ_STATUS_OFFSET}
  3885.   MCI_SEQ_STATUS_OFFSET           = $00004009;
  3886.   {$EXTERNALSYM MCI_SEQ_STATUS_DIVTYPE}
  3887.   MCI_SEQ_STATUS_DIVTYPE          = $0000400A;
  3888.   {$EXTERNALSYM MCI_SEQ_STATUS_NAME}
  3889.   MCI_SEQ_STATUS_NAME             = $0000400B;
  3890.   {$EXTERNALSYM MCI_SEQ_STATUS_COPYRIGHT}
  3891.   MCI_SEQ_STATUS_COPYRIGHT        = $0000400C;
  3892.  
  3893. { flags for the dwFlags parameter of MCI_SET command message }
  3894. const
  3895.   {$EXTERNALSYM MCI_SEQ_SET_TEMPO}
  3896.   MCI_SEQ_SET_TEMPO               = $00010000;
  3897.   {$EXTERNALSYM MCI_SEQ_SET_PORT}
  3898.   MCI_SEQ_SET_PORT                = $00020000;
  3899.   {$EXTERNALSYM MCI_SEQ_SET_SLAVE}
  3900.   MCI_SEQ_SET_SLAVE               = $00040000;
  3901.   {$EXTERNALSYM MCI_SEQ_SET_MASTER}
  3902.   MCI_SEQ_SET_MASTER              = $00080000;
  3903.   {$EXTERNALSYM MCI_SEQ_SET_OFFSET}
  3904.   MCI_SEQ_SET_OFFSET              = $01000000;
  3905.  
  3906. { parameter block for MCI_SET command message }
  3907. type
  3908.   PMCI_Seq_Set_Parms = ^TMCI_Seq_Set_Parms;
  3909.   {$EXTERNALSYM tagMCI_SEQ_SET_PARMS}
  3910.   tagMCI_SEQ_SET_PARMS = record
  3911.     dwCallback: DWORD;
  3912.     dwTimeFormat: DWORD;
  3913.     dwAudio: DWORD;
  3914.     dwTempo: DWORD;
  3915.     dwPort: DWORD;
  3916.     dwSlave: DWORD;
  3917.     dwMaster: DWORD;
  3918.     dwOffset: DWORD;
  3919.   end;
  3920.   TMCI_Seq_Set_Parms = tagMCI_SEQ_SET_PARMS;
  3921.   {$EXTERNALSYM MCI_SEQ_SET_PARMS}
  3922.   MCI_SEQ_SET_PARMS = tagMCI_SEQ_SET_PARMS;
  3923.  
  3924. { MCI extensions for animation devices }
  3925.  
  3926. { flags for dwFlags parameter of MCI_OPEN command message }
  3927. const
  3928.   {$EXTERNALSYM MCI_ANIM_OPEN_WS}
  3929.   MCI_ANIM_OPEN_WS                = $00010000;
  3930.   {$EXTERNALSYM MCI_ANIM_OPEN_PARENT}
  3931.   MCI_ANIM_OPEN_PARENT            = $00020000;
  3932.   {$EXTERNALSYM MCI_ANIM_OPEN_NOSTATIC}
  3933.   MCI_ANIM_OPEN_NOSTATIC          = $00040000;
  3934.  
  3935. { flags for dwFlags parameter of MCI_PLAY command message }
  3936. const
  3937.   {$EXTERNALSYM MCI_ANIM_PLAY_SPEED}
  3938.   MCI_ANIM_PLAY_SPEED             = $00010000;
  3939.   {$EXTERNALSYM MCI_ANIM_PLAY_REVERSE}
  3940.   MCI_ANIM_PLAY_REVERSE           = $00020000;
  3941.   {$EXTERNALSYM MCI_ANIM_PLAY_FAST}
  3942.   MCI_ANIM_PLAY_FAST              = $00040000;
  3943.   {$EXTERNALSYM MCI_ANIM_PLAY_SLOW}
  3944.   MCI_ANIM_PLAY_SLOW              = $00080000;
  3945.   {$EXTERNALSYM MCI_ANIM_PLAY_SCAN}
  3946.   MCI_ANIM_PLAY_SCAN              = $00100000;
  3947.  
  3948. { flags for dwFlags parameter of MCI_STEP command message }
  3949. const
  3950.   {$EXTERNALSYM MCI_ANIM_STEP_REVERSE}
  3951.   MCI_ANIM_STEP_REVERSE           = $00010000;
  3952.   {$EXTERNALSYM MCI_ANIM_STEP_FRAMES}
  3953.   MCI_ANIM_STEP_FRAMES            = $00020000;
  3954.  
  3955. { flags for dwItem field of MCI_STATUS_PARMS parameter block }
  3956. const
  3957.   {$EXTERNALSYM MCI_ANIM_STATUS_SPEED}
  3958.   MCI_ANIM_STATUS_SPEED           = $00004001;
  3959.   {$EXTERNALSYM MCI_ANIM_STATUS_FORWARD}
  3960.   MCI_ANIM_STATUS_FORWARD         = $00004002;
  3961.   {$EXTERNALSYM MCI_ANIM_STATUS_HWND}
  3962.   MCI_ANIM_STATUS_HWND            = $00004003;
  3963.   {$EXTERNALSYM MCI_ANIM_STATUS_HPAL}
  3964.   MCI_ANIM_STATUS_HPAL            = $00004004;
  3965.   {$EXTERNALSYM MCI_ANIM_STATUS_STRETCH}
  3966.   MCI_ANIM_STATUS_STRETCH         = $00004005;
  3967.  
  3968. { flags for the dwFlags parameter of MCI_INFO command message }
  3969. const
  3970.   {$EXTERNALSYM MCI_ANIM_INFO_TEXT}
  3971.   MCI_ANIM_INFO_TEXT              = $00010000;
  3972.  
  3973. { flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block }
  3974. const
  3975.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_CAN_REVERSE}
  3976.   MCI_ANIM_GETDEVCAPS_CAN_REVERSE = $00004001;
  3977.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_FAST_RATE}
  3978.   MCI_ANIM_GETDEVCAPS_FAST_RATE   = $00004002;
  3979.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_SLOW_RATE}
  3980.   MCI_ANIM_GETDEVCAPS_SLOW_RATE   = $00004003;
  3981.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_NORMAL_RATE}
  3982.   MCI_ANIM_GETDEVCAPS_NORMAL_RATE = $00004004;
  3983.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_PALETTES}
  3984.   MCI_ANIM_GETDEVCAPS_PALETTES    = $00004006;
  3985.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_CAN_STRETCH}
  3986.   MCI_ANIM_GETDEVCAPS_CAN_STRETCH = $00004007;
  3987.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_MAX_WINDOWS}
  3988.   MCI_ANIM_GETDEVCAPS_MAX_WINDOWS = $00004008;
  3989.  
  3990. { flags for the MCI_REALIZE command message }
  3991. const
  3992.   {$EXTERNALSYM MCI_ANIM_REALIZE_NORM}
  3993.   MCI_ANIM_REALIZE_NORM           = $00010000;
  3994.   {$EXTERNALSYM MCI_ANIM_REALIZE_BKGD}
  3995.   MCI_ANIM_REALIZE_BKGD           = $00020000;
  3996.  
  3997. { flags for dwFlags parameter of MCI_WINDOW command message }
  3998. const
  3999.   {$EXTERNALSYM MCI_ANIM_WINDOW_HWND}
  4000.   MCI_ANIM_WINDOW_HWND            = $00010000;
  4001.   {$EXTERNALSYM MCI_ANIM_WINDOW_STATE}
  4002.   MCI_ANIM_WINDOW_STATE           = $00040000;
  4003.   {$EXTERNALSYM MCI_ANIM_WINDOW_TEXT}
  4004.   MCI_ANIM_WINDOW_TEXT            = $00080000;
  4005.   {$EXTERNALSYM MCI_ANIM_WINDOW_ENABLE_STRETCH}
  4006.   MCI_ANIM_WINDOW_ENABLE_STRETCH  = $00100000;
  4007.   {$EXTERNALSYM MCI_ANIM_WINDOW_DISABLE_STRETCH}
  4008.   MCI_ANIM_WINDOW_DISABLE_STRETCH = $00200000;
  4009.  
  4010. { flags for hWnd field of MCI_ANIM_WINDOW_PARMS parameter block }
  4011. { MCI_WINDOW command message, (dwFlags == MCI_ANIM_WINDOW_HWND) }
  4012. const
  4013.   {$EXTERNALSYM MCI_ANIM_WINDOW_DEFAULT}
  4014.   MCI_ANIM_WINDOW_DEFAULT         = $00000000;
  4015.  
  4016. { flags for dwFlags parameter of MCI_PUT command message }
  4017. const
  4018.   {$EXTERNALSYM MCI_ANIM_RECT}
  4019.   MCI_ANIM_RECT                   = $00010000;
  4020.   {$EXTERNALSYM MCI_ANIM_PUT_SOURCE}
  4021.   MCI_ANIM_PUT_SOURCE             = $00020000;
  4022.   {$EXTERNALSYM MCI_ANIM_PUT_DESTINATION}
  4023.   MCI_ANIM_PUT_DESTINATION        = $00040000;
  4024.  
  4025. { flags for dwFlags parameter of MCI_WHERE command message }
  4026. const
  4027.   {$EXTERNALSYM MCI_ANIM_WHERE_SOURCE}
  4028.   MCI_ANIM_WHERE_SOURCE           = $00020000;
  4029.   {$EXTERNALSYM MCI_ANIM_WHERE_DESTINATION}
  4030.   MCI_ANIM_WHERE_DESTINATION      = $00040000;
  4031.  
  4032. { flags for dwFlags parameter of MCI_UPDATE command message }
  4033. const
  4034.   {$EXTERNALSYM MCI_ANIM_UPDATE_HDC}
  4035.   MCI_ANIM_UPDATE_HDC             = $00020000;
  4036.  
  4037. { parameter block for MCI_OPEN command message }
  4038. type
  4039.   PMCI_Anim_Open_ParmsA = ^TMCI_Anim_Open_ParmsA;
  4040.   PMCI_Anim_Open_ParmsW = ^TMCI_Anim_Open_ParmsW;
  4041.   PMCI_Anim_Open_Parms = PMCI_Anim_Open_ParmsA;
  4042.   {$EXTERNALSYM tagMCI_ANIM_OPEN_PARMSA}
  4043.   tagMCI_ANIM_OPEN_PARMSA = record
  4044.     dwCallback: DWORD;
  4045.     wDeviceID: MCIDEVICEID;
  4046.     lpstrDeviceType: PAnsiChar;
  4047.     lpstrElementName: PAnsiChar;
  4048.     lpstrAlias: PAnsiChar;
  4049.     dwStyle: DWORD;
  4050.     hWndParent: HWND;
  4051.   end;
  4052.   {$EXTERNALSYM tagMCI_ANIM_OPEN_PARMSW}
  4053.   tagMCI_ANIM_OPEN_PARMSW = record
  4054.     dwCallback: DWORD;
  4055.     wDeviceID: MCIDEVICEID;
  4056.     lpstrDeviceType: PWideChar;
  4057.     lpstrElementName: PWideChar;
  4058.     lpstrAlias: PWideChar;
  4059.     dwStyle: DWORD;
  4060.     hWndParent: HWND;
  4061.   end;
  4062.   {$EXTERNALSYM tagMCI_ANIM_OPEN_PARMS}
  4063.   tagMCI_ANIM_OPEN_PARMS = tagMCI_ANIM_OPEN_PARMSA;
  4064.   TMCI_Anim_Open_ParmsA = tagMCI_ANIM_OPEN_PARMSA;
  4065.   TMCI_Anim_Open_ParmsW = tagMCI_ANIM_OPEN_PARMSW;
  4066.   TMCI_Anim_Open_Parms = TMCI_Anim_Open_ParmsA;
  4067.   {$EXTERNALSYM MCI_ANIM_OPEN_PARMSA}
  4068.   MCI_ANIM_OPEN_PARMSA = tagMCI_ANIM_OPEN_PARMSA;
  4069.   {$EXTERNALSYM MCI_ANIM_OPEN_PARMSW}
  4070.   MCI_ANIM_OPEN_PARMSW = tagMCI_ANIM_OPEN_PARMSW;
  4071.   {$EXTERNALSYM MCI_ANIM_OPEN_PARMS}
  4072.   MCI_ANIM_OPEN_PARMS = MCI_ANIM_OPEN_PARMSA;
  4073.  
  4074. { parameter block for MCI_PLAY command message }
  4075. type
  4076.   PMCI_Anim_Play_Parms = ^TMCI_Anim_Play_Parms;
  4077.   {$EXTERNALSYM tagMCI_ANIM_PLAY_PARMS}
  4078.   tagMCI_ANIM_PLAY_PARMS = record
  4079.     dwCallback: DWORD;
  4080.     dwFrom: DWORD;
  4081.     dwTo: DWORD;
  4082.     dwSpeed: DWORD;
  4083.   end;
  4084.   TMCI_Anim_Play_Parms = tagMCI_ANIM_PLAY_PARMS;
  4085.   {$EXTERNALSYM MCI_ANIM_PLAY_PARMS}
  4086.   MCI_ANIM_PLAY_PARMS = tagMCI_ANIM_PLAY_PARMS;
  4087.  
  4088. { parameter block for MCI_STEP command message }
  4089. type
  4090.   PMCI_Anim_Step_Parms = ^TMCI_Anim_Step_Parms;
  4091.   {$EXTERNALSYM tagMCI_ANIM_STEP_PARMS}
  4092.   tagMCI_ANIM_STEP_PARMS = record
  4093.     dwCallback: DWORD;
  4094.     dwFrames: DWORD;
  4095.   end;
  4096.   TMCI_Anim_Step_Parms = tagMCI_ANIM_STEP_PARMS;
  4097.   {$EXTERNALSYM MCI_ANIM_STEP_PARMS}
  4098.   MCI_ANIM_STEP_PARMS = tagMCI_ANIM_STEP_PARMS;
  4099.  
  4100. { parameter block for MCI_WINDOW command message }
  4101. type
  4102.   PMCI_Anim_Window_ParmsA = ^TMCI_Anim_Window_ParmsA;
  4103.   PMCI_Anim_Window_ParmsW = ^TMCI_Anim_Window_ParmsW;
  4104.   PMCI_Anim_Window_Parms = PMCI_Anim_Window_ParmsA;
  4105.   {$EXTERNALSYM tagMCI_ANIM_WINDOW_PARMSA}
  4106.   tagMCI_ANIM_WINDOW_PARMSA = record
  4107.     dwCallback: DWORD;
  4108.     Wnd: HWND;  { formerly "hWnd" }
  4109.     nCmdShow: UINT;
  4110.     lpstrText: PAnsiChar;
  4111.   end;
  4112.   {$EXTERNALSYM tagMCI_ANIM_WINDOW_PARMSW}
  4113.   tagMCI_ANIM_WINDOW_PARMSW = record
  4114.     dwCallback: DWORD;
  4115.     Wnd: HWND;  { formerly "hWnd" }
  4116.     nCmdShow: UINT;
  4117.     lpstrText: PWideChar;
  4118.   end;
  4119.   {$EXTERNALSYM tagMCI_ANIM_WINDOW_PARMS}
  4120.   tagMCI_ANIM_WINDOW_PARMS = tagMCI_ANIM_WINDOW_PARMSA;
  4121.   TMCI_Anim_Window_ParmsA = tagMCI_ANIM_WINDOW_PARMSA;
  4122.   TMCI_Anim_Window_ParmsW = tagMCI_ANIM_WINDOW_PARMSW;
  4123.   TMCI_Anim_Window_Parms = TMCI_Anim_Window_ParmsA;
  4124.   {$EXTERNALSYM MCI_ANIM_WINDOW_PARMSA}
  4125.   MCI_ANIM_WINDOW_PARMSA = tagMCI_ANIM_WINDOW_PARMSA;
  4126.   {$EXTERNALSYM MCI_ANIM_WINDOW_PARMSW}
  4127.   MCI_ANIM_WINDOW_PARMSW = tagMCI_ANIM_WINDOW_PARMSW;
  4128.   {$EXTERNALSYM MCI_ANIM_WINDOW_PARMS}
  4129.   MCI_ANIM_WINDOW_PARMS = MCI_ANIM_WINDOW_PARMSA;
  4130.  
  4131. { parameter block for MCI_PUT, MCI_UPDATE, MCI_WHERE command messages }
  4132. type
  4133.   PMCI_Anim_Rect_Parms = ^ TMCI_Anim_Rect_Parms;
  4134.   {$EXTERNALSYM tagMCI_ANIM_RECT_PARMS}
  4135.   tagMCI_ANIM_RECT_PARMS = record
  4136.     dwCallback: DWORD;
  4137.     rc: TRect;
  4138.   end;
  4139.   TMCI_Anim_Rect_Parms = tagMCI_ANIM_RECT_PARMS;
  4140.   {$EXTERNALSYM MCI_ANIM_RECT_PARMS}
  4141.   MCI_ANIM_RECT_PARMS = tagMCI_ANIM_RECT_PARMS;
  4142.  
  4143. { parameter block for MCI_UPDATE PARMS }
  4144. type
  4145.   PMCI_Anim_Update_Parms = ^TMCI_Anim_Update_Parms;
  4146.   {$EXTERNALSYM tagMCI_ANIM_UPDATE_PARMS}
  4147.   tagMCI_ANIM_UPDATE_PARMS = record
  4148.     dwCallback: DWORD;
  4149.     rc: TRect;
  4150.     hDC: HDC;
  4151.   end;
  4152.   TMCI_Anim_Update_Parms = tagMCI_ANIM_UPDATE_PARMS;
  4153.   {$EXTERNALSYM MCI_ANIM_UPDATE_PARMS}
  4154.   MCI_ANIM_UPDATE_PARMS = tagMCI_ANIM_UPDATE_PARMS;
  4155.  
  4156. { MCI extensions for video overlay devices }
  4157.  
  4158. { flags for dwFlags parameter of MCI_OPEN command message }
  4159. const
  4160.   {$EXTERNALSYM MCI_OVLY_OPEN_WS}
  4161.   MCI_OVLY_OPEN_WS                = $00010000;
  4162.   {$EXTERNALSYM MCI_OVLY_OPEN_PARENT}
  4163.   MCI_OVLY_OPEN_PARENT            = $00020000;
  4164.  
  4165. { flags for dwFlags parameter of MCI_STATUS command message }
  4166. const
  4167.   {$EXTERNALSYM MCI_OVLY_STATUS_HWND}
  4168.   MCI_OVLY_STATUS_HWND            = $00004001;
  4169.   {$EXTERNALSYM MCI_OVLY_STATUS_STRETCH}
  4170.   MCI_OVLY_STATUS_STRETCH         = $00004002;
  4171.  
  4172. { flags for dwFlags parameter of MCI_INFO command message }
  4173. const
  4174.   {$EXTERNALSYM MCI_OVLY_INFO_TEXT}
  4175.   MCI_OVLY_INFO_TEXT              = $00010000;
  4176.  
  4177. { flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block }
  4178. const
  4179.   {$EXTERNALSYM MCI_OVLY_GETDEVCAPS_CAN_STRETCH}
  4180.   MCI_OVLY_GETDEVCAPS_CAN_STRETCH = $00004001;
  4181.   {$EXTERNALSYM MCI_OVLY_GETDEVCAPS_CAN_FREEZE}
  4182.   MCI_OVLY_GETDEVCAPS_CAN_FREEZE  = $00004002;
  4183.   {$EXTERNALSYM MCI_OVLY_GETDEVCAPS_MAX_WINDOWS}
  4184.   MCI_OVLY_GETDEVCAPS_MAX_WINDOWS = $00004003;
  4185.  
  4186. { flags for dwFlags parameter of MCI_WINDOW command message }
  4187. const
  4188.   {$EXTERNALSYM MCI_OVLY_WINDOW_HWND}
  4189.   MCI_OVLY_WINDOW_HWND            = $00010000;
  4190.   {$EXTERNALSYM MCI_OVLY_WINDOW_STATE}
  4191.   MCI_OVLY_WINDOW_STATE           = $00040000;
  4192.   {$EXTERNALSYM MCI_OVLY_WINDOW_TEXT}
  4193.   MCI_OVLY_WINDOW_TEXT            = $00080000;
  4194.   {$EXTERNALSYM MCI_OVLY_WINDOW_ENABLE_STRETCH}
  4195.   MCI_OVLY_WINDOW_ENABLE_STRETCH  = $00100000;
  4196.   {$EXTERNALSYM MCI_OVLY_WINDOW_DISABLE_STRETCH}
  4197.   MCI_OVLY_WINDOW_DISABLE_STRETCH = $00200000;
  4198.  
  4199. { flags for hWnd parameter of MCI_OVLY_WINDOW_PARMS parameter block }
  4200. const
  4201.   {$EXTERNALSYM MCI_OVLY_WINDOW_DEFAULT}
  4202.   MCI_OVLY_WINDOW_DEFAULT         = $00000000;
  4203.  
  4204. { flags for dwFlags parameter of MCI_PUT command message }
  4205. const
  4206.   {$EXTERNALSYM MCI_OVLY_RECT}
  4207.   MCI_OVLY_RECT                   = $00010000;
  4208.   {$EXTERNALSYM MCI_OVLY_PUT_SOURCE}
  4209.   MCI_OVLY_PUT_SOURCE             = $00020000;
  4210.   {$EXTERNALSYM MCI_OVLY_PUT_DESTINATION}
  4211.   MCI_OVLY_PUT_DESTINATION        = $00040000;
  4212.   {$EXTERNALSYM MCI_OVLY_PUT_FRAME}
  4213.   MCI_OVLY_PUT_FRAME              = $00080000;
  4214.   {$EXTERNALSYM MCI_OVLY_PUT_VIDEO}
  4215.   MCI_OVLY_PUT_VIDEO              = $00100000;
  4216.  
  4217. { flags for dwFlags parameter of MCI_WHERE command message }
  4218. const
  4219.   {$EXTERNALSYM MCI_OVLY_WHERE_SOURCE}
  4220.   MCI_OVLY_WHERE_SOURCE           = $00020000;
  4221.   {$EXTERNALSYM MCI_OVLY_WHERE_DESTINATION}
  4222.   MCI_OVLY_WHERE_DESTINATION      = $00040000;
  4223.   {$EXTERNALSYM MCI_OVLY_WHERE_FRAME}
  4224.   MCI_OVLY_WHERE_FRAME            = $00080000;
  4225.   {$EXTERNALSYM MCI_OVLY_WHERE_VIDEO}
  4226.   MCI_OVLY_WHERE_VIDEO            = $00100000;
  4227.  
  4228. { parameter block for MCI_OPEN command message }
  4229. type
  4230.   PMCI_Ovly_Open_ParmsA = ^TMCI_Ovly_Open_ParmsA;
  4231.   PMCI_Ovly_Open_ParmsW = ^TMCI_Ovly_Open_ParmsW;
  4232.   PMCI_Ovly_Open_Parms = PMCI_Ovly_Open_ParmsA;
  4233.   {$EXTERNALSYM tagMCI_OVLY_OPEN_PARMSA}
  4234.   tagMCI_OVLY_OPEN_PARMSA = record
  4235.     dwCallback: DWORD;
  4236.     wDeviceID: MCIDEVICEID;
  4237.     lpstrDeviceType: PAnsiChar;
  4238.     lpstrElementName: PAnsiChar;
  4239.     lpstrAlias: PAnsiChar;
  4240.     dwStyle: DWORD;
  4241.     hWndParent: HWND;
  4242.   end;
  4243.   {$EXTERNALSYM tagMCI_OVLY_OPEN_PARMSW}
  4244.   tagMCI_OVLY_OPEN_PARMSW = record
  4245.     dwCallback: DWORD;
  4246.     wDeviceID: MCIDEVICEID;
  4247.     lpstrDeviceType: PWideChar;
  4248.     lpstrElementName: PWideChar;
  4249.     lpstrAlias: PWideChar;
  4250.     dwStyle: DWORD;
  4251.     hWndParent: HWND;
  4252.   end;
  4253.   {$EXTERNALSYM tagMCI_OVLY_OPEN_PARMS}
  4254.   tagMCI_OVLY_OPEN_PARMS = tagMCI_OVLY_OPEN_PARMSA;
  4255.   TMCI_Ovly_Open_ParmsA = tagMCI_OVLY_OPEN_PARMSA;
  4256.   TMCI_Ovly_Open_ParmsW = tagMCI_OVLY_OPEN_PARMSW;
  4257.   TMCI_Ovly_Open_Parms = TMCI_Ovly_Open_ParmsA;
  4258.   {$EXTERNALSYM MCI_OVLY_OPEN_PARMSA}
  4259.   MCI_OVLY_OPEN_PARMSA = tagMCI_OVLY_OPEN_PARMSA;
  4260.   {$EXTERNALSYM MCI_OVLY_OPEN_PARMSW}
  4261.   MCI_OVLY_OPEN_PARMSW = tagMCI_OVLY_OPEN_PARMSW;
  4262.   {$EXTERNALSYM MCI_OVLY_OPEN_PARMS}
  4263.   MCI_OVLY_OPEN_PARMS = MCI_OVLY_OPEN_PARMSA;
  4264.  
  4265. { parameter block for MCI_WINDOW command message }
  4266. type
  4267.   PMCI_Ovly_Window_ParmsA = ^TMCI_Ovly_Window_ParmsA;
  4268.   PMCI_Ovly_Window_ParmsW = ^TMCI_Ovly_Window_ParmsW;
  4269.   PMCI_Ovly_Window_Parms = PMCI_Ovly_Window_ParmsA;
  4270.   {$EXTERNALSYM tagMCI_OVLY_WINDOW_PARMSA}
  4271.   tagMCI_OVLY_WINDOW_PARMSA = record
  4272.     dwCallback: DWORD;
  4273.     WHandle: HWND; { formerly "hWnd"}
  4274.     nCmdShow: UINT;
  4275.     lpstrText: PAnsiChar;
  4276.   end;
  4277.   {$EXTERNALSYM tagMCI_OVLY_WINDOW_PARMSW}
  4278.   tagMCI_OVLY_WINDOW_PARMSW = record
  4279.     dwCallback: DWORD;
  4280.     WHandle: HWND; { formerly "hWnd"}
  4281.     nCmdShow: UINT;
  4282.     lpstrText: PWideChar;
  4283.   end;
  4284.   {$EXTERNALSYM tagMCI_OVLY_WINDOW_PARMS}
  4285.   tagMCI_OVLY_WINDOW_PARMS = tagMCI_OVLY_WINDOW_PARMSA;
  4286.   TMCI_Ovly_Window_ParmsA = tagMCI_OVLY_WINDOW_PARMSA;
  4287.   TMCI_Ovly_Window_ParmsW = tagMCI_OVLY_WINDOW_PARMSW;
  4288.   TMCI_Ovly_Window_Parms = TMCI_Ovly_Window_ParmsA;
  4289.   {$EXTERNALSYM MCI_OVLY_WINDOW_PARMSA}
  4290.   MCI_OVLY_WINDOW_PARMSA = tagMCI_OVLY_WINDOW_PARMSA;
  4291.   {$EXTERNALSYM MCI_OVLY_WINDOW_PARMSW}
  4292.   MCI_OVLY_WINDOW_PARMSW = tagMCI_OVLY_WINDOW_PARMSW;
  4293.   {$EXTERNALSYM MCI_OVLY_WINDOW_PARMS}
  4294.   MCI_OVLY_WINDOW_PARMS = MCI_OVLY_WINDOW_PARMSA;
  4295.  
  4296. { parameter block for MCI_PUT, MCI_UPDATE, and MCI_WHERE command messages }
  4297. type
  4298.   PMCI_Ovly_Rect_Parms = ^ TMCI_Ovly_Rect_Parms;
  4299.   {$EXTERNALSYM tagMCI_OVLY_RECT_PARMS}
  4300.   tagMCI_OVLY_RECT_PARMS = record
  4301.     dwCallback: DWORD;
  4302.     rc: TRect;
  4303.   end;
  4304.   TMCI_Ovly_Rect_Parms = tagMCI_OVLY_RECT_PARMS;
  4305.   {$EXTERNALSYM MCI_OVLY_RECT_PARMS}
  4306.   MCI_OVLY_RECT_PARMS = tagMCI_OVLY_RECT_PARMS;
  4307.  
  4308. { parameter block for MCI_SAVE command message }
  4309. type
  4310.   PMCI_Ovly_Save_ParmsA = ^TMCI_Ovly_Save_ParmsA;
  4311.   PMCI_Ovly_Save_ParmsW = ^TMCI_Ovly_Save_ParmsW;
  4312.   PMCI_Ovly_Save_Parms = PMCI_Ovly_Save_ParmsA;
  4313.   {$EXTERNALSYM tagMCI_OVLY_SAVE_PARMSA}
  4314.   tagMCI_OVLY_SAVE_PARMSA = record
  4315.     dwCallback: DWORD;
  4316.     lpfilename: PAnsiChar;
  4317.     rc: TRect;
  4318.   end;
  4319.   {$EXTERNALSYM tagMCI_OVLY_SAVE_PARMSW}
  4320.   tagMCI_OVLY_SAVE_PARMSW = record
  4321.     dwCallback: DWORD;
  4322.     lpfilename: PWideChar;
  4323.     rc: TRect;
  4324.   end;
  4325.   {$EXTERNALSYM tagMCI_OVLY_SAVE_PARMS}
  4326.   tagMCI_OVLY_SAVE_PARMS = tagMCI_OVLY_SAVE_PARMSA;
  4327.   TMCI_Ovly_Save_ParmsA = tagMCI_OVLY_SAVE_PARMSA;
  4328.   TMCI_Ovly_Save_ParmsW = tagMCI_OVLY_SAVE_PARMSW;
  4329.   TMCI_Ovly_Save_Parms = TMCI_Ovly_Save_ParmsA;
  4330.   {$EXTERNALSYM MCI_OVLY_SAVE_PARMSA}
  4331.   MCI_OVLY_SAVE_PARMSA = tagMCI_OVLY_SAVE_PARMSA;
  4332.   {$EXTERNALSYM MCI_OVLY_SAVE_PARMSW}
  4333.   MCI_OVLY_SAVE_PARMSW = tagMCI_OVLY_SAVE_PARMSW;
  4334.   {$EXTERNALSYM MCI_OVLY_SAVE_PARMS}
  4335.   MCI_OVLY_SAVE_PARMS = MCI_OVLY_SAVE_PARMSA;
  4336.  
  4337. { parameter block for MCI_LOAD command message }
  4338. type
  4339.   PMCI_Ovly_Load_ParmsA = ^TMCI_Ovly_Load_ParmsA;
  4340.   PMCI_Ovly_Load_ParmsW = ^TMCI_Ovly_Load_ParmsW;
  4341.   PMCI_Ovly_Load_Parms = PMCI_Ovly_Load_ParmsA;
  4342.   {$EXTERNALSYM tagMCI_OVLY_LOAD_PARMSA}
  4343.   tagMCI_OVLY_LOAD_PARMSA = record
  4344.     dwCallback: DWORD;
  4345.     lpfilename: PAnsiChar;
  4346.     rc: TRect;
  4347.   end;
  4348.   {$EXTERNALSYM tagMCI_OVLY_LOAD_PARMSW}
  4349.   tagMCI_OVLY_LOAD_PARMSW = record
  4350.     dwCallback: DWORD;
  4351.     lpfilename: PWideChar;
  4352.     rc: TRect;
  4353.   end;
  4354.   {$EXTERNALSYM tagMCI_OVLY_LOAD_PARMS}
  4355.   tagMCI_OVLY_LOAD_PARMS = tagMCI_OVLY_LOAD_PARMSA;
  4356.   TMCI_Ovly_Load_ParmsA = tagMCI_OVLY_LOAD_PARMSA;
  4357.   TMCI_Ovly_Load_ParmsW = tagMCI_OVLY_LOAD_PARMSW;
  4358.   TMCI_Ovly_Load_Parms = TMCI_Ovly_Load_ParmsA;
  4359.   {$EXTERNALSYM MCI_OVLY_LOAD_PARMSA}
  4360.   MCI_OVLY_LOAD_PARMSA = tagMCI_OVLY_LOAD_PARMSA;
  4361.   {$EXTERNALSYM MCI_OVLY_LOAD_PARMSW}
  4362.   MCI_OVLY_LOAD_PARMSW = tagMCI_OVLY_LOAD_PARMSW;
  4363.   {$EXTERNALSYM MCI_OVLY_LOAD_PARMS}
  4364.   MCI_OVLY_LOAD_PARMS = MCI_OVLY_LOAD_PARMSA;
  4365.  
  4366.  
  4367. {***************************************************************************
  4368.  
  4369.                         DISPLAY Driver extensions
  4370.  
  4371. ***************************************************************************}
  4372.  
  4373. const
  4374.   {$EXTERNALSYM NEWTRANSPARENT}
  4375.   NEWTRANSPARENT  = 3;           { use with SetBkMode() }
  4376.   {$EXTERNALSYM QUERYROPSUPPORT}
  4377.   QUERYROPSUPPORT = 40;          { use to determine ROP support }
  4378.  
  4379. {***************************************************************************
  4380.  
  4381.                         DIB Driver extensions
  4382.  
  4383. ***************************************************************************}
  4384. const
  4385.   {$EXTERNALSYM SELECTDIB}
  4386.   SELECTDIB       = 41;                      { DIB.DRV select dib escape }
  4387.  
  4388. function DIBIndex(N: Integer): Longint;
  4389.  
  4390. {***************************************************************************
  4391.  
  4392.                         ScreenSaver support
  4393.  
  4394.     The current application will receive a syscommand of SC_SCREENSAVE just
  4395.     before the screen saver is invoked.  If the app wishes to prevent a
  4396.     screen save, return a non-zero value, otherwise call DefWindowProc().
  4397.  
  4398. ***************************************************************************}
  4399.  
  4400. const
  4401.   {$EXTERNALSYM SC_SCREENSAVE}
  4402.   SC_SCREENSAVE   = $F140;
  4403.  
  4404.   mmsyst = 'winmm.dll';
  4405.  
  4406. implementation
  4407.  
  4408. function auxGetDevCapsA; external mmsyst name 'auxGetDevCapsA';
  4409. function auxGetDevCapsW; external mmsyst name 'auxGetDevCapsW';
  4410. function auxGetDevCaps; external mmsyst name 'auxGetDevCapsA';
  4411. function auxGetNumDevs; external mmsyst name 'auxGetNumDevs';
  4412. function auxGetVolume; external mmsyst name 'auxGetVolume';
  4413. function auxOutMessage; external mmsyst name 'auxOutMessage';
  4414. function auxSetVolume; external mmsyst name 'auxSetVolume';
  4415. function CloseDriver; external mmsyst name 'CloseDriver';
  4416. function DefDriverProc; external mmsyst name 'DefDriverProc';
  4417. function DrvGetModuleHandle; external mmsyst name 'DrvGetModuleHandle';
  4418. function GetDriverModuleHandle; external mmsyst name 'GetDriverModuleHandle';
  4419. function joyGetDevCapsA; external mmsyst name 'joyGetDevCapsA';
  4420. function joyGetDevCapsW; external mmsyst name 'joyGetDevCapsW';
  4421. function joyGetDevCaps; external mmsyst name 'joyGetDevCapsA';
  4422. function joyGetNumDevs; external mmsyst name 'joyGetNumDevs';
  4423. function joyGetPos; external mmsyst name 'joyGetPos';
  4424. function joyGetPosEx; external mmsyst name 'joyGetPosEx';
  4425. function joyGetThreshold; external mmsyst name 'joyGetThreshold';
  4426. function joyReleaseCapture; external mmsyst name 'joyReleaseCapture';
  4427. function joySetCapture; external mmsyst name 'joySetCapture';
  4428. function joySetThreshold; external mmsyst name 'joySetThreshold';
  4429. function mciExecute; external mmsyst name 'mciExecute';
  4430. function mciGetCreatorTask; external mmsyst name 'mciGetCreatorTask';
  4431. function mciGetDeviceIDA; external mmsyst name 'mciGetDeviceIDA';
  4432. function mciGetDeviceIDW; external mmsyst name 'mciGetDeviceIDW';
  4433. function mciGetDeviceID; external mmsyst name 'mciGetDeviceIDA';
  4434. function mciGetDeviceIDFromElementIDA; external mmsyst name 'mciGetDeviceIDFromElementIDA';
  4435. function mciGetDeviceIDFromElementIDW; external mmsyst name 'mciGetDeviceIDFromElementIDW';
  4436. function mciGetDeviceIDFromElementID; external mmsyst name 'mciGetDeviceIDFromElementIDA';
  4437. function mciGetErrorStringA; external mmsyst name 'mciGetErrorStringA';
  4438. function mciGetErrorStringW; external mmsyst name 'mciGetErrorStringW';
  4439. function mciGetErrorString; external mmsyst name 'mciGetErrorStringA';
  4440. function mciGetYieldProc; external mmsyst name 'mciGetYieldProc';
  4441. function mciSendCommandA; external mmsyst name 'mciSendCommandA';
  4442. function mciSendCommandW; external mmsyst name 'mciSendCommandW';
  4443. function mciSendCommand; external mmsyst name 'mciSendCommandA';
  4444. function mciSendStringA; external mmsyst name 'mciSendStringA';
  4445. function mciSendStringW; external mmsyst name 'mciSendStringW';
  4446. function mciSendString; external mmsyst name 'mciSendStringA';
  4447. function mciSetYieldProc; external mmsyst name 'mciSetYieldProc';
  4448. function midiConnect; external mmsyst name 'midiConnect';
  4449. function midiDisconnect; external mmsyst name 'midiDisconnect';
  4450. function midiInAddBuffer; external mmsyst name 'midiInAddBuffer';
  4451. function midiInClose; external mmsyst name 'midiInClose';
  4452. function midiInGetDevCapsA; external mmsyst name 'midiInGetDevCapsA';
  4453. function midiInGetDevCapsW; external mmsyst name 'midiInGetDevCapsW';
  4454. function midiInGetDevCaps; external mmsyst name 'midiInGetDevCapsA';
  4455. function midiInGetErrorTextA; external mmsyst name 'midiInGetErrorTextA';
  4456. function midiInGetErrorTextW; external mmsyst name 'midiInGetErrorTextW';
  4457. function midiInGetErrorText; external mmsyst name 'midiInGetErrorTextA';
  4458. function midiInGetID; external mmsyst name 'midiInGetID';
  4459. function midiInGetNumDevs; external mmsyst name 'midiInGetNumDevs';
  4460. function midiInMessage; external mmsyst name 'midiInMessage';
  4461. function midiInOpen; external mmsyst name 'midiInOpen';
  4462. function midiInPrepareHeader; external mmsyst name 'midiInPrepareHeader';
  4463. function midiInReset; external mmsyst name 'midiInReset';
  4464. function midiInStart; external mmsyst name 'midiInStart';
  4465. function midiInStop; external mmsyst name 'midiInStop';
  4466. function midiInUnprepareHeader; external mmsyst name 'midiInUnprepareHeader';
  4467. function midiOutCacheDrumPatches; external mmsyst name 'midiOutCacheDrumPatches';
  4468. function midiOutCachePatches; external mmsyst name 'midiOutCachePatches';
  4469. function midiOutClose; external mmsyst name 'midiOutClose';
  4470. function midiOutGetDevCapsA; external mmsyst name 'midiOutGetDevCapsA';
  4471. function midiOutGetDevCapsW; external mmsyst name 'midiOutGetDevCapsW';
  4472. function midiOutGetDevCaps; external mmsyst name 'midiOutGetDevCapsA';
  4473. function midiOutGetErrorTextA; external mmsyst name 'midiOutGetErrorTextA';
  4474. function midiOutGetErrorTextW; external mmsyst name 'midiOutGetErrorTextW';
  4475. function midiOutGetErrorText; external mmsyst name 'midiOutGetErrorTextA';
  4476. function midiOutGetID; external mmsyst name 'midiOutGetID';
  4477. function midiOutGetNumDevs; external mmsyst name 'midiOutGetNumDevs';
  4478. function midiOutGetVolume; external mmsyst name 'midiOutGetVolume';
  4479. function midiOutLongMsg; external mmsyst name 'midiOutLongMsg';
  4480. function midiOutMessage; external mmsyst name 'midiOutMessage';
  4481. function midiOutOpen; external mmsyst name 'midiOutOpen';
  4482. function midiOutPrepareHeader; external mmsyst name 'midiOutPrepareHeader';
  4483. function midiOutReset; external mmsyst name 'midiOutReset';
  4484. function midiOutSetVolume; external mmsyst name 'midiOutSetVolume';
  4485. function midiOutShortMsg; external mmsyst name 'midiOutShortMsg';
  4486. function midiOutUnprepareHeader; external mmsyst name 'midiOutUnprepareHeader';
  4487. function midiStreamClose; external mmsyst name 'midiStreamClose';
  4488. function midiStreamOpen; external mmsyst name 'midiStreamOpen';
  4489. function midiStreamOut; external mmsyst name 'midiStreamOut';
  4490. function midiStreamPause; external mmsyst name 'midiStreamPause';
  4491. function midiStreamPosition; external mmsyst name 'midiStreamPosition';
  4492. function midiStreamProperty; external mmsyst name 'midiStreamProperty';
  4493. function midiStreamRestart; external mmsyst name 'midiStreamRestart';
  4494. function midiStreamStop; external mmsyst name 'midiStreamStop';
  4495. function mixerClose; external mmsyst name 'mixerClose';
  4496. function mixerGetControlDetailsA; external mmsyst name 'mixerGetControlDetailsA';
  4497. function mixerGetControlDetailsW; external mmsyst name 'mixerGetControlDetailsW';
  4498. function mixerGetControlDetails; external mmsyst name 'mixerGetControlDetailsA';
  4499. function mixerGetDevCapsA; external mmsyst name 'mixerGetDevCapsA';
  4500. function mixerGetDevCapsW; external mmsyst name 'mixerGetDevCapsW';
  4501. function mixerGetDevCaps; external mmsyst name 'mixerGetDevCapsA';
  4502. function mixerGetID; external mmsyst name 'mixerGetID';
  4503. function mixerGetLineControlsA; external mmsyst name 'mixerGetLineControlsA';
  4504. function mixerGetLineControlsW; external mmsyst name 'mixerGetLineControlsW';
  4505. function mixerGetLineControls; external mmsyst name 'mixerGetLineControlsA';
  4506. function mixerGetLineInfoA; external mmsyst name 'mixerGetLineInfoA';
  4507. function mixerGetLineInfoW; external mmsyst name 'mixerGetLineInfoW';
  4508. function mixerGetLineInfo; external mmsyst name 'mixerGetLineInfoA';
  4509. function mixerGetNumDevs; external mmsyst name 'mixerGetNumDevs';
  4510. function mixerMessage; external mmsyst name 'mixerMessage';
  4511. function mixerOpen; external mmsyst name 'mixerOpen';
  4512. function mixerSetControlDetails; external mmsyst name 'mixerSetControlDetails';
  4513. function mmioAdvance; external mmsyst name 'mmioAdvance';
  4514. function mmioAscend; external mmsyst name 'mmioAscend';
  4515. function mmioClose; external mmsyst name 'mmioClose';
  4516. function mmioCreateChunk; external mmsyst name 'mmioCreateChunk';
  4517. function mmioDescend; external mmsyst name 'mmioDescend';
  4518. function mmioFlush; external mmsyst name 'mmioFlush';
  4519. function mmioGetInfo; external mmsyst name 'mmioGetInfo';
  4520. function mmioInstallIOProcA; external mmsyst name 'mmioInstallIOProcA';
  4521. function mmioInstallIOProcW; external mmsyst name 'mmioInstallIOProcW';
  4522. function mmioInstallIOProc; external mmsyst name 'mmioInstallIOProcA';
  4523. function mmioOpenA; external mmsyst name 'mmioOpenA';
  4524. function mmioOpenW; external mmsyst name 'mmioOpenW';
  4525. function mmioOpen; external mmsyst name 'mmioOpenA';
  4526. function mmioRead; external mmsyst name 'mmioRead';
  4527. function mmioRenameA; external mmsyst name 'mmioRenameA';
  4528. function mmioRenameW; external mmsyst name 'mmioRenameW';
  4529. function mmioRename; external mmsyst name 'mmioRenameA';
  4530. function mmioSeek; external mmsyst name 'mmioSeek';
  4531. function mmioSendMessage; external mmsyst name 'mmioSendMessage';
  4532. function mmioSetBuffer; external mmsyst name 'mmioSetBuffer';
  4533. function mmioSetInfo; external mmsyst name 'mmioSetInfo';
  4534. function mmioStringToFOURCCA; external mmsyst name 'mmioStringToFOURCCA';
  4535. function mmioStringToFOURCCW; external mmsyst name 'mmioStringToFOURCCW';
  4536. function mmioStringToFOURCC; external mmsyst name 'mmioStringToFOURCCA';
  4537. function mmioWrite; external mmsyst name 'mmioWrite';
  4538. function mmsystemGetVersion; external mmsyst name 'mmsystemGetVersion';
  4539. function OpenDriver; external mmsyst name 'OpenDriver';
  4540. function PlaySoundA; external mmsyst name 'PlaySoundA';
  4541. function PlaySoundW; external mmsyst name 'PlaySoundW';
  4542. function PlaySound; external mmsyst name 'PlaySoundA';
  4543. function SendDriverMessage; external mmsyst name 'SendDriverMessage';
  4544. function sndPlaySoundA; external mmsyst name 'sndPlaySoundA';
  4545. function sndPlaySoundW; external mmsyst name 'sndPlaySoundW';
  4546. function sndPlaySound; external mmsyst name 'sndPlaySoundA';
  4547. function timeBeginPeriod; external mmsyst name 'timeBeginPeriod';
  4548. function timeEndPeriod; external mmsyst name 'timeEndPeriod';
  4549. function timeGetDevCaps; external mmsyst name 'timeGetDevCaps';
  4550. function timeGetSystemTime; external mmsyst name 'timeGetSystemTime';
  4551. function timeGetTime; external mmsyst name 'timeGetTime';
  4552. function timeKillEvent; external mmsyst name 'timeKillEvent';
  4553. function timeSetEvent; external mmsyst name 'timeSetEvent';
  4554. function waveInAddBuffer; external mmsyst name 'waveInAddBuffer';
  4555. function waveInClose; external mmsyst name 'waveInClose';
  4556. function waveInGetDevCapsA; external mmsyst name 'waveInGetDevCapsA';
  4557. function waveInGetDevCapsW; external mmsyst name 'waveInGetDevCapsW';
  4558. function waveInGetDevCaps; external mmsyst name 'waveInGetDevCapsA';
  4559. function waveInGetErrorTextA; external mmsyst name 'waveInGetErrorTextA';
  4560. function waveInGetErrorTextW; external mmsyst name 'waveInGetErrorTextW';
  4561. function waveInGetErrorText; external mmsyst name 'waveInGetErrorTextA';
  4562. function waveInGetID; external mmsyst name 'waveInGetID';
  4563. function waveInGetNumDevs; external mmsyst name 'waveInGetNumDevs';
  4564. function waveInGetPosition; external mmsyst name 'waveInGetPosition';
  4565. function waveInMessage; external mmsyst name 'waveInMessage';
  4566. function waveInOpen; external mmsyst name 'waveInOpen';
  4567. function waveInPrepareHeader; external mmsyst name 'waveInPrepareHeader';
  4568. function waveInReset; external mmsyst name 'waveInReset';
  4569. function waveInStart; external mmsyst name 'waveInStart';
  4570. function waveInStop; external mmsyst name 'waveInStop';
  4571. function waveInUnprepareHeader; external mmsyst name 'waveInUnprepareHeader';
  4572. function waveOutBreakLoop; external mmsyst name 'waveOutBreakLoop';
  4573. function waveOutClose; external mmsyst name 'waveOutClose';
  4574. function waveOutGetDevCapsA; external mmsyst name 'waveOutGetDevCapsA';
  4575. function waveOutGetDevCapsW; external mmsyst name 'waveOutGetDevCapsW';
  4576. function waveOutGetDevCaps; external mmsyst name 'waveOutGetDevCapsA';
  4577. function waveOutGetErrorTextA; external mmsyst name 'waveOutGetErrorTextA';
  4578. function waveOutGetErrorTextW; external mmsyst name 'waveOutGetErrorTextW';
  4579. function waveOutGetErrorText; external mmsyst name 'waveOutGetErrorTextA';
  4580. function waveOutGetID; external mmsyst name 'waveOutGetID';
  4581. function waveOutGetNumDevs; external mmsyst name 'waveOutGetNumDevs';
  4582. function waveOutGetPitch; external mmsyst name 'waveOutGetPitch';
  4583. function waveOutGetPlaybackRate; external mmsyst name 'waveOutGetPlaybackRate';
  4584. function waveOutGetPosition; external mmsyst name 'waveOutGetPosition';
  4585. function waveOutGetVolume; external mmsyst name 'waveOutGetVolume';
  4586. function waveOutMessage; external mmsyst name 'waveOutMessage';
  4587. function waveOutOpen; external mmsyst name 'waveOutOpen';
  4588. function waveOutPause; external mmsyst name 'waveOutPause';
  4589. function waveOutPrepareHeader; external mmsyst name 'waveOutPrepareHeader';
  4590. function waveOutReset; external mmsyst name 'waveOutReset';
  4591. function waveOutRestart; external mmsyst name 'waveOutRestart';
  4592. function waveOutSetPitch; external mmsyst name 'waveOutSetPitch';
  4593. function waveOutSetPlaybackRate; external mmsyst name 'waveOutSetPlaybackRate';
  4594. function waveOutSetVolume; external mmsyst name 'waveOutSetVolume';
  4595. function waveOutUnprepareHeader; external mmsyst name 'waveOutUnprepareHeader';
  4596. function waveOutWrite; external mmsyst name 'waveOutWrite';
  4597.  
  4598. function mci_MSF_Minute(msf: Longint): Byte;
  4599. begin
  4600.   Result := LoByte(LoWord(msf));
  4601. end;
  4602.  
  4603. function mci_MSF_Second(msf: Longint): Byte;
  4604. begin
  4605.   Result := HiByte(LoWord(msf));
  4606. end;
  4607.  
  4608. function mci_MSF_Frame(msf: Longint): Byte;
  4609. begin
  4610.   Result := LoByte(HiWord(msf));
  4611. end;
  4612.  
  4613. function mci_Make_MSF(m, s, f: Byte): Longint;
  4614. begin
  4615.   Result := Longint(m or (s shl 8) or (f shl 16));
  4616. end;
  4617.  
  4618. function mci_TMSF_Track(tmsf: Longint): Byte;
  4619. begin
  4620.   Result := LoByte(LoWord(tmsf));
  4621. end;
  4622.  
  4623. function mci_TMSF_Minute(tmsf: Longint): Byte;
  4624. begin
  4625.   Result := HiByte(LoWord(tmsf));
  4626. end;
  4627.  
  4628. function mci_TMSF_Second(tmsf: Longint): Byte;
  4629. begin
  4630.   Result := LoByte(HiWord(tmsf));
  4631. end;
  4632.  
  4633. function mci_TMSF_Frame(tmsf: Longint): Byte;
  4634. begin
  4635.   Result := HiByte(HiWord(tmsf));
  4636. end;
  4637.  
  4638. function mci_Make_TMSF(t, m, s, f: Byte): Longint;
  4639. begin
  4640.   Result := Longint(t or (m shl 8) or (s shl 16) or (f shl 24));
  4641. end;
  4642.  
  4643. function mci_HMS_Hour(hms: Longint): Byte;
  4644. begin
  4645.   Result := LoByte(LoWord(hms));
  4646. end;
  4647.  
  4648. function mci_HMS_Minute(hms: Longint): Byte;
  4649. begin
  4650.   Result := HiByte(LoWord(hms));
  4651. end;
  4652.  
  4653. function mci_HMS_Second(hms: Longint): Byte;
  4654. begin
  4655.   Result := LoByte(HiWord(hms));
  4656. end;
  4657.  
  4658. function mci_Make_HMS(h, m, s: Byte): Longint;
  4659. begin
  4660.   Result := Longint(h or (m shl 8) or (s shl 16));
  4661. end;
  4662.  
  4663. function DIBIndex(N: Integer): Longint;
  4664. begin
  4665.   Result := MakeLong(N, $10FF);
  4666. end;
  4667.  
  4668. end.
  4669.