home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
100 Pусских Uгр
/
980121_2306.iso
/
ARCADE
/
REGATA.ZIP
/
REG_SONG.HHH
< prev
next >
Wrap
Text File
|
1995-11-25
|
2KB
|
107 lines
#define ADLIB_OK 1
#define LOADED_OK 1
#define BAD_MUS_FILE -1
#define BAD_SND_FILE -2
#define LOAD_ERROR -3
#define MUS_ON 1
#define MUS_OFF 0
// --------------------------
static char* get_adl_data( char* name, char* ext )
{
int file, len;
char* buf, fname[ 16 ];
if( (file=_open( strcat( strcpy(fname, name), ext), O_RDONLY))==-1 ||
(buf = (char*) malloc( len=int( filelength( file ))))==0 )
fatal_error( fname );
_read( file, buf, len );
_close( file );
return buf;
}
// --------------------------
static char *mscbuf, *sndbuf;
void play_adlib( char* msc_name )
{
InstMusTimer();
if( BufLoadMusic( mscbuf = get_adl_data( msc_name, ".MUS"),
sndbuf = get_adl_data( msc_name, ".SND" )) != LOADED_OK )
{
UnInstMusTimer();
fatal_error( "Adlib data" );
}
StartMusic();
SetRingMusic();
}
// -------------------------
void exit_adlib( void )
{
StopMusic();
UnloadMusic();
UnInstMusTimer();
free( sndbuf );
free( mscbuf );
}
// ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
void play_melody( char *msc_file )
{
if( SilentMode ) return;
if( adlib_found )
{
play_adlib( msc_file );
return;
}
char msc_name[ 16 ];
register fl_handl;
if( (fl_handl=_open( strcat( strcpy( msc_name, msc_file ), ".MSC" ),
O_RDONLY ))== -1)
fatal_error( msc_name );
register unsigned fl_len=( unsigned ) filelength( fl_handl )+4;
if(!(melody = (unsigned huge *)farmalloc( sizeof(unsigned)*fl_len )))
fatal_error( "MUSIC BUFFER" );
_read( fl_handl, melody, fl_len );
_close( fl_handl );
char *temp_ptr = (char *)melody;
temp_ptr[ fl_len-1] = temp_ptr[ fl_len-2 ] =
temp_ptr[ fl_len-3] = temp_ptr[ fl_len-4 ] = 0;
melody_ofs = FP_OFF( melody );
pause = 0;
outportb( 0x43, 0xb6 ); // Timer 2 initialised
old1c = getvect (0x1c);
setvect( 0x1c, INTR_TYPE(mus_player) );
}
// --------------------------
void stop_melody( void )
{ extern unsigned char zad, zv;
if( SilentMode ) return;
if( adlib_found )
{
exit_adlib();
return;
}
setvect( 0x1c, old1c );
nosound();
zad = zv = 0;
farfree( melody );
}
// --------------------------