]> git.pld-linux.org Git - packages/cdp.git/blob - cdp-changer.patch
- release 16 (in RH is 15),
[packages/cdp.git] / cdp-changer.patch
1 --- cdp-0.33/cdp.h.changer      Fri Nov 10 01:10:42 1995
2 +++ cdp-0.33/cdp.h      Thu Sep  9 20:48:14 1999
3 @@ -36,7 +36,7 @@
4      BOOL                     fSilentMode;
5      BOOL                     fNoAutoPlay;
6      BOOL                     fCDPlayMode;
7 -    BOOL                     fCmdTable, fNoFastIn, fCmdVersion;
8 +    BOOL                     fCmdTable, fNoFastIn, fCmdVersion, fCmdStop;
9      BOOL                     fNoVolumeMixer;
10      int                      startTrack;
11  }  modeInfoType;
12 --- cdp-0.33/cdp.c.changer      Thu Sep  9 20:48:14 1999
13 +++ cdp-0.33/cdp.c      Thu Sep  9 20:50:31 1999
14 @@ -210,7 +210,10 @@
15  {
16      dispInfo.fNoFollowMode = ! dispInfo.fNoFollowMode;
17      if  ( ! dispInfo.fNoFollowMode   &&  cdStatus.cur_track != dispInfo.view_track ) {
18 -        cd_play( &cdStatus, dispInfo.view_track, 0, cdStatus.cur_ntracks + 1);
19 +        if ( !cdStatus.thiscd.trk[dispInfo.view_track - 1].data )
20 +            cd_play( &cdStatus, dispInfo.view_track, 0, cdStatus.cur_ntracks + 1);
21 +        else
22 +            dispInfo.view_track = cdStatus.cur_track;
23      }
24  }
25  
26 @@ -226,13 +229,28 @@
27  }
28  
29  
30 +/* Skip data tracks in either direction */
31 +static inline int wrapAround( int cur_track, int delta )
32 +{
33 +    int new_track;
34 +
35 +    new_track = normalizeTrackNum( cur_track + delta );
36 +    while ( cdStatus.thiscd.trk[new_track-1].data ) {
37 +        new_track = normalizeTrackNum( new_track + delta );
38 +        if ( new_track == cur_track )
39 +            break;
40 +    }
41 +    return new_track;
42 +}
43 +
44 +
45  static void       handleTrackMoveKey( displayInfoType      * pInfo,
46                                        int                    delta )
47  {
48      if  ( pInfo->fNoFollowMode ) {
49          pInfo->view_track = normalizeTrackNum( pInfo->view_track + delta );
50      } else {
51 -        cd_play( &cdStatus, normalizeTrackNum( cdStatus.cur_track + delta ), 0,
52 +        cd_play( &cdStatus, wrapAround( cdStatus.cur_track, delta ), 0,
53                   cdStatus.cur_ntracks + 1);
54      }
55  }
56 @@ -521,6 +539,7 @@
57              if  ( strcmp( str, "stop" ) == 0 ) {
58                  pInfoMode->fCmdVersion = TRUE; 
59                  pInfoMode->fNoAutoPlay = TRUE;
60 +                pInfoMode->fCmdStop    = TRUE;
61                  continue;
62              } 
63              if  ( strcmp( str, "play" ) == 0 ) {
64 @@ -568,9 +587,14 @@
65      }
66  
67      cdStatus.cur_track = 1;        
68 -    if  ( pMode->fCmdTable ) 
69 +    if  ( pMode->fCmdTable ) {
70          printTOC();
71 -
72 +       if ( cdStatus.cur_cdmode == CDPLAY )
73 +           myExit( 0 );
74 +    }
75 +    if  ( pMode->fCmdStop )
76 +       cd_stop ( &cdStatus );
77 +    
78      if  ( ! pMode->fNoAutoPlay ) {
79          if   ( pMode->startTrack > 0   
80                 &&  pMode->startTrack <= cdStatus.cur_ntracks + 1 )
81 --- cdp-0.33/hardware.c.changer Thu Sep  9 20:48:14 1999
82 +++ cdp-0.33/hardware.c Thu Sep  9 20:48:14 1999
83 @@ -344,6 +344,24 @@
84  
85  
86  /*
87 + * track_frame( pStatus, frame)
88 + *
89 + * Calculate track number from frame number
90 + */
91 +int track_frame( cdStatusType *pStatus, int frame )
92 +{
93 +    int i;
94 +
95 +    for ( i = 0; i < pStatus->thiscd.ntracks-1; i++ ) {
96 +        if( frame < pStatus->thiscd.trk[i+1].start )
97 +            return i+1;
98 +    }
99 +
100 +    return pStatus->thiscd.ntracks;
101 +}
102 +
103 +
104 +/*
105   * play_chunk( pStatus, start, end)
106   *
107   * Play the CD from one position to another (both in frames.)
108 @@ -351,6 +369,7 @@
109  static void    play_chunk(  cdStatusType     * pStatus, int   start, int     end )
110  {
111      struct cdrom_msf        msf;
112 +    struct cdrom_ti         ti;
113  
114      if  ( ! pStatus->fTOCRead  ||  pStatus->cd_fd < 0 )
115          return;
116 @@ -371,12 +390,30 @@
117          return;
118      }
119      if (ioctl (pStatus->cd_fd, CDROMPLAYMSF, &msf)) {
120 -        printf ("play(%d,%d)\n", start, end);
121 +/*        printf ("play(%d,%d)\n", start, end);
122          printf ("msf = %d:%d:%d %d:%d:%d\n",
123                  msf.cdmsf_min0, msf.cdmsf_sec0, msf.cdmsf_frame0,
124                  msf.cdmsf_min1, msf.cdmsf_sec1, msf.cdmsf_frame1);
125          perror ("CDROMPLAYMSF");
126 -        return;
127 +        return;*/
128 +
129 +        /* Fall back to track index playing, because some
130 +           "enhanced" CDs won't work with CDROMPLAYMSF */
131 +        ti.cdti_trk0 = track_frame(pStatus, start);
132 +        ti.cdti_ind0 = 0;
133 +        ti.cdti_trk1 = track_frame(pStatus, end);
134 +        ti.cdti_ind1 = 0;
135 +
136 +        /* Skip to the next audio track (autoplay game CDs) */
137 +        while ( pStatus->thiscd.trk[ti.cdti_trk0 - 1].data) {
138 +            ti.cdti_trk0++;
139 +            if ( ti.cdti_trk0 > ti.cdti_trk1 )
140 +                return;
141 +        }
142 +        if (ioctl (pStatus->cd_fd, CDROMPLAYTRKIND, &ti)) {
143 +            perror ("CDROMPLAYTRKIND");
144 +            return;
145 +        }
146      }
147  }
148  
This page took 0.087983 seconds and 3 git commands to generate.