[Scummvm-git-logs] scummvm master -> 6975061434460096be89e00214130f2315ed6832

sev- sev at scummvm.org
Tue Jan 14 17:59:22 UTC 2020


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

Summary:
66455b6aa5 GRAPHICS: MACGUI: Added sanity check to splitString()
878b4e944d DIRECTOR: LINGO: Added parsing for 'the volume of sound <n>'
259592c28c DIRECTOR: LINGO: Added test of 'the volume of sound <n>'
b4cd76c75e DIRECTOR: LINGO: Implement proper parsing and code generation for 'tell'
b29d68218c DIRECTOR: LINGO: Added test for the 'tell' command
57d7325066 DIRECTOR: LINGO: Implement reliable stub fot c_tellcode()
dcc530f34a DIRECTOR: LINGO: Fix REFERENCE stubs
dd4681e195 DIRECTOR: LINGO: Fix toString() when score was not loaded
f4653e8c28 DIRECTOR: LINGO: Implemented parser for 'sound <xx>' family of commands
6975061434 DIRECTOR: LINGO: Added tests for the 'sound <xx>' fzmily of commands


Commit: 66455b6aa574da77831b49af77c74bacf487f74f
    https://github.com/scummvm/scummvm/commit/66455b6aa574da77831b49af77c74bacf487f74f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-14T18:48:42+01:00

