aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Comstedt2003-08-10 20:50:50 +0000
committerMarcus Comstedt2003-08-10 20:50:50 +0000
commit2ed0eee7115fc749a2cfeb7d722a4817525bbc50 (patch)
treea8f01c411252f76200a08829246e01aaa0f6310e
parenta5aa5c0d73fa3c9faec0ba167cb88d3595f089e5 (diff)
downloadscummvm-rg350-2ed0eee7115fc749a2cfeb7d722a4817525bbc50.tar.gz
scummvm-rg350-2ed0eee7115fc749a2cfeb7d722a4817525bbc50.tar.bz2
scummvm-rg350-2ed0eee7115fc749a2cfeb7d722a4817525bbc50.zip
Replaced use of File with use of SaveFileManager where appropriate.
svn-id: r9627
-rw-r--r--scumm/script_v5.cpp29
-rw-r--r--simon/simon.cpp141
-rw-r--r--sky/control.cpp92
3 files changed, 157 insertions, 105 deletions
diff --git a/scumm/script_v5.cpp b/scumm/script_v5.cpp
index 8584345b8e..4c7dab7b01 100644
--- a/scumm/script_v5.cpp
+++ b/scumm/script_v5.cpp
@@ -1757,7 +1757,7 @@ void Scumm_v5::o5_roomOps() {
break;
case 13:{ /* save-string */
- File file;
+ SaveFile *file;
char filename[256], *s;
a = getVarOrDirectByte(0x80);
@@ -1765,16 +1765,19 @@ void Scumm_v5::o5_roomOps() {
s = filename;
while ((*s++ = fetchScriptByte()));
- file.open(filename, getSavePath(), File::kFileWriteMode);
- if (file.isOpen()) {
+ SaveFileManager *mgr = _system->get_savefile_manager();
+ file = mgr->open_savefile(filename, getSavePath(), true);
+ if (file != NULL) {
byte *ptr;
ptr = getResourceAddress(rtString, a);
- file.write(ptr, resStrLen(ptr) + 1);
+ file->write(ptr, resStrLen(ptr) + 1);
+ delete file;
}
+ delete mgr;
break;
}
case 14:{ /* load-string */
- File file;
+ SaveFile *file;
char filename[256], *s;
a = getVarOrDirectByte(0x80);
@@ -1782,12 +1785,18 @@ void Scumm_v5::o5_roomOps() {
s = filename;
while ((*s++ = fetchScriptByte()));
- file.open(filename, getSavePath(), File::kFileReadMode);
- if (file.isOpen()) {
+ SaveFileManager *mgr = _system->get_savefile_manager();
+ file = mgr->open_savefile(filename, getSavePath(), false);
+ if (file != NULL) {
byte *ptr;
- int len = file.size();
- ptr = (byte *)calloc(len + 1, 1); // Create a zero terminated buffer
- file.read(ptr, len); // Read in the data
+ int len = 256, cnt = 0;
+ ptr = (byte *)malloc(len);
+ while (ptr) {
+ int r = file->read(ptr+cnt, len-cnt);
+ if ((cnt += r) < len) break;
+ ptr = (byte *)realloc(ptr, len<<=1);
+ }
+ ptr[cnt] = '\0';
loadPtrToResource(rtString, a, ptr);
free(ptr);
}
diff --git a/simon/simon.cpp b/simon/simon.cpp
index 200f0bcb6b..d34fd8a8b5 100644
--- a/simon/simon.cpp
+++ b/simon/simon.cpp
@@ -2541,23 +2541,31 @@ void SimonEngine::o_load_game() {
}
int SimonEngine::count_savegames() {
- File f;
+ SaveFile *f;
uint i = 1;
+ bool marks[256];
+
+ SaveFileManager *mgr = _system->get_savefile_manager();
+ char *prefix = gen_savename(999);
+ prefix[strlen(prefix)-3] = '\0';
+ mgr->list_savefiles(prefix, getSavePath(), marks, 256);
while (i < 256) {
- f.open(gen_savename(i), getSavePath());
- if (f.isOpen() == false)
+ if (marks[i] &&
+ (f = mgr->open_savefile(gen_savename(i), getSavePath(),
+ false))) {
+ i++;
+ delete f;
+ } else
break;
-
- f.close();
- i++;
}
+ delete mgr;
return i;
}
int SimonEngine::display_savegame_list(int curpos, bool load, char *dst) {
int slot, last_slot;
- File in;
+ SaveFile *in;
showMessageFormat("\xC");
@@ -2565,13 +2573,14 @@ int SimonEngine::display_savegame_list(int curpos, bool load, char *dst) {
slot = curpos;
+ SaveFileManager *mgr = _system->get_savefile_manager();
+
while (curpos + 6 > slot) {
- in.open(gen_savename(slot), getSavePath());
- if (in.isOpen() == false)
+ if(!(in = mgr->open_savefile(gen_savename(slot), getSavePath(), false)))
break;
- in.read(dst, 18);
- in.close();
+ in->read(dst, 18);
+ delete in;
last_slot = slot;
if (slot < 10)
showMessageFormat(" ");
@@ -2591,14 +2600,15 @@ int SimonEngine::display_savegame_list(int curpos, bool load, char *dst) {
}
} else {
if (curpos + 6 == slot) {
- in.open(gen_savename(slot), getSavePath());
- if (in.isOpen() == true) {
+ if((in = mgr->open_savefile(gen_savename(slot), getSavePath(), false))) {
slot++;
- in.close();
+ delete in;
}
}
}
+ delete mgr;
+
return slot - curpos;
}
@@ -4579,7 +4589,7 @@ void SimonEngine::delay(uint amount) {
}
bool SimonEngine::save_game(uint slot, char *caption) {
- File f;
+ SaveFile *f;
uint item_index, num_item, i, j;
TimeEvent *te;
@@ -4589,51 +4599,54 @@ bool SimonEngine::save_game(uint slot, char *caption) {
errno = 0;
#endif
- f.open(gen_savename(slot), getSavePath(), 2);
- if (f.isOpen() == false) {
+ SaveFileManager *mgr = _system->get_savefile_manager();
+
+ f = mgr->open_savefile(gen_savename(slot), getSavePath(), true);
+ if (f == NULL) {
+ delete mgr;
_lock_word &= ~0x100;
return false;
}
- f.write(caption, 0x12);
+ f->write(caption, 0x12);
- f.writeUint32BE(_itemarray_inited - 1);
- f.writeUint32BE(0xFFFFFFFF);
- f.writeUint32BE(0);
- f.writeUint32BE(0);
+ f->writeUint32BE(_itemarray_inited - 1);
+ f->writeUint32BE(0xFFFFFFFF);
+ f->writeUint32BE(0);
+ f->writeUint32BE(0);
i = 0;
for (te = _first_time_struct; te; te = te->next)
i++;
- f.writeUint32BE(i);
+ f->writeUint32BE(i);
for (te = _first_time_struct; te; te = te->next) {
- f.writeUint32BE(te->time + _base_time);
- f.writeUint16BE(te->subroutine_id);
+ f->writeUint32BE(te->time + _base_time);
+ f->writeUint16BE(te->subroutine_id);
}
item_index = 1;
for (num_item = _itemarray_inited - 1; num_item; num_item--) {
Item *item = _itemarray_ptr[item_index++];
- f.writeUint16BE(item->parent);
- f.writeUint16BE(item->sibling);
- f.writeUint16BE(item->unk3);
- f.writeUint16BE(item->unk4);
+ f->writeUint16BE(item->parent);
+ f->writeUint16BE(item->sibling);
+ f->writeUint16BE(item->unk3);
+ f->writeUint16BE(item->unk4);
Child1 *child1 = (Child1 *)findChildOfType(item, 1);
if (child1) {
- f.writeUint16BE(child1->fr2);
+ f->writeUint16BE(child1->fr2);
}
Child2 *child2 = (Child2 *)findChildOfType(item, 2);
if (child2) {
- f.writeUint32BE(child2->avail_props);
+ f->writeUint32BE(child2->avail_props);
i = child2->avail_props & 1;
for (j = 1; j < 16; j++) {
if ((1 << j) & child2->avail_props) {
- f.writeUint16BE(child2->array[i++]);
+ f->writeUint16BE(child2->array[i++]);
}
}
}
@@ -4641,26 +4654,27 @@ bool SimonEngine::save_game(uint slot, char *caption) {
Child9 *child9 = (Child9 *) findChildOfType(item, 9);
if (child9) {
for (i = 0; i != 4; i++) {
- f.writeUint16BE(child9->array[i]);
+ f->writeUint16BE(child9->array[i]);
}
}
}
// write the 255 variables
for (i = 0; i != 255; i++) {
- f.writeUint16BE(readVariable(i));
+ f->writeUint16BE(readVariable(i));
}
// write the items in array 6
for (i = 0; i != 10; i++) {
- f.writeUint16BE(itemPtrToID(_item_array_6[i]));
+ f->writeUint16BE(itemPtrToID(_item_array_6[i]));
}
// Write the bits in array 1 & 2
for (i = 0; i != 32; i++)
- f.writeUint16BE(_bit_array[i]);
+ f->writeUint16BE(_bit_array[i]);
- f.close();
+ delete f;
+ delete mgr;
_lock_word &= ~0x100;
@@ -4680,7 +4694,7 @@ char *SimonEngine::gen_savename(int slot) {
bool SimonEngine::load_game(uint slot) {
char ident[18];
- File f;
+ SaveFile *f;
uint num, item_index, i, j;
_lock_word |= 0x100;
@@ -4689,32 +4703,36 @@ bool SimonEngine::load_game(uint slot) {
errno = 0;
#endif
- f.open(gen_savename(slot), getSavePath(), 1);
- if (f.isOpen() == false) {
+ SaveFileManager *mgr = _system->get_savefile_manager();
+
+ f = mgr->open_savefile(gen_savename(slot), getSavePath(), false);
+ if (f == NULL) {
+ delete mgr;
_lock_word &= ~0x100;
return false;
}
- f.read(ident, 18);
+ f->read(ident, 18);
- num = f.readUint32BE();
+ num = f->readUint32BE();
- if (f.readUint32BE() != 0xFFFFFFFF || num != _itemarray_inited - 1) {
- f.close();
+ if (f->readUint32BE() != 0xFFFFFFFF || num != _itemarray_inited - 1) {
+ delete f;
+ delete mgr;
_lock_word &= ~0x100;
return false;
}
- f.readUint32BE();
- f.readUint32BE();
+ f->readUint32BE();
+ f->readUint32BE();
_no_parent_notify = true;
// add all timers
killAllTimers();
- for (num = f.readUint32BE(); num; num--) {
- uint32 timeout = f.readUint32BE();
- uint16 func_to_call = f.readUint16BE();
+ for (num = f->readUint32BE(); num; num--) {
+ uint32 timeout = f->readUint32BE();
+ uint16 func_to_call = f->readUint16BE();
addTimeEvent(timeout, func_to_call);
}
@@ -4722,8 +4740,8 @@ bool SimonEngine::load_game(uint slot) {
for (num = _itemarray_inited - 1; num; num--) {
Item *item = _itemarray_ptr[item_index++], *parent_item;
- uint parent = f.readUint16BE();
- uint sibling = f.readUint16BE();
+ uint parent = f->readUint16BE();
+ uint sibling = f->readUint16BE();
parent_item = derefItem(parent);
@@ -4734,22 +4752,22 @@ bool SimonEngine::load_game(uint slot) {
item->sibling = sibling;
}
- item->unk3 = f.readUint16BE();
- item->unk4 = f.readUint16BE();
+ item->unk3 = f->readUint16BE();
+ item->unk4 = f->readUint16BE();
Child1 *child1 = (Child1 *)findChildOfType(item, 1);
if (child1 != NULL) {
- child1->fr2 = f.readUint16BE();
+ child1->fr2 = f->readUint16BE();
}
Child2 *child2 = (Child2 *)findChildOfType(item, 2);
if (child2 != NULL) {
- child2->avail_props = f.readUint32BE();
+ child2->avail_props = f->readUint32BE();
i = child2->avail_props & 1;
for (j = 1; j < 16; j++) {
if ((1 << j) & child2->avail_props) {
- child2->array[i++] = f.readUint16BE();
+ child2->array[i++] = f->readUint16BE();
}
}
}
@@ -4757,7 +4775,7 @@ bool SimonEngine::load_game(uint slot) {
Child9 *child9 = (Child9 *) findChildOfType(item, 9);
if (child9) {
for (i = 0; i != 4; i++) {
- child9->array[i] = f.readUint16BE();
+ child9->array[i] = f->readUint16BE();
}
}
}
@@ -4765,19 +4783,20 @@ bool SimonEngine::load_game(uint slot) {
// read the 255 variables
for (i = 0; i != 255; i++) {
- writeVariable(i, f.readUint16BE());
+ writeVariable(i, f->readUint16BE());
}
// write the items in array 6
for (i = 0; i != 10; i++) {
- _item_array_6[i] = derefItem(f.readUint16BE());
+ _item_array_6[i] = derefItem(f->readUint16BE());
}
// Write the bits in array 1 & 2
for (i = 0; i != 32; i++)
- _bit_array[i] = f.readUint16BE();
+ _bit_array[i] = f->readUint16BE();
- f.close();
+ delete f;
+ delete mgr;
_no_parent_notify = false;
diff --git a/sky/control.cpp b/sky/control.cpp
index a48ffd655d..4d84a428ac 100644
--- a/sky/control.cpp
+++ b/sky/control.cpp
@@ -788,14 +788,21 @@ uint16 SkyControl::shiftUp(uint8 speed) {
bool SkyControl::autoSaveExists(void) {
- File test;
+ bool test = false;
+ SaveFile *f;
char fName[20];
if (SkyState::isCDVersion())
strcpy(fName, "SKY-VM-CD.ASD");
else
sprintf(fName, "SKY-VM%03d.ASD", SkyState::_systemVars.gameVersion);
- test.open(fName, _savePath);
- return test.isOpen();
+ SaveFileManager *mgr = _system->get_savefile_manager();
+ f = mgr->open_savefile(fName, _savePath, false);
+ if (f != NULL) {
+ test = true;
+ delete f;
+ }
+ delete mgr;
+ return test;
}
uint16 SkyControl::saveRestorePanel(bool allowSave) {
@@ -1011,11 +1018,12 @@ void SkyControl::loadDescriptions(uint8 *destBuf) {
memset(destBuf, 0, MAX_SAVE_GAMES * MAX_TEXT_LEN);
- File inf;
- inf.open("SKY-VM.SAV",_savePath);
- if (inf.isOpen()) {
- uint8 *tmpBuf = (uint8 *)malloc(inf.size());
- inf.read(tmpBuf, inf.size());
+ SaveFileManager *mgr = _system->get_savefile_manager();
+ SaveFile *inf;
+ inf = mgr->open_savefile("SKY-VM.SAV",_savePath,false);
+ if (inf != NULL) {
+ uint8 *tmpBuf = (uint8 *)malloc(MAX_SAVE_GAMES * MAX_TEXT_LEN);
+ inf->read(tmpBuf, MAX_SAVE_GAMES * MAX_TEXT_LEN);
uint8 *destPos = destBuf;
uint8 *inPos = tmpBuf;
for (uint16 cnt = 0; cnt < MAX_SAVE_GAMES; cnt++) {
@@ -1027,7 +1035,7 @@ void SkyControl::loadDescriptions(uint8 *destBuf) {
inPos += nameCnt + 1;
}
free(tmpBuf);
- inf.close();
+ delete inf;
} else {
uint8 *destPos = destBuf;
for (uint16 cnt = 0; cnt < MAX_SAVE_GAMES; cnt++) {
@@ -1035,6 +1043,7 @@ void SkyControl::loadDescriptions(uint8 *destBuf) {
destPos += MAX_TEXT_LEN;
}
}
+ delete mgr;
}
bool SkyControl::loadSaveAllowed(void) {
@@ -1069,10 +1078,14 @@ void SkyControl::saveDescriptions(uint8 *srcBuf) {
tmpPos++;
srcPos += MAX_TEXT_LEN;
}
- File outf;
- outf.open("SKY-VM.SAV", _savePath, File::kFileWriteMode);
- outf.write(tmpBuf, tmpPos - tmpBuf);
- outf.close();
+ SaveFile *outf;
+ SaveFileManager *mgr = _system->get_savefile_manager();
+ outf = mgr->open_savefile("SKY-VM.SAV", _savePath, true);
+ if (outf != NULL) {
+ outf->write(tmpBuf, tmpPos - tmpBuf);
+ delete outf;
+ }
+ delete mgr;
free(tmpBuf);
}
@@ -1082,17 +1095,21 @@ void SkyControl::doAutoSave(void) {
strcpy(fName, "SKY-VM-CD.ASD");
else
sprintf(fName, "SKY-VM%03d.ASD", SkyState::_systemVars.gameVersion);
- File outf;
- if (!outf.open(fName, _savePath, File::kFileWriteMode)) {
+ SaveFile *outf;
+ SaveFileManager *mgr = _system->get_savefile_manager();
+ outf = mgr->open_savefile(fName, _savePath, true);
+ if (outf == NULL) {
warning("Can't create file %s for autosaving", fName);
+ delete mgr;
return;
}
uint8 *saveData = (uint8 *)malloc(0x20000);
uint32 fSize = prepareSaveData(saveData);
- if (outf.write(saveData, fSize) != fSize)
+ if (outf->write(saveData, fSize) != fSize)
warning("Can't write file %s for autosaving. Disk full?", fName);
- outf.close();
+ delete outf;
+ delete mgr;
free(saveData);
}
@@ -1100,19 +1117,25 @@ uint16 SkyControl::saveGameToFile(void) {
char fName[20];
sprintf(fName,"SKY-VM.%03d", _selectedGame);
- File outf;
- if (!outf.open(fName, _savePath, File::kFileWriteMode)) {
+ SaveFileManager *mgr = _system->get_savefile_manager();
+ SaveFile *outf;
+ outf = mgr->open_savefile(fName, _savePath, true);
+ if (outf == NULL) {
+ delete mgr;
return NO_DISK_SPACE;
}
uint8 *saveData = (uint8 *)malloc(0x20000);
uint32 fSize = prepareSaveData(saveData);
- if (outf.write(saveData, fSize) != fSize) {
+ if (outf->write(saveData, fSize) != fSize) {
free(saveData);
+ delete outf;
+ delete mgr;
return NO_DISK_SPACE;
}
- outf.close();
+ delete outf;
+ delete mgr;
free(saveData);
return GAME_SAVED;
}
@@ -1501,30 +1524,31 @@ uint16 SkyControl::restoreGameFromFile(bool autoSave) {
} else
sprintf(fName,"SKY-VM.%03d", _selectedGame);
- File inf;
- if (!inf.open(fName, _savePath)) {
+ SaveFileManager *mgr = _system->get_savefile_manager();
+ SaveFile *inf;
+ inf = mgr->open_savefile(fName, _savePath, false);
+ if (inf == NULL) {
+ delete mgr;
return RESTORE_FAILED;
}
- uint32 fSize = inf.size();
- uint8 *saveData = (uint8 *)malloc(fSize);
- uint32 infSize = inf.readUint32LE();
- inf.seek(0, SEEK_SET);
+ uint32 infSize = inf->readUint32LE();
+ if (infSize < 4) infSize = 4;
+ uint8 *saveData = (uint8 *)malloc(infSize);
+ *(uint32 *)saveData = TO_LE_32(infSize);
- if (fSize != infSize) {
- warning("File size doesn't match expected data size!");
- free(saveData);
- return RESTORE_FAILED;
- }
- if (inf.read(saveData, fSize) != fSize) {
+ if (inf->read(saveData+4, infSize-4) != infSize-4) {
warning("Can't read from file!");
free(saveData);
+ delete inf;
+ delete mgr;
return RESTORE_FAILED;
}
uint16 res = parseSaveData(saveData);
SkyState::_systemVars.pastIntro = true;
- inf.close();
+ delete inf;
+ delete mgr;
free(saveData);
return res;
}