#include <windows.h>
#include <mmsystem.h>

typedef struct tagWAVEIOCB
{
  DWORD dwDataSize;
  DWORD dwDataOffset;
  PCMWAVEFORMAT FAR *lpFmt;
  LPWAVEHDR lpWaveHdr;
  HPSTR lpData;
  WORD wBitsPerSample;
  WORD wBytesPerSample;

} WAVEIOCB, *PWAVEIOCB, FAR *LPWAVEIOCB;

#define WIOERR_BASE         (100)
#define WIOERR_NOERROR      (0)
#define WIOERR_ERROR        (WIOERR_BASE+1)
#define WIOERR_BADHANDLE    (WIOERR_BASE+2)
#define WIOERR_BADFLAGS     (WIOERR_BASE+3)
#define WIOERR_BADPARAM     (WIOERR_BASE+4)
#define WIOERR_BADSIZE      (WIOERR_BASE+5)
#define WIOERR_FILEERROR    (WIOERR_BASE+6)
#define WIOERR_NOMEM        (WIOERR_BASE+7)
#define WIOERR_BADFILE	    (WIOERR_BASE+8)
#define WIOERR_NODEVICE	    (WIOERR_BASE+9)
#define WIOERR_BADFORMAT    (WIOERR_BASE+10)
#define WIOERR_ALLOCATED    (WIOERR_BASE+11)
#define WIOERR_NOTSUPPORTED (WIOERR_BASE+12)
#define WIOERR_READERROR    (WIOERR_BASE+13)

#define MAXSAMPLES           1024000L

#define MODE_STOP            0
#define MODE_PLAYING         1
#define MODE_RECORDING       2
#define MODE_PLAYINGPAUSED   3
#define MODE_RECORDINGPAUSED 4

BOOL wioSelectFile(LPSTR);
int  wioFileOpen(LPWAVEIOCB, LPSTR);
int  wioPlay(LPWAVEIOCB, HWND);
int  wioRecord(LPWAVEIOCB, HWND);
BOOL wioFileSave(LPSTR szFileName);
void wioOutError(int rc);
void wioInError(int rc);
