home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / m / m003_1 / sdk_dos.ddi / C / TC / CDAUDIO / DEMOCD.C
Encoding:
C/C++ Source or Header  |  1991-10-28  |  4.0 KB  |  146 lines

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