Filewatcher File Search
FTP Search
  
Directory (beta)
  
Content Search (beta)
   
pkg://cdp-0.33-30.src.rpm:160164/cdp-0.33-changer.patch  info  downloads

--- cdp-0.33/cdp.h.changer	Fri Nov 10 01:10:42 1995
+++ cdp-0.33/cdp.h	Thu Sep  9 20:48:14 1999
@@ -36,7 +36,7 @@
     BOOL                     fSilentMode;
     BOOL                     fNoAutoPlay;
     BOOL                     fCDPlayMode;
-    BOOL                     fCmdTable, fNoFastIn, fCmdVersion;
+    BOOL                     fCmdTable, fNoFastIn, fCmdVersion, fCmdStop;
     BOOL                     fNoVolumeMixer;
     int                      startTrack;
 }  modeInfoType;
--- cdp-0.33/cdp.c.changer	Thu Sep  9 20:48:14 1999
+++ cdp-0.33/cdp.c	Thu Sep  9 20:50:31 1999
@@ -210,7 +210,10 @@
 {
     dispInfo.fNoFollowMode = ! dispInfo.fNoFollowMode;
     if  ( ! dispInfo.fNoFollowMode   &&  cdStatus.cur_track != dispInfo.view_track ) {
-        cd_play( &cdStatus, dispInfo.view_track, 0, cdStatus.cur_ntracks + 1);
+        if ( !cdStatus.thiscd.trk[dispInfo.view_track - 1].data )
+            cd_play( &cdStatus, dispInfo.view_track, 0, cdStatus.cur_ntracks + 1);
+        else
+            dispInfo.view_track = cdStatus.cur_track;
     }
 }
 
@@ -226,13 +229,28 @@
 }
 
 
+/* Skip data tracks in either direction */
+static inline int wrapAround( int cur_track, int delta )
+{
+    int new_track;
+
+    new_track = normalizeTrackNum( cur_track + delta );
+    while ( cdStatus.thiscd.trk[new_track-1].data ) {
+        new_track = normalizeTrackNum( new_track + delta );
+        if ( new_track == cur_track )
+            break;
+    }
+    return new_track;
+}
+
+
 static void       handleTrackMoveKey( displayInfoType      * pInfo,
                                       int                    delta )
 {
     if  ( pInfo->fNoFollowMode ) {
         pInfo->view_track = normalizeTrackNum( pInfo->view_track + delta );
     } else {
-        cd_play( &cdStatus, normalizeTrackNum( cdStatus.cur_track + delta ), 0,
+        cd_play( &cdStatus, wrapAround( cdStatus.cur_track, delta ), 0,
                  cdStatus.cur_ntracks + 1);
     }
 }
@@ -521,6 +539,7 @@
             if  ( strcmp( str, "stop" ) == 0 ) {
                 pInfoMode->fCmdVersion = TRUE; 
                 pInfoMode->fNoAutoPlay = TRUE;
+                pInfoMode->fCmdStop    = TRUE;
                 continue;
             } 
             if  ( strcmp( str, "play" ) == 0 ) {
@@ -568,9 +587,14 @@
     }
 
     cdStatus.cur_track = 1;        
-    if  ( pMode->fCmdTable ) 
+    if  ( pMode->fCmdTable ) {
         printTOC();
-
+	if ( cdStatus.cur_cdmode == CDPLAY )
+	    myExit( 0 );
+    }
+    if  ( pMode->fCmdStop )
+	cd_stop ( &cdStatus );
+    
     if  ( ! pMode->fNoAutoPlay ) {
         if   ( pMode->startTrack > 0   
                &&  pMode->startTrack <= cdStatus.cur_ntracks + 1 )
--- cdp-0.33/hardware.c.changer	Thu Sep  9 20:48:14 1999
+++ cdp-0.33/hardware.c	Thu Sep  9 20:48:14 1999
@@ -344,6 +344,24 @@
 
 
 /*
+ * track_frame( pStatus, frame)
+ *
+ * Calculate track number from frame number
+ */
+int track_frame( cdStatusType *pStatus, int frame )
+{
+    int i;
+
+    for ( i = 0; i < pStatus->thiscd.ntracks-1; i++ ) {
+        if( frame < pStatus->thiscd.trk[i+1].start )
+            return i+1;
+    }
+
+    return pStatus->thiscd.ntracks;
+}
+
+
+/*
  * play_chunk( pStatus, start, end)
  *
  * Play the CD from one position to another (both in frames.)
@@ -351,6 +369,7 @@
 static void    play_chunk(  cdStatusType     * pStatus, int   start, int     end )
 {
     struct cdrom_msf        msf;
+    struct cdrom_ti         ti;
 
     if  ( ! pStatus->fTOCRead  ||  pStatus->cd_fd < 0 )
         return;
@@ -371,12 +390,30 @@
         return;
     }
     if (ioctl (pStatus->cd_fd, CDROMPLAYMSF, &msf)) {
-        printf ("play(%d,%d)\n", start, end);
+/*        printf ("play(%d,%d)\n", start, end);
         printf ("msf = %d:%d:%d %d:%d:%d\n",
                 msf.cdmsf_min0, msf.cdmsf_sec0, msf.cdmsf_frame0,
                 msf.cdmsf_min1, msf.cdmsf_sec1, msf.cdmsf_frame1);
         perror ("CDROMPLAYMSF");
-        return;
+        return;*/
+
+        /* Fall back to track index playing, because some
+           "enhanced" CDs won't work with CDROMPLAYMSF */
+        ti.cdti_trk0 = track_frame(pStatus, start);
+        ti.cdti_ind0 = 0;
+        ti.cdti_trk1 = track_frame(pStatus, end);
+        ti.cdti_ind1 = 0;
+
+        /* Skip to the next audio track (autoplay game CDs) */
+        while ( pStatus->thiscd.trk[ti.cdti_trk0 - 1].data) {
+            ti.cdti_trk0++;
+            if ( ti.cdti_trk0 > ti.cdti_trk1 )
+                return;
+        }
+        if (ioctl (pStatus->cd_fd, CDROMPLAYTRKIND, &ti)) {
+            perror ("CDROMPLAYTRKIND");
+            return;
+        }
     }
 }
 
Results 1 - 1
Help - FTP Sites List - Software Dir.
Searching half a billion files worldwide
© 1997-2008 Oliver Maruhn