Commit Message:
GRAPHICS: MACGUI: Added sanity check to splitString()

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 2fc9b8d..56e5a75 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -279,7 +279,10 @@ void MacText::splitString(Common::U32String &str) {
 
 		_currentFormatting.getFont()->wordWrapText(tmp, _maxWidth, text, w);
 
-		_textLines[curLine].chunks[curChunk].text = text[0];
+		if (text.size())
+			_textLines[curLine].chunks[curChunk].text = text[0];
+		else
+			warning("MacText::splitString(): Font resulted in 0 width for text '%s'", tmp.encode().c_str());
 
 		if (text.size() > 1) {
 			for (uint i = 1; i < text.size(); i++) {


Commit: 878b4e944d51e2f1df166038ef754e53e146bdcc
    https://github.com/scummvm/scummvm/commit/878b4e944d51e2f1df166038ef754e53e146bdcc
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-14T18:48:42+01:00

Commit Message:
DIRECTOR: LINGO: Added parsing for 'the volume of sound <n>'

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 8bb349f..c54712d 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -120,6 +120,7 @@ TheEntity entities[] = {
 	{ kTheShiftDown,		"shiftDown",		false, 2 },	// D2 f
 	{ kTheSoundEnabled,		"soundEnabled",		false, 2 },	// D2 p
 	{ kTheSoundLevel,		"soundLevel",		false, 2 },	// D2 p
+	{ kTheSoundEntity,		"sound",			true,  4 },	// D4
 	{ kTheSprite,			"sprite",			true,  2 },	// D4 p
 	{ kTheSqrt,				"sqrt",				false, 2 },	// D2 f
 	{ kTheStage,			"stage",			false, 4 },	//				D4 p
@@ -260,6 +261,8 @@ TheEntityField fields[] = {
 	{ kTheTime,		"abbrev",		kTheAbbr,		3 },//		D3 f
 	{ kTheTime,		"abbr",			kTheAbbr,		3 },//		D3 f
 
+	{ kTheSoundEntity,"volume",		kTheVolume,		4 },//				D4 p
+
 	{ kTheNOEntity, NULL, kTheNOField, 0 }
 };
 
diff --git a/engines/director/lingo/lingo-the.h b/engines/director/lingo/lingo-the.h
index 57bb113..5551aff 100644
--- a/engines/director/lingo/lingo-the.h
+++ b/engines/director/lingo/lingo-the.h
@@ -115,6 +115,7 @@ enum TheEntityType {
 	kTheSelEnd,
 	kTheSelStart,
 	kTheShiftDown,
+	kTheSoundEntity,
 	kTheSoundEnabled,
 	kTheSoundLevel,
 	kTheSprite,


Commit: 259592c28c18f1b42b130d5ad219296f8b3b9853
    https://github.com/scummvm/scummvm/commit/259592c28c18f1b42b130d5ad219296f8b3b9853
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-14T18:50:48+01:00

Commit Message:
DIRECTOR: LINGO: Added test of 'the volume of sound <n>'

Changed paths:
    engines/director/lingo/tests/the.lingo


diff --git a/engines/director/lingo/tests/the.lingo b/engines/director/lingo/tests/the.lingo
index e03f447..6ad82d6 100644
--- a/engines/director/lingo/tests/the.lingo
+++ b/engines/director/lingo/tests/the.lingo
@@ -30,3 +30,6 @@ set the bottom of x to originV + (the number of words in someText) * 16
 put the number of words of field 1 into field 5
 
 set h = the locH of sprite pSprite + pChangeH
+
+set the volume of sound 1 to 255
+put the volume of sound 1 into field 11


Commit: b4cd76c75ee3899fc05179be717384bdf2831d97
    https://github.com/scummvm/scummvm/commit/b4cd76c75ee3899fc05179be717384bdf2831d97
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-14T18:57:00+01:00

Commit Message:
DIRECTOR: LINGO: Implement proper parsing and code generation for 'tell'

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 94b71d1..a7c4062 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -566,7 +566,7 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  122
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1507
+#define YYLAST   1491
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  98
@@ -575,7 +575,7 @@ union yyalloc
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  161
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  341
+#define YYNSTATES  343
 
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   337
@@ -633,20 +633,20 @@ static const yytype_int16 yyrline[] =
        0,   135,   135,   136,   137,   140,   141,   142,   145,   151,
      154,   155,   156,   162,   169,   175,   182,   188,   194,   202,
      203,   204,   207,   208,   209,   210,   213,   214,   219,   230,
-     247,   259,   264,   266,   270,   280,   292,   293,   296,   304,
-     314,   327,   330,   337,   344,   352,   355,   358,   359,   360,
-     363,   369,   373,   376,   379,   383,   387,   391,   394,   395,
-     396,   399,   402,   410,   416,   421,   422,   423,   424,   425,
-     426,   427,   428,   429,   430,   431,   432,   433,   434,   435,
-     436,   437,   438,   439,   440,   441,   442,   443,   444,   445,
-     446,   447,   448,   449,   450,   451,   452,   455,   460,   461,
-     462,   463,   464,   465,   466,   467,   468,   471,   472,   475,
-     476,   479,   480,   483,   484,   495,   496,   497,   498,   502,
-     506,   512,   513,   516,   517,   521,   525,   529,   529,   560,
-     560,   567,   568,   568,   575,   585,   593,   595,   596,   597,
-     598,   601,   602,   603,   606,   609,   618,   619,   620,   623,
-     624,   627,   630,   631,   632,   633,   636,   637,   640,   641,
-     644,   648
+     247,   259,   264,   268,   274,   278,   288,   300,   301,   304,
+     312,   322,   335,   338,   345,   352,   360,   363,   366,   367,
+     368,   371,   377,   380,   383,   387,   391,   395,   398,   399,
+     400,   403,   406,   414,   420,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   459,   464,   465,
+     466,   467,   468,   469,   470,   471,   472,   475,   476,   479,
+     480,   483,   484,   487,   488,   499,   500,   501,   502,   506,
+     510,   516,   517,   520,   521,   525,   529,   533,   533,   564,
+     564,   571,   572,   572,   579,   589,   597,   599,   600,   601,
+     602,   605,   606,   607,   610,   613,   622,   623,   624,   627,
+     628,   631,   634,   635,   636,   637,   640,   641,   644,   645,
+     648,   652
 };
 #endif
 
@@ -669,13 +669,14 @@ static const char *const yytname[] =
   "tPROPERTY", "tON", "tENDIF", "tENDREPEAT", "tENDTELL", "'<'", "'>'",
   "'&'", "'+'", "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "','",
   "'['", "']'", "':'", "$accept", "program", "programline", "asgn",
-  "stmtoneliner", "stmtonelinerwithif", "stmt", "ifstmt", "elseifstmtlist",
-  "elseifstmt", "ifoneliner", "repeatwhile", "repeatwith", "if", "elseif",
-  "begin", "end", "stmtlist", "when", "tell", "simpleexpr", "expr",
-  "reference", "proc", "globallist", "propertylist", "instancelist",
-  "gotofunc", "gotomovie", "playfunc", "$@1", "defn", "$@2", "$@3", "on",
-  "argdef", "endargdef", "argstore", "macro", "arglist", "nonemptyarglist",
-  "list", "valuelist", "linearlist", "proplist", "proppair", YY_NULLPTR
+  "stmtoneliner", "stmtonelinerwithif", "stmt", "tellstart", "ifstmt",
+  "elseifstmtlist", "elseifstmt", "ifoneliner", "repeatwhile",
+  "repeatwith", "if", "elseif", "begin", "end", "stmtlist", "when",
+  "simpleexpr", "expr", "reference", "proc", "globallist", "propertylist",
+  "instancelist", "gotofunc", "gotomovie", "playfunc", "$@1", "defn",
+  "$@2", "$@3", "on", "argdef", "endargdef", "argstore", "macro",
+  "arglist", "nonemptyarglist", "list", "valuelist", "linearlist",
+  "proplist", "proppair", YY_NULLPTR
 };
 #endif
 
@@ -697,7 +698,7 @@ static const yytype_int16 yytoknum[] =
 };
 # endif
 
-#define YYPACT_NINF (-272)
+#define YYPACT_NINF (-253)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -711,41 +712,41 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     279,   -82,  -272,  -272,   882,  -272,   882,   882,    65,   916,
-    -272,  -272,  -272,  -272,  -272,    22,    23,   765,  -272,    67,
-     882,   -35,    84,    71,    72,   882,   801,    75,   882,   882,
-     882,   882,   882,   882,  -272,    80,    81,   882,   882,   882,
-      57,     6,  -272,  -272,  -272,  -272,  -272,   882,    44,   882,
-     603,   882,  -272,  1405,  -272,  -272,  -272,  -272,  -272,  -272,
-    -272,  -272,  -272,    12,   882,  1405,  1405,    13,    13,  -272,
-    -272,   882,  1405,    15,   882,  -272,  -272,  -272,    16,  -272,
-     882,  -272,    74,  -272,   968,  -272,  -272,   955,    85,  -272,
-     -17,    65,    -9,    64,    68,  -272,  1322,  -272,   968,  -272,
-    -272,    28,  -272,  1017,  1050,  1083,  1116,  1372,  -272,    30,
-    -272,  -272,  -272,  1335,    32,    50,  -272,  -272,    55,    34,
-      61,  -272,  -272,   360,  1405,   882,  1405,  -272,  -272,   882,
-    1405,  -272,  -272,  1281,   882,   882,   882,   882,   882,   882,
-     882,   882,   882,   882,   882,   882,   882,   882,   882,   882,
-     882,   128,   882,   955,   882,  1335,   -45,   882,    13,   128,
-     135,  1405,   882,  -272,  -272,    38,   882,   882,  -272,   882,
-     882,    -6,   882,   882,   882,  -272,   882,  -272,   136,   882,
-     882,   882,   882,   882,   882,   882,   882,   882,   882,   138,
-    -272,    65,    65,  -272,    65,    49,  -272,  -272,  1405,   115,
-    -272,  1405,   882,  -272,    31,    31,    31,    31,  1418,  1418,
-    -272,   -25,    31,    31,    31,    31,   -25,   -33,   -33,  -272,
-    -272,  -272,   -71,  1405,  -272,  1405,   -26,  -272,  1405,   128,
-    -272,  -272,  1405,  1405,  1405,    31,   882,   882,  1405,    31,
-    1405,  1405,  -272,  1405,  1149,  1405,  1182,  1405,  1215,  1405,
-    1248,  1405,  1405,  -272,  -272,  -272,  -272,    32,    50,  -272,
-     522,   -10,  -272,   118,  1405,   522,    73,   150,    73,   -19,
-    1405,    31,   882,   882,   882,   882,  -272,  -272,    92,   139,
-     882,   522,   684,   105,   167,  -272,  -272,  -272,    73,  1405,
-    1405,  1405,  1405,  -272,   882,  1405,  -272,  -272,  -272,  -272,
-     441,   522,  -272,  1405,  -272,    53,   -23,   168,   522,  -272,
-     522,  -272,  -272,  -272,   882,   113,  -272,  -272,  -272,   101,
-     522,   119,  -272,  1405,  -272,   684,   175,   120,  -272,   522,
-     156,  -272,  -272,  -272,   123,  -272,   124,  -272,   522,  -272,
-    -272
+     263,   -77,  -253,  -253,   866,  -253,   866,   866,    64,   900,
+    -253,  -253,  -253,  -253,  -253,   -24,    30,   749,  -253,    42,
+     866,   -31,    33,    66,    70,   866,   785,    78,   866,   866,
+     866,   866,   866,   866,   866,    83,    88,   866,   866,   866,
+      56,     6,  -253,  -253,  -253,  -253,  -253,   866,    55,   866,
+     587,  -253,  1389,  -253,  -253,  -253,  -253,  -253,  -253,  -253,
+    -253,  -253,    23,   866,  1389,  1389,    22,    22,  -253,  -253,
+     866,  1389,    24,   866,  -253,  -253,  -253,    26,  -253,   866,
+    -253,    80,  -253,   952,  -253,  -253,   939,    96,  -253,   -36,
+      64,     5,    75,    77,  -253,  1306,  -253,   952,  -253,  -253,
+      32,  -253,  1001,  1034,  1067,  1100,  1356,  1265,  -253,    34,
+    -253,  -253,  -253,  1319,    27,    49,  -253,  -253,    52,    60,
+      61,  -253,  -253,   344,  1389,   866,  1389,  -253,  -253,   866,
+    1389,  -253,  -253,   866,   866,   866,   866,   866,   866,   866,
+     866,   866,   866,   866,   866,   866,   866,   866,   866,   866,
+     129,   866,   939,   866,  1319,    18,   866,    22,   129,   135,
+    1389,   866,  -253,  -253,    37,   866,   866,  -253,   866,   866,
+       8,   866,   866,   866,  -253,   866,  -253,   137,   866,   866,
+     866,   866,   866,   866,   866,   866,   866,   866,  -253,  -253,
+     139,  -253,    64,    64,  -253,    64,    48,  -253,  -253,  1389,
+     117,  -253,  1389,     7,     7,     7,     7,  1402,  1402,  -253,
+      19,     7,     7,     7,     7,    19,   -47,   -47,  -253,  -253,
+    -253,   -44,  1389,  -253,  1389,   -38,  -253,  1389,   129,  -253,
+    -253,  1389,  1389,  1389,     7,   866,   866,  1389,     7,  1389,
+    1389,  -253,  1389,  1133,  1389,  1166,  1389,  1199,  1389,  1232,
+    1389,  1389,   668,  -253,  -253,  -253,  -253,  -253,    27,    49,
+    -253,   506,    15,  -253,   120,    76,   152,    76,     9,  1389,
+       7,   866,   866,   866,   866,  -253,   506,  -253,  -253,   103,
+     138,   866,   506,   668,   168,  -253,  -253,  -253,    76,  1389,
+    1389,  1389,  1389,  -253,   108,  -253,   866,  1389,  -253,  -253,
+    -253,   425,   506,  -253,  -253,  1389,  -253,    71,   -20,   174,
+     506,  -253,   506,  -253,  -253,  -253,   866,   116,  -253,  -253,
+    -253,   105,   506,   119,  -253,  1389,  -253,   668,   176,   121,
+    -253,   506,   155,  -253,  -253,  -253,   123,  -253,   124,  -253,
+     506,  -253,  -253
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -754,60 +755,60 @@ static const yytype_int16 yypact[] =
 static const yytype_uint8 yydefact[] =
 {
        0,     0,    52,    62,     0,    53,   146,   146,     0,    56,
-      55,    54,   127,   132,    64,   102,     0,     0,    43,     0,
+      55,    54,   127,   132,    64,   102,     0,     0,    44,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    51,     0,     0,     0,     0,     0,
      152,     0,     3,    65,    26,     7,    27,     0,     0,     0,
-       0,     0,    58,    20,    59,    21,    99,   100,     6,    45,
-      19,    57,     4,    56,     0,    63,   147,   106,    60,    56,
-      97,   146,   149,   145,   146,    45,   101,   109,   103,   115,
-       0,   116,     0,   117,   118,   120,   129,    98,     0,    41,
-       0,     0,     0,     0,     0,   131,   108,   123,   124,   126,
-     113,   105,    79,     0,     0,     0,     0,     0,   111,   104,
+       0,    58,    20,    59,    21,    99,   100,     6,    46,    19,
+      57,     4,    56,     0,    63,   147,   106,    60,    56,    97,
+     146,   149,   145,   146,    46,   101,   109,   103,   115,     0,
+     116,     0,   117,   118,   120,   129,    98,     0,    42,     0,
+       0,     0,     0,     0,   131,   108,   123,   124,   126,   113,
+     105,    79,     0,     0,     0,     0,     0,     0,   111,   104,
      136,    84,    85,     0,    55,    54,   153,   156,     0,   154,
-     155,   158,     1,     5,    46,     0,    46,    46,    25,     0,
+     155,   158,     1,     5,    47,     0,    47,    47,    25,     0,
       23,    24,    22,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   137,   146,     0,     0,   147,     0,     0,   128,   137,
-       0,   122,     0,   119,    45,     0,     0,     0,    42,     0,
-       0,     0,     0,     0,     0,    50,     0,   125,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      86,     0,     0,   151,     0,     0,     2,    47,    46,     0,
-      31,    46,     0,    47,    75,    76,    73,    74,    77,    78,
-      70,    81,    82,    83,    72,    71,    80,    66,    67,    68,
-      69,   138,     0,   148,    61,   150,     0,   110,   121,   137,
-       8,     9,    10,    11,    15,    13,     0,     0,    14,    12,
-      18,   107,   114,    89,     0,    91,     0,    93,     0,    95,
-       0,    87,    88,   112,   161,   160,   157,     0,     0,   159,
-      46,     0,    47,     0,    33,    46,   144,     0,   144,     0,
-      16,    17,     0,     0,     0,     0,    48,    49,     0,     0,
-       0,    46,     0,     0,     0,    47,   139,    47,   144,    90,
-      92,    94,    96,    28,     0,    46,    36,    46,    32,   140,
-     135,   133,    47,    46,    47,    46,     0,   141,   130,    47,
-      46,    45,    44,    37,     0,     0,    45,    40,   142,   134,
-      46,     0,    47,    46,    34,     0,     0,     0,    29,    46,
-       0,    46,   143,    30,     0,    47,     0,    35,    46,    39,
-      38
+     137,   146,     0,     0,   147,     0,     0,   128,   137,     0,
+     122,     0,   119,    46,     0,     0,     0,    43,     0,     0,
+       0,     0,     0,     0,    51,     0,   125,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,    34,
+       0,    86,     0,     0,   151,     0,     0,     2,    48,    47,
+       0,    31,    47,    75,    76,    73,    74,    77,    78,    70,
+      81,    82,    83,    72,    71,    80,    66,    67,    68,    69,
+     138,     0,   148,    61,   150,     0,   110,   121,   137,     8,
+       9,    10,    11,    15,    13,     0,     0,    14,    12,    18,
+     107,   114,    89,     0,    91,     0,    93,     0,    95,     0,
+      87,    88,     0,    48,   112,   161,   160,   157,     0,     0,
+     159,    47,     0,    48,     0,   144,     0,   144,     0,    16,
+      17,     0,     0,     0,     0,    47,    47,    49,    50,     0,
+       0,     0,    47,     0,     0,    48,   139,    48,   144,    90,
+      92,    94,    96,    33,     0,    28,     0,    47,    37,    47,
+     140,   135,   133,    48,    32,    47,    48,    47,     0,   141,
+     130,    48,    47,    46,    45,    38,     0,     0,    46,    41,
+     142,   134,    47,     0,    48,    47,    35,     0,     0,     0,
+      29,    47,     0,    47,   143,    30,     0,    48,     0,    36,
+      47,    40,    39
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -272,  -272,    82,  -272,  -271,  -272,     4,  -272,  -272,  -272,
-    -272,  -272,  -272,   157,  -272,   -74,   -75,   -88,  -272,  -272,
-       0,    -4,    43,   159,  -272,  -272,  -272,  -272,    10,  -272,
-    -272,  -272,  -272,  -272,  -272,  -149,  -272,  -256,   160,    11,
-    -272,  -272,  -272,  -272,  -272,    17
+    -253,  -253,    82,  -253,  -243,  -253,     4,    17,  -253,  -253,
+    -253,  -253,  -253,  -253,   157,  -253,   -73,   -89,   -65,  -253,
+      -1,    -4,    45,   161,  -253,  -253,  -253,  -253,   -18,  -253,
+    -253,  -253,  -253,  -253,  -253,  -146,  -253,  -252,   162,    25,
+    -253,  -253,  -253,  -253,  -253,    21
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    41,    42,    43,    44,   127,   277,    46,   305,   313,
-     128,    47,    48,    49,   314,   151,   197,   260,    50,    51,
-      52,    53,    54,    55,    78,   109,   101,    56,    85,    57,
-      74,    58,   164,    75,    59,   222,   319,   285,    60,   156,
-      73,    61,   118,   119,   120,   121
+      -1,    41,    42,    43,    44,   127,   278,   252,    46,   307,
+     315,   128,    47,    48,    49,   316,   150,   198,   261,    50,
+      51,    52,    53,    54,    77,   109,   100,    55,    84,    56,
+      73,    57,   163,    74,    58,   221,   321,   285,    59,   155,
+      72,    60,   118,   119,   120,   121
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -815,278 +816,282 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      65,   159,    66,    66,    45,    72,   122,   316,    70,    62,
-     226,   297,   287,    84,    88,    89,    87,    67,    68,   279,
-     266,    96,    98,   267,   102,   103,   104,   105,   106,   107,
-     169,   140,   302,   111,   112,   113,    99,   280,   172,   140,
-     117,   236,   170,   124,    77,   126,   130,   133,   224,   154,
-     173,   199,   200,   237,   331,   149,   150,   317,     8,   230,
-     153,   147,   148,   149,   150,   268,    76,   155,   267,     2,
-      66,   257,   288,   258,     5,   267,   161,     2,    69,   114,
-     269,   115,     5,   311,   312,   158,    69,    10,    86,    11,
-     229,   171,    94,    95,   163,   140,   100,   123,   141,    90,
-      91,   108,   110,   125,   152,    92,   168,   154,   177,   157,
-     160,   174,    93,   162,   175,   265,   146,   147,   148,   149,
-     150,   198,   178,   261,   189,   201,   263,    45,   194,   191,
+      64,   158,    65,    65,    45,    71,   122,    69,    98,   275,
+     318,   168,   225,    83,    61,   287,    86,   139,    87,    88,
+      75,    95,    97,   169,   101,   102,   103,   104,   105,   106,
+     107,    66,    67,   111,   112,   113,   303,   200,   201,   117,
+     299,   148,   149,   124,   280,   126,   130,   265,    89,    90,
+     266,    76,   171,   267,    91,   235,   266,     8,   229,   152,
+     319,    92,   281,    85,   172,   162,   154,   236,     2,    65,
+     258,   139,   259,     5,   140,   160,     2,    68,   114,   176,
+     115,     5,   268,   139,   333,    68,    10,    93,    11,   170,
+     228,    94,   145,   146,   147,   148,   149,   123,   157,    99,
+     288,   313,   314,   266,   108,   146,   147,   148,   149,   110,
+     262,   223,   153,   264,   125,   151,   153,   167,   156,   161,
+     159,   199,   173,   174,   192,   202,   177,    45,   190,   203,
      204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   192,    66,   221,
-     223,   193,    40,   225,   116,   195,   227,   242,   228,   253,
-      40,   262,   232,   233,   282,   234,   235,   284,   238,   239,
-     240,   286,   241,   293,   281,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   278,   294,   298,   299,   318,
-     283,   254,   255,   324,   256,   326,   332,   300,   264,   301,
-     328,   333,   335,   337,   339,   196,   296,   129,   231,   131,
-     132,     0,   259,     0,   308,     0,   310,     0,     0,     0,
-     304,   320,   306,     0,     0,     0,     0,     0,   309,     0,
-     315,     0,   270,   271,   329,   321,     0,   322,     0,     0,
-       0,     0,   325,     0,     0,   327,     0,   338,   330,     0,
-       0,     0,     0,     0,   334,     0,   336,     0,     0,     0,
-       0,     0,     0,   340,     0,     0,     0,     0,   289,   290,
-     291,   292,     0,     0,     0,     0,   295,     0,     0,    -5,
-       1,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     303,     2,     0,     0,     3,     4,     5,     6,     7,     8,
-       9,    10,     0,    11,     0,    12,    13,    14,     0,     0,
-     323,    15,    16,    17,    18,     0,     0,    19,     0,     0,
-       0,     0,    20,    21,    22,     0,     0,    23,     0,     0,
-       0,    24,    25,    26,     0,    27,     0,     0,     0,     0,
-       0,     0,    28,     0,     0,     0,     0,     0,     0,    29,
-      30,    31,    32,    33,     0,     0,    34,    35,    36,     0,
-       0,     0,     0,     0,     0,    37,    38,     0,     0,     0,
-      -5,    39,     2,     0,    40,     3,     4,     5,     6,     7,
-       8,     9,    10,     0,    11,     0,    12,    13,    14,     0,
-       0,     0,    15,    16,    17,    18,     0,     0,    19,     0,
-       0,     0,     0,    20,    21,    22,     0,     0,    23,     0,
-       0,     0,    24,    25,    26,     0,    27,     0,     0,     0,
-       0,     0,     0,    28,     0,     0,     0,     0,     0,     0,
-      29,    30,    31,    32,    33,     0,     0,    34,    35,    36,
-       0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
-       0,     0,    39,     2,     0,    40,     3,     4,     5,     6,
-       7,     8,     9,    10,     0,    11,   307,    12,     0,    14,
-       0,     0,     0,    15,    16,    17,    18,     0,     0,     0,
-       0,     0,     0,     0,    20,    21,    22,     0,     0,    23,
-       0,     0,     0,     0,    25,    26,     0,    27,     0,     0,
-       0,     0,     0,     0,    28,     0,     0,     0,     0,     0,
-       0,    29,    30,    31,    32,    33,     0,     0,    34,    35,
-       0,     0,     0,     0,     0,     0,     0,    37,    38,     0,
-       0,     0,   276,    39,     2,     0,    40,     3,     4,     5,
-       6,     7,     8,     9,    10,     0,    11,     0,    12,     0,
-      14,     0,     0,     0,    15,    16,    17,    18,     0,     0,
-       0,     0,     0,     0,     0,    20,    21,    22,     0,     0,
-      23,     0,     0,     0,     0,    25,    26,     0,    27,     0,
-       0,     0,     0,     0,     0,    28,     0,     0,     0,     0,
-       0,     0,    29,    30,    31,    32,    33,     0,     0,    34,
-      35,     0,     0,     0,     0,     0,     0,     0,    37,    38,
-       0,     0,     0,   276,    39,     2,     0,    40,     3,     4,
+     214,   215,   216,   217,   218,   219,   193,    65,   194,   222,
+     220,    40,   224,   116,   195,   196,   226,   227,   241,    40,
+     254,   231,   232,   263,   233,   234,   283,   237,   238,   239,
+     284,   240,   279,   286,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   295,   296,   293,   294,   276,   300,
+     304,   255,   256,   298,   257,   320,   326,   334,   282,   328,
+     330,   337,   335,   339,   341,   197,   253,   129,   306,   230,
+     308,   131,   132,     0,     0,     0,   311,   260,   317,     0,
+     301,     0,   302,   323,     0,     0,     0,     0,     0,     0,
+       0,   269,   270,   329,     0,     0,   332,     0,   310,     0,
+     324,   312,   336,     0,   338,   327,   322,     0,     0,     0,
+       0,   342,     0,     0,     0,     0,     0,     0,     0,   331,
+       0,     0,     0,    -5,     1,     0,     0,   289,   290,   291,
+     292,     0,   340,     0,     0,     2,     0,   297,     3,     4,
        5,     6,     7,     8,     9,    10,     0,    11,     0,    12,
-       0,    14,     0,     0,     0,    15,    16,    17,    18,     0,
-       0,     0,     0,     0,     0,     0,    20,     0,    22,     0,
-       0,     0,     0,     0,     0,     0,    25,    26,     0,    27,
+      13,    14,   305,     0,     0,    15,    16,    17,    18,     0,
+       0,    19,     0,     0,     0,     0,    20,    21,    22,     0,
+       0,    23,   325,     0,     0,    24,    25,    26,     0,    27,
        0,     0,     0,     0,     0,     0,    28,     0,     0,     0,
        0,     0,     0,    29,    30,    31,    32,    33,     0,     0,
-       0,    35,     0,     0,     0,     0,     0,     0,     0,    37,
-      38,     0,     0,     0,     0,    39,     2,     0,    40,     3,
+      34,    35,    36,     0,     0,     0,     0,     0,     0,    37,
+      38,     0,     0,     0,    -5,    39,     2,     0,    40,     3,
        4,     5,     6,     7,     8,     9,    10,     0,    11,     0,
-      12,     0,    14,     0,     0,     0,    15,    16,    17,     0,
-       0,     0,     0,     0,     0,     0,     0,    20,     0,    22,
-       0,     0,     0,     0,     0,     0,     0,    25,    26,     0,
+      12,    13,    14,     0,     0,     0,    15,    16,    17,    18,
+       0,     0,    19,     0,     0,     0,     0,    20,    21,    22,
+       0,     0,    23,     0,     0,     0,    24,    25,    26,     0,
       27,     0,     0,     0,     0,     0,     0,    28,     0,     0,
        0,     0,     0,     0,    29,    30,    31,    32,    33,     0,
-       0,     0,    35,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,    35,    36,     0,     0,     0,     0,     0,     0,
       37,    38,     0,     0,     0,     0,    39,     2,     0,    40,
-       3,     4,     5,     0,     7,     8,    63,    10,     0,    11,
-       0,     0,     0,    14,     0,     0,     0,     0,     0,     0,
-       0,     0,    79,     0,    80,    81,    82,    83,    64,     0,
-      22,     0,     0,     2,     0,     0,     3,     4,     5,     0,
-       7,     8,    63,    10,     0,    11,     0,     0,    28,    14,
+       3,     4,     5,     6,     7,     8,     9,    10,     0,    11,
+     309,    12,     0,    14,     0,     0,     0,    15,    16,    17,
+      18,     0,     0,     0,     0,     0,     0,     0,    20,    21,
+      22,     0,     0,    23,     0,     0,     0,     0,    25,    26,
+       0,    27,     0,     0,     0,     0,     0,     0,    28,     0,
        0,     0,     0,     0,     0,    29,    30,    31,    32,    33,
-      80,     0,    82,     0,    64,     0,    22,     0,     0,     0,
-       0,    37,    38,     0,     0,     0,    97,    39,     0,     0,
-      40,     0,     0,     0,    28,     0,     0,     0,     0,     0,
-       0,    29,    30,    31,    32,    33,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    37,    38,     0,
-       0,     0,     0,    39,     2,     0,    40,     3,     4,     5,
-       0,     7,     8,    63,    10,     0,    11,     0,     0,     0,
-      14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    64,     0,    22,     2,     0,
-       0,     3,     4,     5,     0,     7,     8,    63,    10,     0,
-      11,     0,     0,     0,    14,    28,     0,     0,     0,     0,
-       0,     0,    29,    30,    31,    32,    33,     0,     0,    64,
-       0,    22,     0,     0,     0,     0,     0,     0,    37,    38,
-       0,     0,     0,     0,    39,     0,     0,    40,     0,    28,
+       0,     0,    34,    35,     0,     0,     0,     0,     0,     0,
+       0,    37,    38,     0,     0,     0,   277,    39,     2,     0,
+      40,     3,     4,     5,     6,     7,     8,     9,    10,     0,
+      11,     0,    12,     0,    14,     0,     0,     0,    15,    16,
+      17,    18,     0,     0,     0,     0,     0,     0,     0,    20,
+      21,    22,     0,     0,    23,     0,     0,     0,     0,    25,
+      26,     0,    27,     0,     0,     0,     0,     0,     0,    28,
+       0,     0,     0,     0,     0,     0,    29,    30,    31,    32,
+      33,     0,     0,    34,    35,     0,     0,     0,     0,     0,
+       0,     0,    37,    38,     0,     0,     0,   277,    39,     2,
+       0,    40,     3,     4,     5,     6,     7,     8,     9,    10,
+       0,    11,     0,    12,     0,    14,     0,     0,     0,    15,
+      16,    17,    18,     0,     0,     0,     0,     0,     0,     0,
+      20,     0,    22,     0,     0,     0,     0,     0,     0,     0,
+      25,    26,     0,    27,     0,     0,     0,     0,     0,     0,
+      28,     0,     0,     0,     0,     0,     0,    29,    30,    31,
+      32,    33,     0,     0,     0,    35,     0,     0,     0,     0,
+       0,     0,     0,    37,    38,     0,     0,     0,     0,    39,
+       2,     0,    40,     3,     4,     5,     6,     7,     8,     9,
+      10,     0,    11,     0,    12,     0,    14,     0,     0,     0,
+      15,    16,    17,     0,     0,     0,     0,     0,     0,     0,
+       0,    20,     0,    22,     0,     0,     0,     0,     0,     0,
+       0,    25,    26,     0,    27,     0,     0,     0,     0,     0,
+       0,    28,     0,     0,     0,     0,     0,     0,    29,    30,
+      31,    32,    33,     0,     0,     0,    35,     0,     0,     0,
+       0,     0,     0,     0,    37,    38,     0,     0,     0,     0,
+      39,     2,     0,    40,     3,     4,     5,     0,     7,     8,
+      62,    10,     0,    11,     0,     0,     0,    14,     0,     0,
+       0,     0,     0,     0,     0,     0,    78,     0,    79,    80,
+      81,    82,    63,     0,    22,     0,     0,     2,     0,     0,
+       3,     4,     5,     0,     7,     8,    62,    10,     0,    11,
+       0,     0,    28,    14,     0,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,    79,     0,    81,     0,    63,     0,
+      22,     0,     0,     0,     0,    37,    38,     0,     0,     0,
+      96,    39,     0,     0,    40,     0,     0,     0,    28,     0,
+       0,     0,     0,     0,     0,    29,    30,    31,    32,    33,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    37,    38,     0,     0,     0,     0,    39,     2,     0,
+      40,     3,     4,     5,     0,     7,     8,    62,    10,     0,
+      11,     0,     0,     0,    14,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    63,
+       0,    22,     2,     0,     0,     3,     4,     5,     0,     7,
+       8,    62,    10,     0,    11,     0,     0,     0,    14,    28,
        0,     0,     0,     0,     0,     0,    29,    30,    31,    32,
-      33,   165,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    37,    38,     0,     0,     0,    80,    71,    82,
-       0,    40,   134,   135,   136,   137,   138,   139,     0,   140,
-     166,   167,   141,   142,   143,   134,   135,   136,   137,   138,
-     139,     0,   140,     0,     0,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,     0,     0,     0,     0,     0,
-       0,   144,   145,   146,   147,   148,   149,   150,   179,     0,
-       0,     0,     0,     0,   180,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   134,   135,   136,   137,   138,   139,
-       0,   140,     0,     0,   141,   142,   143,     0,     0,     0,
-       0,   181,     0,     0,     0,     0,     0,   182,     0,     0,
-     144,   145,   146,   147,   148,   149,   150,   134,   135,   136,
-     137,   138,   139,     0,   140,     0,     0,   141,   142,   143,
-       0,     0,     0,     0,   183,     0,     0,     0,     0,     0,
-     184,     0,     0,   144,   145,   146,   147,   148,   149,   150,
-     134,   135,   136,   137,   138,   139,     0,   140,     0,     0,
-     141,   142,   143,     0,     0,     0,     0,   185,     0,     0,
-       0,     0,     0,   186,     0,     0,   144,   145,   146,   147,
-     148,   149,   150,   134,   135,   136,   137,   138,   139,     0,
-     140,     0,     0,   141,   142,   143,     0,     0,     0,     0,
-     272,     0,     0,     0,     0,     0,     0,     0,     0,   144,
-     145,   146,   147,   148,   149,   150,   134,   135,   136,   137,
-     138,   139,     0,   140,     0,     0,   141,   142,   143,     0,
-       0,     0,     0,   273,     0,     0,     0,     0,     0,     0,
-       0,     0,   144,   145,   146,   147,   148,   149,   150,   134,
-     135,   136,   137,   138,   139,     0,   140,     0,     0,   141,
-     142,   143,     0,     0,     0,     0,   274,     0,     0,     0,
-       0,     0,     0,     0,     0,   144,   145,   146,   147,   148,
-     149,   150,   134,   135,   136,   137,   138,   139,     0,   140,
-       0,     0,   141,   142,   143,     0,     0,     0,     0,   275,
-       0,     0,     0,     0,     0,     0,     0,     0,   144,   145,
-     146,   147,   148,   149,   150,   134,   135,   136,   137,   138,
-     139,     0,   140,     0,     0,   141,   142,   143,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   202,     0,
-       0,   144,   145,   146,   147,   148,   149,   150,   134,   135,
-     136,   137,   138,   139,     0,   140,     0,     0,   141,   142,
-     143,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   144,   145,   146,   147,   148,   149,
-     150,   176,   203,     0,     0,     0,     0,     0,     0,   134,
-     135,   136,   137,   138,   139,     0,   140,     0,     0,   141,
-     142,   143,   134,   135,   136,   137,   138,   139,     0,   140,
-       0,     0,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,     0,     0,     0,     0,     0,     0,   144,   145,
-     146,   147,   148,   149,   150,     0,     0,     0,   190,   134,
-     135,   136,   137,   138,   139,     0,   140,     0,     0,   141,
-     142,   143,     0,     0,     0,     0,     0,   187,   188,     0,
-       0,     0,     0,     0,     0,   144,   145,   146,   147,   148,
-     149,   150,   134,   135,   136,   137,   138,   139,     0,   140,
-       0,     0,   141,   142,   143,   134,   135,   136,   137,     0,
-       0,     0,   140,     0,     0,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,     0,     0,     0,     0,     0,
-       0,   144,   145,   146,   147,   148,   149,   150
+      33,     0,     0,    63,     0,    22,     0,     0,     0,     0,
+       0,     0,    37,    38,     0,     0,     0,     0,    39,     0,
+       0,    40,     0,    28,     0,     0,     0,     0,     0,     0,
+      29,    30,    31,    32,    33,   164,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
+       0,    79,    70,    81,     0,    40,   133,   134,   135,   136,
+     137,   138,     0,   139,   165,   166,   140,   141,   142,   133,
+     134,   135,   136,   137,   138,     0,   139,     0,     0,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,     0,
+       0,     0,     0,     0,     0,   143,   144,   145,   146,   147,
+     148,   149,   178,     0,     0,     0,     0,     0,   179,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   133,   134,
+     135,   136,   137,   138,     0,   139,     0,     0,   140,   141,
+     142,     0,     0,     0,     0,   180,     0,     0,     0,     0,
+       0,   181,     0,     0,   143,   144,   145,   146,   147,   148,
+     149,   133,   134,   135,   136,   137,   138,     0,   139,     0,
+       0,   140,   141,   142,     0,     0,     0,     0,   182,     0,
+       0,     0,     0,     0,   183,     0,     0,   143,   144,   145,
+     146,   147,   148,   149,   133,   134,   135,   136,   137,   138,
+       0,   139,     0,     0,   140,   141,   142,     0,     0,     0,
+       0,   184,     0,     0,     0,     0,     0,   185,     0,     0,
+     143,   144,   145,   146,   147,   148,   149,   133,   134,   135,
+     136,   137,   138,     0,   139,     0,     0,   140,   141,   142,
+       0,     0,     0,     0,   271,     0,     0,     0,     0,     0,
+       0,     0,     0,   143,   144,   145,   146,   147,   148,   149,
+     133,   134,   135,   136,   137,   138,     0,   139,     0,     0,
+     140,   141,   142,     0,     0,     0,     0,   272,     0,     0,
+       0,     0,     0,     0,     0,     0,   143,   144,   145,   146,
+     147,   148,   149,   133,   134,   135,   136,   137,   138,     0,
+     139,     0,     0,   140,   141,   142,     0,     0,     0,     0,
+     273,     0,     0,     0,     0,     0,     0,     0,     0,   143,
+     144,   145,   146,   147,   148,   149,   133,   134,   135,   136,
+     137,   138,     0,   139,     0,     0,   140,   141,   142,     0,
+       0,     0,     0,   274,     0,     0,     0,     0,     0,     0,
+       0,     0,   143,   144,   145,   146,   147,   148,   149,   133,
+     134,   135,   136,   137,   138,     0,   139,     0,     0,   140,
+     141,   142,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   188,     0,     0,   143,   144,   145,   146,   147,
+     148,   149,   133,   134,   135,   136,   137,   138,     0,   139,
+       0,     0,   140,   141,   142,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   143,   144,
+     145,   146,   147,   148,   149,   175,   189,     0,     0,     0,
+       0,     0,     0,   133,   134,   135,   136,   137,   138,     0,
+     139,     0,     0,   140,   141,   142,   133,   134,   135,   136,
+     137,   138,     0,   139,     0,     0,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,     0,     0,     0,     0,
+       0,     0,   143,   144,   145,   146,   147,   148,   149,     0,
+       0,     0,   191,   133,   134,   135,   136,   137,   138,     0,
+     139,     0,     0,   140,   141,   142,     0,     0,     0,     0,
+       0,   186,   187,     0,     0,     0,     0,     0,     0,   143,
+     144,   145,   146,   147,   148,   149,   133,   134,   135,   136,
+     137,   138,     0,   139,     0,     0,   140,   141,   142,   133,
+     134,   135,   136,     0,     0,     0,   139,     0,     0,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,     0,
+       0,     0,     0,     0,     0,   143,   144,   145,   146,   147,
+     148,   149
 };
 
 static const yytype_int16 yycheck[] =
 {
-       4,    75,     6,     7,     0,     9,     0,    30,     8,    91,
-     159,   282,   268,    17,    49,    50,    20,     6,     7,    29,
-      91,    25,    26,    94,    28,    29,    30,    31,    32,    33,
-      47,    64,   288,    37,    38,    39,    26,    47,    47,    64,
-      40,    47,    59,    47,    21,    49,    50,    51,    93,    94,
-      59,   126,   127,    59,   325,    88,    89,    80,    20,    21,
-      64,    86,    87,    88,    89,    91,    44,    71,    94,    12,
-      74,    22,    91,    24,    17,    94,    80,    12,    21,    22,
-     229,    24,    17,    30,    31,    74,    21,    22,    21,    24,
-     164,    91,    21,    21,    84,    64,    21,    91,    67,    15,
-      16,    21,    21,    59,    92,    21,    21,    94,    98,    94,
-      94,    47,    28,    39,    46,   203,    85,    86,    87,    88,
-      89,   125,    94,   198,    94,   129,   201,   123,    94,    97,
+       4,    74,     6,     7,     0,     9,     0,     8,    26,   252,
+      30,    47,   158,    17,    91,   267,    20,    64,    49,    50,
+      44,    25,    26,    59,    28,    29,    30,    31,    32,    33,
+      34,     6,     7,    37,    38,    39,   288,   126,   127,    40,
+     283,    88,    89,    47,    29,    49,    50,    91,    15,    16,
+      94,    21,    47,    91,    21,    47,    94,    20,    21,    63,
+      80,    28,    47,    21,    59,    83,    70,    59,    12,    73,
+      22,    64,    24,    17,    67,    79,    12,    21,    22,    97,
+      24,    17,   228,    64,   327,    21,    22,    21,    24,    90,
+     163,    21,    85,    86,    87,    88,    89,    91,    73,    21,
+      91,    30,    31,    94,    21,    86,    87,    88,    89,    21,
+     199,    93,    94,   202,    59,    92,    94,    21,    94,    39,
+      94,   125,    47,    46,    97,   129,    94,   123,    94,   133,
      134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,    97,   152,    21,
-     154,    96,    95,   157,    97,    94,    21,    21,   162,    21,
-      95,    46,   166,   167,    46,   169,   170,    94,   172,   173,
-     174,    21,   176,    81,   262,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   260,    47,    82,    21,    21,
-     265,   191,   192,    80,   194,    94,    21,   285,   202,   287,
-      81,    81,    46,    80,    80,   123,   281,    50,   165,    50,
-      50,    -1,   195,    -1,   302,    -1,   304,    -1,    -1,    -1,
-     295,   309,   297,    -1,    -1,    -1,    -1,    -1,   303,    -1,
-     305,    -1,   236,   237,   322,   310,    -1,   311,    -1,    -1,
-      -1,    -1,   316,    -1,    -1,   320,    -1,   335,   323,    -1,
-      -1,    -1,    -1,    -1,   329,    -1,   331,    -1,    -1,    -1,
-      -1,    -1,    -1,   338,    -1,    -1,    -1,    -1,   272,   273,
-     274,   275,    -1,    -1,    -1,    -1,   280,    -1,    -1,     0,
-       1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     294,    12,    -1,    -1,    15,    16,    17,    18,    19,    20,
-      21,    22,    -1,    24,    -1,    26,    27,    28,    -1,    -1,
-     314,    32,    33,    34,    35,    -1,    -1,    38,    -1,    -1,
-      -1,    -1,    43,    44,    45,    -1,    -1,    48,    -1,    -1,
-      -1,    52,    53,    54,    -1,    56,    -1,    -1,    -1,    -1,
-      -1,    -1,    63,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-      71,    72,    73,    74,    -1,    -1,    77,    78,    79,    -1,
-      -1,    -1,    -1,    -1,    -1,    86,    87,    -1,    -1,    -1,
-      91,    92,    12,    -1,    95,    15,    16,    17,    18,    19,
-      20,    21,    22,    -1,    24,    -1,    26,    27,    28,    -1,
-      -1,    -1,    32,    33,    34,    35,    -1,    -1,    38,    -1,
-      -1,    -1,    -1,    43,    44,    45,    -1,    -1,    48,    -1,
-      -1,    -1,    52,    53,    54,    -1,    56,    -1,    -1,    -1,
-      -1,    -1,    -1,    63,    -1,    -1,    -1,    -1,    -1,    -1,
-      70,    71,    72,    73,    74,    -1,    -1,    77,    78,    79,
-      -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    -1,    -1,
-      -1,    -1,    92,    12,    -1,    95,    15,    16,    17,    18,
-      19,    20,    21,    22,    -1,    24,    25,    26,    -1,    28,
-      -1,    -1,    -1,    32,    33,    34,    35,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    43,    44,    45,    -1,    -1,    48,
-      -1,    -1,    -1,    -1,    53,    54,    -1,    56,    -1,    -1,
-      -1,    -1,    -1,    -1,    63,    -1,    -1,    -1,    -1,    -1,
-      -1,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    -1,
-      -1,    -1,    91,    92,    12,    -1,    95,    15,    16,    17,
-      18,    19,    20,    21,    22,    -1,    24,    -1,    26,    -1,
-      28,    -1,    -1,    -1,    32,    33,    34,    35,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    43,    44,    45,    -1,    -1,
-      48,    -1,    -1,    -1,    -1,    53,    54,    -1,    56,    -1,
-      -1,    -1,    -1,    -1,    -1,    63,    -1,    -1,    -1,    -1,
-      -1,    -1,    70,    71,    72,    73,    74,    -1,    -1,    77,
-      78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,
-      -1,    -1,    -1,    91,    92,    12,    -1,    95,    15,    16,
+     144,   145,   146,   147,   148,   149,    97,   151,    96,   153,
+      21,    95,   156,    97,    94,    94,    21,   161,    21,    95,
+      21,   165,   166,    46,   168,   169,    46,   171,   172,   173,
+      94,   175,   261,    21,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,    81,    47,   275,   276,   253,    21,
+      82,   192,   193,   282,   195,    21,    80,    21,   263,    94,
+      81,    46,    81,    80,    80,   123,   189,    50,   297,   164,
+     299,    50,    50,    -1,    -1,    -1,   305,   196,   307,    -1,
+     285,    -1,   287,   312,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   235,   236,   322,    -1,    -1,   325,    -1,   303,    -1,
+     313,   306,   331,    -1,   333,   318,   311,    -1,    -1,    -1,
+      -1,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   324,
+      -1,    -1,    -1,     0,     1,    -1,    -1,   271,   272,   273,
+     274,    -1,   337,    -1,    -1,    12,    -1,   281,    15,    16,
       17,    18,    19,    20,    21,    22,    -1,    24,    -1,    26,
-      -1,    28,    -1,    -1,    -1,    32,    33,    34,    35,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    43,    -1,    45,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    53,    54,    -1,    56,
+      27,    28,   296,    -1,    -1,    32,    33,    34,    35,    -1,
+      -1,    38,    -1,    -1,    -1,    -1,    43,    44,    45,    -1,
+      -1,    48,   316,    -1,    -1,    52,    53,    54,    -1,    56,
       -1,    -1,    -1,    -1,    -1,    -1,    63,    -1,    -1,    -1,
       -1,    -1,    -1,    70,    71,    72,    73,    74,    -1,    -1,
-      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
-      87,    -1,    -1,    -1,    -1,    92,    12,    -1,    95,    15,
+      77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    86,
+      87,    -1,    -1,    -1,    91,    92,    12,    -1,    95,    15,
       16,    17,    18,    19,    20,    21,    22,    -1,    24,    -1,
-      26,    -1,    28,    -1,    -1,    -1,    32,    33,    34,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    43,    -1,    45,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,    54,    -1,
+      26,    27,    28,    -1,    -1,    -1,    32,    33,    34,    35,
+      -1,    -1,    38,    -1,    -1,    -1,    -1,    43,    44,    45,
+      -1,    -1,    48,    -1,    -1,    -1,    52,    53,    54,    -1,
       56,    -1,    -1,    -1,    -1,    -1,    -1,    63,    -1,    -1,
       -1,    -1,    -1,    -1,    70,    71,    72,    73,    74,    -1,
-      -1,    -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
       86,    87,    -1,    -1,    -1,    -1,    92,    12,    -1,    95,
+      15,    16,    17,    18,    19,    20,    21,    22,    -1,    24,
+      25,    26,    -1,    28,    -1,    -1,    -1,    32,    33,    34,
+      35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    43,    44,
+      45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    53,    54,
+      -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    63,    -1,
+      -1,    -1,    -1,    -1,    -1,    70,    71,    72,    73,    74,
+      -1,    -1,    77,    78,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    86,    87,    -1,    -1,    -1,    91,    92,    12,    -1,
+      95,    15,    16,    17,    18,    19,    20,    21,    22,    -1,
+      24,    -1,    26,    -1,    28,    -1,    -1,    -1,    32,    33,
+      34,    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    43,
+      44,    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    53,
+      54,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    63,
+      -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,    73,
+      74,    -1,    -1,    77,    78,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    86,    87,    -1,    -1,    -1,    91,    92,    12,
+      -1,    95,    15,    16,    17,    18,    19,    20,    21,    22,
+      -1,    24,    -1,    26,    -1,    28,    -1,    -1,    -1,    32,
+      33,    34,    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      43,    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      53,    54,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,
+      63,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
+      73,    74,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,
+      12,    -1,    95,    15,    16,    17,    18,    19,    20,    21,
+      22,    -1,    24,    -1,    26,    -1,    28,    -1,    -1,    -1,
+      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    43,    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    53,    54,    -1,    56,    -1,    -1,    -1,    -1,    -1,
+      -1,    63,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,
+      72,    73,    74,    -1,    -1,    -1,    78,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    86,    87,    -1,    -1,    -1,    -1,
+      92,    12,    -1,    95,    15,    16,    17,    -1,    19,    20,
+      21,    22,    -1,    24,    -1,    -1,    -1,    28,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    37,    -1,    39,    40,
+      41,    42,    43,    -1,    45,    -1,    -1,    12,    -1,    -1,
       15,    16,    17,    -1,    19,    20,    21,    22,    -1,    24,
-      -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    37,    -1,    39,    40,    41,    42,    43,    -1,
-      45,    -1,    -1,    12,    -1,    -1,    15,    16,    17,    -1,
-      19,    20,    21,    22,    -1,    24,    -1,    -1,    63,    28,
+      -1,    -1,    63,    28,    -1,    -1,    -1,    -1,    -1,    70,
+      71,    72,    73,    74,    39,    -1,    41,    -1,    43,    -1,
+      45,    -1,    -1,    -1,    -1,    86,    87,    -1,    -1,    -1,
+      55,    92,    -1,    -1,    95,    -1,    -1,    -1,    63,    -1,
       -1,    -1,    -1,    -1,    -1,    70,    71,    72,    73,    74,
-      39,    -1,    41,    -1,    43,    -1,    45,    -1,    -1,    -1,
-      -1,    86,    87,    -1,    -1,    -1,    55,    92,    -1,    -1,
-      95,    -1,    -1,    -1,    63,    -1,    -1,    -1,    -1,    -1,
-      -1,    70,    71,    72,    73,    74,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    -1,
-      -1,    -1,    -1,    92,    12,    -1,    95,    15,    16,    17,
-      -1,    19,    20,    21,    22,    -1,    24,    -1,    -1,    -1,
-      28,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    43,    -1,    45,    12,    -1,
-      -1,    15,    16,    17,    -1,    19,    20,    21,    22,    -1,
-      24,    -1,    -1,    -1,    28,    63,    -1,    -1,    -1,    -1,
-      -1,    -1,    70,    71,    72,    73,    74,    -1,    -1,    43,
-      -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,
-      -1,    -1,    -1,    -1,    92,    -1,    -1,    95,    -1,    63,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    92,    12,    -1,
+      95,    15,    16,    17,    -1,    19,    20,    21,    22,    -1,
+      24,    -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    43,
+      -1,    45,    12,    -1,    -1,    15,    16,    17,    -1,    19,
+      20,    21,    22,    -1,    24,    -1,    -1,    -1,    28,    63,
       -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,    73,
-      74,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    86,    87,    -1,    -1,    -1,    39,    92,    41,
-      -1,    95,    57,    58,    59,    60,    61,    62,    -1,    64,
-      65,    66,    67,    68,    69,    57,    58,    59,    60,    61,
-      62,    -1,    64,    -1,    -1,    67,    68,    69,    83,    84,
-      85,    86,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,
-      -1,    83,    84,    85,    86,    87,    88,    89,    41,    -1,
-      -1,    -1,    -1,    -1,    47,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    57,    58,    59,    60,    61,    62,
+      74,    -1,    -1,    43,    -1,    45,    -1,    -1,    -1,    -1,
+      -1,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,
+      -1,    95,    -1,    63,    -1,    -1,    -1,    -1,    -1,    -1,
+      70,    71,    72,    73,    74,    36,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    -1,    -1,
+      -1,    39,    92,    41,    -1,    95,    57,    58,    59,    60,
+      61,    62,    -1,    64,    65,    66,    67,    68,    69,    57,
+      58,    59,    60,    61,    62,    -1,    64,    -1,    -1,    67,
+      68,    69,    83,    84,    85,    86,    87,    88,    89,    -1,
+      -1,    -1,    -1,    -1,    -1,    83,    84,    85,    86,    87,
+      88,    89,    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    58,
+      59,    60,    61,    62,    -1,    64,    -1,    -1,    67,    68,
+      69,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,
+      -1,    47,    -1,    -1,    83,    84,    85,    86,    87,    88,
+      89,    57,    58,    59,    60,    61,    62,    -1,    64,    -1,
+      -1,    67,    68,    69,    -1,    -1,    -1,    -1,    41,    -1,
+      -1,    -1,    -1,    -1,    47,    -1,    -1,    83,    84,    85,
+      86,    87,    88,    89,    57,    58,    59,    60,    61,    62,
       -1,    64,    -1,    -1,    67,    68,    69,    -1,    -1,    -1,
       -1,    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,    -1,
       83,    84,    85,    86,    87,    88,    89,    57,    58,    59,
       60,    61,    62,    -1,    64,    -1,    -1,    67,    68,    69,
       -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,
-      47,    -1,    -1,    83,    84,    85,    86,    87,    88,    89,
+      -1,    -1,    -1,    83,    84,    85,    86,    87,    88,    89,
       57,    58,    59,    60,    61,    62,    -1,    64,    -1,    -1,
       67,    68,    69,    -1,    -1,    -1,    -1,    41,    -1,    -1,
-      -1,    -1,    -1,    47,    -1,    -1,    83,    84,    85,    86,
+      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    85,    86,
       87,    88,    89,    57,    58,    59,    60,    61,    62,    -1,
       64,    -1,    -1,    67,    68,    69,    -1,    -1,    -1,    -1,
       41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,
@@ -1095,32 +1100,26 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    83,    84,    85,    86,    87,    88,    89,    57,
       58,    59,    60,    61,    62,    -1,    64,    -1,    -1,    67,
-      68,    69,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    83,    84,    85,    86,    87,
+      68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    47,    -1,    -1,    83,    84,    85,    86,    87,
       88,    89,    57,    58,    59,    60,    61,    62,    -1,    64,
-      -1,    -1,    67,    68,    69,    -1,    -1,    -1,    -1,    41,
+      -1,    -1,    67,    68,    69,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    84,
-      85,    86,    87,    88,    89,    57,    58,    59,    60,    61,
-      62,    -1,    64,    -1,    -1,    67,    68,    69,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    47,    -1,
-      -1,    83,    84,    85,    86,    87,    88,    89,    57,    58,
-      59,    60,    61,    62,    -1,    64,    -1,    -1,    67,    68,
-      69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    83,    84,    85,    86,    87,    88,
-      89,    49,    91,    -1,    -1,    -1,    -1,    -1,    -1,    57,
-      58,    59,    60,    61,    62,    -1,    64,    -1,    -1,    67,
-      68,    69,    57,    58,    59,    60,    61,    62,    -1,    64,
-      -1,    -1,    67,    68,    69,    83,    84,    85,    86,    87,
-      88,    89,    -1,    -1,    -1,    -1,    -1,    -1,    83,    84,
-      85,    86,    87,    88,    89,    -1,    -1,    -1,    93,    57,
-      58,    59,    60,    61,    62,    -1,    64,    -1,    -1,    67,
-      68,    69,    -1,    -1,    -1,    -1,    -1,    75,    76,    -1,
+      85,    86,    87,    88,    89,    49,    91,    -1,    -1,    -1,
+      -1,    -1,    -1,    57,    58,    59,    60,    61,    62,    -1,
+      64,    -1,    -1,    67,    68,    69,    57,    58,    59,    60,
+      61,    62,    -1,    64,    -1,    -1,    67,    68,    69,    83,
+      84,    85,    86,    87,    88,    89,    -1,    -1,    -1,    -1,
+      -1,    -1,    83,    84,    85,    86,    87,    88,    89,    -1,
+      -1,    -1,    93,    57,    58,    59,    60,    61,    62,    -1,
+      64,    -1,    -1,    67,    68,    69,    -1,    -1,    -1,    -1,
+      -1,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,
+      84,    85,    86,    87,    88,    89,    57,    58,    59,    60,
+      61,    62,    -1,    64,    -1,    -1,    67,    68,    69,    57,
+      58,    59,    60,    -1,    -1,    -1,    64,    -1,    -1,    67,
+      68,    69,    83,    84,    85,    86,    87,    88,    89,    -1,
       -1,    -1,    -1,    -1,    -1,    83,    84,    85,    86,    87,
-      88,    89,    57,    58,    59,    60,    61,    62,    -1,    64,
-      -1,    -1,    67,    68,    69,    57,    58,    59,    60,    -1,
-      -1,    -1,    64,    -1,    -1,    67,    68,    69,    83,    84,
-      85,    86,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,
-      -1,    83,    84,    85,    86,    87,    88,    89
+      88,    89
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1131,37 +1130,37 @@ static const yytype_uint8 yystos[] =
       22,    24,    26,    27,    28,    32,    33,    34,    35,    38,
       43,    44,    45,    48,    52,    53,    54,    56,    63,    70,
       71,    72,    73,    74,    77,    78,    79,    86,    87,    92,
-      95,    99,   100,   101,   102,   104,   105,   109,   110,   111,
-     116,   117,   118,   119,   120,   121,   125,   127,   129,   132,
-     136,   139,    91,    21,    43,   119,   119,   137,   137,    21,
-     118,    92,   119,   138,   128,   131,    44,    21,   122,    37,
-      39,    40,    41,    42,   119,   126,    21,   119,    49,    50,
-      15,    16,    21,    28,    21,    21,   119,    55,   119,   126,
-      21,   124,   119,   119,   119,   119,   119,   119,    21,   123,
+      95,    99,   100,   101,   102,   104,   106,   110,   111,   112,
+     117,   118,   119,   120,   121,   125,   127,   129,   132,   136,
+     139,    91,    21,    43,   119,   119,   137,   137,    21,   118,
+      92,   119,   138,   128,   131,    44,    21,   122,    37,    39,
+      40,    41,    42,   119,   126,    21,   119,    49,    50,    15,
+      16,    21,    28,    21,    21,   119,    55,   119,   126,    21,
+     124,   119,   119,   119,   119,   119,   119,   119,    21,   123,
       21,   119,   119,   119,    22,    24,    97,   118,   140,   141,
-     142,   143,     0,    91,   119,    59,   119,   103,   108,   111,
-     119,   121,   136,   119,    57,    58,    59,    60,    61,    62,
-      64,    67,    68,    69,    83,    84,    85,    86,    87,    88,
-      89,   113,    92,   119,    94,   119,   137,    94,   137,   113,
-      94,   119,    39,   126,   130,    36,    65,    66,    21,    47,
-      59,   118,    47,    59,    47,    46,    49,   126,    94,    41,
-      47,    41,    47,    41,    47,    41,    47,    75,    76,    94,
-      93,    97,    97,    96,    94,    94,   100,   114,   119,   114,
-     114,   119,    47,    91,   119,   119,   119,   119,   119,   119,
+     142,   143,     0,    91,   119,    59,   119,   103,   109,   112,
+     119,   121,   136,    57,    58,    59,    60,    61,    62,    64,
+      67,    68,    69,    83,    84,    85,    86,    87,    88,    89,
+     114,    92,   119,    94,   119,   137,    94,   137,   114,    94,
+     119,    39,   126,   130,    36,    65,    66,    21,    47,    59,
+     118,    47,    59,    47,    46,    49,   126,    94,    41,    47,
+      41,    47,    41,    47,    41,    47,    75,    76,    47,    91,
+      94,    93,    97,    97,    96,    94,    94,   100,   115,   119,
+     115,   115,   119,   119,   119,   119,   119,   119,   119,   119,
      119,   119,   119,   119,   119,   119,   119,   119,   119,   119,
-     119,    21,   133,   119,    93,   119,   133,    21,   119,   113,
-      21,   120,   119,   119,   119,   119,    47,    59,   119,   119,
-     119,   119,    21,   119,   119,   119,   119,   119,   119,   119,
-     119,   119,   119,    21,   118,   118,   118,    22,    24,   143,
-     115,   114,    46,   114,   119,   115,    91,    94,    91,   133,
-     119,   119,    41,    41,    41,    41,    91,   104,   114,    29,
-      47,   115,    46,   114,    94,   135,    21,   135,    91,   119,
-     119,   119,   119,    81,    47,   119,   114,   102,    82,    21,
-     115,   115,   135,   119,   114,   106,   114,    25,   115,   114,
-     115,    30,    31,   107,   112,   114,    30,    80,    21,   134,
-     115,   114,   113,   119,    80,   113,    94,   114,    81,   115,
-     114,   102,    21,    81,   114,    46,   114,    80,   115,    80,
-     114
+      21,   133,   119,    93,   119,   133,    21,   119,   114,    21,
+     120,   119,   119,   119,   119,    47,    59,   119,   119,   119,
+     119,    21,   119,   119,   119,   119,   119,   119,   119,   119,
+     119,   119,   105,   105,    21,   118,   118,   118,    22,    24,
+     143,   116,   115,    46,   115,    91,    94,    91,   133,   119,
+     119,    41,    41,    41,    41,   102,   116,    91,   104,   115,
+      29,    47,   116,    46,    94,   135,    21,   135,    91,   119,
+     119,   119,   119,   115,   115,    81,    47,   119,   115,   102,
+      21,   116,   116,   135,    82,   119,   115,   107,   115,    25,
+     116,   115,   116,    30,    31,   108,   113,   115,    30,    80,
+      21,   134,   116,   115,   114,   119,    80,   114,    94,   115,
+      81,   116,   115,   102,    21,    81,   115,    46,   115,    80,
+     116,    80,   115
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1170,8 +1169,8 @@ static const yytype_uint8 yyr1[] =
        0,    98,    99,    99,    99,   100,   100,   100,   101,   101,
      101,   101,   101,   101,   101,   101,   101,   101,   101,   102,
      102,   102,   103,   103,   103,   103,   104,   104,   104,   104,
-     104,   104,   104,   104,   105,   105,   106,   106,   107,   108,
-     108,   109,   110,   111,   112,   113,   114,   115,   115,   115,
+     104,   104,   104,   104,   105,   106,   106,   107,   107,   108,
+     109,   109,   110,   111,   112,   113,   114,   115,   116,   116,
      116,   117,   118,   118,   118,   118,   118,   118,   119,   119,
      119,   119,   119,   119,   119,   119,   119,   119,   119,   119,
      119,   119,   119,   119,   119,   119,   119,   119,   119,   119,
@@ -1192,9 +1191,9 @@ static const yytype_int8 yyr2[] =
        0,     2,     3,     1,     2,     0,     1,     1,     4,     4,
        4,     4,     4,     4,     4,     4,     5,     5,     4,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     6,    10,
-      11,     3,     6,     4,     9,    12,     0,     2,     6,    11,
-       7,     2,     3,     1,     1,     0,     0,     0,     2,     2,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+      11,     3,     7,     6,     0,     9,    12,     0,     2,     6,
+      11,     7,     2,     3,     1,     1,     0,     0,     0,     2,
+       2,     3,     1,     1,     1,     1,     1,     1,     1,     1,
        2,     4,     1,     2,     1,     1,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     2,
        3,     3,     3,     3,     2,     2,     3,     4,     4,     4,
@@ -1643,73 +1642,73 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
     case 18: /* BLTIN  */
 #line 130 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1647 "engines/director/lingo/lingo-gr.cpp"
+#line 1646 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 19: /* FBLTIN  */
 #line 130 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1653 "engines/director/lingo/lingo-gr.cpp"
+#line 1652 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 20: /* RBLTIN  */
 #line 130 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1659 "engines/director/lingo/lingo-gr.cpp"
+#line 1658 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 21: /* ID  */
 #line 130 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1665 "engines/director/lingo/lingo-gr.cpp"
+#line 1664 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 22: /* STRING  */
 #line 130 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1671 "engines/director/lingo/lingo-gr.cpp"
+#line 1670 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 23: /* HANDLER  */
 #line 130 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1677 "engines/director/lingo/lingo-gr.cpp"
+#line 1676 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 24: /* SYMBOL  */
 #line 130 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1683 "engines/director/lingo/lingo-gr.cpp"
+#line 1682 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 25: /* ENDCLAUSE  */
 #line 130 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1689 "engines/director/lingo/lingo-gr.cpp"
+#line 1688 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 26: /* tPLAYACCEL  */
 #line 130 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1695 "engines/director/lingo/lingo-gr.cpp"
+#line 1694 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 27: /* tMETHOD  */
 #line 130 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1701 "engines/director/lingo/lingo-gr.cpp"
+#line 1700 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 28: /* THEOBJECTFIELD  */
 #line 131 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).objectfield).os; }
-#line 1707 "engines/director/lingo/lingo-gr.cpp"
+#line 1706 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 132: /* on  */
 #line 130 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1713 "engines/director/lingo/lingo-gr.cpp"
+#line 1712 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -1979,7 +1978,7 @@ yyreduce:
   case 4:
 #line 137 "engines/director/lingo/lingo-gr.y"
                                 { yyerrok; }
-#line 1983 "engines/director/lingo/lingo-gr.cpp"
+#line 1982 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 8:
@@ -1990,7 +1989,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 1994 "engines/director/lingo/lingo-gr.cpp"
+#line 1993 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 9:
@@ -1998,19 +1997,19 @@ yyreduce:
                                                 {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2002 "engines/director/lingo/lingo-gr.cpp"
+#line 2001 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10:
 #line 154 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2008 "engines/director/lingo/lingo-gr.cpp"
+#line 2007 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11:
 #line 155 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2014 "engines/director/lingo/lingo-gr.cpp"
+#line 2013 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12:
@@ -2021,7 +2020,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2025 "engines/director/lingo/lingo-gr.cpp"
+#line 2024 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13:
@@ -2033,7 +2032,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2037 "engines/director/lingo/lingo-gr.cpp"
+#line 2036 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 14:
@@ -2044,7 +2043,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2048 "engines/director/lingo/lingo-gr.cpp"
+#line 2047 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15:
@@ -2056,7 +2055,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2060 "engines/director/lingo/lingo-gr.cpp"
+#line 2059 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16:
@@ -2067,7 +2066,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2071 "engines/director/lingo/lingo-gr.cpp"
+#line 2070 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17:
@@ -2078,7 +2077,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2082 "engines/director/lingo/lingo-gr.cpp"
+#line 2081 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 18:
@@ -2089,7 +2088,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].objectfield).oe);
 		delete (yyvsp[-2].objectfield).os;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2093 "engines/director/lingo/lingo-gr.cpp"
+#line 2092 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28:
@@ -2100,7 +2099,7 @@ yyreduce:
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-5].code));
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 1] = body;	/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 2] = end; }
-#line 2104 "engines/director/lingo/lingo-gr.cpp"
+#line 2103 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29:
@@ -2117,7 +2116,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-9].code) + 3] = body;		/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-9].code) + 4] = inc;		/* increment */
 		(*g_lingo->_currentScript)[(yyvsp[-9].code) + 5] = end; }
