From c334c1103fbb927d4826bcafd89a71fa7391a093 Mon Sep 17 00:00:00 2001 From: Paweł Kołodziejski Date: Sat, 13 Sep 2003 13:41:44 +0000 Subject: implemented opcodes: openfile and closefile svn-id: r10226 --- scumm/script_v6.cpp | 31 ++++++++++++++++++++++++------- scumm/scumm.h | 1 + 2 files changed, 25 insertions(+), 7 deletions(-) (limited to 'scumm') diff --git a/scumm/script_v6.cpp b/scumm/script_v6.cpp index e7a6f23958..4241b27ae0 100644 --- a/scumm/script_v6.cpp +++ b/scumm/script_v6.cpp @@ -2827,7 +2827,7 @@ void Scumm_v6::o6_stopTalking() { } void Scumm_v6::o6_openFile() { - int a, len; + int mode, len, slot; byte filename[100]; _msgPtrToAdd = filename; @@ -2837,15 +2837,32 @@ void Scumm_v6::o6_openFile() { len = resStrLen(_scriptPointer); _scriptPointer += len + 1; - a = pop(); - warning("stub o6_openFile(\"%s\", %d)", filename, a); - // -1 open failed, otherwise file slot - push(0); + mode = pop(); + slot = -1; + for (int l = 0; l < 17; l++) { + if (_hFileTable[l].isOpen() == false) { + slot = l; + break; + } + } + + if (slot != -1) { + if (mode == 1) + _hFileTable[slot].open((char*)filename, this->getGameDataPath(), File::kFileReadMode); + else if (mode == 2) + _hFileTable[slot].open((char*)filename, this->getGameDataPath(), File::kFileWriteMode); + else + error("o6_openFile(): wrong open file mode"); + + warning("%d = o6_openFile(\"%s\", %d)", slot, filename, mode); + } + push(slot); } void Scumm_v6::o6_closeFile() { - // pop'd variable should be that pushed in o6_openFile() - warning("stub o6_closeFile(%d)", pop()); + int slot = pop(); + _hFileTable[slot].close(); + warning("o6_closeFile(%d)", slot); } void Scumm_v6::o6_deleteFile() { diff --git a/scumm/scumm.h b/scumm/scumm.h index c5869f4835..0b8f760f78 100644 --- a/scumm/scumm.h +++ b/scumm/scumm.h @@ -559,6 +559,7 @@ protected: /* Should be in Resource class */ File _fileHandle; uint32 _fileOffset; + File _hFileTable[17]; int _resourceHeaderSize; char *_exe_name; // This is the name we use for opening resource files char *_game_name; // This is the game the user calls it, so use for saving -- cgit v1.2.3