Added append, prepend, and split pregap modes to cuebreakpoints.
This commit is contained in:
@@ -14,6 +14,8 @@
|
||||
|
||||
char *progname;
|
||||
|
||||
enum {APPEND, PREPEND, SPLIT};
|
||||
|
||||
void usage (int status)
|
||||
{
|
||||
if (0 == status) {
|
||||
@@ -23,6 +25,9 @@ void usage (int status)
|
||||
OPTIONS\n\
|
||||
-h, --help print usage\n\
|
||||
-i, --input-format cue|toc set format of file(s)\n\
|
||||
--append-gaps append pregaps to previous track (default)\n\
|
||||
--prepend-gaps prefix pregaps to track\n\
|
||||
--split-gaps split at beginning and end of pregaps\n\
|
||||
", stdout);
|
||||
} else {
|
||||
fprintf(stderr, "run `%s --help' for usage\n", progname);
|
||||
@@ -39,27 +44,45 @@ void print_m_ss_ff (long frame)
|
||||
printf ("%d:%02d.%02d\n", m, s, f);
|
||||
}
|
||||
|
||||
void print_breaks (Cd *cd)
|
||||
void print_breakpoint (long b)
|
||||
{
|
||||
/* do not print zero breakpoints */
|
||||
if (0 != b)
|
||||
print_m_ss_ff(b);
|
||||
}
|
||||
|
||||
void print_breaks (Cd *cd, int gaps)
|
||||
{
|
||||
int i;
|
||||
long b;
|
||||
Track *track;
|
||||
|
||||
/* start on track 2 */
|
||||
for (i = 2; i <= cd_get_ntrack(cd); i++) {
|
||||
for (i = 1; i <= cd_get_ntrack(cd); i++) {
|
||||
track = cd_get_track(cd, i);
|
||||
/* breakpoint is at index 1 */
|
||||
/* TODO: make option for breakpoint at index 0,
|
||||
* and option for breakpoints a index 0 and 1
|
||||
/* when breakpoint is at:
|
||||
* index 0: gap is prepended to track
|
||||
* index 1: gap is appended to previous track
|
||||
*/
|
||||
b = track_get_start(track) + track_get_index(track, 1) - track_get_zero_pre(track);
|
||||
/* don't print zero indexes */
|
||||
if (0 != b)
|
||||
print_m_ss_ff(b);
|
||||
b = track_get_start(track);
|
||||
|
||||
if (gaps == PREPEND || gaps == SPLIT) {
|
||||
print_breakpoint(b);
|
||||
}
|
||||
|
||||
if (gaps == APPEND || gaps == SPLIT) {
|
||||
/* there is no previous track to append the first tracks pregap to */
|
||||
/* TODO: should first track's pregap be split when appending?
|
||||
* this could be a suprising default
|
||||
*/
|
||||
if (1 < i) {
|
||||
b += track_get_index(track, 1) - track_get_zero_pre(track);
|
||||
print_breakpoint(b);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int breaks (char *name, int format)
|
||||
int breaks (char *name, int format, int gaps)
|
||||
{
|
||||
Cd *cd = NULL;
|
||||
|
||||
@@ -68,7 +91,7 @@ int breaks (char *name, int format)
|
||||
return -1;
|
||||
}
|
||||
|
||||
print_breaks(cd);
|
||||
print_breaks(cd, gaps);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -76,6 +99,7 @@ int breaks (char *name, int format)
|
||||
int main (int argc, char **argv)
|
||||
{
|
||||
int format = UNKNOWN;
|
||||
int gaps = APPEND;
|
||||
|
||||
/* option variables */
|
||||
char c;
|
||||
@@ -86,6 +110,9 @@ int main (int argc, char **argv)
|
||||
static struct option longopts[] = {
|
||||
{"help", no_argument, NULL, 'h'},
|
||||
{"input-format", required_argument, NULL, 'i'},
|
||||
{"append-gaps", no_argument, NULL, 'a'},
|
||||
{"prepend-gaps", no_argument, NULL, 'p'},
|
||||
{"split-gaps", no_argument, NULL, 's'},
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
@@ -105,6 +132,15 @@ int main (int argc, char **argv)
|
||||
fprintf(stderr, "%s: illegal format `%s'\n", progname, optarg);
|
||||
usage(1);
|
||||
break;
|
||||
case 'a':
|
||||
gaps = APPEND;
|
||||
break;
|
||||
case 'p':
|
||||
gaps = PREPEND;
|
||||
break;
|
||||
case 's':
|
||||
gaps = SPLIT;
|
||||
break;
|
||||
default:
|
||||
usage(1);
|
||||
break;
|
||||
@@ -112,10 +148,10 @@ int main (int argc, char **argv)
|
||||
}
|
||||
|
||||
if (optind == argc) {
|
||||
breaks("-", format);
|
||||
breaks("-", format, gaps);
|
||||
} else {
|
||||
for (; optind < argc; optind++)
|
||||
breaks(argv[optind], format);
|
||||
breaks(argv[optind], format, gaps);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user