[Scummvm-git-logs] scummvm master -> 25dca26ff82caf5e944212bd39b128484211a830

sev- sev at scummvm.org
Wed Jan 8 22:08:38 UTC 2020


This automated email contains information about 8 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
b19c1f7449 DIRECTOR: LINGO: Clarified built-ins for D3
f4a439a8e8 DIRECTOR: LINGO: Implement 'the pi'
30b9a43a4c DIRECTOR: Generate start/stopMovie events
8b8aebadcb DIRECTOR: Parse script cast types
5fb8660a54 DIRECTOR: Set correct script cast type when parsing
3780c42858 DIRECTOR: LINGO: Fix MovieScript event processing
50c0d8b3c2 DIRECTOR: LINGO: Regenerate lexer
25dca26ff8 DIRECTOR: Fix loading CastInfo strings


Commit: b19c1f74494292e35bcc15d63d03add777060bbc
    https://github.com/scummvm/scummvm/commit/b19c1f74494292e35bcc15d63d03add777060bbc
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-08T23:08:12+01:00

Commit Message:
DIRECTOR: LINGO: Clarified built-ins for D3

Changed paths:
    engines/director/lingo/lingo-events.cpp
    engines/director/lingo/lingo-lex.l
    engines/director/lingo/lingo-the.cpp