-#line 2121 "engines/director/lingo/lingo-gr.cpp"
+#line 2120 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30:
@@ -2134,7 +2133,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 3] = body;		/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 4] = inc;		/* increment */
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 5] = end; }
-#line 2138 "engines/director/lingo/lingo-gr.cpp"
+#line 2137 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31:
@@ -2144,25 +2143,37 @@ yyreduce:
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		g_lingo->code1(STOP);
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2148 "engines/director/lingo/lingo-gr.cpp"
+#line 2147 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32:
 #line 264 "engines/director/lingo/lingo-gr.y"
-                                               {
-		warning("STUB: TELL is not implemented"); }
-#line 2155 "engines/director/lingo/lingo-gr.cpp"
+                                                          {
+		inst end;
+		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code));
+		(*g_lingo->_currentScript)[(yyvsp[-3].code) + 1] = end; }
+#line 2156 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33:
-#line 266 "engines/director/lingo/lingo-gr.y"
-                             {
-		warning("STUB: TELL is not implemented"); }
-#line 2162 "engines/director/lingo/lingo-gr.cpp"
+#line 268 "engines/director/lingo/lingo-gr.y"
+                                                    {
+		inst end;
+		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
+		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
+#line 2165 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34:
-#line 270 "engines/director/lingo/lingo-gr.y"
+#line 274 "engines/director/lingo/lingo-gr.y"
+                                                        {
+		(yyval.code) = g_lingo->code1(LC::c_tellcode);
+		g_lingo->code1(STOP); }
+#line 2173 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 35:
+#line 278 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-6].code) - (yyvsp[-8].code));
@@ -2173,11 +2184,11 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-8].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-8].code), (yyvsp[-1].code) - (yyvsp[-8].code), 0); }
-#line 2177 "engines/director/lingo/lingo-gr.cpp"
+#line 2188 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 35:
-#line 280 "engines/director/lingo/lingo-gr.y"
+  case 36:
+#line 288 "engines/director/lingo/lingo-gr.y"
                                                                                                               {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-9].code) - (yyvsp[-11].code));
