/**
 * Nametry
 * (c) Kenta Cho (cs8k-cyu@asahi-net.or.jp)
 * http://www.asahi-net.or.jp/~cs8k-cyu/
 *
 * soundmng.c(sound manager)
 */

#include <stdio.h>
#include <resource.h>
#include "il_sound.h"

#include "nametry.h"

extern void far *_resource;

static SoundIL soundIL;
static Boolean soundOn;
static void far *bgmBuf[BGM_NUM];
static void far *seBuf;

/**
 * Initialize SoundIL.
 */
void initSound() {
  BYTE far *rsc = (BYTE far *)_resource;
  int  bgmCnt = 0;
  if( open_sound_il(&soundIL) != E_FS_SUCCESS ){
    soundOn = FALSE;
    return;
  }
  soundOn = TRUE;
  sounddrv_init();
  sound_open();
  while(((res_t far *)rsc)->magic == RESID) { 
    switch ( ((res_t far *)rsc)->type ){
    case RESID_MUSIC:
      bgmBuf[bgmCnt] = (res_music_t far *)rsc;
      bgmCnt++;
      break;
    case RESID_SE:
      seBuf = (res_se_t far *)rsc;
      break;
    }
    rsc += (((res_t far *)rsc)->size << 4);
  }
  se_play(seBuf, -1);
}

/**
 * Close SoundIL.
 */
void closeSound() {
  if ( !soundOn ) return;
  sound_close();
  sounddrv_release();
}

void playBgm(int num, int mode) {
  if ( !soundOn ) return;
  if ( bgm_check() ) bgm_stop();
  bgm_play(bgmBuf[num], mode);
}

void stopBgm() {
  if ( !soundOn ) return;
  bgm_stop();
}

void playSe(int num) {
  if ( !soundOn ) return;
  se_play_n(num);
}

int checkSe() {
  if ( !soundOn ) return FALSE;
  return se_check();
}
