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

Windows CE

开发平台:

C/C++

  1. /* metaflac - Command-line FLAC metadata editor
  2.  * Copyright (C) 2001,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. #ifndef metaflac__options_h
  19. #define metaflac__options_h
  20. #include "FLAC/format.h"
  21. #if 0
  22. /*[JEC] was:#if HAVE_GETOPT_LONG*/
  23. /*[JEC] see flac/include/share/getopt.h as to why the change */
  24. #  include <getopt.h>
  25. #else
  26. #  include "share/getopt.h"
  27. #endif
  28. extern struct share__option long_options_[];
  29. typedef enum {
  30. OP__SHOW_MD5SUM,
  31. OP__SHOW_MIN_BLOCKSIZE,
  32. OP__SHOW_MAX_BLOCKSIZE,
  33. OP__SHOW_MIN_FRAMESIZE,
  34. OP__SHOW_MAX_FRAMESIZE,
  35. OP__SHOW_SAMPLE_RATE,
  36. OP__SHOW_CHANNELS,
  37. OP__SHOW_BPS,
  38. OP__SHOW_TOTAL_SAMPLES,
  39. OP__SET_MD5SUM,
  40. OP__SET_MIN_BLOCKSIZE,
  41. OP__SET_MAX_BLOCKSIZE,
  42. OP__SET_MIN_FRAMESIZE,
  43. OP__SET_MAX_FRAMESIZE,
  44. OP__SET_SAMPLE_RATE,
  45. OP__SET_CHANNELS,
  46. OP__SET_BPS,
  47. OP__SET_TOTAL_SAMPLES,
  48. OP__SHOW_VC_VENDOR,
  49. OP__SHOW_VC_FIELD,
  50. OP__REMOVE_VC_ALL,
  51. OP__REMOVE_VC_FIELD,
  52. OP__REMOVE_VC_FIRSTFIELD,
  53. OP__SET_VC_FIELD,
  54. OP__IMPORT_VC_FROM,
  55. OP__EXPORT_VC_TO,
  56. OP__IMPORT_CUESHEET_FROM,
  57. OP__EXPORT_CUESHEET_TO,
  58. OP__ADD_SEEKPOINT,
  59. OP__ADD_REPLAY_GAIN,
  60. OP__ADD_PADDING,
  61. OP__LIST,
  62. OP__APPEND,
  63. OP__REMOVE,
  64. OP__REMOVE_ALL,
  65. OP__MERGE_PADDING,
  66. OP__SORT_PADDING
  67. } OperationType;
  68. typedef enum {
  69. ARG__BLOCK_NUMBER,
  70. ARG__BLOCK_TYPE,
  71. ARG__EXCEPT_BLOCK_TYPE,
  72. ARG__DATA_FORMAT,
  73. ARG__FROM_FILE
  74. } ArgumentType;
  75. typedef struct {
  76. FLAC__byte value[16];
  77. } Argument_StreaminfoMD5;
  78. typedef struct {
  79. FLAC__uint32 value;
  80. } Argument_StreaminfoUInt32;
  81. typedef struct {
  82. FLAC__uint64 value;
  83. } Argument_StreaminfoUInt64;
  84. typedef struct {
  85. char *value;
  86. } Argument_VcFieldName;
  87. typedef struct {
  88. char *field; /* the whole field as passed on the command line, i.e. "NAME=VALUE" */
  89. char *field_name;
  90. /* according to the vorbis spec, field values can contain  so simple C strings are not enough here */
  91. unsigned field_value_length;
  92. char *field_value;
  93. } Argument_VcField;
  94. typedef struct {
  95. char *value;
  96. } Argument_Filename;
  97. typedef struct {
  98. unsigned num_entries;
  99. unsigned *entries;
  100. } Argument_BlockNumber;
  101. typedef struct {
  102. FLAC__MetadataType type;
  103. char application_id[4]; /* only relevant if type == FLAC__STREAM_METADATA_TYPE_APPLICATION */
  104. FLAC__bool filter_application_by_id;
  105. } Argument_BlockTypeEntry;
  106. typedef struct {
  107. unsigned num_entries;
  108. Argument_BlockTypeEntry *entries;
  109. } Argument_BlockType;
  110. typedef struct {
  111. FLAC__bool is_binary;
  112. } Argument_DataFormat;
  113. typedef struct {
  114. char *file_name;
  115. } Argument_FromFile;
  116. typedef struct {
  117. char *specification;
  118. } Argument_AddSeekpoint;
  119. typedef struct {
  120. char *filename;
  121. Argument_AddSeekpoint *add_seekpoint_link;
  122. } Argument_ImportCuesheetFrom;
  123. typedef struct {
  124. unsigned length;
  125. } Argument_AddPadding;
  126. typedef struct {
  127. OperationType type;
  128. union {
  129. Argument_StreaminfoMD5 streaminfo_md5;
  130. Argument_StreaminfoUInt32 streaminfo_uint32;
  131. Argument_StreaminfoUInt64 streaminfo_uint64;
  132. Argument_VcFieldName vc_field_name;
  133. Argument_VcField vc_field;
  134. Argument_Filename filename;
  135. Argument_ImportCuesheetFrom import_cuesheet_from;
  136. Argument_AddSeekpoint add_seekpoint;
  137. Argument_AddPadding add_padding;
  138. } argument;
  139. } Operation;
  140. typedef struct {
  141. ArgumentType type;
  142. union {
  143. Argument_BlockNumber block_number;
  144. Argument_BlockType block_type;
  145. Argument_DataFormat data_format;
  146. Argument_FromFile from_file;
  147. } value;
  148. } Argument;
  149. typedef struct {
  150. FLAC__bool preserve_modtime;
  151. FLAC__bool prefix_with_filename;
  152. FLAC__bool utf8_convert;
  153. FLAC__bool use_padding;
  154. FLAC__bool cued_seekpoints;
  155. FLAC__bool show_long_help;
  156. FLAC__bool show_version;
  157. FLAC__bool application_data_format_is_hexdump;
  158. struct {
  159. Operation *operations;
  160. unsigned num_operations;
  161. unsigned capacity;
  162. } ops;
  163. struct {
  164. struct {
  165. unsigned num_shorthand_ops;
  166. unsigned num_major_ops;
  167. FLAC__bool has_block_type;
  168. FLAC__bool has_except_block_type;
  169. } checks;
  170. Argument *arguments;
  171. unsigned num_arguments;
  172. unsigned capacity;
  173. } args;
  174. unsigned num_files;
  175. char **filenames;
  176. } CommandLineOptions;
  177. void init_options(CommandLineOptions *options);
  178. FLAC__bool parse_options(int argc, char *argv[], CommandLineOptions *options);
  179. void free_options(CommandLineOptions *options);
  180. #endif