home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / m / m082 / 1.img / C / MSC / CDAUDIO / DEMOCD.C
Encoding:
C/C++ Source or Header  |  1991-10-28  |  4.1 KB  |  145 lines

  1. /* ------------------------------------------------------------------------ */
  2. /*   Title     : DEMOCD.C                             *** MSC Version ***   */
  3. /*                                                                          */
  4. /*   Copyright (c) Creative Technology Pte Ltd, 1991. All rights reserved.  */
  5. /* ------------------------------------------------------------------------ */
  6.  
  7. #include <stdio.h>
  8. #include <ctype.h>
  9. #include <stdlib.h>
  10. #include <bios.h>
  11. #include <sbcd.h>
  12.  
  13.  
  14. unsigned char BCD2Binary( unsigned char ) ;
  15. unsigned long HSG2RED( unsigned long ) ;
  16. void Display( void ) ;
  17.  
  18. main( int argc, char *argv[] )
  19. {
  20.     unsigned    skip_sec = 16 ;
  21.     char        ch ;
  22.     int         wKey, quit=0 ;
  23.     int         drv_num ;
  24.  
  25.  
  26.     if( !sbcd_init( &drv_num ) )       /* initialization */
  27.     {
  28.         Display() ;
  29.  
  30.         while( quit == 0 )
  31.         {
  32.             ShowInfo() ;
  33.  
  34.             if (_bios_keybrd(_KEYBRD_READY))
  35.             {
  36.                 if ((wKey=_bios_keybrd(_KEYBRD_READ)) & 0xff)
  37.                 {
  38.                     ch = toupper(wKey & 255) ;
  39.  
  40.                     switch( ch )
  41.                     {
  42.                         case 'P' :                      /* play first track */
  43.                             sbcd_play( 1, 0, 0xffff ) ; /* till the end */
  44.                             break ;
  45.  
  46.                         case 'S' :                      /* stop */
  47.                             sbcd_stop() ;
  48.                             break ;
  49.  
  50.                         case 'A' :                      /* pause */
  51.                             sbcd_pause() ;
  52.                             break ;
  53.  
  54.                         case 'C' :                      /* continue */
  55.                             sbcd_continue() ;
  56.                             break ;
  57.  
  58.                         case 'N' :                      /* next track */
  59.                             sbcd_next_track() ;
  60.                             break ;
  61.  
  62.                         case 'L' :                      /* previous track */
  63.                             sbcd_prev_track() ;
  64.                             break ;
  65.  
  66.                         case 'F' :                      /* fast forward 16 sec */
  67.                             sbcd_fastforward( skip_sec ) ;
  68.                             break ;
  69.  
  70.                         case 'R' :                      /* rewind 16 sec */
  71.                             sbcd_rewind( skip_sec ) ;
  72.                             break ;
  73.  
  74.                         case 'Q' :                      /* quit */
  75.                             quit = 1 ;
  76.                     }
  77.                 }
  78.             }
  79.         }
  80.     }
  81.     else
  82.         printf( "Initialization error" ) ;
  83. }
  84.  
  85.  
  86. void Display( void )
  87. {
  88.     printf( "\n\n\nCompact Disc Player Demo Program\n\n" ) ;
  89.     printf( "\tP  : Play\n" ) ;
  90.     printf( "\tS  : Stop\n" ) ;
  91.     printf( "\tA  : Pause\n" ) ;
  92.     printf( "\tC  : Continue\n" ) ;
  93.     printf( "\tN  : Next Track\n" ) ;
  94.     printf( "\tL  : Previous Track\n" ) ;
  95.     printf( "\tF  : Fast Forward\n" ) ;
  96.     printf( "\tR  : Rewind\n" ) ;
  97.     printf( "\tQ  : Quit\n\n" ) ;
  98. }
  99.  
  100.  
  101. ShowInfo()
  102. {
  103.     QCHAN_INFO      qch_info ;
  104.     unsigned long   volume ;
  105.  
  106.  
  107.     sbcd_get_loc_info( &qch_info ) ;
  108.     sbcd_get_volume( &volume ) ;
  109.     volume = HSG2RED( volume ) ;
  110.  
  111.     printf( "Disc - %02d:%02d, Track - %02d %02d:%02d, Vol - %02d:%02d\r",
  112.             qch_info.pmin, qch_info.psec,
  113.             BCD2Binary(qch_info.tno),
  114.             qch_info.min,  qch_info.sec,
  115.             LOBYTE(HIWORD(volume)), HIBYTE(LOWORD(volume)) ) ;
  116. }
  117.  
  118.  
  119. /* Conversion from BCD to binary. */
  120.  
  121. unsigned char BCD2Binary( unsigned char data )
  122. {
  123.     unsigned char   ret_val ;
  124.  
  125.  
  126.     ret_val = ( data >> 4 )*10 + ( data & 0xf ) ;
  127.  
  128.     return( ret_val ) ;
  129. }
  130.  
  131.  
  132. /* Conversion from High Sierra format to Red Book format */
  133.  
  134. unsigned long HSG2RED( unsigned long data )
  135. {
  136.     unsigned long   v0, v1, v2 ;
  137.  
  138.  
  139.     v2 = data / 4500 ;              /* 4500 = 60 * 75 */
  140.     v1 = ( data % 4500 ) / 75 ;
  141.     v0 = ( data % 4500 ) % 75 ;
  142.  
  143.     return( ( v2 << 16 ) | ( v1 << 8 ) | v0 ) ;
  144. }
  145.