diff options
-rw-r--r-- | engines/sci/engine/kmisc.cpp | 59 |
1 files changed, 37 insertions, 22 deletions
diff --git a/engines/sci/engine/kmisc.cpp b/engines/sci/engine/kmisc.cpp index 6e961f72f3..f95b1dd0f8 100644 --- a/engines/sci/engine/kmisc.cpp +++ b/engines/sci/engine/kmisc.cpp @@ -362,20 +362,29 @@ reg_t kIconBar(EngineState *s, int argc, reg_t *argv) { return NULL_REG; switch (argv[0].toUint16()) { - case 0: - // Add the icons + case 0: // InitIconBar for (int i = 0; i < argv[1].toUint16(); i++) g_sci->_gfxMacIconBar->addIcon(argv[i + 2]); g_sci->_gfxMacIconBar->drawIcons(); + + // TODO: Should return icon bar handle + // Said handle is then used by DisposeIconBar + break; + case 1: // DisposeIconBar + warning("kIconBar(Dispose)"); + break; + case 2: // EnableIconBar (0xffff = all) + warning("kIconBar(Enable, %d)", argv[1].toUint16()); + break; + case 3: // DisableIconBar (0xffff = all) + warning("kIconBar(Disable, %d)", argv[1].toUint16()); break; - case 2: - case 3: - case 4: - // TODO: Other calls seem to handle selecting/deselecting them + case 4: // SetIconBarIcon + warning("kIconBar(SetIcon, %d, %d)", argv[1].toUint16(), argv[2].toUint16()); break; default: - warning("Unknown kIconBar subop %d", argv[0].toUint16()); + error("Unknown kIconBar(%d)", argv[0].toUint16()); } return NULL_REG; @@ -389,23 +398,28 @@ reg_t kMacPlatform(EngineState *s, int argc, reg_t *argv) { switch (argv[0].toUint16()) { case 0: - // Set Mac cursor remap - g_sci->_gfxCursor->setMacCursorRemapList(argc - 1, argv + 1); + // Subop 0 has changed a few times + // In SCI1, its usage is still unknown + // In SCI1.1, it's NOP + // In SCI32, it's used for remapping cursor ID's + if (getSciVersion() >= SCI_VERSION_2_1) // Set Mac cursor remap + g_sci->_gfxCursor->setMacCursorRemapList(argc - 1, argv + 1); + else if (getSciVersion() != SCI_VERSION_1_1) + warning("Unknown SCI1 kMacPlatform(0) call"); break; - case 1: - // Unknown - break; - case 2: - // Unknown - break; - case 3: - // Unknown - break; - case 4: - // Handle icon bar code + case 4: // Handle icon bar code return kIconBar(s, argc - 1, argv + 1); + case 7: // Unknown, but always return -1 + return SIGNAL_REG; + case 1: // Unknown, calls QuickDraw region functions (KQ5, QFG1VGA) + case 2: // Unknown, "UseNextWaitEvent" (Various) + case 3: // Unknown, "ProcessOpenDocuments" (Various) + case 5: // Unknown, plays a sound (KQ7) + case 6: // Unknown, menu-related (Unused?) + warning("Unhandled kMacPlatform(%d)", argv[0].toUint16()); + break; default: - warning("Unknown kMacPlatform subop %d", argv[0].toUint16()); + error("Unknown kMacPlatform(%d)", argv[0].toUint16()); } return s->r_acc; @@ -455,7 +469,8 @@ reg_t kPlatform(EngineState *s, int argc, reg_t *argv) { warning("STUB: kPlatform(CDCheck)"); break; case kPlatformUnk0: - if (g_sci->getPlatform() == Common::kPlatformMacintosh && getSciVersion() >= SCI_VERSION_1_1 && argc > 1) + // For Mac versions, kPlatform(0) with other args has more functionality + if (g_sci->getPlatform() == Common::kPlatformMacintosh && argc > 1) return kMacPlatform(s, argc - 1, argv + 1); // Otherwise, fall through case kPlatformGetPlatform: |