@@ -2188,22 +2199,22 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-11].code), (yyvsp[-1].code) - (yyvsp[-11].code), (yyvsp[-3].code) - (yyvsp[-11].code)); }
-#line 2192 "engines/director/lingo/lingo-gr.cpp"
+#line 2203 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 38:
-#line 296 "engines/director/lingo/lingo-gr.y"
+  case 39:
+#line 304 "engines/director/lingo/lingo-gr.y"
                                                         {
 		inst then = 0;
 		WRITE_UINT32(&then, (yyvsp[-3].code) - (yyvsp[-5].code));
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 1] = then;	/* thenpart */
 
 		g_lingo->codeLabel((yyvsp[-5].code)); }
-#line 2203 "engines/director/lingo/lingo-gr.cpp"
+#line 2214 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 39:
-#line 304 "engines/director/lingo/lingo-gr.y"
+  case 40:
+#line 312 "engines/director/lingo/lingo-gr.y"
                                                                                                          {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-8].code) - (yyvsp[-10].code));
@@ -2214,11 +2225,11 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-10].code), (yyvsp[-1].code) - (yyvsp[-10].code), (yyvsp[-3].code) - (yyvsp[-10].code)); }
-#line 2218 "engines/director/lingo/lingo-gr.cpp"
+#line 2229 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 40:
-#line 314 "engines/director/lingo/lingo-gr.y"
+  case 41:
+#line 322 "engines/director/lingo/lingo-gr.y"
                                                                    {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-4].code) - (yyvsp[-6].code));
