SCI32: The view related functions pass a view object as parameter, and the engine should deduce the parameters it needs from that object. Added stub view functions based on that fact. Also, added a sanity check in kCelHigh and kCelWide

svn-id: r46527
This commit is contained in:
Filippos Karapetis 2009-12-24 13:50:50 +00:00
parent f5d8bb1d5e
commit 69fa167902
4 changed files with 51 additions and 1 deletions

View file

@ -342,7 +342,10 @@ SciKernelFunction kfunct_mappers[] = {
DEFUN("IsHiRes", kIsHiRes, ""), DEFUN("IsHiRes", kIsHiRes, ""),
DEFUN("Array", kArray, ".*"), DEFUN("Array", kArray, ".*"),
DEFUN("String", kString, ".*"), DEFUN("String", kString, ".*"),
DEFUN("AddScreenItem", kAddScreenItem, "o"),
DEFUN("UpdateScreenItem", kUpdateScreenItem, "o"),
DEFUN("DeleteScreenItem", kDeleteScreenItem, "o"),
// SCI2.1 Kernel Functions // SCI2.1 Kernel Functions
DEFUN("Save", kSave, ".*"), DEFUN("Save", kSave, ".*"),
#endif #endif

View file

@ -395,6 +395,9 @@ reg_t kTextFonts(EngineState *s, int argc, reg_t *argv);
reg_t kIsHiRes(EngineState *s, int argc, reg_t *argv); reg_t kIsHiRes(EngineState *s, int argc, reg_t *argv);
reg_t kArray(EngineState *s, int argc, reg_t *argv); reg_t kArray(EngineState *s, int argc, reg_t *argv);
reg_t kString(EngineState *s, int argc, reg_t *argv); reg_t kString(EngineState *s, int argc, reg_t *argv);
reg_t kAddScreenItem(EngineState *s, int argc, reg_t *argv);
reg_t kUpdateScreenItem(EngineState *s, int argc, reg_t *argv);
reg_t kDeleteScreenItem(EngineState *s, int argc, reg_t *argv);
// SCI2.1 Kernel Functions // SCI2.1 Kernel Functions
reg_t kSave(EngineState *s, int argc, reg_t *argv); reg_t kSave(EngineState *s, int argc, reg_t *argv);

View file

@ -589,6 +589,46 @@ reg_t kSave(EngineState *s, int argc, reg_t *argv) {
return NULL_REG; return NULL_REG;
} }
reg_t kAddScreenItem(EngineState *s, int argc, reg_t *argv) {
reg_t viewObj = argv[0];
int16 viewId = GET_SEL32V(s->_segMan, viewObj, view);
int16 loopNo = GET_SEL32V(s->_segMan, viewObj, loop);
int16 celNo = GET_SEL32V(s->_segMan, viewObj, cel);
//int16 leftPos = 0;
//int16 topPos = 0;
int16 priority = GET_SEL32V(s->_segMan, viewObj, priority);
//int16 control = 0;
warning("kAddScreenItem, view %d, loop %d, cel %d, pri %d", viewId, loopNo, celNo, priority);
//s->_gui->addToPicView(viewId, loopNo, celNo, leftPos, topPos, priority, control);
return NULL_REG;
}
reg_t kUpdateScreenItem(EngineState *s, int argc, reg_t *argv) {
reg_t viewObj = argv[0];
int16 viewId = GET_SEL32V(s->_segMan, viewObj, view);
int16 loopNo = GET_SEL32V(s->_segMan, viewObj, loop);
int16 celNo = GET_SEL32V(s->_segMan, viewObj, cel);
//int16 leftPos = 0;
//int16 topPos = 0;
int16 priority = GET_SEL32V(s->_segMan, viewObj, priority);
//int16 control = 0;
warning("kUpdateScreenItem, view %d, loop %d, cel %d, pri %d", viewId, loopNo, celNo, priority);
return NULL_REG;
}
reg_t kDeleteScreenItem(EngineState *s, int argc, reg_t *argv) {
reg_t viewObj = argv[0];
int16 viewId = GET_SEL32V(s->_segMan, viewObj, view);
int16 loopNo = GET_SEL32V(s->_segMan, viewObj, loop);
int16 celNo = GET_SEL32V(s->_segMan, viewObj, cel);
//int16 leftPos = 0;
//int16 topPos = 0;
int16 priority = GET_SEL32V(s->_segMan, viewObj, priority);
//int16 control = 0;
warning("kDeleteScreenItem, view %d, loop %d, cel %d, pri %d", viewId, loopNo, celNo, priority);
return NULL_REG;
}
} // End of namespace Sci } // End of namespace Sci
#endif // ENABLE_SCI32 #endif // ENABLE_SCI32

View file

@ -403,6 +403,8 @@ reg_t kIsItSkip(EngineState *s, int argc, reg_t *argv) {
reg_t kCelHigh(EngineState *s, int argc, reg_t *argv) { reg_t kCelHigh(EngineState *s, int argc, reg_t *argv) {
GuiResourceId viewId = argv[0].toSint16(); GuiResourceId viewId = argv[0].toSint16();
if (viewId == -1) // Happens in SCI32
return NULL_REG;
int16 loopNo = argv[1].toSint16(); int16 loopNo = argv[1].toSint16();
int16 celNo = (argc >= 3) ? argv[2].toSint16() : 0; int16 celNo = (argc >= 3) ? argv[2].toSint16() : 0;
@ -411,6 +413,8 @@ reg_t kCelHigh(EngineState *s, int argc, reg_t *argv) {
reg_t kCelWide(EngineState *s, int argc, reg_t *argv) { reg_t kCelWide(EngineState *s, int argc, reg_t *argv) {
GuiResourceId viewId = argv[0].toSint16(); GuiResourceId viewId = argv[0].toSint16();
if (viewId == -1) // Happens in SCI32
return NULL_REG;
int16 loopNo = argv[1].toSint16(); int16 loopNo = argv[1].toSint16();
int16 celNo = (argc >= 3) ? argv[2].toSint16() : 0; int16 celNo = (argc >= 3) ? argv[2].toSint16() : 0;