void printHelp ()
{
- cout << "Usage: usetaglib [ACTION]... [FILE]..." << endl;
- cout << "Read and edit meta-data of audio formats supported by taglib." << endl;
- cout << endl;
- cout << "-h, --help Show this help" << endl;
- cout << endl;
- cout << "ACTIONS" << endl;
- cout << " If multiple actions are specified they are executed in given order." << endl;
- cout << endl;
- cout << setfill(' ') << setw(37) << left << " -l, --list"
- << "list all tags (implicit if no action specified)"<< endl;
- cout << setfill(' ') << setw(37) << left << " -a, --listaudio"
- << "show audio information"<< endl;
- cout << setfill(' ') << setw(37) << left << " -e, --erase=TAGNAME"
- << "erase tag TAGNAME"<< endl;
- cout << setfill(' ') << setw(37) << left << " -r, --replace=TAGNAME=TAGVALSPEC"
- << "replace tag TAGNAME with value TAGVALSPEC"<< endl;
- cout << setfill(' ') << setw(37) << left << " -i, --insert=TAGNAME=TAGVALSPEC"
- << "insert value TAGVALSPEC for tag TAGNAME"<< endl;
- cout << endl;
- cout << "TAGVALSPEC" << endl;
- cout << " a list of values separated by '=': val1=val2=val3..." << endl;
- cout << endl;
- cout << "EXAMPLES" << endl;
- cout << " usetaglib file.ogg" << endl;
- cout << " usetaglib -e ALBUM file.flac" << endl;
- cout << " usetaglib -r \"ALBUM=New Album\" -i ARTIST=Horst=Hubert file.mp3" << endl;
- cout << " usetaglib -r ARTIST=Horst -l file1.ogg file2.mp3" << endl;
- cout << " usetaglib -i \"ALBUMARTIST=Horst und Hubert\" file.ogg" << endl;
- cout << " usetaglib --insert=\"ALBUMARTIST=Horst und Hubert\" file.ogg" << endl;
+ cout <<
+ "Usage: usetaglib [ACTION]... [FILE]...\n"
+ "Read and edit meta-data of audio formats supported by taglib.\n"
+ "Multiple ACTIONS and FILES may be given in arbitrary order.\n"
+ "\n"
+ "-h, --help show help\n"
+ "-H, --longhelp show long help\n"
+ "\n"
+ "ACTIONS\n"
+ " If multiple actions are specified they are executed in given order.\n"
+ "\n"
+ " -l, --list list all tags (implicit if no action given)\n"
+ " -a, --audio show audio information\n"
+ " -e, --erase=TAGNAME erase tag TAGNAME\n"
+ " -r, --replace=TAGNAME=TAGVAL replace tag TAGNAME with value TAGVAL\n"
+ " -i, --insert=TAGNAME=TAGVAL insert tag TAGNAME with value TAGVAL\n";
+}
+
+void printExtraHelp ()
+{
+ cout <<
+ "\n"
+ "TAGNAME\n"
+ " TAGNAME is a media format independent id encoding the type of a tag.\n"
+ " Note that also in --list output, format specific tag ids are translated\n"
+ " to unified TAGNAMES.\n"
+ "\n"
+ " Some \"well-known\" tags you might want to use are:\n"
+ " TITLE ALBUM ARTIST ALBUMARTIST SUBTITLE TRACKNUMBER DISCNUMBER DATE\n"
+ " ORIGINALDATE GENRE COMMENT TITLESORT ALBUMSORT ARTISTSORT\n"
+ " ALBUMARTISTSORT COMPOSER LYRICIST CONDUCTOR REMIXER PERFORMER ISRC ASIN\n"
+ " BPM COPYRIGHT ENCODEDBY MOOD COMMENT MEDIA LABEL CATALOGNUMBER BARCODE\n"
+ "\n"
+ "TAGVAL\n"
+ " TAGVAL has to be either a single string or a list of strings separated\n"
+ " by equal signs (=). If a list is given, multiple tags of type TAGNAME\n"
+ " will be created and set to the respective values given in the list.\n"
+ "\n"
+ "EXAMPLES"
+ " usetaglib file.ogg\n"
+ " usetaglib -e ALBUM file.flac\n"
+ " usetaglib -r \"ALBUM=New Album\" -i ARTIST=Horst=Hubert file.mp3\n"
+ " usetaglib -r ARTIST=Horst -l file1.ogg file2.mp3\n"
+ " usetaglib -i \"ALBUMARTIST=Horst und Hubert\" file.ogg\n"
+ " usetaglib --insert=\"ALBUMARTIST=Horst und Hubert\" file.ogg\n";
}
int main(int argc, char *argv[])
static struct option long_options[] =
{
{"help", no_argument, 0, 'h'},
+ {"longhelp", no_argument, 0, 'H'},
{"list", no_argument, 0, 'l'},
- {"listaudio", no_argument, 0, 'a'},
+ {"audio", no_argument, 0, 'a'},
{"insert", required_argument, 0, 'i'},
{"erase", required_argument, 0, 'e'},
{"replace", required_argument, 0, 'r'},
};
int option_index = 0;
- c = getopt_long (argc, argv, "hlai:e:r:",
+ c = getopt_long (argc, argv, "hHlai:e:r:",
long_options, &option_index);
if (c == -1)
case 0:
if (long_options[option_index].flag != 0)
break;
-
case 'h':
printHelp();
return 0;
break;
-
+ case 'H':
+ printHelp();
+ printExtraHelp();
+ return 0;
+ break;
case 'l':
requestedActions.push_back( make_pair(LIST, "") );
break;
-
case 'a':
requestedActions.push_back( make_pair(AUDIO, "") );
break;
-
case 'i':
requestedActions.push_back( make_pair(INSERT, optarg) );
break;
-
case 'e':
requestedActions.push_back( make_pair(ERASE, optarg) );
break;
-
case 'r':
requestedActions.push_back( make_pair(REPLACE, optarg) );
break;
-
case '?':
break;
-
default:
abort ();
}
case LIST:
action_printTags(f, propmap);
break;
-
case AUDIO:
action_printAudio(f);
break;
-
case ERASE:
action_eraseTag(propmap, actit->second);
FCHANGED = true;
break;
-
case REPLACE:
action_replaceTag(propmap, splitToTagPair(actit->second));
FCHANGED = true;
break;
-
case INSERT:
action_insertTag(propmap, splitToTagPair(actit->second));
FCHANGED = true;