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

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. #include "usage.h"
  19. #include "FLAC/format.h"
  20. #include <stdarg.h>
  21. #include <stdio.h>
  22. static void usage_header(FILE *out)
  23. {
  24. fprintf(out, "==============================================================================n");
  25. fprintf(out, "metaflac - Command-line FLAC metadata editor version %sn", FLAC__VERSION_STRING);
  26. fprintf(out, "Copyright (C) 2001,2002,2003,2004,2005  Josh Coalsonn");
  27. fprintf(out, "n");
  28. fprintf(out, "This program is free software; you can redistribute it and/orn");
  29. fprintf(out, "modify it under the terms of the GNU General Public Licensen");
  30. fprintf(out, "as published by the Free Software Foundation; either version 2n");
  31. fprintf(out, "of the License, or (at your option) any later version.n");
  32. fprintf(out, "n");
  33. fprintf(out, "This program is distributed in the hope that it will be useful,n");
  34. fprintf(out, "but WITHOUT ANY WARRANTY; without even the implied warranty ofn");
  35. fprintf(out, "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See then");
  36. fprintf(out, "GNU General Public License for more details.n");
  37. fprintf(out, "n");
  38. fprintf(out, "You should have received a copy of the GNU General Public Licensen");
  39. fprintf(out, "along with this program; if not, write to the Free Softwaren");
  40. fprintf(out, "Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.n");
  41. fprintf(out, "==============================================================================n");
  42. }
  43. static void usage_summary(FILE *out)
  44. {
  45. fprintf(out, "Usage:n");
  46. fprintf(out, "  metaflac [options] [operations] FLACfile [FLACfile ...]n");
  47. fprintf(out, "n");
  48. fprintf(out, "Use metaflac to list, add, remove, or edit metadata in one or more FLAC files.n");
  49. fprintf(out, "You may perform one major operation, or many shorthand operations at a time.n");
  50. fprintf(out, "n");
  51. fprintf(out, "Options:n");
  52. fprintf(out, "--preserve-modtime    Preserve the original modification time in spite of editsn");
  53. fprintf(out, "--with-filename       Prefix each output line with the FLAC file namen");
  54. fprintf(out, "                      (the default if more than one FLAC file is specified)n");
  55. fprintf(out, "--no-filename         Do not prefix each output line with the FLAC file namen");
  56. fprintf(out, "                      (the default if only one FLAC file is specified)n");
  57. fprintf(out, "--no-utf8-convert     Do not convert tags from UTF-8 to local charset,n");
  58. fprintf(out, "                      or vice versa.  This is useful for scripts.n");
  59. fprintf(out, "--dont-use-padding    By default metaflac tries to use padding where possiblen");
  60. fprintf(out, "                      to avoid rewriting the entire file if the metadata sizen");
  61. fprintf(out, "                      changes.  Use this option to tell metaflac to not taken");
  62. fprintf(out, "                      advantage of padding this way.n");
  63. }
  64. int short_usage(const char *message, ...)
  65. {
  66. va_list args;
  67. if(message) {
  68. va_start(args, message);
  69. (void) vfprintf(stderr, message, args);
  70. va_end(args);
  71. }
  72. usage_header(stderr);
  73. fprintf(stderr, "n");
  74. fprintf(stderr, "This is the short help; for full help use 'metaflac --help'n");
  75. fprintf(stderr, "n");
  76. usage_summary(stderr);
  77. return message? 1 : 0;
  78. }
  79. int long_usage(const char *message, ...)
  80. {
  81. FILE *out = (message? stderr : stdout);
  82. va_list args;
  83. if(message) {
  84. va_start(args, message);
  85. (void) vfprintf(stderr, message, args);
  86. va_end(args);
  87. }
  88. usage_header(out);
  89. fprintf(out, "n");
  90. usage_summary(out);
  91. fprintf(out, "n");
  92. fprintf(out, "Shorthand operations:n");
  93. fprintf(out, "--show-md5sum         Show the MD5 signature from the STREAMINFO block.n");
  94. fprintf(out, "--show-min-blocksize  Show the minimum block size from the STREAMINFO block.n");
  95. fprintf(out, "--show-max-blocksize  Show the maximum block size from the STREAMINFO block.n");
  96. fprintf(out, "--show-min-framesize  Show the minimum frame size from the STREAMINFO block.n");
  97. fprintf(out, "--show-max-framesize  Show the maximum frame size from the STREAMINFO block.n");
  98. fprintf(out, "--show-sample-rate    Show the sample rate from the STREAMINFO block.n");
  99. fprintf(out, "--show-channels       Show the number of channels from the STREAMINFO block.n");
  100. fprintf(out, "--show-bps            Show the # of bits per sample from the STREAMINFO block.n");
  101. fprintf(out, "--show-total-samples  Show the total # of samples from the STREAMINFO block.n");
  102. fprintf(out, "n");
  103. fprintf(out, "--show-vendor-tag     Show the vendor string from the VORBIS_COMMENT block.n");
  104. fprintf(out, "--show-tag=NAME       Show all tags where the the field name matches 'NAME'.n");
  105. fprintf(out, "--remove-tag=NAME     Remove all tags whose field name is 'NAME'.n");
  106. fprintf(out, "--remove-first-tag=NAME  Remove first tag whose field name is 'NAME'.n");
  107. fprintf(out, "--remove-all-tags     Remove all tags, leaving only the vendor string.n");
  108. fprintf(out, "--set-tag=FIELD       Add a tag.  The FIELD must comply with the Vorbis commentn");
  109. fprintf(out, "                      spec, of the form "NAME=VALUE".  If there is currentlyn");
  110. fprintf(out, "                      no tag block, one will be created.n");
  111. fprintf(out, "--import-tags-from=FILE Import tags from a file.  Use '-' for stdin.  Each linen");
  112. fprintf(out, "                      should be of the form NAME=VALUE.  Multi-line commentsn");
  113. fprintf(out, "                      are currently not supported.  Specify --remove-all-tagsn");
  114. fprintf(out, "                      and/or --no-utf8-convert before --import-tags-from ifn");
  115. fprintf(out, "                      necessary.n");
  116. fprintf(out, "--export-tags-to=FILE Export tags to a file.  Use '-' for stdin.  Each linen");
  117. fprintf(out, "                      will be of the form NAME=VALUE.  Specifyn");
  118. fprintf(out, "                      --no-utf8-convert if necessary.n");
  119. fprintf(out, "--import-cuesheet-from=FILE  Import a cuesheet from a file.  Use '-' for stdin.n");
  120. fprintf(out, "                      Only one FLAC file may be specified.  A seekpoint will ben");
  121. fprintf(out, "                      added for each index point in the cuesheet to the SEEKTABLEn");
  122. fprintf(out, "                      unless --no-cued-seekpoints is specified.n");
  123. fprintf(out, "--export-cuesheet-to=FILE  Export CUESHEET block to a cuesheet file, suitablen");
  124. fprintf(out, "                      for use by CD authoring software.  Use '-' for stdout.n");
  125. fprintf(out, "                      Only one FLAC file may be specified on the command line.n");
  126. fprintf(out, "--add-replay-gain     Calculates the title and album gains/peaks of the givenn");
  127. fprintf(out, "                      FLAC files as if all the files were part of one album,n");
  128. fprintf(out, "                      then stores them in the VORBIS_COMMENT block.  The tagsn");
  129. fprintf(out, "                      are the same as those used by vorbisgain.  Existingn");
  130. fprintf(out, "                      ReplayGain tags will be replaced.  If only one FLAC filen");
  131. fprintf(out, "                      is given, the album and title gains will be the same.n");
  132. fprintf(out, "                      Since this operation requires two passes, it is alwaysn");
  133. fprintf(out, "                      executed last, after all other operations have beenn");
  134. fprintf(out, "                      completed and written to disk.  All FLAC files specifiedn");
  135. fprintf(out, "                      must have the same resolution, sample rate, and numbern");
  136. fprintf(out, "                      of channels.  The sample rate must be one of 8, 11.025,n");
  137. fprintf(out, "                      12, 16, 22.05, 24, 32, 44.1, or 48 kHz.n");
  138. fprintf(out, "--add-seekpoint={#|X|#x|#s}  Add seek points to a SEEKTABLE blockn");
  139. fprintf(out, "       #  : a specific sample number for a seek pointn");
  140. fprintf(out, "       X  : a placeholder point (always goes at the end of the SEEKTABLE)n");
  141. fprintf(out, "       #x : # evenly spaced seekpoints, the first being at sample 0n");
  142. fprintf(out, "       #s : a seekpoint every # seconds; # does not have to be a whole numbern");
  143. fprintf(out, "                      If no SEEKTABLE block exists, one will be created.  Ifn");
  144. fprintf(out, "                      one already exists, points will be added to the existingn");
  145. fprintf(out, "                      table, and any duplicates will be turned into placeholdern");
  146. fprintf(out, "                      points.  You may use many --add-seekpoint options; then");
  147. fprintf(out, "                      resulting SEEKTABLE will be the unique-ified union ofn");
  148. fprintf(out, "                      all such values.  Example: --add-seekpoint=100xn");
  149. fprintf(out, "                      --add-seekpoint=3.5s will add 100 evenly spacedn");
  150. fprintf(out, "                      seekpoints and a seekpoint every 3.5 seconds.n");
  151. fprintf(out, "--add-padding=length  Add a padding block of the given length (in bytes).n");
  152. fprintf(out, "                      The overall length of the new block will be 4 + length;n");
  153. fprintf(out, "                      the extra 4 bytes is for the metadata block header.n");
  154. fprintf(out, "n");
  155. fprintf(out, "Major operations:n");
  156. fprintf(out, "--versionn");
  157. fprintf(out, "    Show the metaflac version number.n");
  158. fprintf(out, "--listn");
  159. fprintf(out, "    List the contents of one or more metadata blocks to stdout.  By default,n");
  160. fprintf(out, "    all metadata blocks are listed in text format.  Use the following optionsn");
  161. fprintf(out, "    to change this behavior:n");
  162. fprintf(out, "n");
  163. fprintf(out, "    --block-number=#[,#[...]]n");
  164. fprintf(out, "    An optional comma-separated list of block numbers to display.  The firstn");
  165. fprintf(out, "    block, the STREAMINFO block, is block 0.n");
  166. fprintf(out, "n");
  167. fprintf(out, "    --block-type=type[,type[...]]n");
  168. fprintf(out, "    --except-block-type=type[,type[...]]n");
  169. fprintf(out, "    An optional comma-separated list of block types to be included or ignoredn");
  170. fprintf(out, "    with this option.  Use only one of --block-type or --except-block-type.n");
  171. fprintf(out, "    The valid block types are: STREAMINFO, PADDING, APPLICATION, SEEKTABLE,n");
  172. fprintf(out, "    VORBIS_COMMENT.  You may narrow down the types of APPLICATION blocksn");
  173. fprintf(out, "    displayed as follows:n");
  174. fprintf(out, "        APPLICATION:abcd        The APPLICATION block(s) whose textual repre-n");
  175. fprintf(out, "                                sentation of the 4-byte ID is "abcd"n");
  176. fprintf(out, "        APPLICATION:0xXXXXXXXX  The APPLICATION block(s) whose hexadecimal big-n");
  177. fprintf(out, "                                endian representation of the 4-byte ID isn");
  178. fprintf(out, "                                "0xXXXXXXXX".  For the example "abcd" above then");
  179. fprintf(out, "                                hexadecimal equivalalent is 0x61626364n");
  180. fprintf(out, "n");
  181. fprintf(out, "    NOTE: if both --block-number and --[except-]block-type are specified,n");
  182. fprintf(out, "          the result is the logical AND of both arguments.n");
  183. fprintf(out, "n");
  184. #if 0
  185. /*@@@ not implemented yet */
  186. fprintf(out, "    --data-format=binary|textn");
  187. fprintf(out, "    By default a human-readable text representation of the data is displayed.n");
  188. fprintf(out, "    You may specify --data-format=binary to dump the raw binary form of eachn");
  189. fprintf(out, "    metadata block.  The output can be read in using a subsequent call ton");
  190. fprintf(out, "    "metaflac --append --from-file=..."n");
  191. fprintf(out, "n");
  192. #endif
  193. fprintf(out, "    --application-data-format=hexdump|textn");
  194. fprintf(out, "    If the application block you are displaying contains binary data but yourn");
  195. fprintf(out, "    --data-format=text, you can display a hex dump of the application datan");
  196. fprintf(out, "    contents instead using --application-data-format=hexdumpn");
  197. fprintf(out, "n");
  198. #if 0
  199. /*@@@ not implemented yet */
  200. fprintf(out, "--appendn");
  201. fprintf(out, "    Insert a metadata block from a file.  The input file must be in the samen");
  202. fprintf(out, "    format as generated with --list.n");
  203. fprintf(out, "n");
  204. fprintf(out, "    --block-number=#n");
  205. fprintf(out, "    Specify the insertion point (defaults to last block).  The new block willn");
  206. fprintf(out, "    be added after the given block number.  This prevents the illegal insertionn");
  207. fprintf(out, "    of a block before the first STREAMINFO block.  You may not --append anothern");
  208. fprintf(out, "    STREAMINFO block.n");
  209. fprintf(out, "n");
  210. fprintf(out, "    --from-file=filenamen");
  211. fprintf(out, "    Mandatory 'option' to specify the input file containing the block contents.n");
  212. fprintf(out, "n");
  213. fprintf(out, "    --data-format=binary|textn");
  214. fprintf(out, "    By default the block contents are assumed to be in binary format.  You cann");
  215. fprintf(out, "    override this by specifying --data-format=textn");
  216. fprintf(out, "n");
  217. #endif
  218. fprintf(out, "--removen");
  219. fprintf(out, "    Remove one or more metadata blocks from the metadata.  Unlessn");
  220. fprintf(out, "    --dont-use-padding is specified, the blocks will be replaced with padding.n");
  221. fprintf(out, "    You may not remove the STREAMINFO block.n");
  222. fprintf(out, "n");
  223. fprintf(out, "    --block-number=#[,#[...]]n");
  224. fprintf(out, "    --block-type=type[,type[...]]n");
  225. fprintf(out, "    --except-block-type=type[,type[...]]n");
  226. fprintf(out, "    See --list above for usage.n");
  227. fprintf(out, "n");
  228. fprintf(out, "    NOTE: if both --block-number and --[except-]block-type are specified,n");
  229. fprintf(out, "          the result is the logical AND of both arguments.n");
  230. fprintf(out, "n");
  231. fprintf(out, "--remove-alln");
  232. fprintf(out, "    Remove all metadata blocks (except the STREAMINFO block) from then");
  233. fprintf(out, "    metadata.  Unless --dont-use-padding is specified, the blocks will ben");
  234. fprintf(out, "    replaced with padding.n");
  235. fprintf(out, "n");
  236. fprintf(out, "--merge-paddingn");
  237. fprintf(out, "    Merge adjacent PADDING blocks into single blocks.n");
  238. fprintf(out, "n");
  239. fprintf(out, "--sort-paddingn");
  240. fprintf(out, "    Move all PADDING blocks to the end of the metadata and merge them into an");
  241. fprintf(out, "    single block.n");
  242. return message? 1 : 0;
  243. }