123 lines
3.8 KiB
C++
123 lines
3.8 KiB
C++
/***************************************************************************
|
|
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 *
|
|
* *
|
|
* Alternatively, this file is available under the Mozilla Public *
|
|
* License Version 1.1. You may obtain a copy of the License at *
|
|
* http://www.mozilla.org/MPL/ *
|
|
***************************************************************************/
|
|
|
|
|
|
#include "tdebug.h"
|
|
#include "modfilebase.h"
|
|
|
|
using namespace Strawberry_TagLib::TagLib;
|
|
using namespace Mod;
|
|
|
|
Mod::FileBase::FileBase(FileName file) : Strawberry_TagLib::TagLib::File(file) {}
|
|
|
|
Mod::FileBase::FileBase(IOStream *stream) : Strawberry_TagLib::TagLib::File(stream) {}
|
|
|
|
void Mod::FileBase::writeString(const String &s, unsigned int size, char padding) {
|
|
ByteVector data(s.data(String::Latin1));
|
|
data.resize(size, padding);
|
|
writeBlock(data);
|
|
}
|
|
|
|
bool Mod::FileBase::readString(String &s, unsigned int size) {
|
|
|
|
ByteVector data(readBlock(size));
|
|
if (data.size() < size) return false;
|
|
const size_t index = data.find(static_cast<char>(0));
|
|
if (index != ByteVector::npos()) {
|
|
data.resize(index);
|
|
}
|
|
data.replace('\xff', ' ');
|
|
|
|
s = data;
|
|
return true;
|
|
|
|
}
|
|
|
|
void Mod::FileBase::writeByte(unsigned char _byte) {
|
|
ByteVector data(1, _byte);
|
|
writeBlock(data);
|
|
}
|
|
|
|
void Mod::FileBase::writeU16L(unsigned short number) {
|
|
writeBlock(ByteVector::fromUInt16LE(number));
|
|
}
|
|
|
|
void Mod::FileBase::writeU32L(unsigned int number) {
|
|
writeBlock(ByteVector::fromUInt32LE(number));
|
|
}
|
|
|
|
void Mod::FileBase::writeU16B(unsigned short number) {
|
|
writeBlock(ByteVector::fromUInt16BE(number));
|
|
}
|
|
|
|
void Mod::FileBase::writeU32B(unsigned int number) {
|
|
writeBlock(ByteVector::fromUInt32BE(number));
|
|
}
|
|
|
|
bool Mod::FileBase::readByte(unsigned char &_byte) {
|
|
|
|
ByteVector data(readBlock(1));
|
|
if (data.size() < 1) return false;
|
|
_byte = data[0];
|
|
return true;
|
|
|
|
}
|
|
|
|
bool Mod::FileBase::readU16L(unsigned short &number) {
|
|
|
|
ByteVector data(readBlock(2));
|
|
if (data.size() < 2) return false;
|
|
number = data.toUInt16LE(0);
|
|
return true;
|
|
|
|
}
|
|
|
|
bool Mod::FileBase::readU32L(unsigned int &number) {
|
|
|
|
ByteVector data(readBlock(4));
|
|
if (data.size() < 4) return false;
|
|
number = data.toUInt32LE(0);
|
|
return true;
|
|
|
|
}
|
|
|
|
bool Mod::FileBase::readU16B(unsigned short &number) {
|
|
|
|
ByteVector data(readBlock(2));
|
|
if (data.size() < 2) return false;
|
|
number = data.toUInt16BE(0);
|
|
return true;
|
|
|
|
}
|
|
|
|
bool Mod::FileBase::readU32B(unsigned int &number) {
|
|
|
|
ByteVector data(readBlock(4));
|
|
if (data.size() < 4) return false;
|
|
number = data.toUInt32BE(0);
|
|
return true;
|
|
|
|
}
|