2012-10-28 02:12:18 +02:00
|
|
|
/***************************************************************************
|
|
|
|
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 *
|
2016-07-19 16:58:52 +02:00
|
|
|
* it under the terms of the GNU Lesser General Public License version *
|
2012-10-28 02:12:18 +02:00
|
|
|
* 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 *
|
2016-07-19 16:58:52 +02:00
|
|
|
* 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/ *
|
2012-10-28 02:12:18 +02:00
|
|
|
***************************************************************************/
|
|
|
|
|
2016-07-19 16:58:52 +02:00
|
|
|
|
2012-10-28 02:12:18 +02:00
|
|
|
#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)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2016-07-19 16:58:52 +02:00
|
|
|
void Mod::FileBase::writeString(const String &s, unsigned long size, char padding)
|
2012-10-28 02:12:18 +02:00
|
|
|
{
|
|
|
|
ByteVector data(s.data(String::Latin1));
|
|
|
|
data.resize(size, padding);
|
|
|
|
writeBlock(data);
|
|
|
|
}
|
|
|
|
|
2016-07-19 16:58:52 +02:00
|
|
|
bool Mod::FileBase::readString(String &s, unsigned long size)
|
2012-10-28 02:12:18 +02:00
|
|
|
{
|
|
|
|
ByteVector data(readBlock(size));
|
|
|
|
if(data.size() < size) return false;
|
|
|
|
int index = data.find((char) 0);
|
|
|
|
if(index > -1)
|
|
|
|
{
|
|
|
|
data.resize(index);
|
|
|
|
}
|
2016-07-19 16:58:52 +02:00
|
|
|
data.replace('\xff', ' ');
|
2012-10-28 02:12:18 +02:00
|
|
|
|
|
|
|
s = data;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2016-07-19 16:58:52 +02:00
|
|
|
void Mod::FileBase::writeByte(unsigned char byte)
|
2012-10-28 02:12:18 +02:00
|
|
|
{
|
|
|
|
ByteVector data(1, byte);
|
|
|
|
writeBlock(data);
|
|
|
|
}
|
|
|
|
|
2016-07-19 16:58:52 +02:00
|
|
|
void Mod::FileBase::writeU16L(unsigned short number)
|
2012-10-28 02:12:18 +02:00
|
|
|
{
|
|
|
|
writeBlock(ByteVector::fromShort(number, false));
|
|
|
|
}
|
|
|
|
|
2016-07-19 16:58:52 +02:00
|
|
|
void Mod::FileBase::writeU32L(unsigned long number)
|
2012-10-28 02:12:18 +02:00
|
|
|
{
|
|
|
|
writeBlock(ByteVector::fromUInt(number, false));
|
|
|
|
}
|
|
|
|
|
2016-07-19 16:58:52 +02:00
|
|
|
void Mod::FileBase::writeU16B(unsigned short number)
|
2012-10-28 02:12:18 +02:00
|
|
|
{
|
|
|
|
writeBlock(ByteVector::fromShort(number, true));
|
|
|
|
}
|
|
|
|
|
2016-07-19 16:58:52 +02:00
|
|
|
void Mod::FileBase::writeU32B(unsigned long number)
|
2012-10-28 02:12:18 +02:00
|
|
|
{
|
|
|
|
writeBlock(ByteVector::fromUInt(number, true));
|
|
|
|
}
|
|
|
|
|
2016-07-19 16:58:52 +02:00
|
|
|
bool Mod::FileBase::readByte(unsigned char &byte)
|
2012-10-28 02:12:18 +02:00
|
|
|
{
|
|
|
|
ByteVector data(readBlock(1));
|
|
|
|
if(data.size() < 1) return false;
|
|
|
|
byte = data[0];
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2016-07-19 16:58:52 +02:00
|
|
|
bool Mod::FileBase::readU16L(unsigned short &number)
|
2012-10-28 02:12:18 +02:00
|
|
|
{
|
|
|
|
ByteVector data(readBlock(2));
|
|
|
|
if(data.size() < 2) return false;
|
|
|
|
number = data.toUShort(false);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2016-07-19 16:58:52 +02:00
|
|
|
bool Mod::FileBase::readU32L(unsigned long &number) {
|
2012-10-28 02:12:18 +02:00
|
|
|
ByteVector data(readBlock(4));
|
|
|
|
if(data.size() < 4) return false;
|
|
|
|
number = data.toUInt(false);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2016-07-19 16:58:52 +02:00
|
|
|
bool Mod::FileBase::readU16B(unsigned short &number)
|
2012-10-28 02:12:18 +02:00
|
|
|
{
|
|
|
|
ByteVector data(readBlock(2));
|
|
|
|
if(data.size() < 2) return false;
|
|
|
|
number = data.toUShort(true);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2016-07-19 16:58:52 +02:00
|
|
|
bool Mod::FileBase::readU32B(unsigned long &number) {
|
2012-10-28 02:12:18 +02:00
|
|
|
ByteVector data(readBlock(4));
|
|
|
|
if(data.size() < 4) return false;
|
|
|
|
number = data.toUInt(true);
|
|
|
|
return true;
|
|
|
|
}
|