#ifndef _FFX_H
#define _FFX_H

#include "TimTypes.h"
#include "kernel.h"

const _kernel_oserror* FXs_Init(GlobHdr* g, void* pw);
const _kernel_oserror* FXs_Finalize(GlobHdr* g, void* pw);
void FXs_UnregisterAll(GlobHdr* g);

const _kernel_oserror* swi_FX_Status(GlobHdr* g, _kernel_swi_regs* r);
const _kernel_oserror* swi_FX_Register(GlobHdr* g, _kernel_swi_regs* r);
const _kernel_oserror* swi_FX_Unregister(GlobHdr* g, _kernel_swi_regs* r);
const _kernel_oserror* swi_FX_GlobalSettings(GlobHdr* g, _kernel_swi_regs* r);
const _kernel_oserror* swi_FX_ChannelSettings(GlobHdr* g, _kernel_swi_regs* r);
const _kernel_oserror* swi_FX_NoteSettings(GlobHdr* g, _kernel_swi_regs* r);
const _kernel_oserror* swi_FX_PlaySample(GlobHdr* g, _kernel_swi_regs* r);
const _kernel_oserror* swi_FX_PlayInstrument(GlobHdr* g, _kernel_swi_regs* r);
const _kernel_oserror* swi_FX_NoteAction(GlobHdr* g, _kernel_swi_regs* r);

const _kernel_oserror* swi_FX_ChannelParams(GlobHdr* g, _kernel_swi_regs* r);
const _kernel_oserror* swi_FX_VChannelParams(GlobHdr* g, _kernel_swi_regs* r);

int FX_Changer(IFX* pFx, int duration);
void FX_Lister(_kernel_swi_regs* r, IFX* pFx);
void FX_Play(IFX* pFx, Channel* pChannel, int32_t volume, int32_t panning);
const _kernel_oserror* FX_GetFXChannel
	( GlobHdr* g
	, uint32_t id
	, uint32_t ch
	, const Channel** ppChannel
	);

#endif
