/*

Name:
DRV_RAW.C

Description:
Mikmod driver for output to a file called MUSIC.RAW

!! DO NOT CALL MD_UPDATE FROM A INTERRUPT IF YOU USE THIS DRIVER !!

Portability:

MSDOS:  BC(y)   Watcom(y)   DJGPP(y)
Win95:  BC(y)
Linux:  y

(y) - yes
(n) - no (not possible or not useful)
(?) - may be possible, but not tested

*/
#include <stdio.h>
#include <stdlib.h>

#include "mikmod.h"

#define RAWBUFFERSIZE 8192

static FILE *rawout;

static char RAW_DMABUF[RAWBUFFERSIZE];


static BOOL RAW_IsThere(void)
{
    return 1;
}


static BOOL RAW_Init(void)
{
    if(!(rawout=fopen("music.raw","wb"))){
        myerr="Не могу открыть выходной файл 'music.raw'";
        return 0;
    }

    if( !VC_Init() )
    {
        fclose( rawout );
        return 0;
    }

    return 1;
}


static void RAW_Exit(void)
{
    VC_Exit();
    fclose( rawout );
}


static void RAW_Update(void)
{
    VC_WriteBytes(RAW_DMABUF,RAWBUFFERSIZE);
    fwrite(RAW_DMABUF,RAWBUFFERSIZE,1,rawout);
}


DRIVER drv_raw={
    NULL,
    "music.raw file",
    "Вывод в файл music.raw v1.0",
    RAW_IsThere,
    VC_SampleLoad,
    VC_SampleUnload,
    RAW_Init,
    RAW_Exit,
    VC_PlayStart,
    VC_PlayStop,
    RAW_Update,
    VC_VoiceSetVolume,
    VC_VoiceSetFrequency,
    VC_VoiceSetPanning,
    VC_VoicePlay
};
