1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
#include "md390_filereader.hh"
#include <QFile>
#include <QFileInfo>
#define SEGMENT0_FILE_ADDR 0x00002225
#define SEGMENT0_TARGET_ADDR 0x00002000
#define SEGMENT0_SIZE 0x0003e000
bool
MD390FileReader::read(const QString &filename, MD390Codeplug *codeplug, const ErrorStack &err)
{
// Check file properties
QFileInfo info(filename);
if (! info.exists()) {
errMsg(err) << "Cannot open file '" << filename << "': File does not exisist.";
return false;
}
if (262709 != info.size()) {
errMsg(err) << "Cannot read codeplug file '" << filename << "': File size is not 262709 bytes.";
return false;
}
// Open file
QFile file(filename);
if (! file.open(QFile::ReadOnly)) {
errMsg(err) << "Cannot open file '" << filename << "': " << file.errorString() << ".";
return false;
}
// Read file content
if (! file.seek(SEGMENT0_FILE_ADDR)) {
errMsg(err) << "Cannot read codeplug file '" << filename
<< "': Cannot seek within file: " << file.errorString() << ".";
file.close();
return false;
}
char *ptr = (char *)codeplug->data(SEGMENT0_TARGET_ADDR);
size_t n = SEGMENT0_SIZE;
while (0 < n) {
int nread = file.read(ptr, n);
if (0 > nread) {
errMsg(err) << "Cannot read codeplug file '" << filename
<< "': " << file.errorString() << ".";
file.close();
return false;
}
n -= nread;
ptr += nread;
}
return true;
}
|