#ifndef __IWriter_H
#define __IWriter_H

#include "IStream.h"
#include "kernel.h"

// on exit b is non zero when it still needs some data
typedef const _kernel_oserror* (*Writer_Initialize)(IStream* s, const _kernel_swi_regs* r);
typedef const _kernel_oserror* (*Writer_Volume)(IStream* s, int* volume);
typedef const _kernel_oserror* (*Writer_Open)(IStream* s);
typedef const _kernel_oserror* (*Writer_SetParams)(IStream* s);
typedef const _kernel_oserror* (*Writer_Fill)(IStream* s);
typedef const _kernel_oserror* (*Writer_Close)(IStream* s);
typedef const _kernel_oserror* (*Writer_Finalize)(IStream* s);

struct IWriter
{
	Writer_Initialize  Initialize;
	Writer_Volume      Volume;
	Writer_Open        Open;
	Writer_SetParams   SetParams;
	Writer_Fill        Fill;
	Writer_Close       Close;
	Writer_Finalize    Finalize;
};

extern IWriter ToSpeakers;
extern IWriter ToSrcFile;
extern IWriter ToWAVEFile;

#endif