@@ -2229,149 +2240,141 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-6].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code)); }
-#line 2233 "engines/director/lingo/lingo-gr.cpp"
+#line 2244 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 41:
-#line 327 "engines/director/lingo/lingo-gr.y"
+  case 42:
+#line 335 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code3(LC::c_repeatwhilecode, STOP, STOP); }
-#line 2239 "engines/director/lingo/lingo-gr.cpp"
+#line 2250 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 42:
-#line 330 "engines/director/lingo/lingo-gr.y"
+  case 43:
+#line 338 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.code) = g_lingo->code3(LC::c_repeatwithcode, STOP, STOP);
 		g_lingo->code3(STOP, STOP, STOP);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2249 "engines/director/lingo/lingo-gr.cpp"
+#line 2260 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 43:
-#line 337 "engines/director/lingo/lingo-gr.y"
+  case 44:
+#line 345 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.code) = g_lingo->code1(LC::c_ifcode);
 		g_lingo->code3(STOP, STOP, STOP);
 		g_lingo->code1(0);  // Do not skip end
 		g_lingo->codeLabel(0); }
-#line 2259 "engines/director/lingo/lingo-gr.cpp"
+#line 2270 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 44:
-#line 344 "engines/director/lingo/lingo-gr.y"
+  case 45:
+#line 352 "engines/director/lingo/lingo-gr.y"
                                         {
 		inst skipEnd;
 		WRITE_UINT32(&skipEnd, 1); // We have to skip end to avoid multiple executions
 		(yyval.code) = g_lingo->code1(LC::c_ifcode);
 		g_lingo->code3(STOP, STOP, STOP);
 		g_lingo->code1(skipEnd); }
-#line 2270 "engines/director/lingo/lingo-gr.cpp"
+#line 2281 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 45:
-#line 352 "engines/director/lingo/lingo-gr.y"
+  case 46:
+#line 360 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2276 "engines/director/lingo/lingo-gr.cpp"
+#line 2287 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 46:
-#line 355 "engines/director/lingo/lingo-gr.y"
+  case 47:
+#line 363 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2282 "engines/director/lingo/lingo-gr.cpp"
+#line 2293 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 47:
-#line 358 "engines/director/lingo/lingo-gr.y"
+  case 48:
+#line 366 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2288 "engines/director/lingo/lingo-gr.cpp"
+#line 2299 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 50:
-#line 363 "engines/director/lingo/lingo-gr.y"
+  case 51:
+#line 371 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->code1(LC::c_whencode);
 		g_lingo->code1(STOP);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
 		delete (yyvsp[-1].s); }
-#line 2298 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 51:
-#line 369 "engines/director/lingo/lingo-gr.y"
-                                        {
-		(yyval.code) = g_lingo->code1(LC::c_tellcode);
-		g_lingo->code1(STOP); }
-#line 2306 "engines/director/lingo/lingo-gr.cpp"
+#line 2309 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52:
-#line 373 "engines/director/lingo/lingo-gr.y"
+#line 377 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt((yyvsp[0].i)); }
-#line 2314 "engines/director/lingo/lingo-gr.cpp"
+#line 2317 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53:
-#line 376 "engines/director/lingo/lingo-gr.y"
+#line 380 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_floatpush);
 		g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2322 "engines/director/lingo/lingo-gr.cpp"
+#line 2325 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54:
-#line 379 "engines/director/lingo/lingo-gr.y"
+#line 383 "engines/director/lingo/lingo-gr.y"
                         {											// D3
 		(yyval.code) = g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2331 "engines/director/lingo/lingo-gr.cpp"
+#line 2334 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55:
-#line 383 "engines/director/lingo/lingo-gr.y"
+#line 387 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2340 "engines/director/lingo/lingo-gr.cpp"
+#line 2343 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56:
-#line 387 "engines/director/lingo/lingo-gr.y"
+#line 391 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_eval);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2349 "engines/director/lingo/lingo-gr.cpp"
+#line 2352 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58:
-#line 394 "engines/director/lingo/lingo-gr.y"
+#line 398 "engines/director/lingo/lingo-gr.y"
                  { (yyval.code) = (yyvsp[0].code); }
-#line 2355 "engines/director/lingo/lingo-gr.cpp"
+#line 2358 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60:
-#line 396 "engines/director/lingo/lingo-gr.y"
+#line 400 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2363 "engines/director/lingo/lingo-gr.cpp"
+#line 2366 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61:
-#line 399 "engines/director/lingo/lingo-gr.y"
+#line 403 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2371 "engines/director/lingo/lingo-gr.cpp"
+#line 2374 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62:
-#line 402 "engines/director/lingo/lingo-gr.y"
+#line 406 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2380,433 +2383,433 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[0].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[0].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2384 "engines/director/lingo/lingo-gr.cpp"
+#line 2387 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63:
-#line 410 "engines/director/lingo/lingo-gr.y"
+#line 414 "engines/director/lingo/lingo-gr.y"
                                {
 		(yyval.code) = g_lingo->code1(LC::c_theentitypush);
 		inst e = 0, f = 0;
 		WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2395 "engines/director/lingo/lingo-gr.cpp"
+#line 2398 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64:
-#line 416 "engines/director/lingo/lingo-gr.y"
+#line 420 "engines/director/lingo/lingo-gr.y"
                          {
 		g_lingo->code1(LC::c_objectfieldpush);
 		g_lingo->codeString((yyvsp[0].objectfield).os->c_str());
 		g_lingo->codeInt((yyvsp[0].objectfield).oe);
 		delete (yyvsp[0].objectfield).os; }
-#line 2405 "engines/director/lingo/lingo-gr.cpp"
+#line 2408 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66:
-#line 422 "engines/director/lingo/lingo-gr.y"
+#line 426 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_add); }
-#line 2411 "engines/director/lingo/lingo-gr.cpp"
+#line 2414 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67:
-#line 423 "engines/director/lingo/lingo-gr.y"
+#line 427 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_sub); }
-#line 2417 "engines/director/lingo/lingo-gr.cpp"
+#line 2420 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68:
-#line 424 "engines/director/lingo/lingo-gr.y"
+#line 428 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mul); }
-#line 2423 "engines/director/lingo/lingo-gr.cpp"
+#line 2426 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69:
-#line 425 "engines/director/lingo/lingo-gr.y"
+#line 429 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_div); }
-#line 2429 "engines/director/lingo/lingo-gr.cpp"
+#line 2432 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70:
-#line 426 "engines/director/lingo/lingo-gr.y"
+#line 430 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mod); }
-#line 2435 "engines/director/lingo/lingo-gr.cpp"
+#line 2438 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71:
-#line 427 "engines/director/lingo/lingo-gr.y"
+#line 431 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gt); }
-#line 2441 "engines/director/lingo/lingo-gr.cpp"
+#line 2444 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72:
-#line 428 "engines/director/lingo/lingo-gr.y"
+#line 432 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lt); }
-#line 2447 "engines/director/lingo/lingo-gr.cpp"
+#line 2450 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73:
-#line 429 "engines/director/lingo/lingo-gr.y"
+#line 433 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_eq); }
-#line 2453 "engines/director/lingo/lingo-gr.cpp"
+#line 2456 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74:
-#line 430 "engines/director/lingo/lingo-gr.y"
+#line 434 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_neq); }
-#line 2459 "engines/director/lingo/lingo-gr.cpp"
+#line 2462 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75:
-#line 431 "engines/director/lingo/lingo-gr.y"
+#line 435 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ge); }
-#line 2465 "engines/director/lingo/lingo-gr.cpp"
+#line 2468 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76:
-#line 432 "engines/director/lingo/lingo-gr.y"
+#line 436 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_le); }
-#line 2471 "engines/director/lingo/lingo-gr.cpp"
+#line 2474 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77:
-#line 433 "engines/director/lingo/lingo-gr.y"
+#line 437 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_and); }
-#line 2477 "engines/director/lingo/lingo-gr.cpp"
+#line 2480 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78:
-#line 434 "engines/director/lingo/lingo-gr.y"
+#line 438 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_or); }
-#line 2483 "engines/director/lingo/lingo-gr.cpp"
+#line 2486 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79:
-#line 435 "engines/director/lingo/lingo-gr.y"
+#line 439 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_not); }
-#line 2489 "engines/director/lingo/lingo-gr.cpp"
+#line 2492 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80:
-#line 436 "engines/director/lingo/lingo-gr.y"
+#line 440 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ampersand); }
-#line 2495 "engines/director/lingo/lingo-gr.cpp"
+#line 2498 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81:
-#line 437 "engines/director/lingo/lingo-gr.y"
+#line 441 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_concat); }
-#line 2501 "engines/director/lingo/lingo-gr.cpp"
+#line 2504 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82:
-#line 438 "engines/director/lingo/lingo-gr.y"
+#line 442 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_contains); }
-#line 2507 "engines/director/lingo/lingo-gr.cpp"
+#line 2510 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83:
-#line 439 "engines/director/lingo/lingo-gr.y"
+#line 443 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_starts); }
-#line 2513 "engines/director/lingo/lingo-gr.cpp"
+#line 2516 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84:
-#line 440 "engines/director/lingo/lingo-gr.y"
+#line 444 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.code) = (yyvsp[0].code); }
-#line 2519 "engines/director/lingo/lingo-gr.cpp"
+#line 2522 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85:
-#line 441 "engines/director/lingo/lingo-gr.y"
+#line 445 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2525 "engines/director/lingo/lingo-gr.cpp"
+#line 2528 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86:
-#line 442 "engines/director/lingo/lingo-gr.y"
+#line 446 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 2531 "engines/director/lingo/lingo-gr.cpp"
+#line 2534 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87:
-#line 443 "engines/director/lingo/lingo-gr.y"
+#line 447 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_intersects); }
-#line 2537 "engines/director/lingo/lingo-gr.cpp"
+#line 2540 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88:
-#line 444 "engines/director/lingo/lingo-gr.y"
+#line 448 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_within); }
-#line 2543 "engines/director/lingo/lingo-gr.cpp"
+#line 2546 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89:
-#line 445 "engines/director/lingo/lingo-gr.y"
+#line 449 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_charOf); }
-#line 2549 "engines/director/lingo/lingo-gr.cpp"
+#line 2552 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90:
-#line 446 "engines/director/lingo/lingo-gr.y"
+#line 450 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_charToOf); }
-#line 2555 "engines/director/lingo/lingo-gr.cpp"
+#line 2558 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91:
-#line 447 "engines/director/lingo/lingo-gr.y"
+#line 451 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_itemOf); }
-#line 2561 "engines/director/lingo/lingo-gr.cpp"
+#line 2564 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92:
-#line 448 "engines/director/lingo/lingo-gr.y"
+#line 452 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_itemToOf); }
-#line 2567 "engines/director/lingo/lingo-gr.cpp"
+#line 2570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93:
-#line 449 "engines/director/lingo/lingo-gr.y"
+#line 453 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_lineOf); }
-#line 2573 "engines/director/lingo/lingo-gr.cpp"
+#line 2576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94:
-#line 450 "engines/director/lingo/lingo-gr.y"
+#line 454 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lineToOf); }
-#line 2579 "engines/director/lingo/lingo-gr.cpp"
+#line 2582 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95:
-#line 451 "engines/director/lingo/lingo-gr.y"
+#line 455 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_wordOf); }
-#line 2585 "engines/director/lingo/lingo-gr.cpp"
+#line 2588 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96:
-#line 452 "engines/director/lingo/lingo-gr.y"
+#line 456 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_wordToOf); }
-#line 2591 "engines/director/lingo/lingo-gr.cpp"
+#line 2594 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97:
-#line 455 "engines/director/lingo/lingo-gr.y"
+#line 459 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), 1);
 		delete (yyvsp[-1].s); }
-#line 2599 "engines/director/lingo/lingo-gr.cpp"
+#line 2602 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98:
-#line 460 "engines/director/lingo/lingo-gr.y"
+#line 464 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_printtop); }
-#line 2605 "engines/director/lingo/lingo-gr.cpp"
+#line 2608 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101:
-#line 463 "engines/director/lingo/lingo-gr.y"
+#line 467 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_exitRepeat); }
-#line 2611 "engines/director/lingo/lingo-gr.cpp"
+#line 2614 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102:
-#line 464 "engines/director/lingo/lingo-gr.y"
+#line 468 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_procret); }
-#line 2617 "engines/director/lingo/lingo-gr.cpp"
+#line 2620 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106:
-#line 468 "engines/director/lingo/lingo-gr.y"
+#line 472 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2625 "engines/director/lingo/lingo-gr.cpp"
+#line 2628 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 107:
-#line 471 "engines/director/lingo/lingo-gr.y"
+#line 475 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_open); }
-#line 2631 "engines/director/lingo/lingo-gr.cpp"
+#line 2634 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 108:
-#line 472 "engines/director/lingo/lingo-gr.y"
+#line 476 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 2637 "engines/director/lingo/lingo-gr.cpp"
+#line 2640 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109:
-#line 475 "engines/director/lingo/lingo-gr.y"
+#line 479 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_global); g_lingo->codeString((yyvsp[0].s)->c_str()); delete (yyvsp[0].s); }
-#line 2643 "engines/director/lingo/lingo-gr.cpp"
+#line 2646 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110:
-#line 476 "engines/director/lingo/lingo-gr.y"
+#line 480 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_global); g_lingo->codeString((yyvsp[0].s)->c_str()); delete (yyvsp[0].s); }
-#line 2649 "engines/director/lingo/lingo-gr.cpp"
+#line 2652 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111:
-#line 479 "engines/director/lingo/lingo-gr.y"
+#line 483 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_property); g_lingo->codeString((yyvsp[0].s)->c_str()); delete (yyvsp[0].s); }
-#line 2655 "engines/director/lingo/lingo-gr.cpp"
+#line 2658 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112:
-#line 480 "engines/director/lingo/lingo-gr.y"
+#line 484 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_property); g_lingo->codeString((yyvsp[0].s)->c_str()); delete (yyvsp[0].s); }
-#line 2661 "engines/director/lingo/lingo-gr.cpp"
+#line 2664 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113:
-#line 483 "engines/director/lingo/lingo-gr.y"
+#line 487 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_instance); g_lingo->codeString((yyvsp[0].s)->c_str()); delete (yyvsp[0].s); }
-#line 2667 "engines/director/lingo/lingo-gr.cpp"
+#line 2670 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114:
-#line 484 "engines/director/lingo/lingo-gr.y"
+#line 488 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_instance); g_lingo->codeString((yyvsp[0].s)->c_str()); delete (yyvsp[0].s); }
-#line 2673 "engines/director/lingo/lingo-gr.cpp"
+#line 2676 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115:
-#line 495 "engines/director/lingo/lingo-gr.y"
+#line 499 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoloop); }
-#line 2679 "engines/director/lingo/lingo-gr.cpp"
+#line 2682 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116:
-#line 496 "engines/director/lingo/lingo-gr.y"
+#line 500 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_gotonext); }
-#line 2685 "engines/director/lingo/lingo-gr.cpp"
+#line 2688 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117:
-#line 497 "engines/director/lingo/lingo-gr.y"
+#line 501 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoprevious); }
-#line 2691 "engines/director/lingo/lingo-gr.cpp"
+#line 2694 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118:
-#line 498 "engines/director/lingo/lingo-gr.y"
+#line 502 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-#line 2700 "engines/director/lingo/lingo-gr.cpp"
+#line 2703 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119:
-#line 502 "engines/director/lingo/lingo-gr.y"
+#line 506 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
-#line 2709 "engines/director/lingo/lingo-gr.cpp"
+#line 2712 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120:
-#line 506 "engines/director/lingo/lingo-gr.y"
+#line 510 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_goto); }
-#line 2718 "engines/director/lingo/lingo-gr.cpp"
+#line 2721 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123:
-#line 516 "engines/director/lingo/lingo-gr.y"
+#line 520 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_playdone); }
-#line 2724 "engines/director/lingo/lingo-gr.cpp"
+#line 2727 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124:
-#line 517 "engines/director/lingo/lingo-gr.y"
+#line 521 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_play); }
-#line 2733 "engines/director/lingo/lingo-gr.cpp"
+#line 2736 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125:
-#line 521 "engines/director/lingo/lingo-gr.y"
+#line 525 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-#line 2742 "engines/director/lingo/lingo-gr.cpp"
+#line 2745 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126:
-#line 525 "engines/director/lingo/lingo-gr.y"
+#line 529 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-#line 2751 "engines/director/lingo/lingo-gr.cpp"
+#line 2754 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127:
-#line 529 "engines/director/lingo/lingo-gr.y"
+#line 533 "engines/director/lingo/lingo-gr.y"
                      { g_lingo->codeSetImmediate(true); }
-#line 2757 "engines/director/lingo/lingo-gr.cpp"
+#line 2760 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128:
-#line 529 "engines/director/lingo/lingo-gr.y"
+#line 533 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
-#line 2766 "engines/director/lingo/lingo-gr.cpp"
+#line 2769 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129:
-#line 560 "engines/director/lingo/lingo-gr.y"
+#line 564 "engines/director/lingo/lingo-gr.y"
                 { g_lingo->_indef = kStateInArgs; g_lingo->_currentFactory.clear(); }
-#line 2772 "engines/director/lingo/lingo-gr.cpp"
+#line 2775 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 130:
-#line 561 "engines/director/lingo/lingo-gr.y"
+#line 565 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		g_lingo->clearArgStack();
 		g_lingo->_indef = kStateNone;
 		delete (yyvsp[-6].s); }
