home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / corel / Scripts / cdplayer.csc < prev    next >
Text File  |  1998-02-06  |  11KB  |  378 lines

  1. rem P°ehraje zvukovΘ CD
  2. rem CDPlayer.csc  22.srpna 1996
  3. rem Copyright 1998 Corel Corporation. VÜechna prßva vyhrazena.
  4.  
  5.  
  6. ' Constants
  7. GLOBAL CONST STYLE_MINIMIZEBOX% = &h0020
  8. GLOBAL CONST EVENT_CHANGE% = 1
  9. GLOBAL CONST EVENT_MOUSE_CLICK% = 2
  10. GLOBAL CONST EVENT_DBL_MOUSE_CLICK% = 3
  11.  
  12. 'Declare Multimedia DLL function
  13. DECLARE FUNCTION MMString LIB "winmm" (BYVAL Command AS STRING, BYVAL ReturnString AS STRING, BYVAL ReturnSize AS LONG, BYVAL CallBack AS LONG) AS LONG ALIAS "mciSendStringA"
  14.  
  15. 'Global procedures
  16. DECLARE FUNCTION MediaPresent() AS BOOLEAN
  17. DECLARE SUB EndProgram()
  18. DECLARE FUNCTION CDCommand$( Command$, ErrorString$ )
  19.  
  20. ' Global variables
  21. GLOBAL NumberOfTracks%
  22. GLOBAL PauseMode AS BOOLEAN
  23. GLOBAL PausePosition$ AS STRING
  24.  
  25. ' Dialog definition
  26. BEGIN DIALOG OBJECT CDDialog 108, 127, "Corel Script CD", SUB CDDialogSub
  27.     PUSHBUTTON  4, 5, 53, 16, .PlayButton, ">"
  28.     PUSHBUTTON  59, 5, 16, 16, .PauseButton, "II"
  29.     PUSHBUTTON  22, 23, 16, 16, .StopButton, "O"
  30.     PUSHBUTTON  4, 23, 16, 16, .PrevTrack, "|<<"
  31.     PUSHBUTTON  41, 23, 16, 16, .NextTrack, ">>|"
  32.     PUSHBUTTON  59, 23, 16, 16, .Eject, "^"
  33.     VSLIDER 89, 0, 19, 118, .Slider
  34.     GROUPBOX  5, 42, 81, 72, .Trackbox, "Track"
  35.     PUSHBUTTON  10, 52, 14, 14, .T1, "1"
  36.     PUSHBUTTON  24, 52, 14, 14, .T2, "2"
  37.     PUSHBUTTON  38, 52, 14, 14, .T3, "3"
  38.     PUSHBUTTON  52, 52, 14, 14, .T4, "4"
  39.     PUSHBUTTON  66, 52, 14, 14, .T5, "5"
  40.     PUSHBUTTON  10, 66, 14, 14, .T6, "6"
  41.     PUSHBUTTON  24, 66, 14, 14, .T7, "7"
  42.     PUSHBUTTON  38, 66, 14, 14, .T8, "8"
  43.     PUSHBUTTON  52, 66, 14, 14, .T9, "9"
  44.     PUSHBUTTON  66, 66, 14, 14, .T10, "10"
  45.     PUSHBUTTON  10, 80, 14, 14, .T11, "11"
  46.     PUSHBUTTON  24, 80, 14, 14, .T12, "12"
  47.     PUSHBUTTON  38, 80, 14, 14, .T13, "13"
  48.     PUSHBUTTON  52, 80, 14, 14, .T14, "14"
  49.     PUSHBUTTON  66, 80, 14, 14, .T15, "15"
  50.     PUSHBUTTON  10, 94, 14, 14, .T16, "16"
  51.     PUSHBUTTON  24, 94, 14, 14, .T17, "17"
  52.     PUSHBUTTON  38, 94, 14, 14, .T18, "18"
  53.     PUSHBUTTON  52, 94, 14, 14, .T19, "19"
  54.     PUSHBUTTON  66, 94, 14, 14, .T20, "20"
  55.     STATUS .Info
  56. END DIALOG
  57.  
  58. '#########################################################################
  59. 'Set defaults
  60. GLOBAL Command AS STRING
  61. GLOBAL ErrorMsg AS LONG
  62. GLOBAL ReturnVal AS STRING
  63. GLOBAL CurrentTrackLength AS INTEGER
  64. ON ERROR GOTO ScriptError
  65. WITH CDDialog
  66.     .SetStyle STYLE_MINIMIZEBOX
  67.     .SetTimer 1000
  68.     .Slider.SetMinRange 0
  69.     .Slider.SetMaxRange 1
  70.     .Slider.SetTick 60
  71. END WITH
  72. NumberOfTracks% = 0
  73.  
  74. 'Reset device
  75. Command$ = "close cdaudio"
  76. ReturnVal$ = SPACE(300)
  77. ErrorMsg& = MMString(Command$,ReturnVal$,255&,0&)
  78. ' Open device
  79. CDCommand "open cdaudio", " initializing CD!"
  80. 'Initialize time format
  81. CDCommand "set cdaudio time format tmsf wait", " initializing CD!"
  82.  
  83. '#########################################################################
  84. 'Call Main Routine
  85. DIALOG CDDialog
  86.  
  87. '#########################################################################
  88. 'End Script
  89. ScriptEnd:
  90.     'Stop the CD
  91.     IF MediaPresent() THEN
  92.         PauseMode = FALSE
  93.         Command$ = "stop cdaudio"
  94.         ReturnVal$ = SPACE(300)
  95.         ErrorMsg& = MMString(Command$,ReturnVal$,255&,0&)
  96.     ENDIF
  97.     'Close the device
  98.     Command$ = "close cdaudio"
  99.     ReturnVal$ = SPACE(300)
  100.     ErrorMsg& = MMString(Command$,ReturnVal$,255&,0&)
  101.     END
  102.  
  103. '#########################################################################
  104. ' Error handling    
  105. ScriptError:
  106.     ' We try to close the device
  107.     RESUME AT ScriptEnd    
  108.  
  109. '#########################################################################
  110. ' Procedures
  111.  
  112. ' Send a command to the CD player
  113. FUNCTION CDCommand$( Command$, ErrorString$ )
  114.     CDCommand$ = SPACE(300)
  115.     ErrorMsg& = MMString(Command$,CDCommand$,255&,0&)
  116.     IF ErrorMsg& <> 0 THEN
  117.         MESSAGE "Error " & ErrorMsg& & ErrorString$
  118.         FAIL 800
  119.     ENDIF
  120. END FUNCTION
  121.  
  122. ' Test presence of CD in drive
  123. FUNCTION MediaPresent() AS BOOLEAN
  124.     'Check for a CD
  125.     Command$ = "status cdaudio media present"
  126.     ReturnVal$ = SPACE(300)
  127.     ErrorMsg& = MMString(Command$,ReturnVal$,255&,0&)
  128.     IF ErrorMsg& <> 0 THEN MediaPresent = FALSE
  129.     MediaPresent = CBOL(ReturnVal$)
  130. END FUNCTION
  131.  
  132. ' Get current track
  133. FUNCTION CDGetTrack%()
  134.     IF MediaPresent() THEN
  135.         'Gets the current track
  136.         CDGetTrack% = CDCommand("status cdaudio current track", " reading CD!")
  137.     ELSE
  138.         CDGetTrack%=1
  139.     END IF
  140. END FUNCTION
  141.  
  142. ' Play requested Track
  143. SUB CDPlay(BYVAL TrackToPlay%)
  144.     IF MediaPresent() THEN
  145.         'Remove pause
  146.         PauseMode = FALSE
  147.         'Have the CD play the track
  148.         IF TrackToPlay%<1 THEN TrackToPlay%=1
  149.         IF TrackToPlay%<=NumberOfTracks% THEN 
  150.             CDCommand "play cdaudio from " & TrackToPlay%, " playing CD!"
  151.             ' GetTrack Length
  152.             ReturnVal$ = CDCommand("status cdaudio length track " & TrackToPlay%, " getting status!")
  153.             CurrentTrackLength%=CINT(LEFT(ReturnVal$,2))*60+CINT(MID(ReturnVal$,4,2))
  154.         END IF
  155.     ENDIF
  156. END SUB
  157.  
  158. ' Seek to requested position on current track
  159. SUB CDSeek(BYVAL SeekPos%)
  160.     DIM Min AS INTEGER
  161.     DIM Sec AS INTEGER
  162.  
  163.     IF MediaPresent() THEN
  164.         'Remove pause
  165.         PauseMode = FALSE
  166.         ' Get track info
  167.         Min%=SeekPos%\60
  168.         SeekPos%=SeekPos%-Min%*60
  169.         Sec%=SeekPos%
  170.         'Have the CD play the track
  171.         CDCommand "play cdaudio from " & CDGetTrack%() & ":" & Min% & ":" & Sec%, " playing CD!"
  172.     ENDIF
  173. END SUB
  174.  
  175. ' Stop CD
  176. SUB CDStop()
  177.     IF MediaPresent() THEN
  178.         'Remove pause
  179.         PauseMode = FALSE
  180.         'Have the CD stop playing
  181.         CDCommand "stop cdaudio", " stopping CD!"
  182.     END IF
  183. END SUB
  184.  
  185. ' Eject CD
  186. SUB CDEject()
  187.     PauseMode = FALSE
  188.     CDCommand "set cdaudio door open", " ejecting CD!"
  189. END SUB
  190.  
  191. ' Pause/Unpause CD
  192. SUB CDPause()
  193.     IF MediaPresent() THEN
  194.         IF PauseMode THEN
  195.             'We are paused; resume
  196.             PauseMode = FALSE
  197.             'Play the CD from the position saved when paused.
  198.             CDCommand "play cdaudio from " & PausePosition$, " resuming CD!"
  199.         ELSE
  200.             'We need to set a pause
  201.             PauseMode = TRUE
  202.             'Get position and keep it
  203.             PausePosition$ = CDCommand("status cdaudio position", " pausing CD!")
  204.             'Stop the CD from playing
  205.             CDCommand "stop cdaudio", " stopping CD!"
  206.         ENDIF
  207.     ENDIF
  208. END SUB
  209.  
  210. 'Update the dialog display
  211. SUB UpdateDisplay()
  212.     DIM NewNumberOfTracks AS INTEGER
  213.     DIM Track AS STRING
  214.     DIM Sec AS INTEGER
  215.  
  216.     'Initialize number of tracks
  217.     IF MediaPresent() THEN
  218.         NewNumberOfTracks% = CDCommand("status cdaudio number of tracks", " getting track info!")
  219.     ELSE
  220.         NewNumberOfTracks% = 0
  221.     ENDIF
  222.     
  223.     WITH CDDialog
  224.         ' Update track buttons
  225.         IF NewNumberOfTracks%<>NumberOfTracks% THEN
  226.                 NumberOfTracks%=NewNumberOfTracks%
  227.                 .T1.Enable NumberOfTracks%>0 
  228.                 .T2.Enable NumberOfTracks%>1 
  229.                 .T3.Enable NumberOfTracks%>2 
  230.                 .T4.Enable NumberOfTracks%>3 
  231.                 .T5.Enable NumberOfTracks%>4 
  232.                 .T6.Enable NumberOfTracks%>5 
  233.                 .T7.Enable NumberOfTracks%>6 
  234.                 .T8.Enable NumberOfTracks%>7 
  235.                 .T9.Enable NumberOfTracks%>8 
  236.                 .T10.Enable NumberOfTracks%>9 
  237.                 .T11.Enable NumberOfTracks%>10 
  238.                 .T12.Enable NumberOfTracks%>11 
  239.                 .T13.Enable NumberOfTracks%>12 
  240.                 .T14.Enable NumberOfTracks%>13 
  241.                 .T15.Enable NumberOfTracks%>14 
  242.                 .T16.Enable NumberOfTracks%>15 
  243.                 .T17.Enable NumberOfTracks%>16 
  244.                 .T18.Enable NumberOfTracks%>17 
  245.                 .T19.Enable NumberOfTracks%>18 
  246.                 .T20.Enable NumberOfTracks%>19 
  247.         ENDIF                
  248.  
  249.         'Get status and update
  250.         ReturnVal$ = CDCommand("status cdaudio mode", " reading position!")
  251.         SELECT CASE ReturnVal$
  252.             CASE "stopped"
  253.                 IF PauseMode THEN
  254.                     'We're paused, indicate where
  255.                     .Info.SetText "Paused-" & "Track " & CINT(LEFT(PausePosition$,2)) & " Time:" & MID(PausePosition$,4,5)
  256.                     .PlayButton.Enable TRUE
  257.                     .StopButton.Enable TRUE
  258.                     .PauseButton.Enable TRUE
  259.                     .NextTrack.Enable TRUE
  260.                     .PrevTrack.Enable TRUE
  261.                     .Eject.Enable TRUE
  262.                     .Slider.Enable TRUE
  263.                 ELSE
  264.                     'We're really stopped
  265.                     .Info.SetText "Stopped"
  266.                     .PlayButton.Enable TRUE
  267.                     .Slider.Enable TRUE
  268.                     .StopButton.Enable FALSE
  269.                     .PauseButton.Enable FALSE
  270.                     .NextTrack.Enable FALSE
  271.                     .PrevTrack.Enable FALSE
  272.                     .Eject.Enable TRUE
  273.                 ENDIF
  274.     
  275.             CASE "not ready"
  276.                 'Device not ready; don't allow anything
  277.                 .Info.SetText "Not ready"
  278.                 .PlayButton.Enable FALSE
  279.                 .Slider.Enable FALSE
  280.                 .StopButton.Enable FALSE
  281.                 .PauseButton.Enable FALSE
  282.                 .NextTrack.Enable FALSE
  283.                 .PrevTrack.Enable FALSE
  284.                 .Eject.Enable FALSE
  285.     
  286.             CASE "open"
  287.                 'No CD or door is open; don't allow anything
  288.                 .Info.SetText "No CD"
  289.                 .PlayButton.Enable FALSE
  290.                 .Slider.Enable FALSE
  291.                 .StopButton.Enable FALSE
  292.                 .PauseButton.Enable FALSE
  293.                 .NextTrack.Enable FALSE
  294.                 .PrevTrack.Enable FALSE
  295.                 .Eject.Enable FALSE
  296.     
  297.             CASE "playing"
  298.                 'Playing; get position and indicate it
  299.                 ReturnVal$ = CDCommand("status cdaudio position", " reading position!")
  300.                 Track$=CINT(LEFT(ReturnVal$,2))
  301.                 .Info.SetText "Playing-" & "Track " & Track$ & " Time:" & MID(ReturnVal$,4,5)
  302.                 .PlayButton.Enable TRUE
  303.                 .Slider.Enable TRUE
  304.                 .StopButton.Enable TRUE
  305.                 .PauseButton.Enable TRUE
  306.                 .NextTrack.Enable TRUE
  307.                 .PrevTrack.Enable TRUE
  308.                 .Eject.Enable TRUE
  309.                 ' Update slider range if track has changed
  310.                 STATIC SliderTrack$
  311.                 IF SliderTrack$<>Track$ THEN
  312.                     SliderTrack$=Track$
  313.                     ReturnVal$ = CDCommand("status cdaudio length track " & Track$, " getting status!")
  314.                     CurrentTrackLength%=CINT(LEFT(ReturnVal$,2))*60+CINT(MID(ReturnVal$,4,2))
  315.                     CDDialog.Slider.SetMaxRange CurrentTrackLength%
  316.                     .Slider.SetValue 0
  317.                 ELSE
  318.                     ' Update slider
  319.                     Sec%=CINT(MID(ReturnVal$,4,2))*60+CINT(MID(ReturnVal$,7,2))
  320.                     .Slider.SetValue Sec%
  321.                 END IF
  322.  
  323.             CASE ELSE
  324.                 'Other (unknown); assume not ready.
  325.                 .Info.SetText "Not ready"
  326.                 .PlayButton.Enable FALSE
  327.                 .Slider.Enable FALSE
  328.                 .StopButton.Enable FALSE
  329.                 .PauseButton.Enable FALSE
  330.                 .NextTrack.Enable FALSE
  331.                 .PrevTrack.Enable FALSE
  332.                 .Eject.Enable FALSE
  333.         END SELECT
  334.     END WITH
  335. END SUB
  336.  
  337. '#########################################################################
  338. '# CDPlayDialogSub: Main Dialog Event Handler, the heart of    *
  339. '# the program.                                                *
  340. '#########################################################################
  341. SUB CDDialogSub (BYVAL ControlID%, BYVAL Event%)
  342.     WITH CDDialog
  343.       IF Event% = EVENT_CHANGE AND ControlID% = .Slider.GetID() THEN
  344.                 CDSeek(.Slider.GetValue()) 
  345.         ELSEIF Event% = EVENT_MOUSE_CLICK THEN
  346.             SELECT CASE ControlID%
  347.                 CASE .PlayButton.GetID()
  348.                     CDPlay CDGetTrack%()     'Play the Current track
  349.                 CASE .StopButton.GetID()
  350.                     CDStop     'Stops the CD from playing
  351.                 CASE .Eject.GetID()
  352.                     CDEject    'Ejects the CD
  353.                 CASE .PauseButton.GetID()
  354.                     CDPause 'Pauses or Resumes playing
  355.                 CASE .PrevTrack.GetID()
  356.                     'Goes back one track from the one that is played, and plays
  357.                     'that track.
  358.                     CDPlay(CDGetTrack%()-1)
  359.                 CASE .NextTrack.GetID()
  360.                     'Goes ahead one track from the one that is played, and plays
  361.                     'that track.
  362.                     CDPlay(CDGetTrack%()+1)
  363.                 CASE .Slider.GetID()
  364.                     'Set new position
  365.                     CDSeek(.Slider.GetValue())
  366.                 CASE ELSE
  367.                     'Did we pressed a track button
  368.                     IF ControlID%>=.T1.GetID() AND ControlID%<=.T20.GetID() THEN
  369.                         CDPlay(ControlID%-.T1.GetID()+1)
  370.                     END IF
  371.                     
  372.             END SELECT
  373.         END IF
  374.         ' Update dialog display
  375.         UpdateDisplay
  376.     END WITH
  377. END SUB
  378.