aboutsummaryrefslogtreecommitdiff
path: root/examples/demo_copy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/demo_copy.cpp')
-rw-r--r--examples/demo_copy.cpp143
1 files changed, 143 insertions, 0 deletions
diff --git a/examples/demo_copy.cpp b/examples/demo_copy.cpp
new file mode 100644
index 0000000..1d12944
--- /dev/null
+++ b/examples/demo_copy.cpp
@@ -0,0 +1,143 @@
+// $Id: demo_copy.cpp,v 1.11 2002/06/29 17:20:26 t1mpy Exp $
+//
+// The authors have released ID3Lib as Public Domain (PD) and claim no
+// copyright, patent or other intellectual property protection in this work.
+// This means that it may be modified, redistributed and used in commercial
+// and non-commercial software and hardware without restrictions. ID3Lib is
+// distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
+// express or implied.
+//
+// The ID3Lib authors encourage improvements and optimisations to be sent to
+// the ID3Lib coordinator, currently Dirk Mahoney (dirk@id3.org). Approved
+// submissions may be altered, and will be included and released under these
+// terms.
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+#include "id3/id3lib_streams.h"
+#include "id3/tag.h"
+
+#include "demo_copy_options.h"
+
+using std::cout;
+using std::endl;
+using std::cerr;
+
+static const char* VERSION_NUMBER = "$Revision: 1.11 $";
+
+void PrintUsage(const char *sName)
+{
+ cout << "Usage: " << sName << " [OPTION]... SOURCE DEST" << endl;
+ cout << "Copy the tag(s) from SOURCE to DEST." << endl;
+ cout << endl;
+}
+
+void PrintVersion(const char *sName)
+{
+ size_t nIndex;
+ cout << sName << " ";
+ for (nIndex = 0; nIndex < strlen(VERSION_NUMBER); nIndex++)
+ {
+ if (VERSION_NUMBER[nIndex] == ' ')
+ {
+ break;
+ }
+ }
+ nIndex++;
+ for (; nIndex < strlen (VERSION_NUMBER); nIndex++)
+ {
+ if (VERSION_NUMBER[nIndex] == ' ')
+ {
+ break;
+ }
+ cout << VERSION_NUMBER[nIndex];
+ }
+ cout << endl;
+ cout << "Uses " << ID3LIB_FULL_NAME << endl << endl;
+
+ cout << "This program copies tags from one file to another" << endl;
+}
+
+void DisplayTags(ostream &os, luint nTags)
+{
+ if (!((nTags & ID3TT_ID3V1) || (nTags & ID3TT_ID3V2)))
+ {
+ os << "no tag";
+ }
+ if (nTags & ID3TT_ID3V1)
+ {
+ os << "v1";
+ }
+ if ((nTags & ID3TT_ID3V1) && (nTags & ID3TT_ID3V2))
+ {
+ os << " and ";
+ }
+ if (nTags & ID3TT_ID3V2)
+ {
+ os << "v2";
+ }
+}
+
+int main( unsigned int argc, char * const argv[])
+{
+ int ulFlag = ID3TT_ID3;
+ ID3D_INIT_DOUT();
+ gengetopt_args_info args;
+
+ if (cmdline_parser(argc, argv, &args) != 0)
+ {
+ exit(1);
+ }
+
+#if defined ID3_ENABLE_DEBUG
+ if (args.warning_flag)
+ {
+ ID3D_INIT_WARNING();
+ ID3D_WARNING ( "warnings turned on" );
+ }
+ if (args.notice_flag)
+ {
+ ID3D_INIT_NOTICE();
+ ID3D_NOTICE ( "notices turned on" );
+ }
+#endif
+
+ if (args.v1tag_flag)
+ {
+ ulFlag = ID3TT_ID3V1;
+ }
+
+ if (args.v2tag_flag)
+ {
+ ulFlag = ID3TT_ID3V2;
+ }
+
+
+ if (args.inputs_num != 2)
+ {
+ cerr << "Usage: id3cp [OPTIONS] SOURCE DEST" << endl;
+ exit(1);
+ }
+
+ const char *source = args.inputs[0], *dest = args.inputs[1];
+
+ ID3_Tag myTag;
+
+ cout << "Parsing " << source << ": ";
+
+ myTag.Clear();
+ myTag.Link(source, ID3TT_ALL);
+
+ cout << "done. Copying to " << dest << ": ";
+
+ myTag.Link(dest, ID3TT_NONE);
+ myTag.Update(ulFlag);
+
+ cout << "done" << endl;
+
+ return 0;
+}
+