1 /* metaflac - Command-line FLAC metadata editor
2 * Copyright (C) 2001,2002,2003,2004,2005,2006 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.
19 #ifndef metaflac__options_h
20 #define metaflac__options_h
22 #include "FLAC/format.h"
25 /*[JEC] was:#if HAVE_GETOPT_LONG*/
26 /*[JEC] see flac/include/share/getopt.h as to why the change */
29 # include "share/getopt.h"
32 extern struct share__option long_options_[];
36 OP__SHOW_MIN_BLOCKSIZE,
37 OP__SHOW_MAX_BLOCKSIZE,
38 OP__SHOW_MIN_FRAMESIZE,
39 OP__SHOW_MAX_FRAMESIZE,
43 OP__SHOW_TOTAL_SAMPLES,
45 OP__SET_MIN_BLOCKSIZE,
46 OP__SET_MAX_BLOCKSIZE,
47 OP__SET_MIN_FRAMESIZE,
48 OP__SET_MAX_FRAMESIZE,
52 OP__SET_TOTAL_SAMPLES,
57 OP__REMOVE_VC_FIRSTFIELD,
61 OP__IMPORT_CUESHEET_FROM,
62 OP__EXPORT_CUESHEET_TO,
78 ARG__EXCEPT_BLOCK_TYPE,
85 } Argument_StreaminfoMD5;
89 } Argument_StreaminfoUInt32;
93 } Argument_StreaminfoUInt64;
97 } Argument_VcFieldName;
100 char *field; /* the whole field as passed on the command line, i.e. "NAME=VALUE" */
102 /* according to the vorbis spec, field values can contain \0 so simple C strings are not enough here */
103 unsigned field_value_length;
105 FLAC__bool field_value_from_file; /* true if field_value holds a filename for the value, false for plain value */
113 unsigned num_entries;
115 } Argument_BlockNumber;
118 FLAC__MetadataType type;
119 char application_id[4]; /* only relevant if type == FLAC__STREAM_METADATA_TYPE_APPLICATION */
120 FLAC__bool filter_application_by_id;
121 } Argument_BlockTypeEntry;
124 unsigned num_entries;
125 Argument_BlockTypeEntry *entries;
126 } Argument_BlockType;
129 FLAC__bool is_binary;
130 } Argument_DataFormat;
138 } Argument_AddSeekpoint;
142 Argument_AddSeekpoint *add_seekpoint_link;
143 } Argument_ImportCuesheetFrom;
147 } Argument_AddPadding;
152 Argument_StreaminfoMD5 streaminfo_md5;
153 Argument_StreaminfoUInt32 streaminfo_uint32;
154 Argument_StreaminfoUInt64 streaminfo_uint64;
155 Argument_VcFieldName vc_field_name;
156 Argument_VcField vc_field;
157 Argument_String filename;
158 Argument_String specification;
159 Argument_ImportCuesheetFrom import_cuesheet_from;
160 Argument_AddSeekpoint add_seekpoint;
161 Argument_AddPadding add_padding;
168 Argument_BlockNumber block_number;
169 Argument_BlockType block_type;
170 Argument_DataFormat data_format;
171 Argument_FromFile from_file;
176 FLAC__bool preserve_modtime;
177 FLAC__bool prefix_with_filename;
178 FLAC__bool utf8_convert;
179 FLAC__bool use_padding;
180 FLAC__bool cued_seekpoints;
181 FLAC__bool show_long_help;
182 FLAC__bool show_version;
183 FLAC__bool application_data_format_is_hexdump;
185 Operation *operations;
186 unsigned num_operations;
191 unsigned num_shorthand_ops;
192 unsigned num_major_ops;
193 FLAC__bool has_block_type;
194 FLAC__bool has_except_block_type;
197 unsigned num_arguments;
202 } CommandLineOptions;
204 void init_options(CommandLineOptions *options);
205 FLAC__bool parse_options(int argc, char *argv[], CommandLineOptions *options);
206 void free_options(CommandLineOptions *options);