diff options
author | Max Horn | 2002-06-24 12:32:32 +0000 |
---|---|---|
committer | Max Horn | 2002-06-24 12:32:32 +0000 |
commit | 88e176f1552588e4a84f5114ee7dcd4e0d6c1f96 (patch) | |
tree | fe01fba27eac47145fafa68c89119401c4da6e8d /script_v1.cpp | |
parent | a38828fbd53ac32051af47522ce45d148723b6bb (diff) | |
download | scummvm-rg350-88e176f1552588e4a84f5114ee7dcd4e0d6c1f96.tar.gz scummvm-rg350-88e176f1552588e4a84f5114ee7dcd4e0d6c1f96.tar.bz2 scummvm-rg350-88e176f1552588e4a84f5114ee7dcd4e0d6c1f96.zip |
implement save/load-string ops (used only by Indy 4 IQ system it seems?)
svn-id: r4426
Diffstat (limited to 'script_v1.cpp')
-rw-r--r-- | script_v1.cpp | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/script_v1.cpp b/script_v1.cpp index abb2f8c484..d94969022f 100644 --- a/script_v1.cpp +++ b/script_v1.cpp @@ -2032,21 +2032,48 @@ void Scumm::o5_roomOps() case 13:{ /* save-string */ char buf[256], *s; + FILE *out; + a = getVarOrDirectByte(0x80); s = buf; while ((*s++ = fetchScriptByte())) ; - warning("roomops:13 save-string(%d,\"%s\") not implemented", a, buf); + + // Use buf as filename + out = fopen(buf, "wb"); + if (out) { + byte *ptr; + ptr = getResourceAddress(rtString, a); + fwrite(ptr, getStringLen(ptr)+1, 1, out); + fclose(out); + } + break; + } + case 14:{ /* load-string */ + char buf[256], *s; + FILE *in; + + a = getVarOrDirectByte(0x80); + s = buf; + while ((*s++ = fetchScriptByte())) + ; + + // Use buf as filename + in = fopen(buf, "rb"); + if (in) { + byte *ptr; + int len; + fseek(in, 0, SEEK_END); + len = ftell(in); // Determine file size + ptr = (byte *)calloc(len+1, 1); // Create a zero terminated buffer + fseek(in, 0, SEEK_SET); + fread(ptr, len, 1, in); // Read in the data + fclose(in); + loadPtrToResource(rtString, a, ptr); + free(ptr); + } break; } - case 14: /* load-string */ - char buf[256], *s; - a = getVarOrDirectByte(0x80); - s = buf; - while ((*s++ = fetchScriptByte())) - ; - warning("roomops:14 load-string(%d,\"%s\") not implemented", a, buf); - break; case 15: /* palmanip */ a = getVarOrDirectByte(0x80); _opcode = fetchScriptByte(); |