aboutsummaryrefslogtreecommitdiffstats
path: root/taglib/mod/modfilebase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'taglib/mod/modfilebase.cpp')
-rw-r--r--taglib/mod/modfilebase.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/taglib/mod/modfilebase.cpp b/taglib/mod/modfilebase.cpp
new file mode 100644
index 00000000..66df3857
--- /dev/null
+++ b/taglib/mod/modfilebase.cpp
@@ -0,0 +1,94 @@
+/***************************************************************************
+ copyright : (C) 2011 by Mathias Panzenböck
+ email : grosser.meister.morti@gmx.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * This library is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Lesser General Public License version *
+ * 2.1 as published by the Free Software Foundation. *
+ * *
+ * This library is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this library; if not, write to the Free Software *
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
+ * MA 02110-1301 USA *
+ ***************************************************************************/
+
+#include "tdebug.h"
+#include "modfilebase.h"
+
+using namespace TagLib;
+using namespace Mod;
+
+Mod::FileBase::FileBase(FileName file) : TagLib::File(file)
+{
+}
+
+Mod::FileBase::FileBase(IOStream *stream) : TagLib::File(stream)
+{
+}
+
+void Mod::FileBase::writeString(const String &s, ulong size, char padding)
+{
+ ByteVector data(s.data(String::Latin1));
+ data.resize(size, padding);
+ writeBlock(data);
+}
+
+bool Mod::FileBase::readString(String &s, ulong size)
+{
+ ByteVector data(readBlock(size));
+ if(data.size() < size) return false;
+ int index = data.find((char) 0);
+ if(index > -1)
+ {
+ data.resize(index);
+ }
+ data.replace((char) 0xff, ' ');
+
+ s = data;
+ return true;
+}
+
+bool Mod::FileBase::readByte(uchar &byte)
+{
+ ByteVector data(readBlock(1));
+ if(data.size() < 1) return false;
+ byte = data[0];
+ return true;
+}
+
+bool Mod::FileBase::readU16L(ushort &number)
+{
+ ByteVector data(readBlock(2));
+ if(data.size() < 2) return false;
+ number = data.toUShort(false);
+ return true;
+}
+
+bool Mod::FileBase::readU32L(ulong &number) {
+ ByteVector data(readBlock(4));
+ if(data.size() < 4) return false;
+ number = data.toUInt(false);
+ return true;
+}
+
+bool Mod::FileBase::readU16B(ushort &number)
+{
+ ByteVector data(readBlock(2));
+ if(data.size() < 2) return false;
+ number = data.toUShort(true);
+ return true;
+}
+
+bool Mod::FileBase::readU32B(ulong &number) {
+ ByteVector data(readBlock(4));
+ if(data.size() < 4) return false;
+ number = data.toUInt(true);
+ return true;
+}