diff options
-rw-r--r-- | engines/director/director.cpp | 2 | ||||
-rw-r--r-- | engines/director/lingo/lingo-code.cpp | 2 | ||||
-rw-r--r-- | engines/director/lingo/lingo-the.cpp | 136 | ||||
-rw-r--r-- | engines/director/lingo/lingo-the.h | 12 | ||||
-rw-r--r-- | engines/director/lingo/lingo.cpp | 3 | ||||
-rw-r--r-- | engines/director/lingo/lingo.h | 4 |
6 files changed, 97 insertions, 62 deletions
diff --git a/engines/director/director.cpp b/engines/director/director.cpp index 107a9a5f77..5a6c8ec32f 100644 --- a/engines/director/director.cpp +++ b/engines/director/director.cpp @@ -120,7 +120,7 @@ Common::Error DirectorEngine::run() { if x = 1 then\n\ put 1\n\ else if x = 2 then\n\ - put 2.1\n\ + put 1232.12345678901234\n\ put 2.2\n\ else if x = 3 then put 3\n\ end if\n\ diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp index 817f9c9a7f..f7dc403d3f 100644 --- a/engines/director/lingo/lingo-code.cpp +++ b/engines/director/lingo/lingo-code.cpp @@ -80,7 +80,7 @@ void Lingo::c_printtop(void) { warning("%d", d.u.i); break; case FLOAT: - warning("%f", d.u.f); + warning(g_lingo->_floatPrecisionFormat.c_str(), d.u.f); break; case VAR: if (!d.u.sym) { diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp index b3c070286a..410be8ed4f 100644 --- a/engines/director/lingo/lingo-the.cpp +++ b/engines/director/lingo/lingo-the.cpp @@ -31,38 +31,47 @@ static struct TheEntityProto { const char *name; int hasID; } entities[] = { - { kTheFrame, "frame", VOID }, - { kThePathName, "pathname", VOID }, - { kTheMovie, "movie", VOID }, - { kTheMouseH, "mouseh", VOID }, - { kTheMouseV, "mousev", VOID }, - { kTheMouseDownScript, "mouseDownScript", VOID }, - { kTheMouseUpScript, "mouseUpScript", VOID }, + { kTheCast, "cast", INT }, // string? { kTheClickOn, "clickOn", VOID }, + { kTheColorDepth, "colorDepth", VOID }, + { kTheColorQD, "colorQD", VOID }, + { kTheCommandDown, "commandDown", VOID }, + { kTheControlDown, "controlDown", VOID }, { kTheDoubleClick, "doubleClick", VOID }, + { kTheExitLock, "exitlock", VOID }, + { kTheFloatPrecision, "floatPrecision", VOID }, + { kTheFrame, "frame", VOID }, + { kTheItemDelimiter, "itemDelimiter", VOID }, + { kTheKey, "key", VOID }, { kTheLastClick, "lastClick", VOID }, - { kTheLastFrame, "lastFrame", VOID }, { kTheLastEvent, "lastEvent", VOID }, - { kTheMouseUp, "mouseUp", VOID }, - { kTheMouseDown, "mouseDown", VOID }, - { kTheRightMouseUp, "rightMouseUp", VOID }, - { kTheRightMouseDown, "rightMouseDown", VOID }, - { kTheStillDown, "stillDown", VOID }, - { kTheKey, "key", VOID }, - { kTheControlDown, "controlDown", VOID }, - { kTheCommandDown, "commandDown", VOID }, - { kTheShiftDown, "shiftDown", VOID }, - { kTheOptionDown, "optionDown", VOID }, + { kTheLastFrame, "lastFrame", VOID }, { kTheMenu, "menu", INT }, { kTheMenus, "menus", VOID }, { kTheMenuItem, "menuitem", STRING }, // int? { kTheMenuItems, "menuitems", VOID }, - { kTheSprite, "sprite", INT }, - { kTheCast, "cast", INT }, // string? + { kTheMouseDown, "mouseDown", VOID }, + { kTheMouseDownScript, "mouseDownScript", VOID }, + { kTheMouseH, "mouseh", VOID }, + { kTheMouseUp, "mouseUp", VOID }, + { kTheMouseUpScript, "mouseUpScript", VOID }, + { kTheMouseV, "mousev", VOID }, + { kTheMovie, "movie", VOID }, + { kTheMultiSound, "multiSound", VOID }, + { kTheOptionDown, "optionDown", VOID }, + { kThePathName, "pathname", VOID }, { kThePerFrameHook, "perframehook", VOID }, + { kThePreloadEventAbort,"preloadEventAbort",VOID }, + { kTheRightMouseDown, "rightMouseDown", VOID }, + { kTheRightMouseUp, "rightMouseUp", VOID }, + { kTheRomanLingo, "romanLingo", VOID }, + { kTheShiftDown, "shiftDown", VOID }, + { kTheSprite, "sprite", INT }, + { kTheStage, "stage", VOID }, + { kTheStillDown, "stillDown", VOID }, { kTheTicks, "ticks", VOID }, - { kTheTimer, "timer", VOID }, { kTheTimeoutLength, "timeoutlength", VOID }, + { kTheTimer, "timer", VOID }, { kTheWindow, "window", VOID }, { kTheNOEntity, NULL, false } }; @@ -72,47 +81,47 @@ static struct TheEntityFieldProto { const char *name; TheField field; } fields[] = { - { kTheSprite, "castnum", kTheCastNum }, - { kTheSprite, "cursor", kTheCursor }, - { kTheSprite, "loch", kTheLocH }, - { kTheSprite, "locv", kTheLocV }, - { kTheSprite, "backColor", kTheBackColor }, - { kTheSprite, "blend", kTheBlend }, - { kTheSprite, "bottom", kTheBottom }, - { kTheSprite, "constraint", kTheConstraint }, - { kTheSprite, "editableText", kTheEditableText }, - { kTheSprite, "foreColor", kTheForeColor }, - { kTheSprite, "height", kTheHeight }, - { kTheSprite, "ink", kTheInk }, - { kTheSprite, "left", kTheLeft }, - { kTheSprite, "lineSize", kTheLineSize }, - { kTheSprite, "moveable", kTheMoveable }, - { kTheSprite, "movieRate", kTheMovieRate }, - { kTheSprite, "movieTime", kTheMovieTime }, - { kTheSprite, "right", kTheRight }, - { kTheSprite, "stopTime", kTheStopTime }, - { kTheSprite, "stretch", kTheStrech }, - { kTheSprite, "startTime", kTheStartTime }, - { kTheSprite, "scriptNum", kTheScriptNum }, - { kTheSprite, "top", kTheTop }, - { kTheSprite, "trails", kTheTrails }, - { kTheSprite, "type", kTheType }, - { kTheSprite, "visible", kTheVisible }, - { kTheSprite, "volume", kTheVolume }, - { kTheSprite, "width", kTheWidth }, + { kTheSprite, "backColor", kTheBackColor }, + { kTheSprite, "blend", kTheBlend }, + { kTheSprite, "bottom", kTheBottom }, + { kTheSprite, "castnum", kTheCastNum }, + { kTheSprite, "constraint", kTheConstraint }, + { kTheSprite, "cursor", kTheCursor }, + { kTheSprite, "editableText", kTheEditableText }, + { kTheSprite, "foreColor", kTheForeColor }, + { kTheSprite, "height", kTheHeight }, + { kTheSprite, "ink", kTheInk }, + { kTheSprite, "left", kTheLeft }, + { kTheSprite, "lineSize", kTheLineSize }, + { kTheSprite, "loch", kTheLocH }, + { kTheSprite, "locv", kTheLocV }, + { kTheSprite, "moveable", kTheMoveable }, + { kTheSprite, "movieRate", kTheMovieRate }, + { kTheSprite, "movieTime", kTheMovieTime }, + { kTheSprite, "right", kTheRight }, + { kTheSprite, "scriptNum", kTheScriptNum }, + { kTheSprite, "startTime", kTheStartTime }, + { kTheSprite, "stretch", kTheStrech }, + { kTheSprite, "stopTime", kTheStopTime }, + { kTheSprite, "top", kTheTop }, + { kTheSprite, "trails", kTheTrails }, + { kTheSprite, "type", kTheType }, + { kTheSprite, "visible", kTheVisible }, + { kTheSprite, "volume", kTheVolume }, + { kTheSprite, "width", kTheWidth }, //Common cast fields - { kTheCast, "width", kTheWidth }, - { kTheCast, "height", kTheHeight }, - { kTheCast, "filename", kTheFilename }, - { kTheCast, "scriptText", kTheScriptText }, { kTheCast, "castType", kTheCastType }, + { kTheCast, "filename", kTheFilename }, + { kTheCast, "height", kTheHeight }, + { kTheCast, "loaded", kTheLoaded }, + { kTheCast, "modified", kTheModified }, { kTheCast, "name", kTheName }, - { kTheCast, "rect", kTheRect }, { kTheCast, "number", kTheNumber }, - { kTheCast, "modified", kTheModified }, - { kTheCast, "loaded", kTheLoaded }, - { kTheCast, "purgePriority",kThePurgePriority }, //0 Never purge, 1 Purge Last, 2 Purge next, 2 Purge normal + { kTheCast, "rect", kTheRect }, + { kTheCast, "purgePriority",kThePurgePriority }, // 0 Never purge, 1 Purge Last, 2 Purge next, 2 Purge normal + { kTheCast, "scriptText", kTheScriptText }, + { kTheCast, "width", kTheWidth }, //Shape fields { kTheCast, "backColor", kTheBackColor }, @@ -134,8 +143,8 @@ static struct TheEntityFieldProto { { kTheCast, "picture", kThePicture }, //TextCast fields - { kTheCast, "size", kTheSize }, { kTheCast, "hilite", kTheHilite }, + { kTheCast, "size", kTheSize }, { kTheCast, "text", kTheText }, { kTheWindow, "drawRect", kTheDrawRect }, @@ -146,7 +155,7 @@ static struct TheEntityFieldProto { { kTheMenuItem, "checkmark", kTheCheckMark }, { kTheMenuItem, "enabled", kTheEnabled }, { kTheMenuItem, "name", kTheName }, - { kTheMenuItem, "name", kTheScript }, + { kTheMenuItem, "script", kTheScript }, { kTheMenu, "name", kTheName }, @@ -164,6 +173,11 @@ void Lingo::setTheEntity(TheEntity entity, int id, TheField field, Datum &d) { case kThePerFrameHook: warning("STUB: setting the perframehook"); break; + case kTheFloatPrecision: + _floatPrecision = d.toInt(); + _floatPrecision = MAX(0, MIN(_floatPrecision, 19)); // 0 to 19 + _floatPrecisionFormat.format("%%.%df", _floatPrecision); + break; default: error("Unprocessed setting field %d of entity %d", field, entity); } @@ -220,6 +234,10 @@ Datum Lingo::getTheEntity(TheEntity entity, int id, TheField field) { case kThePerFrameHook: warning("STUB: getting the perframehook"); break; + case kTheFloatPrecision: + d.type = INT; + d.u.i = _floatPrecision; + break; default: error("Unprocessed getting field %d of entity %d", field, entity); } diff --git a/engines/director/lingo/lingo-the.h b/engines/director/lingo/lingo-the.h index 6fc62f8736..c3ee20fb04 100644 --- a/engines/director/lingo/lingo-the.h +++ b/engines/director/lingo/lingo-the.h @@ -61,7 +61,17 @@ enum TheEntity { kTheControlDown, kTheCommandDown, kTheShiftDown, - kTheOptionDown + kTheOptionDown, + + kTheColorDepth, + kTheColorQD, + kTheExitLock, + kTheFloatPrecision, + kTheItemDelimiter, + kTheMultiSound, + kThePreloadEventAbort, + kTheRomanLingo, + kTheStage }; enum TheField { diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp index 9fe17f3be5..a73820dff6 100644 --- a/engines/director/lingo/lingo.cpp +++ b/engines/director/lingo/lingo.cpp @@ -91,6 +91,9 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) { _linenumber = _colnumber = 0; + _floatPrecision = 4; + _floatPrecisionFormat = "%.4f"; + warning("Lingo Inited"); } diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h index f3b36f94f6..ea41762f11 100644 --- a/engines/director/lingo/lingo.h +++ b/engines/director/lingo/lingo.h @@ -266,6 +266,8 @@ public: int _linenumber; int _colnumber; + Common::String _floatPrecisionFormat; + private: int parse(const char *code); void push(Datum d); @@ -285,6 +287,8 @@ private: StackData _stack; DirectorEngine *_vm; + + int _floatPrecision; }; extern Lingo *g_lingo; |