-#line 2783 "engines/director/lingo/lingo-gr.cpp"
+#line 2786 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 131:
-#line 567 "engines/director/lingo/lingo-gr.y"
+#line 571 "engines/director/lingo/lingo-gr.y"
                         { g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 2789 "engines/director/lingo/lingo-gr.cpp"
+#line 2792 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132:
-#line 568 "engines/director/lingo/lingo-gr.y"
+#line 572 "engines/director/lingo/lingo-gr.y"
                   { g_lingo->_indef = kStateInArgs; }
-#line 2795 "engines/director/lingo/lingo-gr.cpp"
+#line 2798 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133:
-#line 569 "engines/director/lingo/lingo-gr.y"
+#line 573 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1, &g_lingo->_currentFactory);
 		g_lingo->clearArgStack();
 		g_lingo->_indef = kStateNone;
 		delete (yyvsp[-6].s); }
-#line 2806 "engines/director/lingo/lingo-gr.cpp"
+#line 2809 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 134:
-#line 575 "engines/director/lingo/lingo-gr.y"
+#line 579 "engines/director/lingo/lingo-gr.y"
                                                                      {	// D3
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
@@ -2817,11 +2820,11 @@ yyreduce:
 		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
 		delete (yyvsp[-7].s);
 		delete (yyvsp[-1].s); }
-#line 2821 "engines/director/lingo/lingo-gr.cpp"
+#line 2824 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135:
-#line 585 "engines/director/lingo/lingo-gr.y"
+#line 589 "engines/director/lingo/lingo-gr.y"
                                                  {	// D4. No 'end' clause
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
@@ -2829,59 +2832,59 @@ yyreduce:
 		g_lingo->clearArgStack();
 		g_lingo->_ignoreMe = false;
 		delete (yyvsp[-5].s); }
-#line 2833 "engines/director/lingo/lingo-gr.cpp"
+#line 2836 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136:
-#line 593 "engines/director/lingo/lingo-gr.y"
+#line 597 "engines/director/lingo/lingo-gr.y"
             { (yyval.s) = (yyvsp[0].s); g_lingo->_indef = kStateInArgs; g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
-#line 2839 "engines/director/lingo/lingo-gr.cpp"
+#line 2842 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 137:
-#line 595 "engines/director/lingo/lingo-gr.y"
+#line 599 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = 0; }
-#line 2845 "engines/director/lingo/lingo-gr.cpp"
+#line 2848 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138:
-#line 596 "engines/director/lingo/lingo-gr.y"
+#line 600 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 2851 "engines/director/lingo/lingo-gr.cpp"
+#line 2854 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139:
-#line 597 "engines/director/lingo/lingo-gr.y"
+#line 601 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 2857 "engines/director/lingo/lingo-gr.cpp"
+#line 2860 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140:
-#line 598 "engines/director/lingo/lingo-gr.y"
+#line 602 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-3].narg) + 1; delete (yyvsp[0].s); }
-#line 2863 "engines/director/lingo/lingo-gr.cpp"
+#line 2866 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 142:
-#line 602 "engines/director/lingo/lingo-gr.y"
+#line 606 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 2869 "engines/director/lingo/lingo-gr.cpp"
+#line 2872 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143:
-#line 603 "engines/director/lingo/lingo-gr.y"
+#line 607 "engines/director/lingo/lingo-gr.y"
                                         { delete (yyvsp[0].s); }
-#line 2875 "engines/director/lingo/lingo-gr.cpp"
+#line 2878 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144:
-#line 606 "engines/director/lingo/lingo-gr.y"
+#line 610 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->codeArgStore(); g_lingo->_indef = kStateInDef; }
-#line 2881 "engines/director/lingo/lingo-gr.cpp"
+#line 2884 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145:
-#line 609 "engines/director/lingo/lingo-gr.y"
+#line 613 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_call);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -2889,113 +2892,113 @@ yyreduce:
 		WRITE_UINT32(&numpar, (yyvsp[0].narg));
 		g_lingo->code1(numpar);
 		delete (yyvsp[-1].s); }
