]>
Commit | Line | Data |
---|---|---|
659eaf96 | 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 |