changed scumm file io to class File
svn-id: r4920
This commit is contained in:
parent
395b98a3e2
commit
dcf05149fe
8 changed files with 201 additions and 364 deletions
|
@ -97,6 +97,8 @@ bool File::open(const char *filename, int mode, byte encbyte) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_encbyte = encbyte;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,8 +48,7 @@ void Scumm::openRoom(int room)
|
||||||
if (room == -1) {
|
if (room == -1) {
|
||||||
_encbyte = 0;
|
_encbyte = 0;
|
||||||
deleteRoomOffsets();
|
deleteRoomOffsets();
|
||||||
fileClose(_fileHandle);
|
_fileHandle.close();
|
||||||
_fileHandle = NULL;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,20 +157,20 @@ void Scumm::readRoomsOffsets()
|
||||||
if (!_dynamicRoomOffsets)
|
if (!_dynamicRoomOffsets)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fileSeek(_fileHandle, 16, SEEK_SET);
|
_fileHandle.seek(16, SEEK_SET);
|
||||||
} else {
|
} else {
|
||||||
fileSeek(_fileHandle, 12, SEEK_SET); // Directlry searching for the room offset block would be more generic...
|
_fileHandle.seek(12, SEEK_SET); // Directlry searching for the room offset block would be more generic...
|
||||||
}
|
}
|
||||||
|
|
||||||
num = fileReadByte();
|
num = _fileHandle.readByte();
|
||||||
while (num) {
|
while (num) {
|
||||||
num--;
|
num--;
|
||||||
|
|
||||||
room = fileReadByte();
|
room = _fileHandle.readByte();
|
||||||
if (_roomFileOffsets[room] != 0xFFFFFFFF) {
|
if (_roomFileOffsets[room] != 0xFFFFFFFF) {
|
||||||
_roomFileOffsets[room] = fileReadDwordLE();
|
_roomFileOffsets[room] = _fileHandle.readDwordLE();
|
||||||
} else {
|
} else {
|
||||||
fileReadDwordLE();
|
_fileHandle.readDwordLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -182,34 +181,33 @@ bool Scumm::openResourceFile(const char *filename)
|
||||||
|
|
||||||
debug(9, "openResourceFile(%s)", filename);
|
debug(9, "openResourceFile(%s)", filename);
|
||||||
|
|
||||||
if (_fileHandle != NULL) {
|
if (_fileHandle.isOpen() == true) {
|
||||||
fileClose(_fileHandle);
|
_fileHandle.close();
|
||||||
_fileHandle = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(buf, filename);
|
strcpy(buf, filename);
|
||||||
_fileHandle = fileOpen(buf, 1);
|
_fileHandle.open(buf, 1, _encbyte);
|
||||||
if (!_fileHandle) {
|
if (_fileHandle.isOpen() == false) {
|
||||||
char *e = strrchr(buf, '/');
|
char *e = strrchr(buf, '/');
|
||||||
if (!e)
|
if (!e)
|
||||||
e = buf;
|
e = buf;
|
||||||
do
|
do
|
||||||
*e = tolower(*e);
|
*e = tolower(*e);
|
||||||
while (*e++);
|
while (*e++);
|
||||||
_fileHandle = fileOpen(buf, 1);
|
_fileHandle.open(buf, 1, _encbyte);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_fileHandle) {
|
if (_fileHandle.isOpen() == false) {
|
||||||
char *e = strrchr(buf, '/');
|
char *e = strrchr(buf, '/');
|
||||||
if (!e)
|
if (!e)
|
||||||
e = buf;
|
e = buf;
|
||||||
do
|
do
|
||||||
*e = toupper(*e);
|
*e = toupper(*e);
|
||||||
while (*e++);
|
while (*e++);
|
||||||
_fileHandle = fileOpen(buf, 1);
|
_fileHandle.open(buf, 1, _encbyte);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _fileHandle != NULL;
|
return _fileHandle.isOpen();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scumm::askForDisk(const char *filename)
|
void Scumm::askForDisk(const char *filename)
|
||||||
|
@ -230,48 +228,48 @@ void Scumm::readIndexFile()
|
||||||
|
|
||||||
if (!(_features & GF_AFTER_V6)) {
|
if (!(_features & GF_AFTER_V6)) {
|
||||||
/* Figure out the sizes of various resources */
|
/* Figure out the sizes of various resources */
|
||||||
while (!fileEof(_fileHandle)) {
|
while (!_fileHandle.eof()) {
|
||||||
blocktype = fileReadDword();
|
blocktype = fileReadDword();
|
||||||
itemsize = fileReadDwordBE();
|
itemsize = _fileHandle.readDwordBE();
|
||||||
if (fileReadFailed(_fileHandle))
|
if (_fileHandle.ioFailed())
|
||||||
break;
|
break;
|
||||||
switch (blocktype) {
|
switch (blocktype) {
|
||||||
case MKID('DOBJ'):
|
case MKID('DOBJ'):
|
||||||
_numGlobalObjects = fileReadWordLE();
|
_numGlobalObjects = _fileHandle.readWordLE();
|
||||||
itemsize -= 2;
|
itemsize -= 2;
|
||||||
break;
|
break;
|
||||||
case MKID('DROO'):
|
case MKID('DROO'):
|
||||||
_numRooms = fileReadWordLE();
|
_numRooms = _fileHandle.readWordLE();
|
||||||
itemsize -= 2;
|
itemsize -= 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MKID('DSCR'):
|
case MKID('DSCR'):
|
||||||
_numScripts = fileReadWordLE();
|
_numScripts = _fileHandle.readWordLE();
|
||||||
itemsize -= 2;
|
itemsize -= 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MKID('DCOS'):
|
case MKID('DCOS'):
|
||||||
_numCostumes = fileReadWordLE();
|
_numCostumes = _fileHandle.readWordLE();
|
||||||
itemsize -= 2;
|
itemsize -= 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MKID('DSOU'):
|
case MKID('DSOU'):
|
||||||
_numSounds = fileReadWordLE();
|
_numSounds = _fileHandle.readWordLE();
|
||||||
itemsize -= 2;
|
itemsize -= 2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fileSeek(_fileHandle, itemsize - 8, SEEK_CUR);
|
_fileHandle.seek(itemsize - 8, SEEK_CUR);
|
||||||
}
|
}
|
||||||
clearFileReadFailed(_fileHandle);
|
_fileHandle.clearIOFailed();
|
||||||
fileSeek(_fileHandle, 0, SEEK_SET);
|
_fileHandle.seek(0, SEEK_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
blocktype = fileReadDword();
|
blocktype = fileReadDword();
|
||||||
|
|
||||||
if (fileReadFailed(_fileHandle))
|
if (_fileHandle.ioFailed())
|
||||||
break;
|
break;
|
||||||
itemsize = fileReadDwordBE();
|
itemsize = _fileHandle.readDwordBE();
|
||||||
|
|
||||||
numblock++;
|
numblock++;
|
||||||
|
|
||||||
|
@ -282,25 +280,25 @@ void Scumm::readIndexFile()
|
||||||
|
|
||||||
case MKID('DOBJ'):
|
case MKID('DOBJ'):
|
||||||
if (_features & GF_AFTER_V8)
|
if (_features & GF_AFTER_V8)
|
||||||
num = fileReadDwordLE();
|
num = _fileHandle.readDwordLE();
|
||||||
else
|
else
|
||||||
num = fileReadWordLE();
|
num = _fileHandle.readWordLE();
|
||||||
assert(num == _numGlobalObjects);
|
assert(num == _numGlobalObjects);
|
||||||
|
|
||||||
if (_features & GF_AFTER_V8) { /* FIXME: Not sure.. */
|
if (_features & GF_AFTER_V8) { /* FIXME: Not sure.. */
|
||||||
for (i = 0; i < num; i++) {
|
for (i = 0; i < num; i++) {
|
||||||
fileSeek(_fileHandle, 40, SEEK_CUR);
|
_fileHandle.seek(40, SEEK_CUR);
|
||||||
_objectStateTable[i] = fileReadByte();
|
_objectStateTable[i] = _fileHandle.readByte();
|
||||||
_objectRoomTable[i] = fileReadByte();
|
_objectRoomTable[i] = _fileHandle.readByte();
|
||||||
_classData[i] = fileReadDwordLE();
|
_classData[i] = _fileHandle.readDwordLE();
|
||||||
}
|
}
|
||||||
memset(_objectOwnerTable, 0xFF, num);
|
memset(_objectOwnerTable, 0xFF, num);
|
||||||
} else if (_features & GF_AFTER_V7) {
|
} else if (_features & GF_AFTER_V7) {
|
||||||
fileRead(_fileHandle, _objectStateTable, num);
|
_fileHandle.read(_objectStateTable, num);
|
||||||
fileRead(_fileHandle, _objectRoomTable, num);
|
_fileHandle.read(_objectRoomTable, num);
|
||||||
memset(_objectOwnerTable, 0xFF, num);
|
memset(_objectOwnerTable, 0xFF, num);
|
||||||
} else {
|
} else {
|
||||||
fileRead(_fileHandle, _objectOwnerTable, num);
|
_fileHandle.read(_objectOwnerTable, num);
|
||||||
for (i = 0; i < num; i++) {
|
for (i = 0; i < num; i++) {
|
||||||
_objectStateTable[i] = _objectOwnerTable[i] >> OF_STATE_SHL;
|
_objectStateTable[i] = _objectOwnerTable[i] >> OF_STATE_SHL;
|
||||||
_objectOwnerTable[i] &= OF_OWNER_MASK;
|
_objectOwnerTable[i] &= OF_OWNER_MASK;
|
||||||
|
@ -308,7 +306,7 @@ void Scumm::readIndexFile()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(_features & GF_AFTER_V8)) {
|
if (!(_features & GF_AFTER_V8)) {
|
||||||
fileRead(_fileHandle, _classData, num * sizeof(uint32));
|
_fileHandle.read(_classData, num * sizeof(uint32));
|
||||||
|
|
||||||
// Swap flag endian where applicable
|
// Swap flag endian where applicable
|
||||||
#if defined(SCUMM_BIG_ENDIAN)
|
#if defined(SCUMM_BIG_ENDIAN)
|
||||||
|
@ -320,7 +318,7 @@ void Scumm::readIndexFile()
|
||||||
|
|
||||||
case MKID('RNAM'):
|
case MKID('RNAM'):
|
||||||
case MKID('ANAM'):
|
case MKID('ANAM'):
|
||||||
fileSeek(_fileHandle, itemsize - 8, SEEK_CUR);
|
_fileHandle.seek(itemsize - 8, SEEK_CUR);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MKID('DROO'):
|
case MKID('DROO'):
|
||||||
|
@ -369,10 +367,10 @@ void Scumm::readArrayFromIndexFile()
|
||||||
int num;
|
int num;
|
||||||
int a, b, c;
|
int a, b, c;
|
||||||
|
|
||||||
while ((num = fileReadWordLE()) != 0) {
|
while ((num = _fileHandle.readWordLE()) != 0) {
|
||||||
a = fileReadWordLE();
|
a = _fileHandle.readWordLE();
|
||||||
b = fileReadWordLE();
|
b = _fileHandle.readWordLE();
|
||||||
c = fileReadWordLE();
|
c = _fileHandle.readWordLE();
|
||||||
if (c == 1)
|
if (c == 1)
|
||||||
defineArray(num, 1, a, b);
|
defineArray(num, 1, a, b);
|
||||||
else
|
else
|
||||||
|
@ -388,11 +386,11 @@ void Scumm::readResTypeList(int id, uint32 tag, const char *name)
|
||||||
debug(9, "readResTypeList(%s,%x,%s)", resTypeFromId(id), FROM_LE_32(tag), name);
|
debug(9, "readResTypeList(%s,%x,%s)", resTypeFromId(id), FROM_LE_32(tag), name);
|
||||||
|
|
||||||
if (_features & GF_AFTER_V8)
|
if (_features & GF_AFTER_V8)
|
||||||
num = fileReadDwordLE();
|
num = _fileHandle.readDwordLE();
|
||||||
else if (!(_features & GF_OLD_BUNDLE))
|
else if (!(_features & GF_OLD_BUNDLE))
|
||||||
num = fileReadWordLE();
|
num = _fileHandle.readWordLE();
|
||||||
else
|
else
|
||||||
num = fileReadByte();
|
num = _fileHandle.readByte();
|
||||||
|
|
||||||
if (1 || _features & GF_AFTER_V6) {
|
if (1 || _features & GF_AFTER_V6) {
|
||||||
if (num != res.num[id]) {
|
if (num != res.num[id]) {
|
||||||
|
@ -409,21 +407,21 @@ void Scumm::readResTypeList(int id, uint32 tag, const char *name)
|
||||||
if (id == rtRoom){
|
if (id == rtRoom){
|
||||||
for (i = 0; i < num; i++)
|
for (i = 0; i < num; i++)
|
||||||
res.roomno[id][i] = i;
|
res.roomno[id][i] = i;
|
||||||
fileSeek(_fileHandle, num, SEEK_CUR);
|
_fileHandle.seek(num, SEEK_CUR);
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < num; i++)
|
for (i = 0; i < num; i++)
|
||||||
res.roomno[id][i] = fileReadByte();
|
res.roomno[id][i] = _fileHandle.readByte();
|
||||||
}
|
}
|
||||||
for (i = 0; i < num; i++)
|
for (i = 0; i < num; i++)
|
||||||
res.roomoffs[id][i] = fileReadWordLE();
|
res.roomoffs[id][i] = _fileHandle.readWordLE();
|
||||||
} else if (_features & GF_SMALL_HEADER) {
|
} else if (_features & GF_SMALL_HEADER) {
|
||||||
for (i = 0; i < num; i++) {
|
for (i = 0; i < num; i++) {
|
||||||
res.roomno[id][i] = fileReadByte();
|
res.roomno[id][i] = _fileHandle.readByte();
|
||||||
res.roomoffs[id][i] = fileReadDword();
|
res.roomoffs[id][i] = fileReadDword();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fileRead(_fileHandle, res.roomno[id], num * sizeof(uint8));
|
_fileHandle.read(res.roomno[id], num * sizeof(uint8));
|
||||||
fileRead(_fileHandle, res.roomoffs[id], num * sizeof(uint32));
|
_fileHandle.read(res.roomoffs[id], num * sizeof(uint32));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SCUMM_BIG_ENDIAN)
|
#if defined(SCUMM_BIG_ENDIAN)
|
||||||
|
@ -541,20 +539,20 @@ int Scumm::loadResource(int type, int idx)
|
||||||
for (i = 0; i < 5; i++) {
|
for (i = 0; i < 5; i++) {
|
||||||
openRoom(roomNr);
|
openRoom(roomNr);
|
||||||
|
|
||||||
fileSeek(_fileHandle, fileOffs + _fileOffset, SEEK_SET);
|
_fileHandle.seek(fileOffs + _fileOffset, SEEK_SET);
|
||||||
|
|
||||||
if (_features & GF_OLD_BUNDLE) {
|
if (_features & GF_OLD_BUNDLE) {
|
||||||
size = fileReadWordLE();
|
size = _fileHandle.readWordLE();
|
||||||
} else if (_features & GF_SMALL_HEADER) {
|
} else if (_features & GF_SMALL_HEADER) {
|
||||||
if (!(_features & GF_SMALL_NAMES))
|
if (!(_features & GF_SMALL_NAMES))
|
||||||
fileSeek(_fileHandle, 8, SEEK_CUR);
|
_fileHandle.seek(8, SEEK_CUR);
|
||||||
size = fileReadDwordLE();
|
size = _fileHandle.readDwordLE();
|
||||||
tag = fileReadWordLE();
|
tag = _fileHandle.readWordLE();
|
||||||
fileSeek(_fileHandle, -6, SEEK_CUR);
|
_fileHandle.seek(-6, SEEK_CUR);
|
||||||
} else {
|
} else {
|
||||||
if (type == rtSound) {
|
if (type == rtSound) {
|
||||||
fileReadDwordLE();
|
_fileHandle.readDwordLE();
|
||||||
fileReadDwordLE();
|
_fileHandle.readDwordLE();
|
||||||
return readSoundResource(type, idx);
|
return readSoundResource(type, idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -564,10 +562,10 @@ int Scumm::loadResource(int type, int idx)
|
||||||
error("%s %d not in room %d at %d+%d", res.name[type], type, roomNr, _fileOffset, fileOffs);
|
error("%s %d not in room %d at %d+%d", res.name[type], type, roomNr, _fileOffset, fileOffs);
|
||||||
}
|
}
|
||||||
|
|
||||||
size = fileReadDwordBE();
|
size = _fileHandle.readDwordBE();
|
||||||
fileSeek(_fileHandle, -8, SEEK_CUR);
|
_fileHandle.seek(-8, SEEK_CUR);
|
||||||
}
|
}
|
||||||
fileRead(_fileHandle, createResource(type, idx, size), size);
|
_fileHandle.read(createResource(type, idx, size), size);
|
||||||
|
|
||||||
/* dump the resource */
|
/* dump the resource */
|
||||||
#ifdef DUMP_SCRIPTS
|
#ifdef DUMP_SCRIPTS
|
||||||
|
@ -576,7 +574,7 @@ int Scumm::loadResource(int type, int idx)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!fileReadFailed(_fileHandle)) {
|
if (!_fileHandle.ioFailed()) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -597,7 +595,7 @@ int Scumm::readSoundResource(int type, int idx)
|
||||||
pos = 0;
|
pos = 0;
|
||||||
|
|
||||||
basetag = fileReadDword();
|
basetag = fileReadDword();
|
||||||
total_size = fileReadDwordBE();
|
total_size = _fileHandle.readDwordBE();
|
||||||
|
|
||||||
debug(8, " basetag: %c%c%c%c, total_size=%d",
|
debug(8, " basetag: %c%c%c%c, total_size=%d",
|
||||||
(char)((basetag >> 24) & 0xff),
|
(char)((basetag >> 24) & 0xff),
|
||||||
|
@ -606,14 +604,14 @@ int Scumm::readSoundResource(int type, int idx)
|
||||||
|
|
||||||
//if (_gameId == GID_SAMNMAX || _features & GF_AFTER_V7) {
|
//if (_gameId == GID_SAMNMAX || _features & GF_AFTER_V7) {
|
||||||
if (basetag == MKID('MIDI') || basetag == MKID('iMUS')) {
|
if (basetag == MKID('MIDI') || basetag == MKID('iMUS')) {
|
||||||
fileSeek(_fileHandle, -8, SEEK_CUR);
|
_fileHandle.seek(-8, SEEK_CUR);
|
||||||
fileRead(_fileHandle, createResource(type, idx, total_size + 8), total_size + 8);
|
_fileHandle.read(createResource(type, idx, total_size + 8), total_size + 8);
|
||||||
return 1;
|
return 1;
|
||||||
} else if (basetag == MKID('SOU ')) {
|
} else if (basetag == MKID('SOU ')) {
|
||||||
best_pri = -1;
|
best_pri = -1;
|
||||||
while (pos < total_size) {
|
while (pos < total_size) {
|
||||||
tag = fileReadDword();
|
tag = fileReadDword();
|
||||||
size = fileReadDwordBE() + 8;
|
size = _fileHandle.readDwordBE() + 8;
|
||||||
pos += size;
|
pos += size;
|
||||||
|
|
||||||
pri = -1;
|
pri = -1;
|
||||||
|
@ -652,26 +650,26 @@ int Scumm::readSoundResource(int type, int idx)
|
||||||
if (pri > best_pri) {
|
if (pri > best_pri) {
|
||||||
best_pri = pri;
|
best_pri = pri;
|
||||||
best_size = size;
|
best_size = size;
|
||||||
best_offs = filePos(_fileHandle);
|
best_offs = _fileHandle.pos();
|
||||||
}
|
}
|
||||||
|
|
||||||
fileSeek(_fileHandle, size - 8, SEEK_CUR);
|
_fileHandle.seek(size - 8, SEEK_CUR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (best_pri != -1) {
|
if (best_pri != -1) {
|
||||||
fileSeek(_fileHandle, best_offs - 8, SEEK_SET);
|
_fileHandle.seek(best_offs - 8, SEEK_SET);
|
||||||
fileRead(_fileHandle, createResource(type, idx, best_size), best_size);
|
_fileHandle.read(createResource(type, idx, best_size), best_size);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
} else if (FROM_LE_32(basetag) == 24) {
|
} else if (FROM_LE_32(basetag) == 24) {
|
||||||
fileSeek(_fileHandle, -12, SEEK_CUR);
|
_fileHandle.seek(-12, SEEK_CUR);
|
||||||
total_size = fileReadDwordBE();
|
total_size = _fileHandle.readDwordBE();
|
||||||
fileSeek(_fileHandle, -8, SEEK_CUR);
|
_fileHandle.seek(-8, SEEK_CUR);
|
||||||
fileRead(_fileHandle, createResource(type, idx, total_size), total_size);
|
_fileHandle.read(createResource(type, idx, total_size), total_size);
|
||||||
return 1;
|
return 1;
|
||||||
} else if (basetag == MKID('Mac0')) {
|
} else if (basetag == MKID('Mac0')) {
|
||||||
debug(1, "Found base tag Mac0 in sound %d, size %d", idx, total_size);
|
debug(1, "Found base tag Mac0 in sound %d, size %d", idx, total_size);
|
||||||
debug(1, "It was at position %d", filePos(_fileHandle));
|
debug(1, "It was at position %d", _fileHandle.pos());
|
||||||
|
|
||||||
/* Offset
|
/* Offset
|
||||||
0x14, 0x1C, 0x20, 0x24 - offsets of channel 1/2/3/4 chunk-
|
0x14, 0x1C, 0x20, 0x24 - offsets of channel 1/2/3/4 chunk-
|
||||||
|
@ -721,28 +719,28 @@ int Scumm::readSoundResource(int type, int idx)
|
||||||
Maybe I am mistaken when I think it's four byte, some other parts
|
Maybe I am mistaken when I think it's four byte, some other parts
|
||||||
seem to suggest it's 2 byte oriented, or even variable length...
|
seem to suggest it's 2 byte oriented, or even variable length...
|
||||||
*/
|
*/
|
||||||
fileSeek(_fileHandle, -12, SEEK_CUR);
|
_fileHandle.seek(-12, SEEK_CUR);
|
||||||
total_size = fileReadDwordBE();
|
total_size = _fileHandle.readDwordBE();
|
||||||
fileRead(_fileHandle, createResource(type, idx, total_size), total_size - 8);
|
_fileHandle.read(createResource(type, idx, total_size), total_size - 8);
|
||||||
return 1;
|
return 1;
|
||||||
} else if (basetag == MKID('Mac1')) {
|
} else if (basetag == MKID('Mac1')) {
|
||||||
fileSeek(_fileHandle, -12, SEEK_CUR);
|
_fileHandle.seek(-12, SEEK_CUR);
|
||||||
total_size = fileReadDwordBE();
|
total_size = _fileHandle.readDwordBE();
|
||||||
fileRead(_fileHandle, createResource(type, idx, total_size), total_size - 8);
|
_fileHandle.read(createResource(type, idx, total_size), total_size - 8);
|
||||||
return 1;
|
return 1;
|
||||||
} else if (basetag == MKID('DIGI')) {
|
} else if (basetag == MKID('DIGI')) {
|
||||||
// Use in Putt-Putt Demo
|
// Use in Putt-Putt Demo
|
||||||
debug(1, "Found base tag DIGI in sound %d, size %d", idx, total_size);
|
debug(1, "Found base tag DIGI in sound %d, size %d", idx, total_size);
|
||||||
debug(1, "It was at position %d", filePos(_fileHandle));
|
debug(1, "It was at position %d", _fileHandle.pos());
|
||||||
|
|
||||||
fileSeek(_fileHandle, -12, SEEK_CUR);
|
_fileHandle.seek(-12, SEEK_CUR);
|
||||||
total_size = fileReadDwordBE();
|
total_size = _fileHandle.readDwordBE();
|
||||||
fileRead(_fileHandle, createResource(type, idx, total_size), total_size - 8);
|
_fileHandle.read(createResource(type, idx, total_size), total_size - 8);
|
||||||
return 1;
|
return 1;
|
||||||
} else if (basetag == MKID('Crea')) {
|
} else if (basetag == MKID('Crea')) {
|
||||||
fileSeek(_fileHandle, -12, SEEK_CUR);
|
_fileHandle.seek(-12, SEEK_CUR);
|
||||||
total_size = fileReadDwordBE();
|
total_size = _fileHandle.readDwordBE();
|
||||||
fileRead(_fileHandle, createResource(type, idx, total_size), total_size - 8);
|
_fileHandle.read(createResource(type, idx, total_size), total_size - 8);
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "WARNING: Unrecognized base tag 0x%08lx in sound %d\n", basetag, idx);
|
fprintf(stderr, "WARNING: Unrecognized base tag 0x%08lx in sound %d\n", basetag, idx);
|
||||||
|
@ -1187,67 +1185,67 @@ void Scumm::unkHeapProc2(int a, int b)
|
||||||
void Scumm::readMAXS()
|
void Scumm::readMAXS()
|
||||||
{
|
{
|
||||||
if (_features & GF_AFTER_V8) {
|
if (_features & GF_AFTER_V8) {
|
||||||
fileSeek(_fileHandle, 50 + 50, SEEK_CUR);
|
_fileHandle.seek(50 + 50, SEEK_CUR);
|
||||||
_numVariables = fileReadDwordLE(); /* ? 1500 */
|
_numVariables = _fileHandle.readDwordLE(); /* ? 1500 */
|
||||||
_numBitVariables = fileReadDwordLE(); /* ? 2048 */
|
_numBitVariables = _fileHandle.readDwordLE(); /* ? 2048 */
|
||||||
fileReadDwordLE(); /* 40 */
|
_fileHandle.readDwordLE(); /* 40 */
|
||||||
_numScripts = fileReadDwordLE();
|
_numScripts = _fileHandle.readDwordLE();
|
||||||
_numSounds = fileReadDwordLE();
|
_numSounds = _fileHandle.readDwordLE();
|
||||||
_numCharsets = fileReadDwordLE();
|
_numCharsets = _fileHandle.readDwordLE();
|
||||||
_numCostumes = fileReadDwordLE();
|
_numCostumes = _fileHandle.readDwordLE();
|
||||||
_numRooms = fileReadDwordLE();
|
_numRooms = _fileHandle.readDwordLE();
|
||||||
_numInventory = fileReadDwordLE();
|
_numInventory = _fileHandle.readDwordLE();
|
||||||
_numGlobalObjects = fileReadDwordLE();
|
_numGlobalObjects = _fileHandle.readDwordLE();
|
||||||
_numFlObject = fileReadDwordLE();
|
_numFlObject = _fileHandle.readDwordLE();
|
||||||
_numLocalObjects = fileReadDwordLE();
|
_numLocalObjects = _fileHandle.readDwordLE();
|
||||||
_numVerbs = fileReadDwordLE();
|
_numVerbs = _fileHandle.readDwordLE();
|
||||||
_numNewNames = fileReadDwordLE();
|
_numNewNames = _fileHandle.readDwordLE();
|
||||||
fileReadDwordLE();
|
_fileHandle.readDwordLE();
|
||||||
fileReadDwordLE();
|
_fileHandle.readDwordLE();
|
||||||
_numArray = fileReadDwordLE();
|
_numArray = _fileHandle.readDwordLE();
|
||||||
|
|
||||||
_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
|
_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
|
||||||
_numGlobalScripts = 2000;
|
_numGlobalScripts = 2000;
|
||||||
|
|
||||||
_shadowPaletteSize = NUM_SHADOW_PALETTE * 256;
|
_shadowPaletteSize = NUM_SHADOW_PALETTE * 256;
|
||||||
} else if (_features & GF_AFTER_V7) {
|
} else if (_features & GF_AFTER_V7) {
|
||||||
fileSeek(_fileHandle, 50 + 50, SEEK_CUR);
|
_fileHandle.seek(50 + 50, SEEK_CUR);
|
||||||
_numVariables = fileReadWordLE();
|
_numVariables = _fileHandle.readWordLE();
|
||||||
_numBitVariables = fileReadWordLE();
|
_numBitVariables = _fileHandle.readWordLE();
|
||||||
fileReadWordLE();
|
_fileHandle.readWordLE();
|
||||||
_numGlobalObjects = fileReadWordLE();
|
_numGlobalObjects = _fileHandle.readWordLE();
|
||||||
_numLocalObjects = fileReadWordLE();
|
_numLocalObjects = _fileHandle.readWordLE();
|
||||||
_numNewNames = fileReadWordLE();
|
_numNewNames = _fileHandle.readWordLE();
|
||||||
_numVerbs = fileReadWordLE();
|
_numVerbs = _fileHandle.readWordLE();
|
||||||
_numFlObject = fileReadWordLE();
|
_numFlObject = _fileHandle.readWordLE();
|
||||||
_numInventory = fileReadWordLE();
|
_numInventory = _fileHandle.readWordLE();
|
||||||
_numArray = fileReadWordLE();
|
_numArray = _fileHandle.readWordLE();
|
||||||
_numRooms = fileReadWordLE();
|
_numRooms = _fileHandle.readWordLE();
|
||||||
_numScripts = fileReadWordLE();
|
_numScripts = _fileHandle.readWordLE();
|
||||||
_numSounds = fileReadWordLE();
|
_numSounds = _fileHandle.readWordLE();
|
||||||
_numCharsets = fileReadWordLE();
|
_numCharsets = _fileHandle.readWordLE();
|
||||||
_numCostumes = fileReadWordLE();
|
_numCostumes = _fileHandle.readWordLE();
|
||||||
|
|
||||||
_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
|
_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
|
||||||
_numGlobalScripts = 2000;
|
_numGlobalScripts = 2000;
|
||||||
|
|
||||||
_shadowPaletteSize = NUM_SHADOW_PALETTE * 256;
|
_shadowPaletteSize = NUM_SHADOW_PALETTE * 256;
|
||||||
} else if (_features & GF_AFTER_V6) {
|
} else if (_features & GF_AFTER_V6) {
|
||||||
_numVariables = fileReadWordLE();
|
_numVariables = _fileHandle.readWordLE();
|
||||||
fileReadWordLE();
|
_fileHandle.readWordLE();
|
||||||
_numBitVariables = fileReadWordLE();
|
_numBitVariables = _fileHandle.readWordLE();
|
||||||
_numLocalObjects = fileReadWordLE();
|
_numLocalObjects = _fileHandle.readWordLE();
|
||||||
_numArray = fileReadWordLE();
|
_numArray = _fileHandle.readWordLE();
|
||||||
fileReadWordLE();
|
_fileHandle.readWordLE();
|
||||||
_numVerbs = fileReadWordLE();
|
_numVerbs = _fileHandle.readWordLE();
|
||||||
_numFlObject = fileReadWordLE();
|
_numFlObject = _fileHandle.readWordLE();
|
||||||
_numInventory = fileReadWordLE();
|
_numInventory = _fileHandle.readWordLE();
|
||||||
_numRooms = fileReadWordLE();
|
_numRooms = _fileHandle.readWordLE();
|
||||||
_numScripts = fileReadWordLE();
|
_numScripts = _fileHandle.readWordLE();
|
||||||
_numSounds = fileReadWordLE();
|
_numSounds = _fileHandle.readWordLE();
|
||||||
_numCharsets = fileReadWordLE();
|
_numCharsets = _fileHandle.readWordLE();
|
||||||
_numCostumes = fileReadWordLE();
|
_numCostumes = _fileHandle.readWordLE();
|
||||||
_numGlobalObjects = fileReadWordLE();
|
_numGlobalObjects = _fileHandle.readWordLE();
|
||||||
_numNewNames = 50;
|
_numNewNames = 50;
|
||||||
|
|
||||||
_objectRoomTable = NULL;
|
_objectRoomTable = NULL;
|
||||||
|
@ -1255,20 +1253,20 @@ void Scumm::readMAXS()
|
||||||
|
|
||||||
_shadowPaletteSize = 256;
|
_shadowPaletteSize = 256;
|
||||||
} else {
|
} else {
|
||||||
_numVariables = fileReadWordLE(); /* 800 */
|
_numVariables = _fileHandle.readWordLE(); /* 800 */
|
||||||
fileReadWordLE(); /* 16 */
|
_fileHandle.readWordLE(); /* 16 */
|
||||||
_numBitVariables = fileReadWordLE(); /* 2048 */
|
_numBitVariables = _fileHandle.readWordLE(); /* 2048 */
|
||||||
_numLocalObjects = fileReadWordLE(); /* 200 */
|
_numLocalObjects = _fileHandle.readWordLE(); /* 200 */
|
||||||
_numArray = 50;
|
_numArray = 50;
|
||||||
_numVerbs = 100;
|
_numVerbs = 100;
|
||||||
_numNewNames = 0;
|
_numNewNames = 0;
|
||||||
_objectRoomTable = NULL;
|
_objectRoomTable = NULL;
|
||||||
|
|
||||||
fileReadWordLE(); /* 50 */
|
_fileHandle.readWordLE(); /* 50 */
|
||||||
_numCharsets = fileReadWordLE(); /* 9 */
|
_numCharsets = _fileHandle.readWordLE(); /* 9 */
|
||||||
fileReadWordLE(); /* 100 */
|
_fileHandle.readWordLE(); /* 100 */
|
||||||
fileReadWordLE(); /* 50 */
|
_fileHandle.readWordLE(); /* 50 */
|
||||||
_numInventory = fileReadWordLE(); /* 80 */
|
_numInventory = _fileHandle.readWordLE(); /* 80 */
|
||||||
_numGlobalScripts = 200;
|
_numGlobalScripts = 200;
|
||||||
|
|
||||||
_shadowPaletteSize = 256;
|
_shadowPaletteSize = 256;
|
||||||
|
|
|
@ -30,21 +30,21 @@ void Scumm_v2::readIndexFile()
|
||||||
openRoom(-1);
|
openRoom(-1);
|
||||||
openRoom(0);
|
openRoom(0);
|
||||||
|
|
||||||
if (fileReadWordLE() != 0x0100)
|
if (_fileHandle.readWordLE() != 0x0100)
|
||||||
warning("The magic id doesn't match\n");
|
warning("The magic id doesn't match\n");
|
||||||
|
|
||||||
_numGlobalObjects = fileReadWordLE();
|
_numGlobalObjects = _fileHandle.readWordLE();
|
||||||
fileSeek(_fileHandle, _numGlobalObjects, SEEK_CUR); // Skip object flags
|
_fileHandle.seek(_numGlobalObjects, SEEK_CUR); // Skip object flags
|
||||||
_numRooms = fileReadByte();
|
_numRooms = _fileHandle.readByte();
|
||||||
fileSeek(_fileHandle, _numRooms * 3, SEEK_CUR);
|
_fileHandle.seek(_numRooms * 3, SEEK_CUR);
|
||||||
_numCostumes = fileReadByte();
|
_numCostumes = _fileHandle.readByte();
|
||||||
fileSeek(_fileHandle, _numCostumes * 3, SEEK_CUR);
|
_fileHandle.seek(_numCostumes * 3, SEEK_CUR);
|
||||||
_numScripts = fileReadByte();
|
_numScripts = _fileHandle.readByte();
|
||||||
fileSeek(_fileHandle, _numScripts * 3, SEEK_CUR);
|
_fileHandle.seek(_numScripts * 3, SEEK_CUR);
|
||||||
_numSounds = fileReadByte();
|
_numSounds = _fileHandle.readByte();
|
||||||
|
|
||||||
clearFileReadFailed(_fileHandle);
|
_fileHandle.clearIOFailed();
|
||||||
fileSeek(_fileHandle, 0, SEEK_SET);
|
_fileHandle.seek(0, SEEK_SET);
|
||||||
|
|
||||||
// FIXME - I'm not sure for those values yet, they will have to be rechecked
|
// FIXME - I'm not sure for those values yet, they will have to be rechecked
|
||||||
|
|
||||||
|
@ -64,9 +64,9 @@ void Scumm_v2::readIndexFile()
|
||||||
_numFlObject = 50;
|
_numFlObject = 50;
|
||||||
allocateArrays();
|
allocateArrays();
|
||||||
|
|
||||||
fileReadWordLE(); /* version magic number */
|
_fileHandle.readWordLE(); /* version magic number */
|
||||||
fileReadWordLE(); /* nb global objects */
|
_fileHandle.readWordLE(); /* nb global objects */
|
||||||
fileSeek(_fileHandle, _numGlobalObjects, SEEK_CUR); // Skip object flags
|
_fileHandle.seek(_numGlobalObjects, SEEK_CUR); // Skip object flags
|
||||||
readResTypeList(rtRoom, MKID('ROOM'), "room");
|
readResTypeList(rtRoom, MKID('ROOM'), "room");
|
||||||
readResTypeList(rtCostume, MKID('COST'), "costume");
|
readResTypeList(rtCostume, MKID('COST'), "costume");
|
||||||
readResTypeList(rtScript, MKID('SCRP'), "script");
|
readResTypeList(rtScript, MKID('SCRP'), "script");
|
||||||
|
|
|
@ -37,37 +37,37 @@ void Scumm_v3::readIndexFile()
|
||||||
openRoom(-1);
|
openRoom(-1);
|
||||||
openRoom(0);
|
openRoom(0);
|
||||||
|
|
||||||
while (!fileEof(_fileHandle)) {
|
while (!_fileHandle.eof()) {
|
||||||
itemsize = fileReadDwordLE();
|
itemsize = _fileHandle.readDwordLE();
|
||||||
blocktype = fileReadWordLE();
|
blocktype = _fileHandle.readWordLE();
|
||||||
if (fileReadFailed(_fileHandle))
|
if (_fileHandle.ioFailed())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
switch (blocktype) {
|
switch (blocktype) {
|
||||||
case 0x4E52: // 'NR'
|
case 0x4E52: // 'NR'
|
||||||
fileReadWordLE();
|
_fileHandle.readWordLE();
|
||||||
break;
|
break;
|
||||||
case 0x5230: // 'R0'
|
case 0x5230: // 'R0'
|
||||||
_numRooms = fileReadWordLE();
|
_numRooms = _fileHandle.readWordLE();
|
||||||
break;
|
break;
|
||||||
case 0x5330: // 'S0'
|
case 0x5330: // 'S0'
|
||||||
_numScripts = fileReadWordLE();
|
_numScripts = _fileHandle.readWordLE();
|
||||||
break;
|
break;
|
||||||
case 0x4E30: // 'N0'
|
case 0x4E30: // 'N0'
|
||||||
_numSounds = fileReadWordLE();
|
_numSounds = _fileHandle.readWordLE();
|
||||||
break;
|
break;
|
||||||
case 0x4330: // 'C0'
|
case 0x4330: // 'C0'
|
||||||
_numCostumes = fileReadWordLE();
|
_numCostumes = _fileHandle.readWordLE();
|
||||||
break;
|
break;
|
||||||
case 0x4F30: // 'O0'
|
case 0x4F30: // 'O0'
|
||||||
_numGlobalObjects = fileReadWordLE();
|
_numGlobalObjects = _fileHandle.readWordLE();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fileSeek(_fileHandle, itemsize - 8, SEEK_CUR);
|
_fileHandle.seek(itemsize - 8, SEEK_CUR);
|
||||||
}
|
}
|
||||||
|
|
||||||
clearFileReadFailed(_fileHandle);
|
_fileHandle.clearIOFailed();
|
||||||
fileSeek(_fileHandle, 0, SEEK_SET);
|
_fileHandle.seek(0, SEEK_SET);
|
||||||
|
|
||||||
/* I'm not sure for those values yet, they will have to be rechecked */
|
/* I'm not sure for those values yet, they will have to be rechecked */
|
||||||
|
|
||||||
|
@ -88,19 +88,19 @@ void Scumm_v3::readIndexFile()
|
||||||
allocateArrays();
|
allocateArrays();
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
itemsize = fileReadDwordLE();
|
itemsize = _fileHandle.readDwordLE();
|
||||||
|
|
||||||
if (fileReadFailed(_fileHandle))
|
if (_fileHandle.ioFailed())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
blocktype = fileReadWordLE();
|
blocktype = _fileHandle.readWordLE();
|
||||||
|
|
||||||
numblock++;
|
numblock++;
|
||||||
|
|
||||||
switch (blocktype) {
|
switch (blocktype) {
|
||||||
|
|
||||||
case 0x4E52: // 'NR'
|
case 0x4E52: // 'NR'
|
||||||
fileSeek(_fileHandle, itemsize - 6, SEEK_CUR);
|
_fileHandle.seek(itemsize - 6, SEEK_CUR);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x5230: // 'R0'
|
case 0x5230: // 'R0'
|
||||||
|
@ -120,15 +120,15 @@ void Scumm_v3::readIndexFile()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x4F30: // 'O0'
|
case 0x4F30: // 'O0'
|
||||||
num = fileReadWordLE();
|
num = _fileHandle.readWordLE();
|
||||||
assert(num == _numGlobalObjects);
|
assert(num == _numGlobalObjects);
|
||||||
for (i = 0; i != num; i++) {
|
for (i = 0; i != num; i++) {
|
||||||
uint32 bits = fileReadByte();
|
uint32 bits = _fileHandle.readByte();
|
||||||
byte tmp;
|
byte tmp;
|
||||||
bits |= fileReadByte() << 8;
|
bits |= _fileHandle.readByte() << 8;
|
||||||
bits |= fileReadByte() << 16;
|
bits |= _fileHandle.readByte() << 16;
|
||||||
_classData[i] = bits;
|
_classData[i] = bits;
|
||||||
tmp = fileReadByte();
|
tmp = _fileHandle.readByte();
|
||||||
_objectOwnerTable[i] = tmp & OF_OWNER_MASK;
|
_objectOwnerTable[i] = tmp & OF_OWNER_MASK;
|
||||||
_objectStateTable[i] = tmp >> OF_STATE_SHL;
|
_objectStateTable[i] = tmp >> OF_STATE_SHL;
|
||||||
}
|
}
|
||||||
|
@ -154,8 +154,8 @@ void Scumm_v3::loadCharset(int no)
|
||||||
|
|
||||||
openRoom(98 + no);
|
openRoom(98 + no);
|
||||||
|
|
||||||
size = fileReadWordLE();
|
size = _fileHandle.readWordLE();
|
||||||
|
|
||||||
fileRead(_fileHandle, createResource(6, no, size), size);
|
_fileHandle.read(createResource(6, no, size), size);
|
||||||
openRoom(-1);
|
openRoom(-1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,8 +33,8 @@ void Scumm_v4::loadCharset(int no)
|
||||||
|
|
||||||
openRoom(900 + no);
|
openRoom(900 + no);
|
||||||
|
|
||||||
size = fileReadDwordLE() + 11;
|
size = _fileHandle.readDwordLE() + 11;
|
||||||
|
|
||||||
fileRead(_fileHandle, createResource(6, no, size), size);
|
_fileHandle.read(createResource(6, no, size), size);
|
||||||
openRoom(-1);
|
openRoom(-1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -554,7 +554,7 @@ public:
|
||||||
|
|
||||||
/* Should be in Resource class */
|
/* Should be in Resource class */
|
||||||
byte _encbyte;
|
byte _encbyte;
|
||||||
void *_fileHandle;
|
File _fileHandle;
|
||||||
char *_resFilePrefix, *_resFilePath;
|
char *_resFilePrefix, *_resFilePath;
|
||||||
uint32 _fileOffset;
|
uint32 _fileOffset;
|
||||||
char *_exe_name;
|
char *_exe_name;
|
||||||
|
@ -597,9 +597,6 @@ public:
|
||||||
virtual void loadCharset(int i);
|
virtual void loadCharset(int i);
|
||||||
void nukeCharset(int i);
|
void nukeCharset(int i);
|
||||||
|
|
||||||
bool fileReadFailed(void *handle);
|
|
||||||
void clearFileReadFailed(void *handle);
|
|
||||||
|
|
||||||
int _lastLoadedRoom, _roomResource;
|
int _lastLoadedRoom, _roomResource;
|
||||||
byte _resFilePathId, _fileReadFailed;
|
byte _resFilePathId, _fileReadFailed;
|
||||||
byte *findResourceData(uint32 tag, byte *ptr);
|
byte *findResourceData(uint32 tag, byte *ptr);
|
||||||
|
@ -933,34 +930,14 @@ public:
|
||||||
bool _keepText;
|
bool _keepText;
|
||||||
|
|
||||||
|
|
||||||
/* Should be in System class */
|
|
||||||
void fileClose(void *file);
|
|
||||||
void *fileOpen(const char *filename, int mode);
|
|
||||||
void fileSeek(void *file, long offs, int whence);
|
|
||||||
void fileRead(void *handle, void *ptr, uint32 size);
|
|
||||||
bool fileEof(void *handle);
|
|
||||||
uint32 filePos(void *handle);
|
|
||||||
bool checkFixedDisk();
|
bool checkFixedDisk();
|
||||||
int _cdrom;
|
int _cdrom;
|
||||||
|
|
||||||
int fileReadByte();
|
|
||||||
uint32 fileReadDwordLE();
|
|
||||||
uint32 fileReadDwordBE();
|
|
||||||
int fileReadByte(void *handle);
|
|
||||||
uint32 fileReadDwordLE(void *handle);
|
|
||||||
uint32 fileReadDwordBE(void *handle);
|
|
||||||
|
|
||||||
#if defined(SCUMM_LITTLE_ENDIAN)
|
#if defined(SCUMM_LITTLE_ENDIAN)
|
||||||
uint32 fileReadDword() { return fileReadDwordLE(); }
|
uint32 fileReadDword() { return _fileHandle.readDwordLE(); }
|
||||||
uint32 fileReadDword(void *handle) { return fileReadDwordLE(handle); }
|
|
||||||
#elif defined(SCUMM_BIG_ENDIAN)
|
#elif defined(SCUMM_BIG_ENDIAN)
|
||||||
uint32 fileReadDword() { return fileReadDwordBE(); }
|
uint32 fileReadDword() { return _fileHandle.readDwordBE(); }
|
||||||
uint32 fileReadDword(void *handle) { return fileReadDwordBE(handle); }
|
|
||||||
#endif
|
#endif
|
||||||
uint fileReadWordLE();
|
|
||||||
uint fileReadWordBE();
|
|
||||||
uint fileReadWordLE(void *handle);
|
|
||||||
uint fileReadWordBE(void *handle);
|
|
||||||
|
|
||||||
/* Version 5 script opcodes */
|
/* Version 5 script opcodes */
|
||||||
void o5_actorFollowCamera();
|
void o5_actorFollowCamera();
|
||||||
|
|
|
@ -853,7 +853,7 @@ void Scumm::setScaleItem(int slot, int a, int b, int c, int d)
|
||||||
void Scumm::dumpResource(char *tag, int idx, byte *ptr)
|
void Scumm::dumpResource(char *tag, int idx, byte *ptr)
|
||||||
{
|
{
|
||||||
char buf[256];
|
char buf[256];
|
||||||
FILE *out;
|
File out;
|
||||||
|
|
||||||
uint32 size;
|
uint32 size;
|
||||||
if (_features & GF_SMALL_HEADER)
|
if (_features & GF_SMALL_HEADER)
|
||||||
|
@ -867,14 +867,14 @@ void Scumm::dumpResource(char *tag, int idx, byte *ptr)
|
||||||
sprintf(buf, "dumps/%s%d.dmp", tag, idx);
|
sprintf(buf, "dumps/%s%d.dmp", tag, idx);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
out = fopen(buf, "rb");
|
out.open(buf, 1);
|
||||||
if (!out) {
|
if (out.isOpen() == false) {
|
||||||
out = fopen(buf, "wb");
|
out.open(buf, 2);
|
||||||
if (!out)
|
if (out.isOpen() == false)
|
||||||
return;
|
return;
|
||||||
fwrite(ptr, size, 1, out);
|
out.write(ptr, size);
|
||||||
}
|
}
|
||||||
fclose(out);
|
out.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1463,7 +1463,6 @@ void Scumm::launch()
|
||||||
{
|
{
|
||||||
charset._vm = this;
|
charset._vm = this;
|
||||||
gdi._vm = this;
|
gdi._vm = this;
|
||||||
_fileHandle = NULL;
|
|
||||||
|
|
||||||
_maxHeapThreshold = 450000;
|
_maxHeapThreshold = 450000;
|
||||||
_minHeapThreshold = 400000;
|
_minHeapThreshold = 400000;
|
||||||
|
|
139
scumm/sys.cpp
139
scumm/sys.cpp
|
@ -23,145 +23,6 @@
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "scumm.h"
|
#include "scumm.h"
|
||||||
|
|
||||||
void *Scumm::fileOpen(const char *filename, int mode)
|
|
||||||
{
|
|
||||||
clearFileReadFailed(_fileHandle);
|
|
||||||
|
|
||||||
if (mode == 1)
|
|
||||||
return fopen(filename, "rb");
|
|
||||||
|
|
||||||
error("This should not happen!");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Scumm::fileClose(void *file)
|
|
||||||
{
|
|
||||||
if (file)
|
|
||||||
fclose((FILE *)file);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Scumm::fileReadFailed(void *file)
|
|
||||||
{
|
|
||||||
return _fileReadFailed != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Scumm::clearFileReadFailed(void *file)
|
|
||||||
{
|
|
||||||
_fileReadFailed = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Scumm::fileEof(void *file)
|
|
||||||
{
|
|
||||||
return feof((FILE *)file) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32 Scumm::filePos(void *handle)
|
|
||||||
{
|
|
||||||
return ftell((FILE *)handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Scumm::fileSeek(void *file, long offs, int whence)
|
|
||||||
{
|
|
||||||
if (fseek((FILE *)file, offs, whence) != 0)
|
|
||||||
clearerr((FILE *)file);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Scumm::fileRead(void *file, void *ptr, uint32 size)
|
|
||||||
{
|
|
||||||
byte *ptr2 = (byte *)ptr;
|
|
||||||
|
|
||||||
if (size == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if ((uint32)fread(ptr2, size, 1, (FILE *)file) != 1) {
|
|
||||||
clearerr((FILE *)file);
|
|
||||||
_fileReadFailed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
|
||||||
*ptr2++ ^= _encbyte;
|
|
||||||
} while (--size);
|
|
||||||
}
|
|
||||||
|
|
||||||
int Scumm::fileReadByte()
|
|
||||||
{
|
|
||||||
byte b;
|
|
||||||
|
|
||||||
if (fread(&b, 1, 1, (FILE *)_fileHandle) != 1) {
|
|
||||||
clearerr((FILE *)_fileHandle);
|
|
||||||
_fileReadFailed = true;
|
|
||||||
}
|
|
||||||
return b ^ _encbyte;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint Scumm::fileReadWordLE()
|
|
||||||
{
|
|
||||||
uint a = fileReadByte();
|
|
||||||
uint b = fileReadByte();
|
|
||||||
return a | (b << 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32 Scumm::fileReadDwordLE()
|
|
||||||
{
|
|
||||||
uint a = fileReadWordLE();
|
|
||||||
uint b = fileReadWordLE();
|
|
||||||
return (b << 16) | a;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint Scumm::fileReadWordBE()
|
|
||||||
{
|
|
||||||
uint b = fileReadByte();
|
|
||||||
uint a = fileReadByte();
|
|
||||||
return a | (b << 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32 Scumm::fileReadDwordBE()
|
|
||||||
{
|
|
||||||
uint b = fileReadWordBE();
|
|
||||||
uint a = fileReadWordBE();
|
|
||||||
return (b << 16) | a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Overloaded versions */
|
|
||||||
int Scumm::fileReadByte(void *handle)
|
|
||||||
{
|
|
||||||
byte b;
|
|
||||||
|
|
||||||
if (fread(&b, 1, 1, (FILE *)handle) != 1) {
|
|
||||||
clearerr((FILE *)handle);
|
|
||||||
_fileReadFailed = true;
|
|
||||||
}
|
|
||||||
return b ^ _encbyte;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint Scumm::fileReadWordLE(void *handle)
|
|
||||||
{
|
|
||||||
uint a = fileReadByte(handle);
|
|
||||||
uint b = fileReadByte(handle);
|
|
||||||
return a | (b << 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32 Scumm::fileReadDwordLE(void *handle)
|
|
||||||
{
|
|
||||||
uint a = fileReadWordLE(handle);
|
|
||||||
uint b = fileReadWordLE(handle);
|
|
||||||
return (b << 16) | a;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint Scumm::fileReadWordBE(void *handle)
|
|
||||||
{
|
|
||||||
uint b = fileReadByte(handle);
|
|
||||||
uint a = fileReadByte(handle);
|
|
||||||
return a | (b << 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32 Scumm::fileReadDwordBE(void *handle)
|
|
||||||
{
|
|
||||||
uint b = fileReadWordBE(handle);
|
|
||||||
uint a = fileReadWordBE(handle);
|
|
||||||
return (b << 16) | a;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Scumm::checkFixedDisk()
|
bool Scumm::checkFixedDisk()
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue