main.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:4k
源码类别:

Windows CE

开发平台:

C/C++

  1. /* test_cuesheet - Simple tester for cuesheet routines in grabbag
  2.  * Copyright (C) 2002,2003,2004,2005  Josh Coalson
  3.  *
  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.
  8.  *
  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.
  13.  *
  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.
  17.  */
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <string.h>
  21. #include "FLAC/assert.h"
  22. #include "FLAC/metadata.h"
  23. #include "share/grabbag.h"
  24. static int do_cuesheet(const char *infilename, FLAC__bool is_cdda, FLAC__uint64 lead_out_offset)
  25. {
  26. FILE *fin, *fout;
  27. const char *error_message;
  28. char tmpfilename[4096];
  29. unsigned last_line_read;
  30. FLAC__StreamMetadata *cuesheet;
  31. FLAC__ASSERT(strlen(infilename) + 2 < sizeof(tmpfilename));
  32. /*
  33.  * pass 1
  34.  */
  35. if(0 == strcmp(infilename, "-")) {
  36. fin = stdin;
  37. }
  38. else if(0 == (fin = fopen(infilename, "r"))) {
  39. fprintf(stderr, "can't open file %s for readingn", infilename);
  40. return 255;
  41. }
  42. if(0 != (cuesheet = grabbag__cuesheet_parse(fin, &error_message, &last_line_read, is_cdda, lead_out_offset))) {
  43. if(fin != stdin)
  44. fclose(fin);
  45. }
  46. else {
  47. printf("pass1: parse error, line %u: "%s"n", last_line_read, error_message);
  48. if(fin != stdin)
  49. fclose(fin);
  50. return 1;
  51. }
  52. if(!FLAC__metadata_object_cuesheet_is_legal(cuesheet, is_cdda, &error_message)) {
  53. printf("pass1: illegal cuesheet: "%s"n", error_message);
  54. FLAC__metadata_object_delete(cuesheet);
  55. return 1;
  56. }
  57. sprintf(tmpfilename, "%s.1", infilename);
  58. if(0 == (fout = fopen(tmpfilename, "w"))) {
  59. fprintf(stderr, "can't open file %s for writingn", tmpfilename);
  60. FLAC__metadata_object_delete(cuesheet);
  61. return 255;
  62. }
  63. grabbag__cuesheet_emit(fout, cuesheet, ""dummy.wav" WAVE");
  64. FLAC__metadata_object_delete(cuesheet);
  65. fclose(fout);
  66. /*
  67.  * pass 2
  68.  */
  69. if(0 == (fin = fopen(tmpfilename, "r"))) {
  70. fprintf(stderr, "can't open file %s for readingn", tmpfilename);
  71. return 255;
  72. }
  73. if(0 != (cuesheet = grabbag__cuesheet_parse(fin, &error_message, &last_line_read, is_cdda, lead_out_offset))) {
  74. if(fin != stdin)
  75. fclose(fin);
  76. }
  77. else {
  78. printf("pass2: parse error, line %u: "%s"n", last_line_read, error_message);
  79. if(fin != stdin)
  80. fclose(fin);
  81. return 1;
  82. }
  83. if(!FLAC__metadata_object_cuesheet_is_legal(cuesheet, is_cdda, &error_message)) {
  84. printf("pass2: illegal cuesheet: "%s"n", error_message);
  85. FLAC__metadata_object_delete(cuesheet);
  86. return 1;
  87. }
  88. sprintf(tmpfilename, "%s.2", infilename);
  89. if(0 == (fout = fopen(tmpfilename, "w"))) {
  90. fprintf(stderr, "can't open file %s for writingn", tmpfilename);
  91. FLAC__metadata_object_delete(cuesheet);
  92. return 255;
  93. }
  94. grabbag__cuesheet_emit(fout, cuesheet, ""dummy.wav" WAVE");
  95. FLAC__metadata_object_delete(cuesheet);
  96. fclose(fout);
  97. return 0;
  98. }
  99. int main(int argc, char *argv[])
  100. {
  101. FLAC__uint64 lead_out_offset;
  102. FLAC__bool is_cdda = false;
  103. const char *usage = "usage: test_cuesheet cuesheet_file lead_out_offset [ cdda ]n";
  104. if(argc > 1 && 0 == strcmp(argv[1], "-h")) {
  105. printf(usage);
  106. return 0;
  107. }
  108. if(argc < 3 || argc > 4) {
  109. fprintf(stderr, usage);
  110. return 255;
  111. }
  112. lead_out_offset = (FLAC__uint64)strtoul(argv[2], 0, 10);
  113. if(argc == 4) {
  114. if(0 == strcmp(argv[3], "cdda"))
  115. is_cdda = true;
  116. else {
  117. fprintf(stderr, usage);
  118. return 255;
  119. }
  120. }
  121. return do_cuesheet(argv[1], is_cdda, lead_out_offset);
  122. }