-#line 2893 "engines/director/lingo/lingo-gr.cpp"
+#line 2896 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146:
-#line 618 "engines/director/lingo/lingo-gr.y"
+#line 622 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = 0; }
-#line 2899 "engines/director/lingo/lingo-gr.cpp"
+#line 2902 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 147:
-#line 619 "engines/director/lingo/lingo-gr.y"
+#line 623 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 2905 "engines/director/lingo/lingo-gr.cpp"
+#line 2908 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 148:
-#line 620 "engines/director/lingo/lingo-gr.y"
+#line 624 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 2911 "engines/director/lingo/lingo-gr.cpp"
+#line 2914 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 149:
-#line 623 "engines/director/lingo/lingo-gr.y"
+#line 627 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 2917 "engines/director/lingo/lingo-gr.cpp"
+#line 2920 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150:
-#line 624 "engines/director/lingo/lingo-gr.y"
+#line 628 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 2923 "engines/director/lingo/lingo-gr.cpp"
+#line 2926 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151:
-#line 627 "engines/director/lingo/lingo-gr.y"
+#line 631 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 2929 "engines/director/lingo/lingo-gr.cpp"
+#line 2932 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 152:
-#line 630 "engines/director/lingo/lingo-gr.y"
+#line 634 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 2935 "engines/director/lingo/lingo-gr.cpp"
+#line 2938 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 153:
-#line 631 "engines/director/lingo/lingo-gr.y"
+#line 635 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 2941 "engines/director/lingo/lingo-gr.cpp"
+#line 2944 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 154:
-#line 632 "engines/director/lingo/lingo-gr.y"
+#line 636 "engines/director/lingo/lingo-gr.y"
                      { (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 2947 "engines/director/lingo/lingo-gr.cpp"
+#line 2950 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 155:
-#line 633 "engines/director/lingo/lingo-gr.y"
+#line 637 "engines/director/lingo/lingo-gr.y"
                          { (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 2953 "engines/director/lingo/lingo-gr.cpp"
+#line 2956 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 156:
-#line 636 "engines/director/lingo/lingo-gr.y"
+#line 640 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 2959 "engines/director/lingo/lingo-gr.cpp"
+#line 2962 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 157:
-#line 637 "engines/director/lingo/lingo-gr.y"
+#line 641 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 2965 "engines/director/lingo/lingo-gr.cpp"
+#line 2968 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 158:
-#line 640 "engines/director/lingo/lingo-gr.y"
+#line 644 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 2971 "engines/director/lingo/lingo-gr.cpp"
+#line 2974 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 159:
-#line 641 "engines/director/lingo/lingo-gr.y"
+#line 645 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 2977 "engines/director/lingo/lingo-gr.cpp"
+#line 2980 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 160:
-#line 644 "engines/director/lingo/lingo-gr.y"
+#line 648 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		delete (yyvsp[-2].s); }
-#line 2986 "engines/director/lingo/lingo-gr.cpp"
+#line 2989 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 161:
-#line 648 "engines/director/lingo/lingo-gr.y"
+#line 652 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		delete (yyvsp[-2].s); }
-#line 2995 "engines/director/lingo/lingo-gr.cpp"
+#line 2998 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 2999 "engines/director/lingo/lingo-gr.cpp"
+#line 3002 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3227,5 +3230,5 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 655 "engines/director/lingo/lingo-gr.y"
+#line 659 "engines/director/lingo/lingo-gr.y"
 
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 1a5fa58..f09cace 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -116,7 +116,7 @@ void checkEnd(Common::String *token, const char *expect, bool required) {
 %token tON tENDIF tENDREPEAT tENDTELL
 
 %type<code> asgn begin elseif end expr if when repeatwhile
-%type<code> repeatwith stmtlist tell reference simpleexpr list valuelist
+%type<code> repeatwith stmtlist tellstart reference simpleexpr list valuelist
 %type<narg> argdef arglist nonemptyarglist linearlist proplist
 %type<s> on
 
@@ -261,12 +261,20 @@ stmt: stmtoneliner
 		WRITE_UINT32(&end, $end - $when);
 		g_lingo->code1(STOP);
 		(*g_lingo->_currentScript)[$when + 1] = end; }
-	| tell expr '\n' stmtlist end tENDTELL {
-		warning("STUB: TELL is not implemented"); }
-	| tell expr tTO expr {
-		warning("STUB: TELL is not implemented"); }
+	| tTELL expr '\n' tellstart stmtlist end tENDTELL {
+		inst end;
+		WRITE_UINT32(&end, $end - $tellstart);
+		(*g_lingo->_currentScript)[$tellstart + 1] = end; }
+	| tTELL expr tTO tellstart stmtoneliner end {
+		inst end;
+		WRITE_UINT32(&end, $end - $tellstart);
+		(*g_lingo->_currentScript)[$tellstart + 1] = end; }
 	;
 
+tellstart:	  /* empty */				{
+		$$ = g_lingo->code1(LC::c_tellcode);
+		g_lingo->code1(STOP); }
+
 ifstmt: if expr end[endexpr] tTHEN stmtlist end[else1] elseifstmtlist end[end3] tENDIF {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, $endexpr - $if);
@@ -366,10 +374,6 @@ when:	  tWHEN	ID tTHEN	{
 		g_lingo->codeString($ID->c_str());
 		delete $ID; }
 
-tell:	  tTELL				{
-		$$ = g_lingo->code1(LC::c_tellcode);
-		g_lingo->code1(STOP); }
-
 simpleexpr: INT		{
 		$$ = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt($INT); }


Commit: b29d68218c2854ef477badbe1645215d01d6d298
    https://github.com/scummvm/scummvm/commit/b29d68218c2854ef477badbe1645215d01d6d298
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-14T18:57:00+01:00

Commit Message:
DIRECTOR: LINGO: Added test for the 'tell' command

Changed paths:
  A engines/director/lingo/tests/tell.lingo


diff --git a/engines/director/lingo/tests/tell.lingo b/engines/director/lingo/tests/tell.lingo
new file mode 100644
index 0000000..f724611
--- /dev/null
+++ b/engines/director/lingo/tests/tell.lingo
@@ -0,0 +1,9 @@
+tell window "ball" to puppettempo 5
+
+tell window "hello" to continue
+
+tell window childMovie
+	go to frame 50
+	set the stageColor to 100
+	updateStage
+end tell


Commit: 57d73250668f3bc1c15b4a3b3343321398f8478d
    https://github.com/scummvm/scummvm/commit/57d73250668f3bc1c15b4a3b3343321398f8478d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-14T18:57:00+01:00

Commit Message:
DIRECTOR: LINGO: Implement reliable stub fot c_tellcode()

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


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 5eb51c5..7715ff7 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1079,7 +1079,13 @@ void LC::c_whencode() {
 }
 
 void LC::c_tellcode() {
-	warning("STUB: c_tellcode");
+	Datum d1 = g_lingo->pop(); // reference
+	uint start = g_lingo->_pc;
+	uint end = g_lingo->readInt() + start - 1;
+
+	warning("STUB: c_tellcode(%s)", d1.toString()->c_str());
+
+	g_lingo->_pc = end;
 }
 
 void LC::c_tell() {


Commit: dcc530f34a2b2023da886f5a95046a9a36b82da7
    https://github.com/scummvm/scummvm/commit/dcc530f34a2b2023da886f5a95046a9a36b82da7
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-14T18:57:00+01:00

Commit Message:
DIRECTOR: LINGO: Fix REFERENCE stubs

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index c5f05a0..7b264b5 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1723,6 +1723,7 @@ void LB::b_cast(int nargs) {
 	warning("STUB: b_cast");
 
 	d.type = REFERENCE;
+	d.u.i = 0;
 
 	g_lingo->push(d);
 }
@@ -1757,6 +1758,7 @@ void LB::b_script(int nargs) {
 	warning("STUB: b_script");
 
 	d.type = REFERENCE;
+	d.u.i = 0;
 
 	g_lingo->push(d);
 }
@@ -1767,6 +1769,7 @@ void LB::b_window(int nargs) {
 	warning("STUB: b_window");
 
 	d.type = REFERENCE;
+	d.u.i = 0;
 
 	g_lingo->push(d);
 }


Commit: dd4681e195604f5952226f75a2bdfc468d9251c6
    https://github.com/scummvm/scummvm/commit/dd4681e195604f5952226f75a2bdfc468d9251c6
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-14T18:57:00+01:00

Commit Message:
DIRECTOR: LINGO: Fix toString() when score was not loaded

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


diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 8935614..de4ab1d 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -411,6 +411,12 @@ Common::String *Datum::toString() {
 			int idx = u.i;
 			Score *score = g_director->getCurrentScore();
 
+			if (!score) {
+				warning("toString(): No score");
+				*s = "";
+				break;
+			}
+
 			if (!score->_loadedCast->contains(idx)) {
 				if (!score->_loadedCast->contains(idx - score->_castIDoffset)) {
 					warning("toString(): Unknown REFERENCE %d", idx);


Commit: f4653e8c287b4f1582e907429a33fee8f01a5776
    https://github.com/scummvm/scummvm/commit/f4653e8c287b4f1582e907429a33fee8f01a5776
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-14T18:58:11+01:00

Commit Message:
DIRECTOR: LINGO: Implemented parser for 'sound <xx>' family of commands

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


diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index eb45c32..273e7dc 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 75
-#define YY_END_OF_BUFFER 76
+#define YY_NUM_RULES 76
+#define YY_END_OF_BUFFER 77
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -373,42 +373,48 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[307] =
+static yyconst flex_int16_t yy_accept[365] =
     {   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,    0,   51,   51,    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,   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,   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,   69,
+       49,    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,   69,   55,
+
+       55,   55,   55,   62,   69,    0,   69,    8,   69,    0,
+       16,   19,    0,   69,   69,   69,    0,   69,   69,   69,
+       45,    0,   69,   58,   48,    0,    0,   55,   55,   55,
+       60,    0,   69,   69,   14,    0,   69,   69,    0,   30,
+        0,   69,   69,   69,    0,    0,    0,    0,   69,   69,
+       69,   69,    0,    0,    0,    0,   55,   55,   55,    0,
+       17,   10,    0,   23,   69,   30,   30,    0,   69,   42,
+       43,    0,    0,    0,    0,   69,   69,   69,   69,    0,
+        0,    0,   55,   55,   55,   17,    0,   69,   30,    0,
+       41,    0,    0,    0,    0,   69,   69,   69,   69,    0,
+
+        0,    0,   55,    0,   55,    0,   24,   39,    0,    0,
+        0,   47,   69,   69,   69,   47,   54,   53,   54,   55,
+        0,    0,    0,   20,   47,    0,    0,    0,   47,   69,
+       69,   69,   53,    0,    0,    0,    0,   47,    0,    0,
+       47,   69,   69,    0,    0,   50,   51,   47,    0,   47,
+       69,    0,   51,   47,   47,    0,   53,    0,   53,    0,
+        0,   52,   52,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -454,87 +460,97 @@ static yyconst flex_int32_t yy_meta[66] =
         5,    5,    5,    5,    1
     } ;
 
-static yyconst flex_int16_t yy_base[323] =
+static yyconst flex_int16_t yy_base[381] =
     {   0,
-        0,   64,  485,  800,   68,  800,  800,   72,  474,    0,
-      800,  427,  419,   55,   63,  800,  365,   59,   59,   59,
+        0,   64,  642,  908,   68,  908,  908,   72,  625,    0,
+      908,  617,  581,   55,   63,  908,  535,   59,   59,   59,
        55,   63,    0,   64,   75,   70,  100,   77,  110,  102,
-       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,  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,
-      284,    0,  291,  281,  285,  292,    0,  303,    0,  300,
-      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,  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,  658,
-
-      692,  612,  667,  800,  800,  800,  733,  735,  738,  741,
-      747,  752,  757,  759,  764,  769,  772,  775,  780,  783,
-      788,  793
+       98,  139,  126,  152,   83,  184,  205,  458,  209,  908,
+      213,  145,  482,  908,    0,  908,    0,  430,  139,  908,
+      908,  908,    0,   66,  116,  136,  149,   74,  166,  106,
+      151,  153,  125,   91,    0,  165,  176,  139,  151,  201,
+      191,  201,  188,  194,    0,    0,  209,    0,  215,  212,
+      200,  205,  202,  203,  207,  226,  214,  223,    0,  246,
+      213,  223,  908,  279,  283,  333,  324,    0,    0,  234,
+
+      233,    0,  243,  242,  241,  256,  260,  269,  289,  258,
+      277,  296,  268,  286,  276,  287,  274,  277,  287,    0,
+      287,  279,    0,  289,  279,  284,  291,    0,  303,    0,
+      294,  300,  302,  312,  349,  312,  325,  332,  337,  190,
+      166,  320,  327,    0,  341,    0,    0,  304,  359,    0,
+      345,  336,  350,  336,    0,    0,    0,    0,  340,  341,
+      351,    0,    0,  383,  348,  353,  362,  360,  351,  354,
+        0,  401,    0,    0,  370,  371,    0,  131,  130,    0,
+      380,  382,  406,    0,  382,  410,  388,  384,    0,  394,
+        0,  418,  400,  392,  391,  392,  423,  415,  395,  445,
+
+      447,  458,  462,    0,  416,  119,   88,    0,  441,  444,
+        0,    0,  471,  452,  453,  473,  444,  461,  448,  450,
+        0,  514,  569,    0,    0,  493,  467,  487,  520,  519,
+        0,   42,   20,  469,  908,  477,  460,  497,  432,    0,
+      500,  510,  477,  480,  513,  515,  516,  516,  527,  520,
+      528,  524,  563,  543,  549,  551,  579,  585,  597,   18,
+        0,    0,  563,    0,  547,    0,    0,  558,  567,    0,
+        0,  578,  578,  592,  581,  582,  594,  598,  589,  586,
+      561,  597,  645,  636,  646,  908,  601,  596,    0,  616,
+        0,  618,  637,  620,  630,  629,  643,  629,  639,  644,
+
+      666,  651,  672,  676,  693,  654,    0,  908,  658,  677,
+      666,  908,  678,  684,  679,    0,  908,    0,  908,  710,
+      714,  686,  720,  908,  908,  657,  681,  693,    0,  694,
+      692,  707,    0,  740,  734,  746,  715,  908,  714,  726,
+        0,  719,  729,  756,  724,  761,  762,  908,  738,    0,
+      751,  785,  786,  908,    0,  787,  791,  773,  800,  753,
+      761,  908,  908,  908,  841,  843,  846,  849,  855,  860,
+      865,  867,  872,  877,  880,  883,  888,  891,  896,  901
     } ;
 
-static yyconst flex_int16_t yy_def[323] =
+static yyconst flex_int16_t yy_def[381] =
     {   0,
-      306,    1,  306,  306,  306,  306,  306,  306,  307,  308,
-      306,  306,  306,  306,  306,  306,  306,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  306,  306,  306,  309,  306,  306,
-      306,  306,  307,  306,  310,  306,  311,  306,  306,  306,
-      306,  306,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  306,  306,  306,  306,  309,  310,  311,  306,  309,
-
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      306,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  306,  309,  309,
-      309,  309,  309,  309,  309,  309,  312,  309,  309,  306,
-      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
-      309,  309,  309,  309,  309,  309,  309,  309,  313,  309,
-      309,  309,  309,  309,  306,  309,  309,  309,  309,  306,
-      314,  309,  306,  309,  309,  309,  309,  309,  306,  309,
-      309,  309,  309,  309,  309,  313,  313,  313,  313,  309,
-
-      309,  306,  309,  309,  309,  306,  314,  309,  306,  309,
-      309,  315,  306,  309,  309,  309,  309,  309,  309,  306,
-      306,  313,  313,  313,  309,  306,  309,  309,  306,  306,
-      309,  309,  316,  317,  306,  309,  309,  309,  306,  306,
-      306,  306,  313,  313,  313,  306,  309,  309,  306,  309,
-      309,  318,  317,  306,  309,  309,  309,  306,  306,  306,
-      313,  313,  313,  306,  306,  309,  318,  306,  309,  306,
-      319,  306,  313,  306,  313,  306,  309,  306,  306,  320,
-      306,  313,  306,  306,  306,  306,  320,  306,  306,  306,
-      306,  306,  306,  319,  306,  306,  319,  321,  322,  306,
-
-      322,  306,  306,  306,  306,    0,  306,  306,  306,  306,
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306
+      364,    1,  364,  364,  364,  364,  364,  364,  365,  366,
+      364,  364,  364,  364,  364,  364,  364,  367,  367,  367,
+      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
+      367,  367,  367,  367,  364,  364,  364,  367,  364,  364,
+      364,  364,  365,  364,  368,  364,  369,  364,  364,  364,
+      364,  364,  367,  367,  367,  367,  367,  367,  367,  367,
+      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
+      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
+      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
+      367,  367,  364,  364,  364,  364,  367,  368,  369,  364,
+
+      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
+      367,  364,  367,  367,  367,  367,  367,  367,  367,  367,
+      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
+      367,  367,  367,  367,  367,  367,  367,  367,  367,  364,
+      367,  367,  367,  367,  367,  367,  367,  367,  370,  367,
+      367,  364,  367,  367,  367,  367,  367,  367,  367,  367,
+      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
+      367,  371,  367,  367,  367,  367,  367,  364,  367,  367,
+      367,  367,  364,  372,  367,  364,  367,  367,  367,  367,
+      367,  364,  367,  367,  367,  367,  367,  367,  367,  371,
+
+      371,  371,  371,  367,  367,  364,  367,  367,  367,  364,
+      372,  367,  364,  367,  367,  373,  364,  367,  367,  367,
+      367,  364,  367,  367,  367,  364,  364,  371,  371,  371,
+      367,  364,  367,  367,  364,  364,  367,  367,  374,  375,
+      364,  367,  367,  367,  364,  364,  364,  364,  367,  367,
+      367,  367,  364,  364,  364,  364,  371,  371,  371,  364,
+      367,  367,  364,  367,  367,  376,  375,  364,  367,  367,
+      367,  364,  364,  364,  364,  367,  367,  367,  367,  364,
+      364,  364,  371,  371,  371,  364,  364,  367,  376,  364,
+      367,  364,  364,  364,  364,  367,  367,  367,  367,  364,
+
+      377,  364,  371,  364,  371,  364,  367,  364,  364,  364,
+      364,  364,  367,  367,  367,  367,  364,  378,  364,  371,
+      364,  364,  364,  364,  364,  364,  364,  364,  367,  367,
+      367,  367,  378,  364,  364,  364,  364,  364,  364,  364,
+      367,  367,  367,  364,  364,  377,  364,  364,  364,  367,
+      367,  364,  377,  364,  367,  379,  380,  364,  380,  364,
+      364,  364,  364,    0,  364,  364,  364,  364,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364
     } ;
 
-static yyconst flex_int16_t yy_nxt[866] =
+static yyconst flex_int16_t yy_nxt[974] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   11,
        13,    4,   14,   15,   16,   17,   18,   19,   20,   21,
@@ -544,96 +560,108 @@ static yyconst flex_int16_t yy_nxt[866] =
        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,  264,   57,  247,   59,   92,   92,   55,   58,   60,
-       63,   61,  111,   64,   68,  111,   65,   73,  246,   69,
+       54,  286,   57,  261,   59,   93,   93,   55,   58,   60,
+       63,   61,  112,   64,   68,  112,   65,   73,  260,   69,
 
-      100,   62,  104,   66,   56,   54,   74,   57,   59,   67,
+      101,   62,  105,   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,  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,  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,
-
-      115,  105,  102,  103,  109,  176,  107,  112,  113,  110,
-      106,  108,   95,  114,  147,  116,  117,  147,  118,  119,
-      175,  121,  122,  123,  115,  105,  127,  124,  125,  109,
-       42,  112,  113,   95,  106,   99,  120,  126,  114,  116,
-      128,  117,  118,  129,  119,  121,  122,  130,  123,  131,
-      127,   42,  124,  125,  132,   42,  133,  140,  134,   42,
-      120,  126,  135,  144,  128,  136,  137,  129,  139,  111,
-      180,  130,  111,  180,  131,  141,  142,  143,  132,  145,
-      146,  133,  140,  134,  148,  149,  155,  135,  144,  136,
-      137,   93,   40,   40,   94,   94,   40,   40,   94,  141,
-
-      142,  143,  150,  145,  151,  146,  152,  158,  148,  154,
-      149,  155,  138,  156,  157,  153,  159,   99,  160,  161,
-      162,  163,  164,  165,  166,   44,  150,  167,  151,  168,
-      173,  152,  158,  154,   96,  171,   95,  156,  157,  153,
-       95,  159,  160,  161,  162,  163,  164,  169,  165,  166,
-      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,  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,  306,  222,  249,  223,  235,  230,
-      250,  232,  236,  242,  220,  224,  220,  220,  240,  220,
-
-      237,  238,  221,  240,  221,  248,  251,  306,  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,  306,  256,  242,  266,  306,
-      220,  245,  265,  220,  243,  306,  268,  254,  221,  269,
-      255,  244,  257,  270,  241,  258,  261,  306,  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,  306,  262,  221,  263,  271,  286,  306,  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,  306,  289,  294,  240,
-      275,  282,  290,  292,  290,  290,  292,  290,  294,  284,
-      304,  294,  296,  292,  242,  295,  292,  306,  306,  284,
-      240,  240,  306,  297,  240,  282,  297,  306,  306,  306,
-      291,  293,  291,  284,  304,  242,  242,  296,  242,  298,
-      306,  293,  298,  284,  297,  240,  240,  297,  298,  306,
-      300,  298,  302,  300,  291,  293,  291,  303,  305,  242,
-      242,  287,  306,  300,  306,  293,  300,  306,  306,  306,
-
-      306,  306,  306,  306,  287,  306,  306,  302,  306,  306,
-      306,  303,  306,  305,  306,  306,  306,  280,  306,  287,
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  287,   43,   43,  306,   43,   43,   43,   45,
-       45,   53,   53,   53,   97,   97,   97,   98,   98,  306,
-       98,   98,   98,  181,  306,  306,  181,  181,  196,  306,
-      306,  196,  207,  207,  207,  234,  306,  234,  234,  234,
-      252,  306,  306,  252,  252,  253,  253,  253,  267,  267,
-      267,  280,  306,  306,  280,  280,  287,  287,  287,  299,
-      306,  306,  299,  299,  301,  306,  301,  301,  301,    3,
-
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306
+       71,   65,   73,   69,  101,   62,  105,   66,   79,   72,
+       74,   75,   42,   67,   80,  102,   42,   81,   76,  108,
+       77,   70,   78,   82,  233,   71,   87,   93,   93,   88,
+       48,   49,   79,   72,  111,   89,   75,  103,   80,   83,
+      102,   81,   76,  108,   77,  104,   78,  116,   84,   85,
+      109,   87,  232,   86,   88,   90,   91,  110,  111,   89,
+      117,   92,  103,  207,   83,   94,   40,   40,   95,  206,
+      104,  116,   84,   85,  106,  109,  115,   86,  113,  114,
+
+       90,   91,  110,  107,  117,   92,   95,   40,   40,   95,
+       39,   40,   40,   41,   41,   40,   40,   41,  106,  118,
+      120,  115,  113,  114,  179,  119,  122,  107,  123,  124,
+       96,  125,  126,  178,  128,  129,  130,  121,  131,  132,
+      134,  127,  133,  135,  118,  120,  100,  138,   42,  119,
+      122,   96,  123,  142,  124,  139,  125,  126,  128,  129,
+      130,  121,  131,  132,  134,  127,  136,  133,  135,   42,
+      137,  138,  143,   42,  144,  145,  146,   42,  142,  139,
+       94,   40,   40,   95,   95,   40,   40,   95,  147,  148,
+      149,  136,  150,  149,  151,  137,  143,  112,  144,  145,
+
+      112,  146,  153,  156,  158,  183,  154,  157,  183,  159,
+      160,  161,  147,  162,  148,  155,  150,  163,  164,  151,
+      165,  166,  168,  167,  169,   96,  153,  156,  158,   96,
+      152,  154,  157,  159,  170,  160,  161,  162,  171,  155,
+      174,  163,  164,   42,  165,  166,  168,   42,  167,  169,
+      172,  175,  180,  172,  152,  176,  177,  182,  170,  181,
+      149,  185,  171,  149,  174,  186,  187,  141,  188,  189,
+      190,  191,  194,  195,  140,  175,  180,  173,  196,  197,
+      176,  177,  182,  181,  192,  198,  185,  192,  199,  186,
+      204,  187,  188,  189,  190,  205,  191,  194,  195,  193,
+
+      208,  173,  172,  196,  197,  172,  209,  183,  212,  198,
+      183,  213,  199,  216,  213,  204,  214,  215,  218,  192,
+      205,  219,  192,  220,  193,  208,  221,  222,  225,  201,
+      210,  209,  212,  239,  202,  224,  239,  203,  216,  217,
+      214,  215,  100,  218,  231,  219,  226,  220,  226,  226,
+      221,  226,  225,  201,  227,  210,  227,  223,  202,  226,
+      224,  203,  226,  226,  217,  235,  226,  227,  231,  234,
+      237,  227,  213,  238,  239,  213,  241,  239,  230,  242,
+      264,  223,  228,  243,  244,   53,  254,   44,  226,  229,
+      235,  226,  236,  234,  253,  237,  227,  253,  238,   97,
+
+      241,  256,  262,  230,  242,  264,  228,  243,  244,  263,
+      270,  254,  254,  229,  257,  265,  268,  236,  222,  271,
+      226,  226,  255,  226,  226,  256,  262,  256,  227,  227,
+      269,  273,  245,  263,  270,  246,  277,  254,  257,  272,
+      265,  268,  274,  271,  247,  259,  255,  248,  222,   52,
+      275,  256,  258,  276,  278,  269,  273,  245,  279,  280,
+      246,  277,  301,  272,  253,  301,  274,  253,  247,  259,
+      281,  248,  222,  222,  275,  282,  258,  276,  278,  287,
+      226,  288,  279,  226,  280,  290,  226,  249,  227,  226,
+      250,   47,  255,  291,  227,  281,  283,  293,  226,  251,
+
+      282,  226,  252,  223,  287,  288,  227,  292,  294,  290,
+      295,  296,  249,  297,  298,  250,  255,  291,  299,  284,
+      300,  283,  293,  251,  302,   46,  252,  223,  306,  307,
+       44,  292,  285,  294,  295,  296,  308,  304,  297,  298,
+      304,  364,  299,  284,  300,  227,  226,  226,  302,  226,
+      226,  309,  306,  307,  227,  227,  285,  310,  364,  311,
+      312,  308,  313,  314,  317,  303,  305,  301,  315,  316,
+      301,  319,  364,  226,  324,  309,  226,  321,  325,  364,
+      321,  227,  310,  311,  312,  338,  313,  328,  314,  317,
+      303,  305,  315,  316,  323,  254,  319,  323,  329,  324,
+
+      332,  326,  227,  325,  320,  322,  327,  335,  330,  338,
+      256,  334,  328,  331,  334,  321,  339,  340,  321,  227,
+      254,  336,  341,  329,  336,  332,  326,  342,  320,  322,
+      327,  343,  335,  330,  256,  346,  347,  331,  346,  254,
+      339,  344,  340,  322,  344,  352,  341,  336,  348,  337,
+      336,  342,  349,  350,  256,  351,  343,  344,  354,  254,
+      344,  347,  346,  353,  254,  346,  353,  322,  364,  345,
+      352,  355,  348,  337,  256,  337,  349,  350,  256,  351,
+      364,  362,  363,  354,  254,  345,  356,  353,  356,  356,
+      353,  356,  358,  345,  364,  358,  355,  360,  256,  337,
+
+      364,  358,  361,  333,  358,  362,  364,  363,  364,  345,
+      364,  364,  333,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  360,  364,  364,  364,  361,  318,  364,  364,
+      364,  333,  364,  364,  364,  364,  364,  364,  364,  364,
+      333,   43,   43,  364,   43,   43,   43,   45,   45,   53,
+       53,   53,   98,   98,   98,   99,   99,  364,   99,   99,
+       99,  184,  364,  364,  184,  184,  200,  364,  364,  200,
+      211,  211,  211,  240,  364,  240,  240,  240,  266,  364,
+      364,  266,  266,  267,  267,  267,  289,  289,  289,  318,
+      364,  364,  318,  318,  333,  333,  333,  357,  364,  364,
+
+      357,  357,  359,  364,  359,  359,  359,    3,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  364
     } ;
 
-static yyconst flex_int16_t yy_chk[866] =
+static yyconst flex_int16_t yy_chk[974] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -643,93 +671,105 @@ static yyconst flex_int16_t yy_chk[866] =
         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,  246,   20,  227,   21,   35,   35,   18,   20,   22,
-       24,   22,   64,   24,   26,   64,   25,   28,  226,   26,
+       18,  260,   20,  233,   21,   35,   35,   18,   20,   22,
+       24,   22,   64,   24,   26,   64,   25,   28,  232,   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,  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,
-       36,   49,   49,   33,   32,   55,   33,   56,   57,   34,
-       34,   33,   60,   32,   34,   63,   61,   32,   37,   37,
-       37,   37,   39,   39,   39,   39,   41,   41,   41,   41,
-
-       68,   59,   56,   57,   62,  139,   60,   66,   66,   63,
-       59,   61,   36,   67,  108,   69,   70,  108,   71,   72,
-      138,   73,   74,   77,   68,   59,   81,   79,   80,   62,
-       36,   66,   66,   37,   59,   99,   72,   80,   67,   69,
-       82,   70,   71,   83,   72,   73,   74,   84,   77,   85,
-       81,   37,   79,   80,   86,   39,   87,  100,   89,   41,
-       72,   80,   89,  105,   82,   90,   91,   83,   96,  111,
-      146,   84,  111,  146,   85,  102,  103,  104,   86,  106,
-      107,   87,  100,   89,  109,  110,  115,   89,  105,   90,
-       91,   93,   93,   93,   93,   94,   94,   94,   94,  102,
-
-      103,  104,  111,  106,  112,  107,  113,  118,  109,  114,
-      110,  115,   95,  116,  117,  113,  120,   48,  121,  123,
-      124,  125,  126,  128,  130,   43,  111,  131,  112,  132,
-      136,  113,  118,  114,   38,  134,   93,  116,  117,  113,
-       94,  120,  121,  123,  124,  125,  126,  133,  128,  130,
-      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,  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,    0,    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,  300,  303,  285,
-      288,  299,    0,  301,    0,  292,  301,    0,    0,    0,
-
-        0,    0,    0,    0,  301,    0,    0,  300,    0,    0,
-        0,  300,    0,  303,    0,    0,    0,  298,    0,  299,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  301,  307,  307,    0,  307,  307,  307,  308,
-      308,  309,  309,  309,  310,  310,  310,  311,  311,    0,
-      311,  311,  311,  312,    0,    0,  312,  312,  313,    0,
-        0,  313,  314,  314,  314,  315,    0,  315,  315,  315,
-      316,    0,    0,  316,  316,  317,  317,  317,  318,  318,
-      318,  319,    0,    0,  319,  319,  320,  320,  320,  321,
-        0,    0,  321,  321,  322,    0,  322,  322,  322,  306,
-
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306
+       28,   29,    5,   25,   30,   55,    8,   30,   29,   60,
+       29,   27,   29,   31,  207,   27,   33,   42,   42,   33,
+       49,   49,   30,   27,   63,   33,   29,   56,   30,   32,
+       55,   30,   29,   60,   29,   57,   29,   68,   32,   32,
+       61,   33,  206,   32,   33,   34,   34,   62,   63,   33,
+       69,   34,   56,  179,   32,   36,   36,   36,   36,  178,
+       57,   68,   32,   32,   59,   61,   67,   32,   66,   66,
+
+       34,   34,   62,   59,   69,   34,   37,   37,   37,   37,
+       39,   39,   39,   39,   41,   41,   41,   41,   59,   70,
+       72,   67,   66,   66,  141,   71,   73,   59,   74,   77,
+       36,   79,   80,  140,   81,   82,   83,   72,   84,   85,
+       87,   80,   86,   88,   70,   72,  100,   91,   36,   71,
+       73,   37,   74,  101,   77,   92,   79,   80,   81,   82,
+       83,   72,   84,   85,   87,   80,   90,   86,   88,   37,
+       90,   91,  103,   39,  104,  105,  106,   41,  101,   92,
+       94,   94,   94,   94,   95,   95,   95,   95,  107,  108,
+      109,   90,  110,  109,  111,   90,  103,  112,  104,  105,
+
+      112,  106,  113,  115,  117,  148,  114,  116,  148,  118,
+      119,  121,  107,  122,  108,  114,  110,  124,  125,  111,
+      126,  127,  131,  129,  132,   94,  113,  115,  117,   95,
+      112,  114,  116,  118,  133,  119,  121,  122,  134,  114,
+      136,  124,  125,   94,  126,  127,  131,   95,  129,  132,
+      135,  137,  142,  135,  112,  138,  139,  145,  133,  143,
+      149,  151,  134,  149,  136,  152,  153,   97,  154,  159,
+      160,  161,  165,  166,   96,  137,  142,  135,  167,  168,
+      138,  139,  145,  143,  164,  169,  151,  164,  170,  152,
+      175,  153,  154,  159,  160,  176,  161,  165,  166,  164,
+
+      181,  135,  172,  167,  168,  172,  182,  183,  185,  169,
+      183,  186,  170,  190,  186,  175,  187,  188,  193,  192,
+      176,  194,  192,  195,  164,  181,  196,  197,  199,  172,
+      183,  182,  185,  239,  172,  198,  239,  172,  190,  192,
+      187,  188,   48,  193,  205,  194,  200,  195,  201,  200,
+      196,  201,  199,  172,  200,  183,  201,  197,  172,  202,
+      198,  172,  202,  203,  192,  210,  203,  202,  205,  209,
+      214,  203,  213,  215,  216,  213,  217,  216,  203,  218,
+      237,  197,  201,  219,  220,  216,  227,   43,  228,  202,
+      210,  228,  213,  209,  226,  214,  228,  226,  215,   38,
+
+      217,  227,  234,  203,  218,  237,  201,  219,  220,  236,
+      243,  227,  226,  202,  228,  238,  241,  213,  222,  244,
+      230,  229,  226,  230,  229,  227,  234,  226,  230,  229,
+      242,  246,  222,  236,  243,  222,  250,  226,  228,  245,
+      238,  241,  247,  244,  222,  230,  226,  222,  222,   17,
+      248,  226,  229,  249,  251,  242,  246,  222,  252,  254,
+      222,  250,  281,  245,  253,  281,  247,  253,  222,  230,
+      255,  222,  222,  223,  248,  256,  229,  249,  251,  263,
+      257,  265,  252,  257,  254,  268,  258,  223,  257,  258,
+      223,   13,  253,  269,  258,  255,  257,  273,  259,  223,
+
+      256,  259,  223,  223,  263,  265,  259,  272,  274,  268,
+      275,  276,  223,  277,  278,  223,  253,  269,  279,  258,
+      280,  257,  273,  223,  282,   12,  223,  223,  287,  288,
+        9,  272,  259,  274,  275,  276,  290,  284,  277,  278,
+      284,    3,  279,  258,  280,  284,  283,  285,  282,  283,
+      285,  292,  287,  288,  283,  285,  259,  293,    0,  294,
+      295,  290,  296,  297,  300,  283,  285,  301,  298,  299,
+      301,  302,    0,  303,  306,  292,  303,  304,  309,    0,
+      304,  303,  293,  294,  295,  326,  296,  311,  297,  300,
+      283,  285,  298,  299,  305,  304,  302,  305,  313,  306,
+
+      315,  310,  305,  309,  303,  304,  310,  322,  314,  326,
+      304,  320,  311,  314,  320,  321,  327,  328,  321,  320,
+      304,  323,  330,  313,  323,  315,  310,  331,  303,  304,
+      310,  332,  322,  314,  304,  335,  337,  314,  335,  323,
+      327,  334,  328,  321,  334,  345,  330,  336,  339,  323,
+      336,  331,  340,  342,  323,  343,  332,  344,  349,  334,
+      344,  337,  346,  347,  323,  346,  347,  321,    0,  334,
+      345,  351,  339,  323,  334,  336,  340,  342,  323,  343,
+        0,  360,  361,  349,  334,  344,  352,  353,  356,  352,
+      353,  356,  357,  334,    0,  357,  351,  358,  334,  336,
+
+        0,  359,  358,  357,  359,  360,    0,  361,    0,  344,
+        0,    0,  359,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  358,    0,    0,    0,  358,  356,    0,    0,
+        0,  357,    0,    0,    0,    0,    0,    0,    0,    0,
+      359,  365,  365,    0,  365,  365,  365,  366,  366,  367,
+      367,  367,  368,  368,  368,  369,  369,    0,  369,  369,
+      369,  370,    0,    0,  370,  370,  371,    0,    0,  371,
+      372,  372,  372,  373,    0,  373,  373,  373,  374,    0,
+        0,  374,  374,  375,  375,  375,  376,  376,  376,  377,
+        0,    0,  377,  377,  378,  378,  378,  379,    0,    0,
+
+      379,  379,  380,    0,  380,  380,  380,  364,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
+      364,  364,  364
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -818,7 +858,7 @@ static int checkImmediate(int token) {
 	return token;
 }
 
-#line 822 "engines/director/lingo/lingo-lex.cpp"
+#line 862 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -1004,7 +1044,7 @@ YY_DECL
 #line 87 "engines/director/lingo/lingo-lex.l"
 
 
-#line 1008 "engines/director/lingo/lingo-lex.cpp"
+#line 1048 "engines/director/lingo/lingo-lex.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -1058,13 +1098,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 >= 307 )
+				if ( yy_current_state >= 365 )
 					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 != 306 );
+		while ( yy_current_state != 364 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1345,16 +1385,40 @@ YY_RULE_SETUP
 case 47:
 YY_RULE_SETUP
 #line 164 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSTARTS; }
+{
+		count();
+
+		const char *ptr = &yytext[6]; // Skip 'sound '
+		while (*ptr == ' ' || *ptr == '\t')
+			ptr++;
+
+		Common::String command;
+		while (*ptr != ' ' && *ptr != '\t')
+			command += *ptr++;
+
+		Common::String bltin = Common::String::format("sound-%s", command.c_str());
+
+		if (g_lingo->_builtins.contains(bltin)) {
+			yylval.s = new Common::String(bltin);
+			return BLTIN;
+		} else {
+			error("LEXER: Unhandled 'sound %s'", command.c_str());
+		}
+	}
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 165 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTELL; }
+#line 184 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSTARTS; }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 166 "engines/director/lingo/lingo-lex.l"
+#line 185 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTELL; }
+	YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 186 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1364,9 +1428,9 @@ YY_RULE_SETUP
 		return THEENTITYWITHID;
 	}
 	YY_BREAK
-case 50:
+case 51:
 YY_RULE_SETUP
-#line 174 "engines/director/lingo/lingo-lex.l"
+#line 194 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1375,9 +1439,9 @@ YY_RULE_SETUP
 		return FBLTIN;
 	}
 	YY_BREAK
-case 51:
+case 52:
 YY_RULE_SETUP
-#line 181 "engines/director/lingo/lingo-lex.l"
+#line 201 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1402,9 +1466,9 @@ YY_RULE_SETUP
 			error("LEXER: Unhandled chunk expression '%s'", yylval.s->c_str());
 	}
 	YY_BREAK
-case 52:
+case 53:
 YY_RULE_SETUP
-#line 204 "engines/director/lingo/lingo-lex.l"
+#line 224 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1459,9 +1523,9 @@ YY_RULE_SETUP
 		warning("LEXER: Unhandled the entity '%s', field '%s'", ptr, field.c_str());
 	}
 	YY_BREAK
-case 53:
+case 54:
 YY_RULE_SETUP
-#line 257 "engines/director/lingo/lingo-lex.l"
+#line 277 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1494,9 +1558,9 @@ YY_RULE_SETUP
 			return THEENTITY;
 	}
 	YY_BREAK
-case 54:
+case 55:
 YY_RULE_SETUP
-#line 288 "engines/director/lingo/lingo-lex.l"
+#line 308 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1517,74 +1581,74 @@ YY_RULE_SETUP
 		warning("LEXER: Unhandled the entity '%s'", ptr);
 	}
 	YY_BREAK
