Blame src/tools/oggz-chop/cmd.c

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
}