home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / m / m003_1 / sdk_dos.ddi / BASIC / CDAUDIO / DEMOCD.BAS
Encoding:
BASIC Source File  |  1991-11-26  |  4.3 KB  |  193 lines

  1. '
  2. ' This program demonstrates the CD Audio interface
  3. '
  4.  
  5. ' $INCLUDE: 'SBC.BI'
  6. ' $INCLUDE: 'SBCSYS.BI'
  7. ' $INCLUDE: 'SBCD.BI'
  8.  
  9. DECLARE SUB SHOWMSG ()
  10. DECLARE SUB SHOWTRACK ()
  11. DECLARE FUNCTION LOBYTE% (num%)
  12. DECLARE FUNCTION HIBYTE% (num%)
  13. DECLARE FUNCTION LOWORD% (num&)
  14. DECLARE FUNCTION HIWORD% (num&)
  15. DECLARE FUNCTION BCD2BIN% (num%)
  16. DECLARE FUNCTION HSG2RED& (num&)
  17.  
  18.  
  19. CONST   SKIPSEC=16
  20.  
  21.  
  22. REM $DYNAMIC
  23. CLEAR
  24.  
  25. DIM  userkey AS INTEGER, drvnum AS INTEGER, quit AS INTEGER
  26. DIM  dummy AS INTEGER
  27.  
  28. CLS
  29.  
  30. PRINT "SBK Basic CD Audio Interface Example"
  31.  
  32. quit = 0
  33.  
  34. IF  (CDINIT%(drvnum) = 0) THEN
  35.  
  36.     CALL SHOWMSG
  37.  
  38.     WHILE quit = 0
  39.  
  40.         CALL SHOWTRACK
  41.  
  42.         c$ = INKEY$
  43.  
  44.         IF c$ <> "" THEN
  45.             userkey = ASC(c$)
  46.  
  47.             SELECT CASE userkey
  48.                 CASE ASC("P"), ASC("p")
  49.                     dummy = CDPLAY%(1,0,&H0ffff)
  50.                 CASE ASC("S"), ASC("s")
  51.                     dummy = CDSTOP%
  52.                 CASE ASC("A"), ASC("a")
  53.                     dummy = CDPAUSE%
  54.                 CASE ASC("C"), ASC("c")
  55.                     dummy = CDCONT%
  56.                 CASE ASC("N"), ASC("n")
  57.                     dummy = CDNXTTRK%
  58.                 CASE ASC("L"), ASC("l")
  59.                     dummy = CDPRVTRK%
  60.                 CASE ASC("F"), ASC("f")
  61.                     dummy = CDFASTFWD%(SKIPSEC)
  62.                 CASE ASC("R"), ASC("r")
  63.                     dummy = CDREWIND%(SKIPSEC)
  64.                 CASE ASC("Q"), ASC("q")
  65.                     quit = 1
  66.             END SELECT
  67.         ENDIF
  68.     WEND
  69. ELSE
  70.     PRINT "Initialization error."
  71. ENDIF
  72.  
  73. END
  74.  
  75.  
  76. ' ------------------------------------------------------------------------ '
  77.  
  78. SUB  SHOWMSG
  79.  
  80. ' This function shows the CD player control keys
  81.  
  82.     PRINT
  83.     PRINT "Compact Disc Player Demo Program"
  84.     PRINT
  85.     PRINT TAB(5);"P  : Play"
  86.     PRINT TAB(5);"S  : Stop"
  87.     PRINT TAB(5);"A  : Pause"
  88.     PRINT TAB(5);"C  : Continue"
  89.     PRINT TAB(5);"N  : Next Track"
  90.     PRINT TAB(5);"L  : Previous Track"
  91.     PRINT TAB(5);"F  : Fast Forward"
  92.     PRINT TAB(5);"R  : Rewind"
  93.     PRINT TAB(5);"Q  : Quit"
  94. END SUB
  95.  
  96.  
  97. ' ------------------------------------------------------------------------ '
  98.  
  99. REM %STATIC
  100. SUB  SHOWTRACK
  101.  
  102.     DIM  qchinfo AS QCHANINFO, volume AS LONG, trkno AS INTEGER
  103.  
  104.  
  105.     dummy = CDGETLOC%(qchinfo)
  106.     dummy = CDGETVOL%(volume)
  107.     volume = HSG2RED&((volume))
  108.     trkno = ASC((qchinfo.tno))
  109.  
  110.     ' moves cursor to row 15 and column 1
  111.     ' makes cursor invisible
  112.     LOCATE  15,1,0
  113.     PRINT USING "Disc - ###:##, Track - ## ##:##, Vol - ###:##";_
  114.                 ASC((qchinfo.pmin)); ASC((qchinfo.psec)); BCD2BIN%((trkno));_
  115.                 ASC((qchinfo.min)); ASC((qchinfo.sec));_
  116.                 LOBYTE%(HIWORD%((volume))); HIBYTE%(LOWORD%((volume)))
  117.  
  118. END SUB
  119.  
  120.  
  121. ' ------------------------------------------------------------------------ '
  122.  
  123. FUNCTION LOBYTE% (num%)
  124.  
  125.     ' returns the low byte of the data
  126.     LOBYTE% = num% AND &H0ff
  127.  
  128. END FUNCTION
  129.  
  130.  
  131. ' ------------------------------------------------------------------------ '
  132.  
  133. FUNCTION HIBYTE% (num%)
  134.  
  135.     ' returns the high byte of the data
  136.     HIBYTE% = num% \ &H0ff
  137.  
  138. END FUNCTION
  139.  
  140.  
  141. ' ------------------------------------------------------------------------ '
  142.  
  143. FUNCTION LOWORD% (num&)
  144.  
  145.     ' returns the low word of the data
  146.     LOWORD% = num& AND &H0ffff&
  147.  
  148. END FUNCTION
  149.  
  150.  
  151. ' ------------------------------------------------------------------------ '
  152.  
  153. FUNCTION HIWORD% (num&)
  154.  
  155.     ' return the high word of the data
  156.     HIWORD% = (num& \ &H0ffff&) AND &H0ffff&
  157.  
  158. END FUNCTION
  159.  
  160.  
  161. ' ------------------------------------------------------------------------ '
  162.  
  163. FUNCTION BCD2BIN% (num%)
  164.  
  165.     DIM num1 AS INTEGER, num2 AS INTEGER
  166.     DIM num3 AS INTEGER
  167.  
  168.  
  169.     ' convert BCD format to Binary format
  170.     num1 = num% \ 16
  171.     num2 = num% AND &H0f
  172.     num3 = (num1 * 10) + num2
  173.     BCD2BIN% = num3
  174.  
  175. END FUNCTION
  176.  
  177.  
  178. ' ------------------------------------------------------------------------ '
  179.  
  180. FUNCTION HSG2RED& (num&)
  181.  
  182.     DIM v3&, v2&, v1&, v0&
  183.  
  184.  
  185.     ' convert from High Sierra format to Red Book format
  186.     v2& = num& \ 4500
  187.     v1& = (num& MOD 4500) \ 75
  188.     v0& = (num& MOD 4500) MOD 75
  189.     v3& = (v2& * &H10000&) + (v1& * &H100&) + v0&
  190.     HSG2RED& = v3&
  191.  
  192. END FUNCTION
  193.