-case 55:
+case 56:
 YY_RULE_SETUP
-#line 307 "engines/director/lingo/lingo-lex.l"
+#line 327 "engines/director/lingo/lingo-lex.l"
 { count(); return tTHEN; }
 	YY_BREAK
-case 56:
+case 57:
 YY_RULE_SETUP
-#line 308 "engines/director/lingo/lingo-lex.l"
+#line 328 "engines/director/lingo/lingo-lex.l"
 { count(); return tTO; }
 	YY_BREAK
-case 57:
+case 58:
 YY_RULE_SETUP
-#line 309 "engines/director/lingo/lingo-lex.l"
+#line 329 "engines/director/lingo/lingo-lex.l"
 { count(); return tSPRITE; }
 	YY_BREAK
-case 58:
+case 59:
 YY_RULE_SETUP
-#line 310 "engines/director/lingo/lingo-lex.l"
+#line 330 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITH; }
 	YY_BREAK
-case 59:
+case 60:
 YY_RULE_SETUP
-#line 311 "engines/director/lingo/lingo-lex.l"
+#line 331 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITHIN; }
 	YY_BREAK
-case 60:
+case 61:
 YY_RULE_SETUP
-#line 312 "engines/director/lingo/lingo-lex.l"
+#line 332 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHEN; }
 	YY_BREAK
-case 61:
+case 62:
 YY_RULE_SETUP
-#line 313 "engines/director/lingo/lingo-lex.l"
+#line 333 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHILE; }
 	YY_BREAK
-case 62:
+case 63:
 YY_RULE_SETUP
-#line 314 "engines/director/lingo/lingo-lex.l"
+#line 334 "engines/director/lingo/lingo-lex.l"
 { count(); return tWORD; }
 	YY_BREAK
-case 63:
+case 64:
 YY_RULE_SETUP
-#line 316 "engines/director/lingo/lingo-lex.l"
+#line 336 "engines/director/lingo/lingo-lex.l"
 { count(); return tNEQ; }
 	YY_BREAK
-case 64:
+case 65:
 YY_RULE_SETUP
-#line 317 "engines/director/lingo/lingo-lex.l"
+#line 337 "engines/director/lingo/lingo-lex.l"
 { count(); return tGE; }
 	YY_BREAK
-case 65:
+case 66:
 YY_RULE_SETUP
-#line 318 "engines/director/lingo/lingo-lex.l"
+#line 338 "engines/director/lingo/lingo-lex.l"
 { count(); return tLE; }
 	YY_BREAK
-case 66:
+case 67:
 YY_RULE_SETUP
-#line 319 "engines/director/lingo/lingo-lex.l"
+#line 339 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONCAT; }
 	YY_BREAK
-case 67:
+case 68:
 YY_RULE_SETUP
-#line 320 "engines/director/lingo/lingo-lex.l"
+#line 340 "engines/director/lingo/lingo-lex.l"
 { count(); return tEQ; }
 	YY_BREAK
-case 68:
+case 69:
 YY_RULE_SETUP
-#line 322 "engines/director/lingo/lingo-lex.l"
+#line 342 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1618,43 +1682,43 @@ YY_RULE_SETUP
 		return ID;
 	}
 	YY_BREAK
-case 69:
+case 70:
 YY_RULE_SETUP
-#line 354 "engines/director/lingo/lingo-lex.l"
+#line 374 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
-case 70:
+case 71:
 YY_RULE_SETUP
-#line 355 "engines/director/lingo/lingo-lex.l"
+#line 375 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
-case 71:
+case 72:
 YY_RULE_SETUP
-#line 356 "engines/director/lingo/lingo-lex.l"
+#line 376 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
-case 72:
-/* rule 72 can match eol */
+case 73:
+/* rule 73 can match eol */
 YY_RULE_SETUP
-#line 357 "engines/director/lingo/lingo-lex.l"
+#line 377 "engines/director/lingo/lingo-lex.l"
 { count(); return '\n'; }
 	YY_BREAK
-case 73:
+case 74:
 YY_RULE_SETUP
-#line 358 "engines/director/lingo/lingo-lex.l"
+#line 378 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
-case 74:
+case 75:
 YY_RULE_SETUP
-#line 359 "engines/director/lingo/lingo-lex.l"
+#line 379 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
-case 75:
+case 76:
 YY_RULE_SETUP
-#line 361 "engines/director/lingo/lingo-lex.l"
+#line 381 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1658 "engines/director/lingo/lingo-lex.cpp"
+#line 1722 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1948,7 +2012,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 >= 307 )
+			if ( yy_current_state >= 365 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1976,11 +2040,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 >= 307 )
+		if ( yy_current_state >= 365 )
 			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 == 306);
+	yy_is_jam = (yy_current_state == 364);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2614,7 +2678,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 361 "engines/director/lingo/lingo-lex.l"
+#line 381 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index fbe11f4..e69e516 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -161,6 +161,26 @@ whitespace [\t ]
 (?i:put)		{ count(); return tPUT; }
 (?i:repeat)		{ count(); return checkImmediate(tREPEAT); }
 (?i:set)		{ count(); return tSET; }
+(?i:sound[\ t]+(close|fadeIn|fadeOut|playFile|stop))	{
+		count();
+
+		const char *ptr = &yytext[6]; // Skip 'sound '
+		while (*ptr == ' ' || *ptr == '\t')
+			ptr++;
+
+		Common::String command;
+		while (*ptr != ' ' && *ptr != '\t')
+			command += *ptr++;
+
+		Common::String bltin = Common::String::format("sound-%s", command.c_str());
+
+		if (g_lingo->_builtins.contains(bltin)) {
+			yylval.s = new Common::String(bltin);
+			return BLTIN;
+		} else {
+			error("LEXER: Unhandled 'sound %s'", command.c_str());
+		}
+	}
 (?i:starts)		{ count(); return tSTARTS; }
 (?i:tell)		{ count(); return tTELL; }
 (?i:the[ \t]+sqrt[\t ]+of[\t ]+)	{


Commit: 6975061434460096be89e00214130f2315ed6832
    https://github.com/scummvm/scummvm/commit/6975061434460096be89e00214130f2315ed6832
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-14T18:58:11+01:00

Commit Message:
DIRECTOR: LINGO: Added tests for the 'sound <xx>' fzmily of commands

Changed paths:
  A engines/director/lingo/tests/sound.lingo


diff --git a/engines/director/lingo/tests/sound.lingo b/engines/director/lingo/tests/sound.lingo
new file mode 100644
index 0000000..61f8776
--- /dev/null
+++ b/engines/director/lingo/tests/sound.lingo
@@ -0,0 +1,6 @@
+Sound playfile 3, "Sound.AIF"
+
+sound fadeIn 5
+sound fadeIn 5, 10
+sound stop 1
+sound close 1




More information about the Scummvm-git-logs mailing list