/* * cueconvert.c -- convert between cue/toc formats * * Copyright (C) 2004 Svend Sorensen * For license terms, see the file COPYING in this distribution. */ #include #include #include #include #include "cuefile.h" char *progname; void usage (int status) { if (0 == status) { fprintf(stdout, "%s: usage: cueconvert [-h] [-i cue|toc] [-o cue|toc] [infile [outfile]]\n", progname); fputs("\ \n\ OPTIONS\n\ -h print usage\n\ -i cue|toc set format of input file\n\ -o cue|toc set format of output file\n\ ", stdout); } else { fprintf(stderr, "%s: syntax error\n", progname); fprintf(stderr, "run `%s -h' for usage\n", progname); } exit (status); } int convert (char *iname, int iformat, char *oname, int oformat) { Cd *cd = NULL; if (NULL == (cd = cf_parse(iname, &iformat))) { fprintf(stderr, "input file error\n"); return -1; } if (UNKNOWN == oformat) { /* first use file suffix */ if (UNKNOWN == (oformat = cf_format_from_suffix(oname))) { /* then use opposite of input format */ switch(iformat) { case CUE: oformat = TOC; break; case TOC: oformat = CUE; break; } } } return cf_print(oname, &oformat, cd); } int main (int argc, char **argv) { int iformat = UNKNOWN; int oformat = UNKNOWN; /* option variables */ char c; /* getopt() variables */ extern char *optarg; extern int optind; progname = *argv; while (-1 != (c = getopt(argc, argv, "hi:o:"))) { switch (c) { case 'h': usage(0); break; case 'i': if (0 == strcmp("cue", optarg)) iformat = CUE; else if (0 == strcmp("toc", optarg)) iformat = TOC; break; case 'o': if (0 == strcmp("cue", optarg)) oformat = CUE; else if (0 == strcmp("toc", optarg)) oformat = TOC; break; default: usage(1); break; } } if (optind == argc) { convert("-", iformat, "-", oformat); } else if (optind == argc - 1) { convert(argv[optind], iformat, "-", oformat); } else if (optind == argc - 2) { convert(argv[optind], iformat, argv[optind + 1], oformat); } else { usage(1); } return 0; }