91 lines
1.5 KiB
C
91 lines
1.5 KiB
C
/*
|
|
* cuefile.c -- cue/toc functions
|
|
*
|
|
* Copyright (C) 2004 Svend Sorensen
|
|
* For license terms, see the file COPYING in this distribution.
|
|
*/
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "cuefile.h"
|
|
#include "cue.h"
|
|
#include "toc.h"
|
|
|
|
Cd *cf_parse (char *name, int *format)
|
|
{
|
|
FILE *fp = NULL;
|
|
Cd *cd = NULL;
|
|
|
|
if (UNKNOWN == *format)
|
|
if (UNKNOWN == (*format = cf_format_from_suffix(name))) {
|
|
fprintf(stderr, "%s: unknown format\n", name);
|
|
return NULL;
|
|
}
|
|
|
|
if (0 == strcmp("-", name)) {
|
|
fp = stdin;
|
|
} else if (NULL == (fp = fopen(name, "r"))) {
|
|
fprintf(stderr, "%s: error opening file\n", name);
|
|
return NULL;
|
|
}
|
|
|
|
switch (*format) {
|
|
case CUE:
|
|
cd = cue_parse(fp);
|
|
break;
|
|
case TOC:
|
|
cd = toc_parse(fp);
|
|
break;
|
|
}
|
|
|
|
if(stdin != fp)
|
|
fclose(fp);
|
|
|
|
return cd;
|
|
}
|
|
|
|
int cf_print (char *name, int *format, Cd *cd)
|
|
{
|
|
FILE *fp = NULL;
|
|
|
|
if (UNKNOWN == *format)
|
|
if (UNKNOWN == (*format = cf_format_from_suffix(name))) {
|
|
fprintf(stderr, "%s: unknown format\n", name);
|
|
return -1;
|
|
}
|
|
|
|
if (0 == strcmp("-", name)) {
|
|
fp = stdout;
|
|
} else if (NULL == (fp = fopen(name, "w"))) {
|
|
fprintf(stderr, "%s: error opening file\n", name);
|
|
return -1;
|
|
}
|
|
|
|
switch (*format) {
|
|
case CUE:
|
|
cue_print(fp, cd);
|
|
break;
|
|
case TOC:
|
|
toc_print(fp, cd);
|
|
break;
|
|
}
|
|
|
|
if(stdout != fp)
|
|
fclose(fp);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int cf_format_from_suffix (char *name)
|
|
{
|
|
char *suffix;
|
|
if (0 != (suffix = strrchr(name, '.'))) {
|
|
if (0 == strcasecmp(".cue", suffix))
|
|
return CUE;
|
|
else if (0 == strcasecmp(".toc", suffix))
|
|
return TOC;
|
|
}
|
|
|
|
return UNKNOWN;
|
|
}
|