home *** CD-ROM | disk | FTP | other *** search
/ 100 Pусских Uгр / 980121_2306.iso / ARCADE / REGATA.ZIP / REG_SONG.HHH < prev    next >
Text File  |  1995-11-25  |  2KB  |  107 lines

  1.  
  2.  #define ADLIB_OK    1
  3.  #define LOADED_OK    1
  4.  #define BAD_MUS_FILE    -1
  5.  #define BAD_SND_FILE    -2
  6.  #define LOAD_ERROR    -3
  7.  #define MUS_ON        1
  8.  #define MUS_OFF    0
  9.  
  10. // --------------------------
  11.  static char* get_adl_data( char* name, char* ext )
  12.  {
  13.     int file, len;
  14.     char* buf, fname[ 16 ];
  15.  
  16.     if( (file=_open( strcat( strcpy(fname, name), ext), O_RDONLY))==-1 ||
  17.         (buf = (char*) malloc( len=int( filelength( file ))))==0 )
  18.         fatal_error( fname );
  19.  
  20.     _read( file, buf, len );
  21.     _close( file );
  22.  
  23.     return buf;
  24.  }
  25.  
  26. // --------------------------
  27.  static char *mscbuf, *sndbuf;
  28.  
  29.  void play_adlib( char* msc_name )
  30.  {
  31.     InstMusTimer();
  32.     if( BufLoadMusic( mscbuf = get_adl_data( msc_name, ".MUS"),
  33.         sndbuf = get_adl_data( msc_name, ".SND" )) != LOADED_OK )
  34.     {
  35.         UnInstMusTimer();
  36.         fatal_error( "Adlib data" );
  37.     }
  38.     StartMusic();
  39.     SetRingMusic();
  40.  }
  41.  // -------------------------
  42.  void exit_adlib( void )
  43.  {
  44.     StopMusic();
  45.     UnloadMusic();
  46.     UnInstMusTimer();
  47.  
  48.     free( sndbuf );
  49.     free( mscbuf );
  50.  }
  51.  
  52.  // ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
  53.  
  54.  void    play_melody( char *msc_file )
  55.  {
  56.     if( SilentMode ) return;
  57.  
  58.     if( adlib_found )
  59.     {
  60.         play_adlib( msc_file );
  61.         return;
  62.     }
  63.     char msc_name[ 16 ];
  64.  
  65.     register fl_handl;
  66.     if( (fl_handl=_open( strcat( strcpy( msc_name, msc_file ), ".MSC" ),
  67.         O_RDONLY ))== -1)
  68.             fatal_error( msc_name );
  69.  
  70.     register unsigned fl_len=( unsigned ) filelength( fl_handl )+4;
  71.     if(!(melody = (unsigned huge *)farmalloc( sizeof(unsigned)*fl_len )))
  72.         fatal_error( "MUSIC BUFFER" );
  73.  
  74.     _read( fl_handl, melody, fl_len );
  75.     _close( fl_handl );
  76.  
  77.     char *temp_ptr = (char *)melody;
  78.     temp_ptr[ fl_len-1] = temp_ptr[ fl_len-2 ] =
  79.     temp_ptr[ fl_len-3] = temp_ptr[ fl_len-4 ] = 0;
  80.  
  81.     melody_ofs = FP_OFF( melody );
  82.     pause = 0;
  83.     outportb( 0x43, 0xb6 );        // Timer 2 initialised
  84.  
  85.     old1c = getvect (0x1c);
  86.     setvect( 0x1c, INTR_TYPE(mus_player) );
  87. }
  88. // --------------------------
  89. void    stop_melody( void )
  90. {    extern unsigned char zad, zv;
  91.  
  92.     if( SilentMode ) return;
  93.  
  94.     if( adlib_found )
  95.     {
  96.         exit_adlib();
  97.         return;
  98.     }
  99.  
  100.     setvect( 0x1c, old1c );
  101.     nosound();
  102.     zad = zv = 0;
  103.  
  104.     farfree( melody );
  105. }
  106. // --------------------------
  107.