1 /* test_cuesheet - Simple tester for cuesheet routines in grabbag
2 * Copyright (C) 2002,2003 Josh Coalson
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 #include "FLAC/assert.h"
23 #include "FLAC/metadata.h"
24 #include "share/grabbag.h"
26 static int do_cuesheet(const char *infilename, FLAC__bool is_cdda, FLAC__uint64 lead_out_offset)
29 const char *error_message;
30 char tmpfilename[4096];
31 unsigned last_line_read;
32 FLAC__StreamMetadata *cuesheet;
34 FLAC__ASSERT(strlen(infilename) + 2 < sizeof(tmpfilename));
39 if(0 == strcmp(infilename, "-")) {
42 else if(0 == (fin = fopen(infilename, "r"))) {
43 fprintf(stderr, "can't open file %s for reading\n", infilename);
46 if(0 != (cuesheet = grabbag__cuesheet_parse(fin, &error_message, &last_line_read, is_cdda, lead_out_offset))) {
51 printf("pass1: parse error, line %u: \"%s\"\n", last_line_read, error_message);
56 if(!FLAC__metadata_object_cuesheet_is_legal(cuesheet, is_cdda, &error_message)) {
57 printf("pass1: illegal cuesheet: \"%s\"\n", error_message);
58 FLAC__metadata_object_delete(cuesheet);
61 sprintf(tmpfilename, "%s.1", infilename);
62 if(0 == (fout = fopen(tmpfilename, "w"))) {
63 fprintf(stderr, "can't open file %s for writing\n", tmpfilename);
64 FLAC__metadata_object_delete(cuesheet);
67 grabbag__cuesheet_emit(fout, cuesheet, "\"dummy.wav\" WAVE");
68 FLAC__metadata_object_delete(cuesheet);
74 if(0 == (fin = fopen(tmpfilename, "r"))) {
75 fprintf(stderr, "can't open file %s for reading\n", tmpfilename);
78 if(0 != (cuesheet = grabbag__cuesheet_parse(fin, &error_message, &last_line_read, is_cdda, lead_out_offset))) {
83 printf("pass2: parse error, line %u: \"%s\"\n", last_line_read, error_message);
88 if(!FLAC__metadata_object_cuesheet_is_legal(cuesheet, is_cdda, &error_message)) {
89 printf("pass2: illegal cuesheet: \"%s\"\n", error_message);
90 FLAC__metadata_object_delete(cuesheet);
93 sprintf(tmpfilename, "%s.2", infilename);
94 if(0 == (fout = fopen(tmpfilename, "w"))) {
95 fprintf(stderr, "can't open file %s for writing\n", tmpfilename);
96 FLAC__metadata_object_delete(cuesheet);
99 grabbag__cuesheet_emit(fout, cuesheet, "\"dummy.wav\" WAVE");
100 FLAC__metadata_object_delete(cuesheet);
106 int main(int argc, char *argv[])
108 FLAC__uint64 lead_out_offset;
109 FLAC__bool is_cdda = false;
110 const char *usage = "usage: test_cuesheet cuesheet_file lead_out_offset [ cdda ]\n";
112 if(argc > 1 && 0 == strcmp(argv[1], "-h")) {
117 if(argc < 3 || argc > 4) {
118 fprintf(stderr, usage);
122 lead_out_offset = (FLAC__uint64)strtoul(argv[2], 0, 10);
124 if(0 == strcmp(argv[3], "cdda"))
127 fprintf(stderr, usage);
132 return do_cuesheet(argv[1], is_cdda, lead_out_offset);