|
Packit |
a38265 |
#include "config.h"
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
#include <stdio.h>
|
|
Packit |
a38265 |
#include <stdlib.h>
|
|
Packit |
a38265 |
#include <string.h>
|
|
Packit |
a38265 |
#include <getopt.h>
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
#include "oggz-chop.h"
|
|
Packit |
a38265 |
#include "oggz_tools.h"
|
|
Packit |
a38265 |
#include "timespec.h"
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
static char * progname;
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
static void
|
|
Packit |
a38265 |
usage (char * progname)
|
|
Packit |
a38265 |
{
|
|
Packit |
a38265 |
printf ("Usage: %s [options] filename\n", progname);
|
|
Packit |
a38265 |
printf ("Extract the part of an Ogg file between given start and/or end times.\n");
|
|
Packit |
a38265 |
printf ("\nOutput options\n");
|
|
Packit |
a38265 |
printf (" -o filename, --output filename\n");
|
|
Packit |
a38265 |
printf (" Specify output filename\n");
|
|
Packit |
a38265 |
printf (" -s start_time, --start start_time\n");
|
|
Packit |
a38265 |
printf (" Specify start time\n");
|
|
Packit |
a38265 |
printf (" -e end_time, --end end_time\n");
|
|
Packit |
a38265 |
printf (" Specify end time\n");
|
|
Packit |
a38265 |
printf (" -k , --no-skeleton Do NOT include a Skeleton bitstream in the output");
|
|
Packit |
a38265 |
printf ("\nMiscellaneous options\n");
|
|
Packit |
a38265 |
printf (" -n, --dry-run Don't actually write the output\n");
|
|
Packit |
a38265 |
printf (" -h, --help Display this help and exit\n");
|
|
Packit |
a38265 |
printf (" -v, --version Output version information and exit\n");
|
|
Packit |
a38265 |
printf (" -V, --verbose Verbose operation, prints to stderr\n");
|
|
Packit |
a38265 |
printf ("\n");
|
|
Packit |
a38265 |
printf ("Please report bugs to <ogg-dev@xiph.org>\n");
|
|
Packit |
a38265 |
}
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
static int
|
|
Packit |
a38265 |
version (FILE *stream)
|
|
Packit |
a38265 |
{
|
|
Packit |
a38265 |
return fprintf (stream, "%s version " VERSION "\n", progname);
|
|
Packit |
a38265 |
}
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
int
|
|
Packit |
a38265 |
cmd_main (OCState * state, int argc, char * argv[])
|
|
Packit |
a38265 |
{
|
|
Packit |
a38265 |
int show_version = 0;
|
|
Packit |
a38265 |
int show_help = 0;
|
|
Packit |
a38265 |
int i;
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
char * optstring = "s:e:o:knhvV";
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
#ifdef HAVE_GETOPT_LONG
|
|
Packit |
a38265 |
static struct option long_options[] = {
|
|
Packit |
a38265 |
{"start", required_argument, 0, 's'},
|
|
Packit |
a38265 |
{"end", required_argument, 0, 'e'},
|
|
Packit |
a38265 |
{"output", required_argument, 0, 'o'},
|
|
Packit |
a38265 |
{"no-skeleton", no_argument, 0, 'k'},
|
|
Packit |
a38265 |
{"dry-run", no_argument, 0, 'n'},
|
|
Packit |
a38265 |
{"help", no_argument, 0, 'h'},
|
|
Packit |
a38265 |
{"version", no_argument, 0, 'v'},
|
|
Packit |
a38265 |
{"verbose", no_argument, 0, 'V'},
|
|
Packit |
a38265 |
{0,0,0,0}
|
|
Packit |
a38265 |
};
|
|
Packit |
a38265 |
#endif
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
progname = argv[0];
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
if (argc < 2) {
|
|
Packit |
a38265 |
usage (progname);
|
|
Packit |
a38265 |
return (1);
|
|
Packit |
a38265 |
}
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
if (!strncmp (argv[1], "-?", 2)) {
|
|
Packit |
a38265 |
#ifdef HAVE_GETOPT_LONG
|
|
Packit |
a38265 |
ot_print_options (long_options, optstring);
|
|
Packit |
a38265 |
#else
|
|
Packit |
a38265 |
ot_print_short_options (optstring);
|
|
Packit |
a38265 |
#endif
|
|
Packit |
a38265 |
exit (0);
|
|
Packit |
a38265 |
}
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
memset (state, 0, sizeof(*state));
|
|
Packit |
a38265 |
state->end = -1.0;
|
|
Packit |
a38265 |
state->do_skeleton = 1;
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
while (1) {
|
|
Packit |
a38265 |
#ifdef HAVE_GETOPT_LONG
|
|
Packit |
a38265 |
i = getopt_long(argc, argv, optstring, long_options, NULL);
|
|
Packit |
a38265 |
#else
|
|
Packit |
a38265 |
i = getopt (argc, argv, optstring);
|
|
Packit |
a38265 |
#endif
|
|
Packit |
a38265 |
if (i == -1) break;
|
|
Packit |
a38265 |
if (i == ':') {
|
|
Packit |
a38265 |
usage (progname);
|
|
Packit |
a38265 |
goto exit_err;
|
|
Packit |
a38265 |
}
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
switch (i) {
|
|
Packit |
a38265 |
case 's': /* start */
|
|
Packit |
a38265 |
state->start = parse_timespec (optarg);
|
|
Packit |
a38265 |
break;
|
|
Packit |
a38265 |
case 'e': /* end */
|
|
Packit |
a38265 |
state->end = parse_timespec (optarg);
|
|
Packit |
a38265 |
break;
|
|
Packit |
a38265 |
case 'k': /* no-skeleton */
|
|
Packit |
a38265 |
state->do_skeleton = 0;
|
|
Packit |
a38265 |
break;
|
|
Packit |
a38265 |
case 'n': /* dry-run */
|
|
Packit |
a38265 |
state->dry_run = 1;
|
|
Packit |
a38265 |
break;
|
|
Packit |
a38265 |
case 'h': /* help */
|
|
Packit |
a38265 |
show_help = 1;
|
|
Packit |
a38265 |
break;
|
|
Packit |
a38265 |
case 'v': /* version */
|
|
Packit |
a38265 |
show_version = 1;
|
|
Packit |
a38265 |
break;
|
|
Packit |
a38265 |
case 'V': /* verbose */
|
|
Packit |
a38265 |
state->verbose = 1;
|
|
Packit |
a38265 |
break;
|
|
Packit |
a38265 |
case 'o': /* output */
|
|
Packit |
a38265 |
state->outfilename = optarg;
|
|
Packit |
a38265 |
break;
|
|
Packit |
a38265 |
default:
|
|
Packit |
a38265 |
break;
|
|
Packit |
a38265 |
}
|
|
Packit |
a38265 |
}
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
if (show_version) {
|
|
Packit |
a38265 |
version (stdout);
|
|
Packit |
a38265 |
} else if (state->verbose) {
|
|
Packit |
a38265 |
version (stderr);
|
|
Packit |
a38265 |
}
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
if (show_help) {
|
|
Packit |
a38265 |
usage (progname);
|
|
Packit |
a38265 |
}
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
if (show_version || show_help) {
|
|
Packit |
a38265 |
goto exit_ok;
|
|
Packit |
a38265 |
}
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
if (optind >= argc) {
|
|
Packit |
a38265 |
usage (progname);
|
|
Packit |
a38265 |
goto exit_err;
|
|
Packit |
a38265 |
}
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
state->infilename = argv[optind++];
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
return chop (state);
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
exit_ok:
|
|
Packit |
a38265 |
return 0;
|
|
Packit |
a38265 |
|
|
Packit |
a38265 |
exit_err:
|
|
Packit |
a38265 |
return 1;
|
|
Packit |
a38265 |
}
|