/*
 * Freya sound IL driver definitions Rev0.8
 *	author: c.mos@zob.ne.jp
 */

#ifndef _IL_SOUND_H_
#define _IL_SOUND_H_

#include <sys/types.h>
#include <sys/indirect.h>
#include <sys/process.h>

typedef struct {
    IL super;
    void (far *_sounddrv_init)(void);
    void (far *_sounddrv_release)(void);
    void (far *_sound_open)(void);
    void (far *_sound_close)(void);
    void (far *_set_instrument)(void far * inst, WORD type);
    void (far *_bgm_play)(void far *bgm, WORD mode);
    void (far *_bgm_stop)(void);
    void (far *_bgm_fadeout)(void);
    int  (far *_bgm_check)(void);
    void (far *_se_play)(void far *se, int num);
    void (far *_se_play_n)(int num);
    void (far *_se_stop)(void);
    int  (far *_se_check)(void);
    void (far *_voice_play)(void far *se, WORD mode);
    void (far *_voice_stop)(void);
    int  (far *_voice_check)(void);
    void (far *_set_play_mode)(WORD mode);
    void (far *_set_mute)(WORD trackbits);
	size_t (far *_parse_mml)(BYTE* buffer, const char* p, int se_count);
	size_t (far *_parse_inst)(BYTE* buffer, const char* p);
} SoundIL;

#define INSTBIT_BGM	1
#define INSTBIT_SE	2
#define INSTBIT_SYSTEM	0x8000

#define PLAY_SINGLE 0
#define PLAY_LOOP 1

#ifdef SOUND_IL_P
  extern SoundIL *soundILp;
  #define SOUNDIL_CALL if(soundILp) soundILp->
#else
  extern SoundIL soundIL;
  #define SOUNDIL_CALL soundIL.
#endif SOUND_IL_P

#define sounddrv_init		SOUNDIL_CALL _sounddrv_init
#define sounddrv_release	SOUNDIL_CALL _sounddrv_release
#define sound_open			SOUNDIL_CALL _sound_open
#define sound_close			SOUNDIL_CALL _sound_close
#define set_instrument		SOUNDIL_CALL _set_instrument
#define bgm_play			SOUNDIL_CALL _bgm_play
#define bgm_stop			SOUNDIL_CALL _bgm_stop
#define bgm_fadeout			SOUNDIL_CALL _bgm_fadeout
#define bgm_check			SOUNDIL_CALL _bgm_check
#define se_play				SOUNDIL_CALL _se_play
#define se_play_n			SOUNDIL_CALL _se_play_n
#define se_stop				SOUNDIL_CALL _se_stop
#define se_check			SOUNDIL_CALL _se_check
#define voice_play			SOUNDIL_CALL _voice_play
#define voice_stop			SOUNDIL_CALL _voice_stop
#define voice_check			SOUNDIL_CALL _voice_check
#define set_play_mode		SOUNDIL_CALL _set_play_mode
#define set_mute			SOUNDIL_CALL _set_mute
#define parse_mml			SOUNDIL_CALL _parse_mml
#define parse_inst			SOUNDIL_CALL _parse_inst

#define open_sound_il(soundILp) (ilibIL->_open("@sound", (IL far *)soundILp)) 

#endif _IL_SOUND_H_