diff --git a/engines/director/lingo/lingo-events.cpp b/engines/director/lingo/lingo-events.cpp
index fe64b80..2a04a57 100644
--- a/engines/director/lingo/lingo-events.cpp
+++ b/engines/director/lingo/lingo-events.cpp
@@ -34,9 +34,9 @@ struct EventHandlerType {
 	const char *name;
 } static const eventHandlerDescs[] = {
 	{ kEventPrepareMovie,		"prepareMovie" },
-	{ kEventStartMovie,			"startMovie" },			//		D3?
-	{ kEventStepMovie,			"stepMovie" },			//		D3?
-	{ kEventStopMovie,			"stopMovie" },			//		D3?
+	{ kEventStartMovie,			"startMovie" },			//		D3
+	{ kEventStepMovie,			"stepMovie" },			//		D3
+	{ kEventStopMovie,			"stopMovie" },			//		D3
 
 	{ kEventNew,				"newSprite" },
 	{ kEventBeginSprite,		"beginSprite" },
@@ -44,7 +44,7 @@ struct EventHandlerType {
 
 	{ kEventEnterFrame,			"enterFrame" },			//			D4
 	{ kEventPrepareFrame,		"prepareFrame" },
-	{ kEventIdle,				"idle" },
+	{ kEventIdle,				"idle" },				//		D3
 	{ kEventStepFrame,			"stepFrame"},
 	{ kEventExitFrame,			"exitFrame" },			//			D4
 
@@ -58,8 +58,8 @@ struct EventHandlerType {
 
 	{ kEventKeyUp,				"keyUp" },				//			D4
 	{ kEventKeyDown,			"keyDown" },			// D2 w		D4 (as when from D2)
-	{ kEventMouseUp,			"mouseUp" },			// D2 w	D3?
-	{ kEventMouseDown,			"mouseDown" },			// D2 w	D3?
+	{ kEventMouseUp,			"mouseUp" },			// D2 w	D3
+	{ kEventMouseDown,			"mouseDown" },			// D2 w	D3
 	{ kEventRightMouseDown,		"rightMouseDown" },
 	{ kEventRightMouseUp,		"rightMouseUp" },
 	{ kEventMouseEnter,			"mouseEnter" },
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index fc55425..13a1db9 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -163,14 +163,6 @@ whitespace [\t ]
 (?i:set)		{ count(); return tSET; }
 (?i:starts)		{ count(); return tSTARTS; }
 (?i:tell)		{ count(); return tTELL; }
-(?i:the[ \t]+last[\t ]+of[\t ]+)	{
-		count();
-
-		yylval.e[0] = g_lingo->_theEntities["last"]->entity;
-		yylval.e[1] = 0;	// No field
-
-		return THEENTITYWITHID;
-	}
 (?i:the[ \t]+sqrt[\t ]+of[\t ]+)	{
 		count();
 
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 97d8687..091ea4c 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -41,7 +41,6 @@ TheEntity entities[] = {
 	{ kTheCast,				"cast",				true,  2 },	// D2
 	{ kTheCastMembers,		"castmembers",		false, 3 },	//		 D3
 	{ kTheCenterStage,		"centerStage",		false, 2 },	// D2 p
-	{ kTheChars,			"chars",			false, 3 },	//		 D3
 	{ kTheCheckBoxAccess,	"checkBoxAccess",	false, 2 },	// D2 p
 	{ kTheCheckBoxType,		"checkBoxType",		false, 2 },	// D2 p
 	{ kTheClickLoc,			"clickLoc",			false, 4 },	// 				D4 function
@@ -64,7 +63,6 @@ TheEntity entities[] = {
 	{ kTheFreeBytes,		"freeBytes",		false, 2 },	// D2 f
 	{ kTheFullColorPermit,	"fullColorPermit",	false, 2 },	// D2 p
 	{ kTheImageDirect,		"imageDirect",		false, 2 },	// D2 p
-	{ kTheItems,			"items",			false, 3 },	//		 D3
 	{ kTheItemDelimiter,	"itemDelimiter",	false, 4 },	//				D4 p
 	{ kTheKey,				"key",				false, 2 },	// D2 f
 	{ kTheKeyCode,			"keyCode",			false, 2 },	// D2 f
@@ -76,12 +74,10 @@ TheEntity entities[] = {
 	{ kTheLastFrame,		"lastFrame",		false, 4 },	//				D4 p
 	{ kTheLastKey,			"lastKey",			false, 2 },	// D2 f
 	{ kTheLastRoll,			"lastRoll",			false, 2 },	// D2 f
-	{ kTheLines,			"lines",			false, 3 },	//		 D3
 	{ kTheMachineType,		"machineType",		false, 2 },	// D2 f
 	{ kTheMaxInteger,		"maxInteger",		false, 3 },	//		D3.1 f
 	{ kTheMemorySize,		"memorySize",		false, 2 },	// D2 f
 	{ kTheMenu,				"menu",				true,  3 },	//		 D3 p
-	{ kTheMenus,			"menus",			false, 3 },	//		 D3 p
 	{ kTheMenuItem,			"menuitem",			true,  3 },	//		 D3 p
 	{ kTheMenuItems,		"menuitems",		false, 3 },	//		 D3 f
 	{ kTheMouseCast,		"mouseCast",		false, 3 },	//		D3 f
@@ -147,7 +143,6 @@ TheEntity entities[] = {
 	{ kTheUpdateMovieEnabled,"updateMovieEnabled",false,4 },//				D4 p
 	{ kTheWindow,			"window",			true,  4 },	//				D4
 	{ kTheWindowList,		"windowList",		false, 4 },	//				D4 p
-	{ kTheWords,			"words",			false, 3 },	//		 D3
 	{ kTheNOEntity, NULL, false, 0 }
 };
 
@@ -178,7 +173,6 @@ TheEntityField fields[] = {
 	{ kTheSprite,	"trails",		kTheTrails,		3 },//		D3.1 p
 	{ kTheSprite,	"type",			kTheType,		2 },// D2 p
 	{ kTheSprite,	"visible",		kTheVisible,	4 },//				D4 p
-	{ kTheSprite,	"volume",		kTheVolume,		3 },//		D3.1 p
 	{ kTheSprite,	"width",		kTheWidth,		2 },// D2 p
 
 	// Common cast fields
@@ -214,6 +208,7 @@ TheEntityField fields[] = {
 	{ kTheSprite,	"startTime",	kTheStartTime,	3 },//			D3.1 p
 	{ kTheSprite,	"stopTime",		kTheStopTime,	3 },//			D3.1 p
 	{ kTheCast,		"video",		kTheVideo,		4 },//				D4 p
+	{ kTheSprite,	"volume",		kTheVolume,		3 },//		D3.1 p
 
 	// Bitmap fields
 	{ kTheCast,		"depth",		kTheDepth,		4 },//				D4 p
@@ -251,16 +246,6 @@ TheEntityField fields[] = {
 	{ kTheMenu,		"name",			kTheName,		3 },//		D3 p
 
 	{ kTheCastMembers,	"number",	kTheNumber,		3 },// 		D3 p
-	{ kTheChars,	"number",		kTheNumber,		3 },//		D3 p
-	{ kTheChars,	"last",			kTheLast,		4 },//				D4 f
-	{ kTheItems,	"number",		kTheNumber,		3 },//		D3 p
-	{ kTheItems,	"last",			kTheLast,		4 },//				D4 f
-	{ kTheLines,	"number",		kTheNumber,		3 },//		D3 p
-	{ kTheLines,	"last",			kTheLast,		4 },//				D4 f
-	{ kTheMenuItems,"number",		kTheNumber,		3 },//		D3 p
-	{ kTheMenus,	"number",		kTheNumber,		3 },//		D3 p
-	{ kTheWords,	"number",		kTheNumber,		3 },//		D3 p
-	{ kTheWords,	"last",			kTheLast,		4 },//				D4 f
 
 	{ kTheDate,		"short",		kTheShort,		3 },//		D3 f
 	{ kTheDate,		"long",			kTheLong,		3 },//		D3 f


Commit: f4a439a8e891efe4ca5eb151bec0c2761cbac39f
    https://github.com/scummvm/scummvm/commit/f4a439a8e891efe4ca5eb151bec0c2761cbac39f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-08T23:08:12+01:00

Commit Message:
DIRECTOR: LINGO: Implement 'the pi'

Changed paths:
    engines/director/lingo/lingo-the.cpp
    engines/director/lingo/lingo-the.h


diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 091ea4c..79ea2f2 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -101,6 +101,7 @@ TheEntity entities[] = {
 	{ kTheParamCount,		"paramCount",		false, 4 },	//				D4 f
 	{ kThePathName,			"pathName",			false, 2 },	// D2 f
 	{ kThePauseState,		"pauseState",		false, 2 },	// D2 f
+	{ kThePi,				"pi",				false, 4 },	//				D4 f
 	{ kThePerFrameHook,		"perFrameHook",		false, 2 },	// D2 p
 	{ kThePreloadEventAbort,"preloadEventAbort",false, 4 },	//				D4 p
 	{ kThePreLoadRAM,		"preLoadRAM",		false, 4 },	//				D4 p
@@ -523,6 +524,10 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
 		d.type = INT;
 		d.u.i = _vm->getCurrentScore()->_mouseIsDown;
 		break;
+	case kThePi:
+		d.type = FLOAT;
+		d.u.f = M_PI;
+		break;
 	default:
 		warning("Lingo::getTheEntity(): Unprocessed getting field %d of entity %d", field, entity);
 		d.type = VOID;
diff --git a/engines/director/lingo/lingo-the.h b/engines/director/lingo/lingo-the.h
index c4306d4..9857adb 100644
--- a/engines/director/lingo/lingo-the.h
+++ b/engines/director/lingo/lingo-the.h
@@ -99,6 +99,7 @@ enum TheEntityType {
 	kThePathName,
 	kThePauseState,
 	kThePerFrameHook,
+	kThePi,
 	kThePreloadEventAbort,
 	kThePreLoadRAM,
 	kTheQuickTimePresent,


Commit: 30b9a43a4c60e4edcc8201735c3ad2433ff2dbfb
    https://github.com/scummvm/scummvm/commit/30b9a43a4c60e4edcc8201735c3ad2433ff2dbfb
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-08T23:08:13+01:00

Commit Message:
DIRECTOR: Generate start/stopMovie events

Changed paths:
    engines/director/score.cpp


diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 1eb1dce..b81aae7 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -1307,6 +1307,8 @@ void Score::startLoop() {
 	_stopPlay = false;
 	_nextFrameTime = 0;
 
+	_lingo->processEvent(kEventStartMovie);
+
 	_frames[_currentFrame]->prepareFrame(this);
 
 	while (!_stopPlay) {
@@ -1322,6 +1324,8 @@ void Score::startLoop() {
 		if (_currentFrame < _frames.size())
 			_vm->processEvents();
 	}
+
+	_lingo->processEvent(kEventStopMovie);
 }
 
 void Score::update() {


Commit: 8b8aebadcb45876027fdc8c80880bb51f7ff1055
    https://github.com/scummvm/scummvm/commit/8b8aebadcb45876027fdc8c80880bb51f7ff1055
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-08T23:08:13+01:00

Commit Message:
DIRECTOR: Parse script cast types

Changed paths:
    engines/director/cast.cpp
    engines/director/cast.h
    engines/director/score.cpp
    engines/director/types.h


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 4537742..8e547f0 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -348,15 +348,26 @@ ScriptCast::ScriptCast(Common::ReadStreamEndian &stream, uint16 version) {
 	if (version < 4) {
 		error("Unhandled Script cast");
 	} else if (version == 4) {
-		stream.readByte();
-		stream.readByte();
+		byte unk1 = stream.readByte();
+		byte type = stream.readByte();
+
+		switch (type) {
+		case 1:
+			_scriptType = kScoreScript;
+			break;
+		case 3:
+			_scriptType = kMovieScript;
+			break;
+		default:
+			error("ScriptCast: Unprocessed script type: %d", type);
+		}
 
 		_initialRect = Score::readRect(stream);
 		_boundingRect = Score::readRect(stream);
 
 		_id = stream.readUint32();
 
-		debugC(4, kDebugLoading, "CASt: Script id: %d", _id);
+		debugC(4, kDebugLoading, "CASt: Script id: %d type: %s (%d) unk1: %d", _id, scriptType2str(_scriptType), type, unk1);
 
 		stream.readByte(); // There should be no more data
 		assert(stream.eos());
diff --git a/engines/director/cast.h b/engines/director/cast.h
index 3e1479d..5123ef8 100644
--- a/engines/director/cast.h
+++ b/engines/director/cast.h
@@ -124,6 +124,7 @@ public:
 	ScriptCast(Common::ReadStreamEndian &stream, uint16 version);
 
 	uint32 _id;
+	ScriptType _scriptType;
 };
 
 class RTECast : public TextCast {
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index b81aae7..533c684 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -50,7 +50,8 @@ const char *scriptTypes[] = {
 	"SpriteScript",
 	"FrameScript",
 	"CastScript",
-	"GlobalScript"
+	"GlobalScript",
+	"ScoreScript"
 };
 
 const char *scriptType2str(ScriptType scr) {
@@ -615,7 +616,7 @@ void Score::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id,
 	// TODO: Determine if there really is a minimum size.
 	// This value was too small for Shape Casts.
 	if (stream.size() < 10) {
-		warning("Score::loadCastData(): CAST data id %d is too small", id);
+		warning("Score::loadCastData(): CASt data id %d is too small", id);
 		return;
 	}
 
diff --git a/engines/director/types.h b/engines/director/types.h
index 0a170ff..4a9bcc8 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -42,13 +42,14 @@ enum CastType {
 };
 
 enum ScriptType {
+	kNoneScript = -1,
 	kMovieScript = 0,
 	kSpriteScript = 1,
 	kFrameScript = 2,
 	kCastScript = 3,
 	kGlobalScript = 4,
-	kNoneScript = -1,
-	kMaxScriptType = 4	// Sync with score.cpp:45, array scriptTypes[]
+	kScoreScript = 5,
+	kMaxScriptType = 5	// Sync with score.cpp:45, array scriptTypes[]
 };
 
 enum ShapeType {


Commit: 5fb8660a544f0b5f7d5b17ee1b57aedac388916a
    https://github.com/scummvm/scummvm/commit/5fb8660a544f0b5f7d5b17ee1b57aedac388916a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-08T23:08:13+01:00

Commit Message:
DIRECTOR: Set correct script cast type when parsing

Changed paths:
    engines/director/score.cpp


diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 533c684..e92a68d 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -768,9 +768,9 @@ void Score::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id,
 			if (!ci->script.empty()) {
 				// the script type here could be wrong!
 				if (ConfMan.getBool("dump_scripts"))
-					dumpScript(ci->script.c_str(), kCastScript, id);
+					dumpScript(ci->script.c_str(), ((ScriptCast *)_loadedCast->getVal(id))->_scriptType, id);
 
-				_lingo->addCode(ci->script.c_str(), kCastScript, id);
+				_lingo->addCode(ci->script.c_str(), ((ScriptCast *)_loadedCast->getVal(id))->_scriptType, id);
 			}
 		}
 


Commit: 3780c42858bb5e3065e7c64b74e138d2312de400
    https://github.com/scummvm/scummvm/commit/3780c42858bb5e3065e7c64b74e138d2312de400
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-08T23:08:13+01:00

Commit Message:
DIRECTOR: LINGO: Fix MovieScript event processing

Changed paths:
    engines/director/lingo/lingo-events.cpp


diff --git a/engines/director/lingo/lingo-events.cpp b/engines/director/lingo/lingo-events.cpp
index 2a04a57..ab3b62a 100644
--- a/engines/director/lingo/lingo-events.cpp
+++ b/engines/director/lingo/lingo-events.cpp
@@ -200,8 +200,9 @@ void Lingo::runMovieScript(LEvent event) {
 	if (_dontPassEvent)
 		return;
 
-	for (uint i = 0; i < _scriptContexts[kMovieScript].size(); i++) {
-		processEvent(event, kMovieScript, i);
+	for (ScriptContextHash::iterator it = _scriptContexts[kMovieScript].begin();
+			it != _scriptContexts[kMovieScript].end(); ++it) {
+		processEvent(event, kMovieScript, it->_key);
 		// TODO: How do know which script handles the message?
 	}
 	debugC(9, kDebugEvents, "STUB: processEvent(event, kMovieScript, ?)");
@@ -243,12 +244,13 @@ void Lingo::processFrameEvent(LEvent event) {
 void Lingo::processGenericEvent(LEvent event) {
 	// Movie Script
 	int id = -1;
-	if (event == kEventStart || event == kEventPrepareMovie)
+	if (event == kEventStart || event == kEventPrepareMovie ||
+		event == kEventStartMovie || event == kEventStopMovie)
 		id = 0;
 	else
-		warning("STUB: processGenericEvent called for something else than kEventStart or kEventPrepareMovie, additional logic probably needed");
+		warning("STUB: processGenericEvent called for unprocessed event, additional logic probably needed");
 
-	processEvent(event, kMovieScript, id);
+	runMovieScript(event);
 }
 
 void Lingo::processSpriteEvent(LEvent event) {


Commit: 50c0d8b3c21b89a26c9add47c0d5ea621087ce5e
    https://github.com/scummvm/scummvm/commit/50c0d8b3c21b89a26c9add47c0d5ea621087ce5e
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-08T23:08:13+01:00

Commit Message:
DIRECTOR: LINGO: Regenerate lexer

Changed paths:
    engines/director/lingo/lingo-lex.cpp


diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index b6f9e63..fb8fbb1 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -364,8 +364,8 @@ static void yy_fatal_error (yyconst char msg[]  );
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 76
-#define YY_END_OF_BUFFER 77
+#define YY_NUM_RULES 75
+#define YY_END_OF_BUFFER 76
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -373,43 +373,42 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[314] =
+static yyconst flex_int16_t yy_accept[305] =
     {   0,
-        0,    0,   77,   75,    4,   73,   73,   75,   75,   75,
-       72,   72,   72,   71,   72,   68,   72,   69,   69,   69,
-       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
-       69,   69,   69,   69,   75,    3,    3,   69,    4,   73,
-        0,    0,    0,   74,    5,   67,    2,   70,   71,   66,
-       64,   65,   69,   69,   69,   69,   69,   69,   69,   69,
-       69,   69,   69,   22,   13,   69,   69,   69,   69,   69,
-       69,   69,   69,   69,   35,   36,   69,   38,   69,   69,
-       69,   69,   69,   69,   69,   69,   69,   57,   69,   69,
-       69,    1,    3,    3,    0,   69,    5,    2,   70,   69,
-
-        7,   69,   69,   69,   69,   69,   69,   16,   69,   69,
-        0,   69,   69,   69,   69,   69,   69,   69,   31,   69,
-       69,   34,   69,   69,   69,   69,   44,   69,   46,   69,
-       69,   69,   69,   69,   69,   69,   69,    0,   69,   69,
-       69,    9,   69,   11,   12,   15,    0,   18,   69,    0,
-       69,   69,   25,   26,   27,   28,   69,   69,   69,   33,
-       37,   40,   69,   69,   69,   69,   69,   48,    0,   56,
-       61,   69,   59,   63,    0,   69,    6,   69,   69,    0,
-       16,   69,   21,   69,   69,   29,   69,   32,    0,   69,
-       69,   69,   69,   69,   69,   55,   55,   55,   55,   55,
-
-       62,   69,    0,   69,    8,   69,    0,   16,   19,    0,
-       69,   69,   69,    0,   69,   69,   69,   45,   58,   47,
-        0,    0,   55,   55,   55,   55,   60,    0,   69,   69,
-       14,    0,   69,   69,    0,   30,    0,   69,   69,   69,
-        0,    0,    0,    0,   55,   55,   55,   55,    0,   17,
-       10,    0,   23,   69,   30,   30,    0,   69,   42,   43,
-        0,    0,    0,   55,   55,   55,   55,   17,    0,   69,
-       30,    0,   41,    0,    0,    0,    0,   55,    0,   55,
-        0,   24,   39,   54,   53,   54,    0,    0,   55,    0,
-        0,    0,   20,   53,    0,    0,    0,    0,    0,   49,
-
-        0,    0,   50,   51,    0,   51,    0,   53,    0,   53,
-        0,   52,    0
+        0,    0,   76,   74,    4,   72,   72,   74,   74,   74,
+       71,   71,   71,   70,   71,   67,   71,   68,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   74,    3,    3,   68,    4,   72,
+        0,    0,    0,   73,    5,   66,    2,   69,   70,   65,
+       63,   64,   68,   68,   68,   68,   68,   68,   68,   68,
+       68,   68,   68,   22,   13,   68,   68,   68,   68,   68,
+       68,   68,   68,   68,   35,   36,   68,   38,   68,   68,
+       68,   68,   68,   68,   68,   68,   68,   56,   68,   68,
+       68,    1,    3,    3,    0,   68,    5,    2,   69,   68,
+
+        7,   68,   68,   68,   68,   68,   68,   16,   68,   68,
+        0,   68,   68,   68,   68,   68,   68,   68,   31,   68,
+       68,   34,   68,   68,   68,   68,   44,   68,   46,   68,
+       68,   68,   68,   68,   68,   68,   68,    0,   68,   68,
+       68,    9,   68,   11,   12,   15,    0,   18,   68,    0,
+       68,   68,   25,   26,   27,   28,   68,   68,   68,   33,
+       37,   40,   68,   68,   68,   68,   68,   48,    0,   55,
+       60,   68,   58,   62,    0,   68,    6,   68,   68,    0,
+       16,   68,   21,   68,   68,   29,   68,   32,    0,   68,
+       68,   68,   68,   68,   68,   54,   54,   54,   54,   61,
+
+       68,    0,   68,    8,   68,    0,   16,   19,    0,   68,
+       68,   68,    0,   68,   68,   68,   45,   57,   47,    0,
+        0,   54,   54,   54,   59,    0,   68,   68,   14,    0,
+       68,   68,    0,   30,    0,   68,   68,   68,    0,    0,
+        0,    0,   54,   54,   54,    0,   17,   10,    0,   23,
+       68,   30,   30,    0,   68,   42,   43,    0,    0,    0,
+       54,   54,   54,   17,    0,   68,   30,    0,   41,    0,
+        0,    0,   54,    0,   54,    0,   24,   39,   53,   52,
+       53,   54,    0,    0,    0,   20,   52,    0,    0,    0,
+        0,    0,    0,   49,   50,    0,   50,    0,   52,    0,
+
+       52,    0,   51,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -455,18 +454,18 @@ static yyconst flex_int32_t yy_meta[66] =
         5,    5,    5,    5,    1
     } ;
 
-static yyconst flex_int16_t yy_base[330] =
+static yyconst flex_int16_t yy_base[321] =
     {   0,
-        0,   64,  436,  834,   68,  834,  834,   72,  428,    0,
-      834,  406,  390,   55,   63,  834,  365,   59,   59,   59,
+        0,   64,  485,  800,   68,  800,  800,   72,  474,    0,
+      800,  427,  419,   55,   63,  800,  365,   59,   59,   59,
        55,   63,    0,   64,   75,   70,  100,   77,  110,  102,
-       98,  129,  128,  131,   83,  166,  187,  293,  191,  834,
-      195,  144,  320,  834,    0,  834,    0,  305,  160,  834,
-      834,  834,    0,   66,  131,  156,  162,   74,  173,  149,
+       98,  129,  128,  131,   83,  166,  187,  293,  191,  800,
+      195,  144,  320,  800,    0,  800,    0,  305,  160,  800,
+      800,  800,    0,   66,  131,  156,  162,   74,  173,  149,
       167,  180,  156,   91,    0,  174,  193,  172,  186,  198,
       184,  200,  183,  188,    0,    0,  203,    0,  211,  208,
       192,  210,  209,  215,  233,  228,  236,    0,  238,  231,
-      234,  834,  290,  294,  271,  225,    0,    0,  223,  237,
+      234,  800,  290,  294,  271,  225,    0,    0,  223,  237,
 
         0,  246,  244,  243,  243,  251,  260,  213,  250,  268,
       268,  270,  286,  282,  266,  283,  282,  284,    0,  292,
@@ -474,68 +473,66 @@ static yyconst flex_int16_t yy_base[330] =
       295,  303,  346,  307,  326,  307,  337,  177,  147,  328,
       329,    0,  341,    0,    0,  269,  361,    0,  347,  337,
       348,  335,    0,    0,    0,    0,  339,  340,  350,    0,
-        0,  371,  347,  357,  362,  339,  346,    0,  412,    0,
-        0,  363,  362,    0,  107,   91,    0,  374,  375,  405,
-        0,  375,  406,  387,  384,    0,  386,    0,  422,  403,
-      389,  388,  393,  402,  395,  449,  462,  456,  466,  472,
-
-        0,  403,   86,   79,    0,  404,  413,    0,    0,  473,
-      418,  459,  481,  451,  462,  449,  452,    0,    0,    0,
-      495,  468,  497,  491,  519,  531,    0,   42,   20,  476,
-      834,  485,  491,  504,  530,    0,  509,  507,  504,  499,
-      542,  528,  524,  525,  554,  555,  564,  575,   18,    0,
-        0,  544,    0,  532,    0,    0,  540,  551,    0,    0,
-      544,  579,  555,  585,  595,  599,  610,  834,  565,  560,
-        0,  587,    0,  593,  617,  600,  622,  627,  623,  645,
-      605,    0,  834,  834,    0,  834,  643,  612,  659,  660,
-      616,  673,  834,    0,  669,  681,  683,  687,  632,  689,
-
-      693,  658,  694,  702,  704,  708,  710,  717,  675,  726,
-      577,  834,  834,  767,  769,  772,  775,  781,  786,  791,
-      793,  798,  803,  806,  809,  814,  817,  822,  827
+        0,  371,  347,  357,  362,  339,  346,    0,  382,    0,
+        0,  374,  375,    0,  107,   91,    0,  380,  377,  404,
+        0,  380,  410,  379,  376,    0,  394,    0,  416,  398,
+      392,  390,  389,  407,  399,  439,  450,  456,  454,    0,
+
+      416,   86,   79,    0,  421,  415,    0,    0,  468,  432,
+      446,  470,  432,  449,  441,  443,    0,    0,    0,  479,
+      459,  493,  495,  515,    0,   42,   20,  448,  800,  454,
+      470,  488,  517,    0,  506,  505,  479,  489,  525,  514,
+      512,  510,  539,  559,  560,   18,    0,    0,  526,    0,
+      504,    0,    0,  519,  523,    0,    0,  519,  570,  539,
+      571,  575,  585,  800,  555,  550,    0,  565,    0,  567,
+      595,  568,  599,  610,  600,  577,    0,  800,  800,    0,
+      800,  614,  620,  581,  631,  800,    0,  632,  624,  633,
+      599,  642,  621,  637,  652,  668,  673,  677,  679,  633,
+
+      692,  612,  800,  800,  733,  735,  738,  741,  747,  752,
+      757,  759,  764,  769,  772,  775,  780,  783,  788,  793
     } ;
 
-static yyconst flex_int16_t yy_def[330] =
+static yyconst flex_int16_t yy_def[321] =
     {   0,
-      313,    1,  313,  313,  313,  313,  313,  313,  314,  315,
-      313,  313,  313,  313,  313,  313,  313,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  313,  313,  313,  316,  313,  313,
-      313,  313,  314,  313,  317,  313,  318,  313,  313,  313,
-      313,  313,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  313,  313,  313,  313,  316,  317,  318,  313,  316,
-
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      313,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  313,  316,  316,
-      316,  316,  316,  316,  316,  316,  319,  316,  316,  313,
-      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
-      316,  316,  316,  316,  316,  316,  316,  316,  320,  316,
-      316,  316,  316,  316,  313,  316,  316,  316,  316,  313,
-      321,  316,  313,  316,  316,  316,  316,  316,  313,  316,
-      316,  316,  316,  316,  316,  320,  320,  320,  320,  320,
-
-      316,  316,  313,  316,  316,  316,  313,  321,  316,  313,
-      316,  316,  322,  313,  316,  316,  316,  316,  316,  316,
-      313,  313,  320,  320,  320,  320,  316,  313,  316,  316,
-      313,  313,  316,  316,  323,  324,  313,  316,  316,  316,
-      313,  313,  313,  313,  320,  320,  320,  320,  313,  316,
-      316,  313,  316,  316,  325,  324,  313,  316,  316,  316,
-      313,  313,  313,  320,  320,  320,  320,  313,  313,  316,
-      325,  313,  316,  313,  326,  313,  313,  320,  313,  320,
-      313,  316,  313,  313,  327,  313,  313,  313,  320,  313,
-      313,  313,  313,  327,  313,  313,  313,  313,  313,  326,
-
-      313,  313,  326,  313,  313,  326,  328,  329,  313,  329,
-      313,  313,    0,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313
+      304,    1,  304,  304,  304,  304,  304,  304,  305,  306,
+      304,  304,  304,  304,  304,  304,  304,  307,  307,  307,
+      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
+      307,  307,  307,  307,  304,  304,  304,  307,  304,  304,
+      304,  304,  305,  304,  308,  304,  309,  304,  304,  304,
+      304,  304,  307,  307,  307,  307,  307,  307,  307,  307,
+      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
+      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
+      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
+      307,  304,  304,  304,  304,  307,  308,  309,  304,  307,
+
+      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
+      304,  307,  307,  307,  307,  307,  307,  307,  307,  307,
+      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
+      307,  307,  307,  307,  307,  307,  307,  304,  307,  307,
+      307,  307,  307,  307,  307,  307,  310,  307,  307,  304,
+      307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
+      307,  307,  307,  307,  307,  307,  307,  307,  311,  307,
+      307,  307,  307,  307,  304,  307,  307,  307,  307,  304,
+      312,  307,  304,  307,  307,  307,  307,  307,  304,  307,
+      307,  307,  307,  307,  307,  311,  311,  311,  311,  307,
+
+      307,  304,  307,  307,  307,  304,  312,  307,  304,  307,
+      307,  313,  304,  307,  307,  307,  307,  307,  307,  304,
+      304,  311,  311,  311,  307,  304,  307,  307,  304,  304,
+      307,  307,  314,  315,  304,  307,  307,  307,  304,  304,
+      304,  304,  311,  311,  311,  304,  307,  307,  304,  307,
+      307,  316,  315,  304,  307,  307,  307,  304,  304,  304,
+      311,  311,  311,  304,  304,  307,  316,  304,  307,  304,
+      317,  304,  311,  304,  311,  304,  307,  304,  304,  318,
+      304,  311,  304,  304,  304,  304,  318,  304,  304,  304,
+      304,  304,  304,  317,  304,  304,  317,  319,  320,  304,
+
+      320,  304,  304,    0,  304,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304
     } ;
 
-static yyconst flex_int16_t yy_nxt[900] =
+static yyconst flex_int16_t yy_nxt[866] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   11,
        13,    4,   14,   15,   16,   17,   18,   19,   20,   21,
@@ -545,16 +542,16 @@ static yyconst flex_int16_t yy_nxt[900] =
        26,   27,   28,   29,   30,   23,   31,   32,   33,   23,
        23,   34,   23,   23,   35,   36,   48,   49,   37,   39,
        40,   40,   41,   41,   40,   40,   41,   50,   51,   56,
-       54,  268,   57,  250,   59,   92,   92,   55,   58,   60,
-       63,   61,  111,   64,   68,  111,   65,   73,  249,   69,
+       54,  264,   57,  247,   59,   92,   92,   55,   58,   60,
+       63,   61,  111,   64,   68,  111,   65,   73,  246,   69,
 
       100,   62,  104,   66,   56,   54,   74,   57,   59,   67,
        38,   55,   58,   60,   63,   61,   70,   64,   82,   68,
        71,   65,   73,   69,  100,   62,  104,   66,   79,   72,
-       74,   75,   42,   67,   80,  229,   42,   81,   76,  228,
-       77,   70,   78,   82,  204,   71,   92,   92,   86,   83,
+       74,   75,   42,   67,   80,  227,   42,   81,   76,  226,
+       77,   70,   78,   82,  203,   71,   92,   92,   86,   83,
       101,   87,   79,   72,   89,   90,   75,   88,   80,   84,
-       91,   81,   76,   85,   77,  203,   78,   93,   40,   40,
+       91,   81,   76,   85,   77,  202,   78,   93,   40,   40,
        94,   48,   49,   86,   83,  101,   87,  102,  103,   89,
        90,   88,  107,   84,   91,  110,  108,   85,   94,   40,
        40,   94,   39,   40,   40,   41,   41,   40,   40,   41,
@@ -578,67 +575,63 @@ static yyconst flex_int16_t yy_nxt[900] =
       169,  167,  172,  168,   42,  173,  174,  179,   42,  171,
       177,  178,  147,  182,  184,  147,  183,  185,  186,  187,
       188,  191,  189,  194,  170,  189,  172,  192,  193,   52,
-      195,  174,  179,  201,  177,  178,  202,  190,  182,  184,
-      183,  185,  186,  187,  205,  188,  191,  194,  170,  206,
-
-       47,  209,  192,  193,  195,  213,  180,  210,  201,  180,
-      210,  202,  190,  169,   46,  211,  169,  212,  216,  205,
-      217,  215,  219,  189,  206,  209,  189,  218,  220,  207,
-      213,  227,  230,   44,  231,  313,  233,  313,  197,  211,
-      198,  212,  216,  214,  217,  199,  215,  219,  200,  313,
-      221,  218,  220,  221,  207,  227,  230,  221,  222,  231,
-      221,  233,  197,  221,  198,  222,  221,  221,  214,  199,
-      221,  222,  200,  221,  210,  222,  221,  210,  223,  234,
-      238,  222,  235,  237,  239,  235,  240,  242,  226,  313,
-      313,  224,  221,   53,  232,  221,  241,  225,  221,  241,
-
-      222,  221,  244,  223,  234,  238,  222,  237,  239,  251,
-      240,  253,  242,  226,  242,  224,  313,  252,  246,  232,
-      221,  225,  254,  221,  243,  257,  244,  258,  222,  244,
-      245,  235,  221,  251,  235,  221,  253,  259,  260,  242,
-      222,  252,  246,  241,  261,  262,  241,  254,  243,  263,
-      257,  247,  258,  244,  245,  221,  221,  248,  221,  221,
-      269,  259,  260,  222,  222,  221,  270,  272,  221,  261,
-      262,  243,  265,  222,  263,  247,  221,  273,  274,  221,
-      275,  248,  276,  275,  222,  269,  277,  313,  264,  277,
-      270,  272,  281,  282,  222,  243,  221,  265,  266,  221,
-
-      279,  273,  274,  279,  222,  312,  276,  283,  222,  313,
-      267,  221,  264,  284,  221,  278,  281,  282,  275,  222,
-      286,  275,  266,  287,  290,  293,  287,  290,  221,  312,
-      280,  221,  283,  295,  267,  313,  222,  297,  284,  313,
-      278,  242,  242,  313,  287,  286,  292,  287,  313,  292,
-      293,  288,  291,  304,  222,  280,  244,  244,  295,  289,
-      296,  290,  297,  296,  290,  313,  242,  242,  222,  313,
-      300,  313,  288,  300,  298,  288,  291,  298,  304,  305,
-      244,  244,  301,  289,  303,  301,  313,  303,  298,  291,
-      300,  298,  242,  300,  301,  303,  288,  301,  303,  311,
-
-      242,  313,  299,  306,  305,  307,  306,  244,  307,  306,
-      302,  307,  306,  291,  307,  244,  299,  242,  309,  313,
-      313,  309,  302,  313,  311,  242,  299,  309,  313,  294,
-      309,  244,  313,  313,  302,  313,  313,  313,  294,  244,
-      299,  313,  313,  313,  313,  313,  302,  313,  313,  313,
-      285,  313,  313,  313,  313,  313,  313,  294,  313,  313,
-      313,  313,  313,  313,  313,  313,  294,   43,   43,  313,
-       43,   43,   43,   45,   45,   53,   53,   53,   97,   97,
-       97,   98,   98,  313,   98,   98,   98,  181,  313,  313,
-      181,  181,  196,  313,  313,  196,  208,  208,  208,  236,
-
-      313,  236,  236,  236,  255,  313,  313,  255,  255,  256,
-      256,  256,  271,  271,  271,  285,  313,  313,  285,  285,
-      294,  294,  294,  308,  313,  313,  308,  308,  310,  313,
-      310,  310,  310,    3,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313
-
+      195,  174,  179,  169,  177,  178,  169,  190,  182,  184,
+      183,  185,  186,  187,  200,  188,  191,  194,  170,  201,
+
+      204,  205,  192,  193,  195,  180,  208,  210,  180,  211,
+      197,  209,  190,  212,  209,  198,  214,  189,  199,  200,
+      189,  215,  216,  217,  201,  204,  205,  218,  206,   47,
+      208,  210,  219,  211,  197,   46,  229,  213,  212,  198,
+      220,  214,  199,  220,  225,  215,  216,  217,  221,  228,
+      231,  220,  218,  206,  220,  220,  219,  220,  220,  221,
+      220,  229,  213,  221,  235,  221,  232,  236,  225,  209,
+      224,  233,  209,  228,  233,  231,  237,  238,  240,   44,
+      239,  248,   53,  239,  304,  222,  249,  223,  235,  230,
+      250,  232,  236,  242,  220,  224,  220,  220,  240,  220,
+
+      237,  238,  221,  240,  221,  248,  251,  304,  241,  222,
+      249,  223,  256,  242,  230,  250,  220,  242,  233,  220,
+      243,  233,  254,  240,  221,  255,  239,  244,  257,  239,
+      258,  251,  241,  259,  260,  304,  256,  242,  266,  304,
+      220,  245,  265,  220,  243,  304,  268,  254,  221,  269,
+      255,  244,  257,  270,  241,  258,  261,  304,  259,  260,
+      220,  220,  266,  220,  220,  245,  272,  265,  221,  221,
+      268,  271,  220,  269,  271,  220,  274,  270,  241,  274,
+      221,  261,  276,  277,  221,  278,  220,  279,  281,  220,
+      272,  273,  304,  262,  221,  263,  271,  286,  304,  271,
+
+      220,  285,  289,  220,  285,  275,  276,  277,  221,  221,
+      278,  283,  279,  281,  283,  288,  273,  262,  288,  263,
+      295,  283,  286,  221,  283,  294,  304,  289,  294,  240,
+      275,  282,  290,  292,  290,  290,  292,  290,  294,  284,
+      303,  294,  296,  292,  242,  295,  292,  304,  304,  284,
+      240,  240,  304,  297,  240,  282,  297,  302,  304,  304,
+      291,  293,  291,  284,  303,  242,  242,  296,  242,  298,
+      304,  293,  298,  284,  297,  240,  240,  297,  298,  304,
+      300,  298,  302,  300,  291,  293,  291,  304,  304,  242,
+      242,  287,  304,  300,  304,  293,  300,  304,  304,  304,
+
+      304,  304,  304,  304,  287,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304,  304,  304,  280,  304,  287,
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  304,  287,   43,   43,  304,   43,   43,   43,   45,
+       45,   53,   53,   53,   97,   97,   97,   98,   98,  304,
+       98,   98,   98,  181,  304,  304,  181,  181,  196,  304,
+      304,  196,  207,  207,  207,  234,  304,  234,  234,  234,
+      252,  304,  304,  252,  252,  253,  253,  253,  267,  267,
+      267,  280,  304,  304,  280,  280,  287,  287,  287,  299,
+      304,  304,  299,  299,  301,  304,  301,  301,  301,    3,
+
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304
     } ;
 
-static yyconst flex_int16_t yy_chk[900] =
+static yyconst flex_int16_t yy_chk[866] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -648,13 +641,13 @@ static yyconst flex_int16_t yy_chk[900] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    2,   14,   14,    2,    5,
         5,    5,    5,    8,    8,    8,    8,   15,   15,   19,
-       18,  249,   20,  229,   21,   35,   35,   18,   20,   22,
-       24,   22,   64,   24,   26,   64,   25,   28,  228,   26,
+       18,  246,   20,  227,   21,   35,   35,   18,   20,   22,
+       24,   22,   64,   24,   26,   64,   25,   28,  226,   26,
 
        54,   22,   58,   25,   19,   18,   28,   20,   21,   25,
         2,   18,   20,   22,   24,   22,   27,   24,   31,   26,
        27,   25,   28,   26,   54,   22,   58,   25,   30,   27,
-       28,   29,    5,   25,   30,  204,    8,   30,   29,  203,
+       28,   29,    5,   25,   30,  203,    8,   30,   29,  202,
        29,   27,   29,   31,  176,   27,   42,   42,   33,   32,
        55,   33,   30,   27,   34,   34,   29,   33,   30,   32,
        34,   30,   29,   32,   29,  175,   29,   36,   36,   36,
@@ -681,64 +674,60 @@ static yyconst flex_int16_t yy_chk[900] =
       133,  131,  135,  132,   93,  136,  137,  143,   94,  134,
       140,  141,  147,  149,  151,  147,  150,  152,  157,  158,
       159,  163,  162,  166,  133,  162,  135,  164,  165,   17,
-      167,  137,  143,  172,  140,  141,  173,  162,  149,  151,
-      150,  152,  157,  158,  178,  159,  163,  166,  133,  179,
-
-       13,  182,  164,  165,  167,  187,  180,  183,  172,  180,
-      183,  173,  162,  169,   12,  184,  169,  185,  191,  178,
-      192,  190,  194,  189,  179,  182,  189,  193,  195,  180,
-      187,  202,  206,    9,  207,    3,  211,    0,  169,  184,
-      169,  185,  191,  189,  192,  169,  190,  194,  169,    0,
-      196,  193,  195,  196,  180,  202,  206,  198,  196,  207,
-      198,  211,  169,  197,  169,  198,  197,  199,  189,  169,
-      199,  197,  169,  200,  210,  199,  200,  210,  197,  212,
-      215,  200,  213,  214,  216,  213,  217,  222,  200,    0,
-        0,  198,  224,  213,  210,  224,  221,  199,  223,  221,
-
-      224,  223,  222,  197,  212,  215,  223,  214,  216,  230,
-      217,  233,  222,  200,  221,  198,    0,  232,  224,  210,
-      225,  199,  234,  225,  221,  237,  222,  238,  225,  221,
-      223,  235,  226,  230,  235,  226,  233,  239,  240,  221,
-      226,  232,  224,  241,  242,  243,  241,  234,  221,  244,
-      237,  225,  238,  221,  223,  245,  246,  226,  245,  246,
-      252,  239,  240,  245,  246,  247,  254,  257,  247,  242,
-      243,  241,  246,  247,  244,  225,  248,  258,  261,  248,
-      262,  226,  263,  262,  248,  252,  264,    0,  245,  264,
-      254,  257,  269,  270,  264,  241,  265,  246,  247,  265,
-
-      266,  258,  261,  266,  265,  311,  263,  272,  266,    0,
-      248,  267,  245,  274,  267,  265,  269,  270,  275,  267,
-      276,  275,  247,  277,  279,  281,  277,  279,  278,  311,
-      267,  278,  272,  288,  248,    0,  278,  291,  274,    0,
-      265,  277,  279,    0,  287,  276,  280,  287,    0,  280,
-      281,  277,  279,  299,  280,  267,  277,  279,  288,  278,
-      289,  290,  291,  289,  290,    0,  277,  279,  289,    0,
-      295,    0,  287,  295,  292,  277,  279,  292,  299,  302,
-      277,  279,  296,  278,  297,  296,    0,  297,  298,  290,
-      300,  298,  292,  300,  301,  303,  287,  301,  303,  309,
-
-      296,    0,  292,  304,  302,  305,  304,  292,  305,  306,
-      296,  307,  306,  290,  307,  296,  298,  292,  308,    0,
-        0,  308,  301,    0,  309,  296,  292,  310,    0,  308,
-      310,  292,    0,    0,  296,    0,    0,    0,  310,  296,
-      298,    0,    0,    0,    0,    0,  301,    0,    0,    0,
-      307,    0,    0,    0,    0,    0,    0,  308,    0,    0,
-        0,    0,    0,    0,    0,    0,  310,  314,  314,    0,
-      314,  314,  314,  315,  315,  316,  316,  316,  317,  317,
-      317,  318,  318,    0,  318,  318,  318,  319,    0,    0,
-      319,  319,  320,    0,    0,  320,  321,  321,  321,  322,
-
-        0,  322,  322,  322,  323,    0,    0,  323,  323,  324,
-      324,  324,  325,  325,  325,  326,    0,    0,  326,  326,
-      327,  327,  327,  328,    0,    0,  328,  328,  329,    0,
-      329,  329,  329,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
-      313,  313,  313,  313,  313,  313,  313,  313,  313
-
+      167,  137,  143,  169,  140,  141,  169,  162,  149,  151,
+      150,  152,  157,  158,  172,  159,  163,  166,  133,  173,
+
+      178,  179,  164,  165,  167,  180,  182,  184,  180,  185,
+      169,  183,  162,  187,  183,  169,  190,  189,  169,  172,
+      189,  191,  192,  193,  173,  178,  179,  194,  180,   13,
+      182,  184,  195,  185,  169,   12,  206,  189,  187,  169,
+      196,  190,  169,  196,  201,  191,  192,  193,  196,  205,
+      210,  197,  194,  180,  197,  199,  195,  198,  199,  197,
+      198,  206,  189,  199,  213,  198,  211,  214,  201,  209,
+      199,  212,  209,  205,  212,  210,  215,  216,  221,    9,
+      220,  228,  212,  220,    3,  197,  230,  198,  213,  209,
+      231,  211,  214,  221,  222,  199,  223,  222,  220,  223,
+
+      215,  216,  222,  221,  223,  228,  232,    0,  220,  197,
+      230,  198,  237,  220,  209,  231,  224,  221,  233,  224,
+      222,  233,  235,  220,  224,  236,  239,  223,  238,  239,
+      240,  232,  220,  241,  242,    0,  237,  220,  251,    0,
+      243,  224,  249,  243,  222,    0,  254,  235,  243,  255,
+      236,  223,  238,  258,  239,  240,  243,    0,  241,  242,
+      244,  245,  251,  244,  245,  224,  260,  249,  244,  245,
+      254,  259,  261,  255,  259,  261,  262,  258,  239,  262,
+      261,  243,  265,  266,  262,  268,  263,  270,  272,  263,
+      260,  261,    0,  244,  263,  245,  271,  276,    0,  271,
+
+      273,  275,  284,  273,  275,  263,  265,  266,  273,  275,
+      268,  274,  270,  272,  274,  282,  261,  244,  282,  245,
+      291,  283,  276,  282,  283,  289,    0,  284,  289,  274,
+      263,  273,  285,  288,  290,  285,  288,  290,  294,  274,
+      302,  294,  293,  292,  274,  291,  292,    0,    0,  283,
+      285,  288,    0,  295,  274,  273,  295,  300,    0,    0,
+      285,  288,  290,  274,  302,  285,  288,  293,  274,  296,
+        0,  292,  296,  283,  297,  285,  288,  297,  298,    0,
+      299,  298,  300,  299,  285,  288,  290,    0,    0,  285,
+      288,  299,    0,  301,    0,  292,  301,    0,    0,    0,
+
+        0,    0,    0,    0,  301,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  298,    0,  299,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  301,  305,  305,    0,  305,  305,  305,  306,
+      306,  307,  307,  307,  308,  308,  308,  309,  309,    0,
+      309,  309,  309,  310,    0,    0,  310,  310,  311,    0,
+        0,  311,  312,  312,  312,  313,    0,  313,  313,  313,
+      314,    0,    0,  314,  314,  315,  315,  315,  316,  316,
+      316,  317,    0,    0,  317,  317,  318,  318,  318,  319,
+        0,    0,  319,  319,  320,    0,  320,  320,  320,  304,
+
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  304,  304,  304,  304
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -827,7 +816,7 @@ static int checkImmediate(int token) {
 	return token;
 }
 
-#line 831 "engines/director/lingo/lingo-lex.cpp"
+#line 820 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -1013,7 +1002,7 @@ YY_DECL
 #line 87 "engines/director/lingo/lingo-lex.l"
 
 
-#line 1017 "engines/director/lingo/lingo-lex.cpp"
+#line 1006 "engines/director/lingo/lingo-lex.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -1067,13 +1056,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 314 )
+				if ( yy_current_state >= 305 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 313 );
+		while ( yy_current_state != 304 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1367,7 +1356,7 @@ YY_RULE_SETUP
 {
 		count();
 
-		yylval.e[0] = g_lingo->_theEntities["last"]->entity;
+		yylval.e[0] = g_lingo->_theEntities["sqrt"]->entity;
 		yylval.e[1] = 0;	// No field
 
 		return THEENTITYWITHID;
@@ -1379,26 +1368,14 @@ YY_RULE_SETUP
 {
 		count();
 
-		yylval.e[0] = g_lingo->_theEntities["sqrt"]->entity;
-		yylval.e[1] = 0;	// No field
-
-		return THEENTITYWITHID;
-	}
-	YY_BREAK
-case 51:
-YY_RULE_SETUP
-#line 182 "engines/director/lingo/lingo-lex.l"
-{
-		count();
-
 		yylval.s = new Common::String("value");
 
 		return FBLTINONEARG;
 	}
 	YY_BREAK
-case 52:
+case 51:
 YY_RULE_SETUP
-#line 189 "engines/director/lingo/lingo-lex.l"
+#line 181 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1423,9 +1400,9 @@ YY_RULE_SETUP
 			error("LEXER: Unhandled chunk expression '%s'", yylval.s->c_str());
 	}
 	YY_BREAK
-case 53:
+case 52:
 YY_RULE_SETUP
-#line 212 "engines/director/lingo/lingo-lex.l"
+#line 204 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1480,9 +1457,9 @@ YY_RULE_SETUP
 		warning("LEXER: Unhandled the entity '%s', field '%s'", ptr, field.c_str());
 	}
 	YY_BREAK
-case 54:
+case 53:
 YY_RULE_SETUP
-#line 265 "engines/director/lingo/lingo-lex.l"
+#line 257 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1515,9 +1492,9 @@ YY_RULE_SETUP
 			return THEENTITY;
 	}
 	YY_BREAK
-case 55:
+case 54:
 YY_RULE_SETUP
-#line 296 "engines/director/lingo/lingo-lex.l"
+#line 288 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1538,74 +1515,74 @@ YY_RULE_SETUP
 		warning("LEXER: Unhandled the entity '%s'", ptr);
 	}
 	YY_BREAK
-case 56:
+case 55:
 YY_RULE_SETUP
-#line 315 "engines/director/lingo/lingo-lex.l"
+#line 307 "engines/director/lingo/lingo-lex.l"
 { count(); return tTHEN; }
 	YY_BREAK
-case 57:
+case 56:
 YY_RULE_SETUP
-#line 316 "engines/director/lingo/lingo-lex.l"
+#line 308 "engines/director/lingo/lingo-lex.l"
 { count(); return tTO; }
 	YY_BREAK
-case 58:
+case 57:
 YY_RULE_SETUP
-#line 317 "engines/director/lingo/lingo-lex.l"
+#line 309 "engines/director/lingo/lingo-lex.l"
 { count(); return tSPRITE; }
 	YY_BREAK
-case 59:
+case 58:
 YY_RULE_SETUP
-#line 318 "engines/director/lingo/lingo-lex.l"
+#line 310 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITH; }
 	YY_BREAK
-case 60:
+case 59:
 YY_RULE_SETUP
-#line 319 "engines/director/lingo/lingo-lex.l"
+#line 311 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITHIN; }
 	YY_BREAK
-case 61:
+case 60:
 YY_RULE_SETUP
-#line 320 "engines/director/lingo/lingo-lex.l"
+#line 312 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHEN; }
 	YY_BREAK
-case 62:
+case 61:
 YY_RULE_SETUP
-#line 321 "engines/director/lingo/lingo-lex.l"
+#line 313 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHILE; }
 	YY_BREAK
-case 63:
+case 62:
 YY_RULE_SETUP
-#line 322 "engines/director/lingo/lingo-lex.l"
+#line 314 "engines/director/lingo/lingo-lex.l"
 { count(); return tWORD; }
 	YY_BREAK
-case 64:
+case 63:
 YY_RULE_SETUP
-#line 324 "engines/director/lingo/lingo-lex.l"
+#line 316 "engines/director/lingo/lingo-lex.l"
 { count(); return tNEQ; }
 	YY_BREAK
-case 65:
+case 64:
 YY_RULE_SETUP
-#line 325 "engines/director/lingo/lingo-lex.l"
+#line 317 "engines/director/lingo/lingo-lex.l"
 { count(); return tGE; }
 	YY_BREAK
-case 66:
+case 65:
 YY_RULE_SETUP
-#line 326 "engines/director/lingo/lingo-lex.l"
+#line 318 "engines/director/lingo/lingo-lex.l"
 { count(); return tLE; }
 	YY_BREAK
-case 67:
+case 66:
 YY_RULE_SETUP
-#line 327 "engines/director/lingo/lingo-lex.l"
+#line 319 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONCAT; }
 	YY_BREAK
-case 68:
+case 67:
 YY_RULE_SETUP
-#line 328 "engines/director/lingo/lingo-lex.l"
+#line 320 "engines/director/lingo/lingo-lex.l"
 { count(); return tEQ; }
 	YY_BREAK
-case 69:
+case 68:
 YY_RULE_SETUP
-#line 330 "engines/director/lingo/lingo-lex.l"
+#line 322 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1661,43 +1638,43 @@ YY_RULE_SETUP
 		return ID;
 	}
 	YY_BREAK
-case 70:
+case 69:
 YY_RULE_SETUP
-#line 384 "engines/director/lingo/lingo-lex.l"
+#line 376 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
-case 71:
+case 70:
 YY_RULE_SETUP
-#line 385 "engines/director/lingo/lingo-lex.l"
+#line 377 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
-case 72:
+case 71:
 YY_RULE_SETUP
-#line 386 "engines/director/lingo/lingo-lex.l"
+#line 378 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
-case 73:
-/* rule 73 can match eol */
+case 72:
+/* rule 72 can match eol */
 YY_RULE_SETUP
-#line 387 "engines/director/lingo/lingo-lex.l"
+#line 379 "engines/director/lingo/lingo-lex.l"
 { count(); return '\n'; }
 	YY_BREAK
-case 74:
+case 73:
 YY_RULE_SETUP
-#line 388 "engines/director/lingo/lingo-lex.l"
+#line 380 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
-case 75:
+case 74:
 YY_RULE_SETUP
-#line 389 "engines/director/lingo/lingo-lex.l"
+#line 381 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
-case 76:
+case 75:
 YY_RULE_SETUP
-#line 391 "engines/director/lingo/lingo-lex.l"
+#line 383 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1701 "engines/director/lingo/lingo-lex.cpp"
+#line 1678 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1991,7 +1968,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 314 )
+			if ( yy_current_state >= 305 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2019,11 +1996,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 314 )
+		if ( yy_current_state >= 305 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 313);
+	yy_is_jam = (yy_current_state == 304);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2657,7 +2634,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 391 "engines/director/lingo/lingo-lex.l"
+#line 383 "engines/director/lingo/lingo-lex.l"
 
 
 


Commit: 25dca26ff82caf5e944212bd39b128484211a830
    https://github.com/scummvm/scummvm/commit/25dca26ff82caf5e944212bd39b128484211a830
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-08T23:08:13+01:00

Commit Message:
DIRECTOR: Fix loading CastInfo strings

Changed paths:
    engines/director/score.cpp
    engines/director/score.h


diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index e92a68d..88927c1 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -746,12 +746,33 @@ void Score::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id,
 
 		CastInfo *ci = new CastInfo();
 
-		if (castStrings.size() >= 5) {
-			ci->script = castStrings[0];
-			ci->name = castStrings[1];
-			ci->directory = castStrings[2];
-			ci->fileName = castStrings[3];
+		// We have here variable number of strings. Thus, instead of
+		// adding tons of ifs, we use this switch()
+		switch (castStrings.size()) {
+		default:
+			warning("Score::loadCastData(): extra %d strings", castStrings.size() - 5);
+			// fallthrough
+		case 5:
 			ci->type = castStrings[4];
+			// fallthrough
+		case 4:
+			ci->fileName = castStrings[3];
+			// fallthrough
+		case 3:
+			ci->directory = castStrings[2];
+			// fallthrough
+		case 2:
+			ci->name = castStrings[1];
+
+			if (!ci->name.empty()) {
+				_castsNames[ci->name] = id;
+			}
+			// fallthrough
+		case 1:
+			ci->script = castStrings[0];
+			// fallthrough
+		case 0:
+			break;
 		}
 
 		// FIXME. Disabled by default, requires --debugflags=bytecode for now
@@ -1231,12 +1252,12 @@ Common::Array<Common::String> Score::loadStrings(Common::SeekableSubReadStreamEn
 		for (uint j = entries[i]; j < entries[i + 1]; j++)
 			if (data[j] == '\r')
 				entryString += '\n';
-			else
+			else if (j > entries[i] || data[j] >= 0x20) // Skip first byte which is string length
 				entryString += data[j];
 
 		strings.push_back(entryString);
 
-		debugC(6, kDebugLoading, "String %d:\n%s\n", i, entryString.c_str());
+		debugC(6, kDebugLoading, "String %d:\n%s\n", i, Common::toPrintable(entryString).c_str());
 	}
 
 	free(data);
diff --git a/engines/director/score.h b/engines/director/score.h
index ef7244b..d4d402b 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -123,7 +123,7 @@ private:
 public:
 	Common::Array<Frame *> _frames;
 	Common::HashMap<uint16, CastInfo *> _castsInfo;
-	Common::HashMap<Common::String, int> _castsNames;
+	Common::HashMap<Common::String, int, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _castsNames;
 	Common::SortedArray<Label *> *_labels;
 	Common::HashMap<uint16, Common::String> _actions;
 	Common::HashMap<uint16, bool> _immediateActions;




More information about the Scummvm-git-logs mailing list