home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Product / Product.zip / oncmd.zip / CDP.PRG < prev    next >
Text File  |  1995-03-01  |  5KB  |  243 lines

  1. #include special.inc
  2. * -- defines for use with CD player
  3. #define LOGICAL 0
  4. #define NUMERIC 1
  5. #define STRING 2
  6.  
  7. #define TRACK_BUTTONS 1
  8. #define PLAY_BUTTON 2
  9. #define PAUSE_BUTTON 3
  10. #define FWD_BUTTON 4
  11. #define BKP_BUTTON 5
  12.  
  13. #define SPTR_WAIT 3 && system clock icon
  14.  
  15. #include msg.inc && values for OS/2 Message Options MB_*
  16.  
  17. * -- set window size and title
  18. setwin ( 6,5, 6,54 )
  19. system (7001, 'OnCmd CD Audio Player' )
  20.  
  21.  
  22. set fullread on
  23.  
  24. * -- initialize variables
  25. cd = 'cdaudio'
  26. da = 'cdaudio'
  27. track = 1
  28. last_track = 1
  29. play = .f.
  30. pause = .f.
  31. fwd = .f.
  32. bkp = .f.
  33. voldn = .f.
  34. volup = .f.
  35. volum = .f.
  36. quitnow = .f.
  37. volumelevel = 0
  38. bytes = 0
  39. playing = .f.
  40.  
  41.  
  42. * -- try to initialize CD
  43. if .not. initcd()
  44.     quit
  45. endif
  46.  
  47. * -- Go to the first track.
  48. cdseek( cdstatus( 'position track 1', NUMERIC ) )
  49.  
  50. * -- Timer interrupt every second please.
  51. set timer to 0
  52. tmr( 'timer()', seconds(), date(), -1, -1 )
  53.  
  54. * -- main processing loop
  55. f = 1
  56. do while .t.
  57.  
  58.     pointer() && restore the mouse pointer icon to SPTR_ARROW default
  59.     read save from f
  60.     pointer( SPTR_WAIT )    
  61.     
  62.     f = lastfield()
  63.  
  64.     do case
  65.  
  66.         case quitnow        && QUIT
  67.             quit
  68.  
  69.         case volum          && set VOLUME
  70.                 run - /w /b /n AMPM.exe
  71.                 showgets()
  72.                 volum = .f.
  73.  
  74.         case pause        && PAUSE cd
  75.             if playing
  76.                 cdplay( .f. )
  77.             else
  78.                 cdplay( .t. )
  79.             endif
  80.             pause = .f.
  81.  
  82.         case play         && PLAY cd
  83.             cdplay( .t. )
  84.             play = .f.
  85.  
  86.         case fwd          && skip FORWARD
  87.             cdseek( cdstatus( 'position ', NUMERIC ) + 3000 )
  88.             fwd = .f.
  89.  
  90.         case bkp          && skip BACKWARD
  91.             cdseek( cdstatus( 'position ', NUMERIC ) - 3000 )
  92.             bkp = .f.
  93.  
  94.         case f = TRACK_BUTTONS
  95.             cdseek( cdstatus( 'position track ' + str(track), NUMERIC ) )
  96.  
  97.     endcase
  98.  
  99. enddo                         
  100.     
  101.  
  102. * -- initialize CD
  103. func initcd
  104. public    dev
  105. private    p, n, t
  106.     
  107. * -- check for CD device
  108.     dev = mci( 'sysinfo', cd, 'installname' )
  109.     if empty(dev)
  110.         msgbox( 'Cannot find a CD', str(ferror()), MB_ERROR )
  111.         return .f.
  112.     endif
  113.  
  114.     @0,1    say dev font 'Tms Rmn',8 color 'n/p'
  115.     
  116.     if .not. cdstatus( 'media present', LOGICAL )
  117.         msgbox( 'No CD, or not an audio CD', str(ferror()), MB_ERROR )
  118.         return .f.
  119.     endif
  120.  
  121. * -- Query the tracking information...
  122.  
  123.     bytes = cdstatus( 'length', NUMERIC )    
  124.     n =  cdstatus( 'number of tracks', NUMERIC )
  125.  
  126.     if n < 1
  127.         msgbox( 'Problem finding the number of tracks' , str(ferror()), MB_ERROR )
  128.         return .f.
  129.     endif
  130.         
  131. * -- set prompt for tracks
  132.     p = '@*H '
  133.     for t = 1 to n
  134.         if t > 1
  135.             p = p + ';'
  136.         endif    
  137.         p = p + str( t )
  138.     next
  139.  
  140.     volumelevel = val( left( mci( 'status', cd, 'volume' ), 3 ) )
  141.     setvol( 0 )
  142.  
  143. * -- get buttons for CD player
  144.     @1,1 get track pict p font 'Courier',8 size 1.2,2.8
  145.  
  146.     @3,1 get play pict '@* Play' size 1.5,6
  147.     @3,8 get pause pict '@* Pause' size 1.5,6
  148.     @3,15 get fwd pict '@* Forward' size 1.5,9
  149.     @3,25 get bkp pict '@* Backward' size 1.5,9
  150.     @3,35 get volum pict '@* Volume' size 1.5,10
  151.     @3,46 get quitnow pict '@* Quit' size 1.5,6
  152.  
  153.     pointer(SPTR_WAIT)
  154.  
  155.     return .t.
  156.  
  157. * -- check status of CD
  158. func cdstatus
  159. para kw, ret
  160. private s, e
  161.     
  162.     s = mci( 'status', cd, kw )
  163.     do case
  164.         case ret = LOGICAL
  165.             return s = 'TRUE'
  166.     
  167.         case ret = NUMERIC
  168.             return val( s )
  169.     endcase
  170.     
  171.     return s
  172.  
  173. * -- routine to skip to next/previous track
  174. func cdseek
  175. para off
  176.     if playing
  177.         mci ( 'play', cd, 'from ' + str(off), .f. )
  178.     else
  179.         mci ( 'seek', cd, 'to ' + str(off), .f. )
  180.     endif
  181.  
  182.     showpos( off )
  183.  
  184. * -- routine to check the current track
  185. func chktrack
  186.     track = cdstatus( 'current track', NUMERIC )
  187.     if track <> last_track
  188.         showget( TRACK_BUTTONS )
  189.         last_track = track
  190.     endif
  191.  
  192. * -- routine to show play time
  193. func showpos
  194. para n
  195.     @0,9
  196.     @0,9 say ltrim( trans( n, '@, 9999999999' ) ) font 'Tms Rmn',8
  197.  
  198. * -- routine to turn on/off cd
  199. func cdplay
  200. para on
  201.     if on
  202.         mci( 'play', cd, .f., .f. )
  203.         set timer to 2
  204.         playing = .t.
  205.     else    
  206.         mci( 'pause' )
  207.         set timer to 0
  208.         playing = .f.
  209.     endif
  210.             
  211.  
  212. * -- routine to display current track info
  213. func timer
  214. private pos
  215.     if playing
  216.         pos = cdstatus( 'position', NUMERIC )
  217.         chktrack()
  218.         showpos( pos )
  219.     endif
  220.  
  221.  
  222. * -- routine to set volume for the cd
  223. func setvol
  224. para factor
  225.      volumelevel =  volumelevel + factor
  226.      if( volumelevel > 100 )
  227.             tone( 1000, 100 )
  228.             tone( 500, 100 )
  229.             volumelevel = 100
  230.      endif
  231.      if( volumelevel < 0 )
  232.             tone( 1000, 100 )
  233.             tone( 500, 100 )
  234.             volumelevel = 0
  235.      endif
  236.      mcierror = mci( 'set', cd, 'audio volume all ' + str(floor(volumelevel)) )
  237.      if .not. empty(mcierror)
  238.          msgbox( 'Volume set error', mcierror )
  239.      endif
  240. return .t.
  241.  
  242. * -- END
  243.