[Scummvm-git-logs] scummvm master -> 3f491601f3a53242c08d31ec7be3e0d109b422a0

sev- sev at scummvm.org
Wed Jan 11 00:21:42 CET 2017


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

Summary:
d7ea2b0bc6 DIRECTOR: Lingo: Started documenting D4 keywords
3f491601f3 DIRECTOR: Lingo: Implemented 'duplicate cast' stub


Commit: d7ea2b0bc69d3fa6f07dbc93217f7ea840967b4b
    https://github.com/scummvm/scummvm/commit/d7ea2b0bc69d3fa6f07dbc93217f7ea840967b4b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-01-11T00:21:32+01:00

Commit Message:
DIRECTOR: Lingo: Started documenting D4 keywords

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


diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 9ca90af..b1cf3a6 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -99,7 +99,7 @@ TheEntity entities[] = {
 	{ kTheShiftDown,		"shiftDown",		false },	// D2 f
 	{ kTheSoundEnabled,		"soundEnabled",		false },	// D2 p
 	{ kTheSoundLevel,		"soundLevel",		false },	// D2 p
-	{ kTheSprite,			"sprite",			true  },
+	{ kTheSprite,			"sprite",			true  },	//				D4
 	{ kTheSqrt,				"sqrt",				false },	// D2 f
 	{ kTheStage,			"stage",			false },
 	{ kTheStageBottom,		"stageBottom",		false },	// D2 f
@@ -160,7 +160,7 @@ TheEntityField fields[] = {
 	{ kTheCastMembers,	"number",	kTheNumber },		// 		D3 p
 
 	// Common cast fields
-	{ kTheCast,		"castType",		kTheCastType },
+	{ kTheCast,		"castType",		kTheCastType },		//				D4 p
 	{ kTheCast,		"filename",		kTheFilename },
 	{ kTheCast,		"height",		kTheHeight },
 	{ kTheCast,		"loaded",		kTheLoaded },


Commit: 3f491601f3a53242c08d31ec7be3e0d109b422a0
    https://github.com/scummvm/scummvm/commit/3f491601f3a53242c08d31ec7be3e0d109b422a0
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-01-11T00:21:32+01:00

Commit Message:
DIRECTOR: Lingo: Implemented 'duplicate cast' stub

That is yet-another deviation from clean grammar rules in origial.
In order to avoid mess, two-word builtins are implemented, and
'sound <op>' are also switched to that method.

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.h
    engines/director/lingo/lingo-gr.y
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l
    engines/director/lingo/lingo.h


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 7597deb..8da9722 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -107,7 +107,9 @@ static struct BuiltinProto {
 	// Score
 	{ "constrainH",		Lingo::b_constrainH,	2, 2, true },	// D2
 	{ "constrainV",		Lingo::b_constrainV,	2, 2, true },	// D2
+	{ "duplicate-cast",	Lingo::b_duplicateCast,	1, 2, false },	//			D4
 	{ "editableText",	Lingo::b_editableText,	0, 0, false },	// D2
+	{ "erase-cast",		Lingo::b_eraseCast,		1, 2, false },	//			D4
 		// go													// D2
 	{ "installMenu",	Lingo::b_installMenu,	1, 1, false },	// D2
 	{ "label",			Lingo::b_label,			1, 1, true },	// D2
@@ -151,6 +153,13 @@ static struct BuiltinProto {
 	{ 0, 0, 0, 0, false }
 };
 
+static const char *twoWordBuiltins[] = {
+	"duplicate",
+	"erase",
+	"sound",
+	0
+};
+
 void Lingo::initBuiltIns() {
 	for (BuiltinProto *blt = builtins; blt->name; blt++) {
 		Symbol *sym = new Symbol;
@@ -167,6 +176,9 @@ void Lingo::initBuiltIns() {
 
 		_functions[(void *)sym->u.s] = new FuncDesc(blt->name, "");
 	}
+
+	for (const char **b = twoWordBuiltins; *b; b++)
+		_twoWordBuiltins[*b] = true;
 }
 
 void Lingo::printStubWithArglist(const char *funcname, int nargs) {
@@ -708,10 +720,22 @@ void Lingo::b_constrainV(int nargs) {
 	g_lingo->push(Datum(0));
 }
 
+void Lingo::b_duplicateCast(int nargs) {
+	g_lingo->printStubWithArglist("b_duplicateCast", nargs);
+
+	g_lingo->dropStack(nargs);
+}
+
 void Lingo::b_editableText(int nargs) {
 	warning("STUB: b_editableText");
 }
 
+void Lingo::b_eraseCast(int nargs) {
+	g_lingo->printStubWithArglist("b_eraseCast", nargs);
+
+	g_lingo->dropStack(nargs);
+}
+
 void Lingo::b_installMenu(int nargs) {
 	Datum d = g_lingo->pop();
 	warning("STUB: b_installMenu(%d)", d.u.i);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 84bde0b..7f75b36 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -83,66 +83,66 @@
      BLTINNOARGSORONE = 272,
      BLTINONEARG = 273,
      BLTINARGLIST = 274,
-     ID = 275,
-     STRING = 276,
-     HANDLER = 277,
-     SYMBOL = 278,
-     ENDCLAUSE = 279,
-     tDOWN = 280,
-     tELSE = 281,
-     tNLELSIF = 282,
-     tEXIT = 283,
-     tFRAME = 284,
-     tGLOBAL = 285,
-     tGO = 286,
-     tIF = 287,
-     tINTO = 288,
-     tLOOP = 289,
-     tMACRO = 290,
-     tMOVIE = 291,
-     tNEXT = 292,
-     tOF = 293,
-     tPREVIOUS = 294,
-     tPUT = 295,
-     tREPEAT = 296,
-     tSET = 297,
-     tTHEN = 298,
-     tTO = 299,
-     tWHEN = 300,
-     tWITH = 301,
-     tWHILE = 302,
-     tNLELSE = 303,
-     tFACTORY = 304,
-     tMETHOD = 305,
-     tOPEN = 306,
-     tPLAY = 307,
-     tDONE = 308,
-     tPLAYACCEL = 309,
-     tINSTANCE = 310,
-     tGE = 311,
-     tLE = 312,
-     tGT = 313,
-     tLT = 314,
-     tEQ = 315,
-     tNEQ = 316,
-     tAND = 317,
-     tOR = 318,
-     tNOT = 319,
-     tMOD = 320,
-     tAFTER = 321,
-     tBEFORE = 322,
-     tCONCAT = 323,
-     tCONTAINS = 324,
-     tSTARTS = 325,
-     tCHAR = 326,
-     tITEM = 327,
-     tLINE = 328,
-     tWORD = 329,
-     tSPRITE = 330,
-     tINTERSECTS = 331,
-     tWITHIN = 332,
-     tON = 333,
-     tSOUND = 334
+     TWOWORDBUILTIN = 275,
+     ID = 276,
+     STRING = 277,
+     HANDLER = 278,
+     SYMBOL = 279,
+     ENDCLAUSE = 280,
+     tDOWN = 281,
+     tELSE = 282,
+     tNLELSIF = 283,
+     tEXIT = 284,
+     tFRAME = 285,
+     tGLOBAL = 286,
+     tGO = 287,
+     tIF = 288,
+     tINTO = 289,
+     tLOOP = 290,
+     tMACRO = 291,
+     tMOVIE = 292,
+     tNEXT = 293,
+     tOF = 294,
+     tPREVIOUS = 295,
+     tPUT = 296,
+     tREPEAT = 297,
+     tSET = 298,
+     tTHEN = 299,
+     tTO = 300,
+     tWHEN = 301,
+     tWITH = 302,
+     tWHILE = 303,
+     tNLELSE = 304,
+     tFACTORY = 305,
+     tMETHOD = 306,
+     tOPEN = 307,
+     tPLAY = 308,
+     tDONE = 309,
+     tPLAYACCEL = 310,
+     tINSTANCE = 311,
+     tGE = 312,
+     tLE = 313,
+     tGT = 314,
+     tLT = 315,
+     tEQ = 316,
+     tNEQ = 317,
+     tAND = 318,
+     tOR = 319,
+     tNOT = 320,
+     tMOD = 321,
+     tAFTER = 322,
+     tBEFORE = 323,
+     tCONCAT = 324,
+     tCONTAINS = 325,
+     tSTARTS = 326,
+     tCHAR = 327,
+     tITEM = 328,
+     tLINE = 329,
+     tWORD = 330,
+     tSPRITE = 331,
+     tINTERSECTS = 332,
+     tWITHIN = 333,
+     tON = 334
    };
 #endif
 /* Tokens.  */
@@ -163,66 +163,66 @@
 #define BLTINNOARGSORONE 272
 #define BLTINONEARG 273
 #define BLTINARGLIST 274
-#define ID 275
-#define STRING 276
-#define HANDLER 277
-#define SYMBOL 278
-#define ENDCLAUSE 279
-#define tDOWN 280
-#define tELSE 281
-#define tNLELSIF 282
-#define tEXIT 283
-#define tFRAME 284
-#define tGLOBAL 285
-#define tGO 286
-#define tIF 287
-#define tINTO 288
-#define tLOOP 289
-#define tMACRO 290
-#define tMOVIE 291
-#define tNEXT 292
-#define tOF 293
-#define tPREVIOUS 294
-#define tPUT 295
-#define tREPEAT 296
-#define tSET 297
-#define tTHEN 298
-#define tTO 299
-#define tWHEN 300
-#define tWITH 301
-#define tWHILE 302
-#define tNLELSE 303
-#define tFACTORY 304
-#define tMETHOD 305
-#define tOPEN 306
-#define tPLAY 307
-#define tDONE 308
-#define tPLAYACCEL 309
-#define tINSTANCE 310
-#define tGE 311
-#define tLE 312
-#define tGT 313
-#define tLT 314
-#define tEQ 315
-#define tNEQ 316
-#define tAND 317
-#define tOR 318
-#define tNOT 319
-#define tMOD 320
-#define tAFTER 321
-#define tBEFORE 322
-#define tCONCAT 323
-#define tCONTAINS 324
-#define tSTARTS 325
-#define tCHAR 326
-#define tITEM 327
-#define tLINE 328
-#define tWORD 329
-#define tSPRITE 330
-#define tINTERSECTS 331
-#define tWITHIN 332
-#define tON 333
-#define tSOUND 334
+#define TWOWORDBUILTIN 275
+#define ID 276
+#define STRING 277
+#define HANDLER 278
+#define SYMBOL 279
+#define ENDCLAUSE 280
+#define tDOWN 281
+#define tELSE 282
+#define tNLELSIF 283
+#define tEXIT 284
+#define tFRAME 285
+#define tGLOBAL 286
+#define tGO 287
+#define tIF 288
+#define tINTO 289
+#define tLOOP 290
+#define tMACRO 291
+#define tMOVIE 292
+#define tNEXT 293
+#define tOF 294
+#define tPREVIOUS 295
+#define tPUT 296
+#define tREPEAT 297
+#define tSET 298
+#define tTHEN 299
+#define tTO 300
+#define tWHEN 301
+#define tWITH 302
+#define tWHILE 303
+#define tNLELSE 304
+#define tFACTORY 305
+#define tMETHOD 306
+#define tOPEN 307
+#define tPLAY 308
+#define tDONE 309
+#define tPLAYACCEL 310
+#define tINSTANCE 311
+#define tGE 312
+#define tLE 313
+#define tGT 314
+#define tLT 315
+#define tEQ 316
+#define tNEQ 317
+#define tAND 318
+#define tOR 319
+#define tNOT 320
+#define tMOD 321
+#define tAFTER 322
+#define tBEFORE 323
+#define tCONCAT 324
+#define tCONTAINS 325
+#define tSTARTS 326
+#define tCHAR 327
+#define tITEM 328
+#define tLINE 329
+#define tWORD 330
+#define tSPRITE 331
+#define tINTERSECTS 332
+#define tWITHIN 333
+#define tON 334
 
 
 
@@ -518,7 +518,7 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  105
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1548
+#define YYLAST   1486
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  93
@@ -602,59 +602,59 @@ static const yytype_int16 yyrhs[] =
 {
       94,     0,    -1,    94,    95,    96,    -1,    96,    -1,     1,
       95,    -1,    87,    -1,    -1,   123,    -1,   116,    -1,   130,
-      -1,    97,    -1,    99,    -1,    40,   115,    33,    20,    -1,
-      40,   115,    66,   115,    -1,    40,   115,    67,   115,    -1,
-      42,    20,    80,   115,    -1,    42,    12,    80,   115,    -1,
-      42,    13,   115,    80,   115,    -1,    42,    20,    44,   115,
-      -1,    42,    12,    44,   115,    -1,    42,    13,   115,    44,
+      -1,    97,    -1,    99,    -1,    41,   115,    34,    21,    -1,
+      41,   115,    67,   115,    -1,    41,   115,    68,   115,    -1,
+      43,    21,    80,   115,    -1,    43,    12,    80,   115,    -1,
+      43,    13,   115,    80,   115,    -1,    43,    21,    45,   115,
+      -1,    43,    12,    45,   115,    -1,    43,    13,   115,    45,
      115,    -1,   115,    -1,   116,    -1,    98,    -1,   100,    -1,
-     107,    88,   106,    89,   113,   112,    24,    -1,   108,    80,
-     115,   112,    44,   115,   112,   113,   112,    24,    -1,   108,
-      80,   115,   112,    25,    44,   115,   112,   113,   112,    24,
-      -1,   114,   115,   112,    -1,   109,   106,    43,    95,   113,
-     112,    24,    -1,   109,   106,    43,    95,   113,   112,    48,
-     113,   112,    24,    -1,   109,   106,    43,    95,   113,   112,
-     111,   102,   112,    24,    -1,   109,   106,    43,   111,    98,
-     112,    -1,   109,   106,    43,   111,    98,   112,    48,   111,
-      98,   112,    -1,   109,   106,    43,   111,    98,   112,   103,
-     112,   101,   112,    -1,    -1,    48,   111,    98,    -1,   102,
+     107,    88,   106,    89,   113,   112,    25,    -1,   108,    80,
+     115,   112,    45,   115,   112,   113,   112,    25,    -1,   108,
+      80,   115,   112,    26,    45,   115,   112,   113,   112,    25,
+      -1,   114,   115,   112,    -1,   109,   106,    44,    95,   113,
+     112,    25,    -1,   109,   106,    44,    95,   113,   112,    49,
+     113,   112,    25,    -1,   109,   106,    44,    95,   113,   112,
+     111,   102,   112,    25,    -1,   109,   106,    44,   111,    98,
+     112,    -1,   109,   106,    44,   111,    98,   112,    49,   111,
+      98,   112,    -1,   109,   106,    44,   111,    98,   112,   103,
+     112,   101,   112,    -1,    -1,    49,   111,    98,    -1,   102,
      105,    -1,   105,    -1,   103,   104,    -1,   104,    -1,   110,
-     106,    43,   111,    99,   112,    -1,   103,    -1,   110,   106,
-      43,   113,   112,    -1,   115,    -1,   115,    80,   115,    -1,
-      88,   106,    89,    -1,    41,    47,    -1,    41,    46,    20,
-      -1,    32,    -1,    27,    -1,    -1,    -1,    -1,   113,    95,
-      -1,   113,    99,    -1,    45,    20,    43,    -1,    11,    -1,
-      14,    -1,    23,    -1,    21,    -1,    16,    -1,    20,    88,
-     131,    89,    -1,    20,    -1,    12,    -1,    13,   115,    -1,
+     106,    44,   111,    99,   112,    -1,   103,    -1,   110,   106,
+      44,   113,   112,    -1,   115,    -1,   115,    80,   115,    -1,
+      88,   106,    89,    -1,    42,    48,    -1,    42,    47,    21,
+      -1,    33,    -1,    28,    -1,    -1,    -1,    -1,   113,    95,
+      -1,   113,    99,    -1,    46,    21,    44,    -1,    11,    -1,
+      14,    -1,    24,    -1,    22,    -1,    16,    -1,    21,    88,
+     131,    89,    -1,    21,    -1,    12,    -1,    13,   115,    -1,
       97,    -1,   115,    82,   115,    -1,   115,    83,   115,    -1,
-     115,    84,   115,    -1,   115,    85,   115,    -1,   115,    65,
+     115,    84,   115,    -1,   115,    85,   115,    -1,   115,    66,
      115,    -1,   115,    90,   115,    -1,   115,    91,   115,    -1,
-     115,    61,   115,    -1,   115,    56,   115,    -1,   115,    57,
-     115,    -1,   115,    62,   115,    -1,   115,    63,   115,    -1,
-      64,   115,    -1,   115,    81,   115,    -1,   115,    66,   115,
-      -1,   115,    68,   115,    -1,   115,    69,   115,    -1,   115,
-      70,   115,    -1,    82,   115,    -1,    83,   115,    -1,    88,
-     115,    89,    -1,    75,   115,    76,   115,    -1,    75,   115,
-      77,   115,    -1,    71,   115,    38,   115,    -1,    71,   115,
-      44,   115,    38,   115,    -1,    72,   115,    38,   115,    -1,
-      72,   115,    44,   115,    38,   115,    -1,    73,   115,    38,
-     115,    -1,    73,   115,    44,   115,    38,   115,    -1,    74,
-     115,    38,   115,    -1,    74,   115,    44,   115,    38,   115,
-      -1,    40,   115,    -1,   119,    -1,   122,    -1,    28,    41,
-      -1,    28,    -1,    30,   117,    -1,    55,   118,    -1,    18,
+     115,    62,   115,    -1,   115,    57,   115,    -1,   115,    58,
+     115,    -1,   115,    63,   115,    -1,   115,    64,   115,    -1,
+      65,   115,    -1,   115,    81,   115,    -1,   115,    67,   115,
+      -1,   115,    69,   115,    -1,   115,    70,   115,    -1,   115,
+      71,   115,    -1,    82,   115,    -1,    83,   115,    -1,    88,
+     115,    89,    -1,    76,   115,    77,   115,    -1,    76,   115,
+      78,   115,    -1,    72,   115,    39,   115,    -1,    72,   115,
+      45,   115,    39,   115,    -1,    73,   115,    39,   115,    -1,
+      73,   115,    45,   115,    39,   115,    -1,    74,   115,    39,
+     115,    -1,    74,   115,    45,   115,    39,   115,    -1,    75,
+     115,    39,   115,    -1,    75,   115,    45,   115,    39,   115,
+      -1,    41,   115,    -1,   119,    -1,   122,    -1,    29,    42,
+      -1,    29,    -1,    31,   117,    -1,    56,   118,    -1,    18,
      115,    -1,    17,   115,    -1,    17,    -1,    19,   131,    -1,
-      51,   115,    46,   115,    -1,    51,   115,    -1,    79,    20,
-     131,    -1,    20,    -1,   117,    92,    20,    -1,    20,    -1,
-     118,    92,    20,    -1,    31,    34,    -1,    31,    37,    -1,
-      31,    39,    -1,    31,   120,    -1,    31,   120,   121,    -1,
-      31,   121,    -1,    29,   115,    -1,   115,    -1,    38,    36,
-     115,    -1,    36,   115,    -1,    52,    53,    -1,    52,   120,
-      -1,    52,   120,   121,    -1,    52,   121,    -1,    -1,    35,
-      20,   124,   111,   128,    95,   129,   113,    -1,    49,    20,
-      -1,    -1,    50,    20,   125,   111,   128,    95,   129,   113,
-      -1,    -1,    -1,    78,    20,   126,   111,   127,   128,    95,
-     129,   113,    24,    -1,    -1,    20,    -1,   128,    92,    20,
-      -1,   128,    95,    92,    20,    -1,    -1,    20,   111,   131,
+      52,   115,    47,   115,    -1,    52,   115,    -1,    20,    21,
+     131,    -1,    21,    -1,   117,    92,    21,    -1,    21,    -1,
+     118,    92,    21,    -1,    32,    35,    -1,    32,    38,    -1,
+      32,    40,    -1,    32,   120,    -1,    32,   120,   121,    -1,
+      32,   121,    -1,    30,   115,    -1,   115,    -1,    39,    37,
+     115,    -1,    37,   115,    -1,    53,    54,    -1,    53,   120,
+      -1,    53,   120,   121,    -1,    53,   121,    -1,    -1,    36,
+      21,   124,   111,   128,    95,   129,   113,    -1,    50,    21,
+      -1,    -1,    51,    21,   125,   111,   128,    95,   129,   113,
+      -1,    -1,    -1,    79,    21,   126,   111,   127,   128,    95,
+     129,   113,    25,    -1,    -1,    21,    -1,   128,    92,    21,
+      -1,   128,    95,    92,    21,    -1,    -1,    21,   111,   131,
       -1,    -1,   115,    -1,   131,    92,   115,    -1
 };
 
@@ -687,15 +687,15 @@ static const char *const yytname[] =
   "$end", "error", "$undefined", "UNARY", "CASTREF", "VOID", "VAR",
   "POINT", "RECT", "ARRAY", "OBJECT", "INT", "THEENTITY",
   "THEENTITYWITHID", "FLOAT", "BLTIN", "BLTINNOARGS", "BLTINNOARGSORONE",
-  "BLTINONEARG", "BLTINARGLIST", "ID", "STRING", "HANDLER", "SYMBOL",
-  "ENDCLAUSE", "tDOWN", "tELSE", "tNLELSIF", "tEXIT", "tFRAME", "tGLOBAL",
-  "tGO", "tIF", "tINTO", "tLOOP", "tMACRO", "tMOVIE", "tNEXT", "tOF",
-  "tPREVIOUS", "tPUT", "tREPEAT", "tSET", "tTHEN", "tTO", "tWHEN", "tWITH",
-  "tWHILE", "tNLELSE", "tFACTORY", "tMETHOD", "tOPEN", "tPLAY", "tDONE",
-  "tPLAYACCEL", "tINSTANCE", "tGE", "tLE", "tGT", "tLT", "tEQ", "tNEQ",
-  "tAND", "tOR", "tNOT", "tMOD", "tAFTER", "tBEFORE", "tCONCAT",
-  "tCONTAINS", "tSTARTS", "tCHAR", "tITEM", "tLINE", "tWORD", "tSPRITE",
-  "tINTERSECTS", "tWITHIN", "tON", "tSOUND", "'='", "'&'", "'+'", "'-'",
+  "BLTINONEARG", "BLTINARGLIST", "TWOWORDBUILTIN", "ID", "STRING",
+  "HANDLER", "SYMBOL", "ENDCLAUSE", "tDOWN", "tELSE", "tNLELSIF", "tEXIT",
+  "tFRAME", "tGLOBAL", "tGO", "tIF", "tINTO", "tLOOP", "tMACRO", "tMOVIE",
+  "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT", "tSET", "tTHEN", "tTO",
+  "tWHEN", "tWITH", "tWHILE", "tNLELSE", "tFACTORY", "tMETHOD", "tOPEN",
+  "tPLAY", "tDONE", "tPLAYACCEL", "tINSTANCE", "tGE", "tLE", "tGT", "tLT",
+  "tEQ", "tNEQ", "tAND", "tOR", "tNOT", "tMOD", "tAFTER", "tBEFORE",
+  "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR", "tITEM", "tLINE", "tWORD",
+  "tSPRITE", "tINTERSECTS", "tWITHIN", "tON", "'='", "'&'", "'+'", "'-'",
   "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "'>'", "'<'", "','",
   "$accept", "program", "nl", "programline", "asgn", "stmtoneliner",
   "stmt", "ifstmt", "elsestmtoneliner", "elseifstmt", "elseifstmtoneliner",
@@ -771,22 +771,22 @@ static const yytype_uint8 yyr2[] =
 static const yytype_uint8 yydefact[] =
 {
        0,     0,    57,    64,     0,    58,    61,   107,     0,   144,
-      51,    60,    59,   102,     0,     0,    49,     0,     0,     0,
+       0,    51,    60,    59,   102,     0,     0,    49,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     3,
       66,    23,    11,    24,     0,     0,     0,     0,    21,     8,
       99,   100,     7,     9,     5,     4,    63,     0,    66,    65,
-     106,   105,   145,   108,   144,   144,   101,   112,   103,     0,
-     116,     0,   117,     0,   118,   123,   119,   121,   130,    98,
-       0,    47,     0,     0,     0,     0,   132,   133,   110,   126,
-     127,   129,   114,   104,    79,     0,     0,     0,     0,     0,
-     135,   144,    85,    86,     0,     1,     6,     0,     0,     0,
+     106,   105,   145,   108,   144,   144,   144,   101,   112,   103,
+       0,   116,     0,   117,     0,   118,   123,   119,   121,   130,
+      98,     0,    47,     0,     0,     0,     0,   132,   133,   110,
+     126,   127,   129,   114,   104,    79,     0,     0,     0,     0,
+       0,   135,    85,    86,     0,     1,     6,     0,     0,     0,
        0,    44,    52,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   143,     0,   122,   125,     0,   120,    51,
-       0,     0,     0,    48,     0,     0,     0,     0,     0,    56,
-      51,     0,   128,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    51,   111,    87,     2,     0,    52,
+       0,     0,   111,     0,   143,     0,   122,   125,     0,   120,
+      51,     0,     0,     0,    48,     0,     0,     0,     0,     0,
+      56,    51,     0,   128,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    51,    87,     2,     0,    52,
        0,     0,    51,     0,    28,    75,    76,    74,    77,    78,
       71,    81,    82,    83,    84,    80,    67,    68,    69,    70,
       72,    73,   146,    62,   113,   124,   138,    12,    13,    14,
@@ -809,56 +809,56 @@ static const yytype_int16 yydefgoto[] =
 {
       -1,    38,   250,    39,    58,    41,   251,    43,   297,   280,
      281,   271,   282,   110,    44,    45,    46,   272,   308,   174,
-     236,    47,    48,   241,    68,    93,    50,    76,    77,    51,
-      52,   139,   150,   164,   235,   227,   259,    53,    63
+     236,    47,    48,   241,    69,    94,    50,    77,    78,    51,
+      52,   140,   151,   165,   235,   227,   259,    53,    63
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -247
+#define YYPACT_NINF -234
 static const yytype_int16 yypact[] =
 {
-     319,   -58,  -247,  -247,   881,  -247,  -247,   881,   881,   881,
-    1447,  -247,  -247,    15,    12,   772,  -247,    18,   881,     7,
-      14,    24,    29,    41,   881,   845,    42,   881,   881,   881,
-     881,   881,   881,    43,    45,   881,   881,   881,     2,  -247,
-       5,  -247,  -247,  -247,   -21,   -10,   918,   881,  1416,  -247,
-    -247,  -247,  -247,  -247,  -247,  -247,   -14,   881,  -247,  1416,
-    1416,  1416,  1416,    -8,   881,   881,  -247,  -247,    -7,   881,
-    -247,   881,  -247,    37,  -247,  1416,    10,  -247,  -247,   942,
-      57,  -247,   -37,   881,   -29,    48,  -247,  -247,  1261,  -247,
-      10,  -247,  -247,     1,   -49,   978,  1014,  1050,  1086,  1292,
-    -247,   881,   -49,   -49,  1354,  -247,   397,   918,   881,   918,
-      52,  1385,  1416,   881,   881,   881,   881,   881,   881,   881,
-     881,   881,   881,   881,   881,   881,   881,   881,   881,   881,
-     942,   881,   -61,    -8,    74,  1416,  1416,   881,  -247,  -247,
-      76,   881,   881,  -247,   881,   881,   160,   881,   881,  -247,
-    -247,   881,  -247,    79,   881,   881,   881,   881,   881,   881,
-     881,   881,   881,   881,  -247,    -8,  -247,  -247,    13,  1416,
-      22,  1323,   -58,   881,  -247,   734,   734,   734,   -49,   -49,
-     -49,  1416,  1416,   734,   734,  1457,    63,    63,   -49,   -49,
-    1416,  1416,  1416,  -247,  -247,  1416,    83,  -247,  1416,  1416,
-    1416,  1416,   881,   881,  1416,  1416,    83,  1416,  -247,  1416,
-    1122,  1416,  1158,  1416,  1194,  1416,  1230,  1416,  1416,  -247,
-    -247,     8,  -247,  -247,   699,  1416,  -247,   -62,  1416,  1416,
-     -62,   881,   881,   881,   881,    83,   548,    60,   881,   548,
-    -247,  -247,    92,    21,    21,  1416,  1416,  1416,  1416,   -62,
-    -247,  -247,    90,   881,  1416,    -3,   -11,  -247,    99,  -247,
-    -247,    21,  -247,  1416,  -247,  -247,  -247,    94,  -247,  -247,
-      94,  -247,   918,  -247,   548,   548,  -247,  -247,   548,   548,
-      94,    94,  -247,   918,   699,  -247,    75,    81,   470,   548,
-     103,   108,  -247,   109,    93,  -247,  -247,  -247,  -247,  -247,
-     111,  -247,  -247,  -247,   -15,  -247,   699,  -247,   626,  -247,
-     548,  -247,  -247,  -247,  -247
+     318,   -60,  -234,  -234,   880,  -234,  -234,   880,   880,   880,
+      16,  1395,  -234,  -234,    -3,    44,   771,  -234,    47,   880,
+      57,    81,    78,    80,    89,   880,   844,    92,   880,   880,
+     880,   880,   880,   880,   100,   880,   880,   880,     4,  -234,
+       5,  -234,  -234,  -234,    35,    -9,   917,   880,  1365,  -234,
+    -234,  -234,  -234,  -234,  -234,  -234,    36,   880,  -234,  1365,
+    1365,  1365,  1365,   -18,   880,   880,   880,  -234,  -234,    40,
+     880,  -234,   880,  -234,    90,  -234,  1365,    -6,  -234,  -234,
+     940,   112,  -234,   -35,   880,   -32,    91,  -234,  -234,   -41,
+    -234,    -6,  -234,  -234,    45,    21,   158,   975,  1010,  1045,
+    1245,  -234,    21,    21,  1305,  -234,   396,   917,   880,   917,
+      94,  1335,  1365,   880,   880,   880,   880,   880,   880,   880,
+     880,   880,   880,   880,   880,   880,   880,   880,   880,   880,
+     940,   880,   -18,   -28,   -18,   115,  1365,  1365,   880,  -234,
+    -234,   118,   880,   880,  -234,   880,   880,  1215,   880,   880,
+    -234,  -234,   880,  -234,   119,   880,   880,   880,   880,   880,
+     880,   880,   880,   880,   880,  -234,  -234,  -234,    59,  1365,
+      60,  1275,   -60,   880,  -234,    62,    62,    62,    21,    21,
+      21,  1365,  1365,    62,    62,   207,   463,   463,    21,    21,
+    1365,  1365,  1365,  -234,  -234,  1365,   121,  -234,  1365,  1365,
+    1365,  1365,   880,   880,  1365,  1365,   121,  1365,  -234,  1365,
+    1080,  1365,  1115,  1365,  1150,  1365,  1185,  1365,  1365,  -234,
+    -234,     6,  -234,  -234,   698,  1365,  -234,    11,  1365,  1365,
+      11,   880,   880,   880,   880,   121,   547,   105,   880,   547,
+    -234,  -234,   130,    64,    64,  1365,  1365,  1365,  1365,    11,
+    -234,  -234,   129,   880,  1365,   -11,   -13,  -234,   139,  -234,
+    -234,    64,  -234,  1365,  -234,  -234,  -234,   133,  -234,  -234,
+     133,  -234,   917,  -234,   547,   547,  -234,  -234,   547,   547,
+     133,   133,  -234,   917,   698,  -234,   136,   138,   469,   547,
+     161,   162,  -234,   164,   146,  -234,  -234,  -234,  -234,  -234,
+     166,  -234,  -234,  -234,   -17,  -234,   698,  -234,   625,  -234,
+     547,  -234,  -234,  -234,  -234
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -247,  -247,     9,    31,     3,  -216,     0,  -247,  -247,  -247,
-    -118,  -246,  -141,   -89,  -247,  -247,  -247,  -244,    -9,    16,
-    -159,  -247,    51,     4,  -247,  -247,  -247,   115,   -19,  -247,
-    -247,  -247,  -247,  -247,  -247,  -195,  -222,  -247,   -51
+    -234,  -234,     8,    95,     2,  -217,     0,  -234,  -234,  -234,
+     -56,  -186,   -76,   -89,  -234,  -234,  -234,  -233,   -10,    15,
+    -204,  -234,    50,     3,  -234,  -234,  -234,   191,   -14,  -234,
+    -234,  -234,  -234,  -234,  -234,  -182,  -209,  -234,    53
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -868,320 +868,308 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -64
 static const yytype_int16 yytable[] =
 {
-      42,    65,   105,    40,    49,   -10,    91,   144,   240,   -53,
-      55,   230,   -53,   132,   133,   147,   268,   119,   168,   120,
-     170,   265,   260,   283,   285,    54,    82,    83,   193,    54,
-     242,   131,    67,   237,    84,   285,   283,   269,    78,   276,
-     249,   128,   129,   145,    85,   266,    71,   106,    73,    86,
-     165,   148,   238,    80,    81,    59,    66,   138,    60,    61,
-      62,    87,    92,   100,   239,   101,    75,   107,   295,    79,
-     108,   152,   -53,   137,    64,    88,    75,   143,    94,    95,
-      96,    97,    98,    99,   131,   134,   102,   103,   104,    54,
-     311,   149,   -10,   153,   194,   172,   197,   111,   112,   208,
-     274,   275,   220,   226,   253,   278,    42,   279,   130,    40,
-      49,   222,   257,   258,   262,    62,    62,   288,   289,   273,
-     135,   268,   136,   296,   298,   116,   117,   301,   118,   119,
-     196,   120,   302,   303,   146,   309,   304,   167,   270,   292,
-      90,   206,     0,     0,     0,   310,     0,   126,   127,     0,
-       0,     0,    62,   128,   129,   219,     0,     0,   111,   169,
-     171,     0,     0,   224,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   223,   192,   287,     0,   221,     0,     0,   195,     0,
-       0,     0,   198,   199,   294,   200,   201,     0,   204,   205,
-       0,     0,   207,     0,   202,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,     0,   113,   114,     0,     0,
-       0,   115,   116,   117,   225,   118,   119,     0,   120,   121,
-     122,     0,     0,     0,     0,     0,   243,     0,     0,   244,
-     203,   123,   124,   125,   126,   127,   267,     0,     0,     0,
-     128,   129,   252,   228,   229,   255,   256,     0,   261,     0,
-     284,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     264,     0,     0,     0,     0,     0,     0,     0,     0,   277,
-       0,     0,   245,   246,   247,   248,   286,   306,     0,   254,
-       0,     0,     0,     0,   290,   291,   293,     0,     0,     0,
-       0,     0,     0,     0,   263,   300,     0,     0,   312,     0,
-       0,   305,     0,   307,     0,     0,     0,     0,     0,    -6,
-       1,     0,     0,   111,     0,     0,   313,     0,   314,     0,
-       2,     3,     4,     5,   111,     6,     7,     8,     9,    10,
-      11,     0,    12,     0,     0,     0,     0,    13,     0,    14,
-      15,    16,     0,     0,    17,     0,     0,     0,     0,    18,
-      19,    20,     0,     0,    21,     0,     0,     0,    22,    23,
-      24,    25,     0,     0,    26,     0,     0,     0,     0,     0,
-       0,     0,     0,    27,     0,     0,     0,     0,     0,     0,
-      28,    29,    30,    31,    32,     0,     0,    33,    34,     0,
-       0,    35,    36,     0,     0,     0,    -6,    37,     2,     3,
-       4,     5,     0,     6,     7,     8,     9,    10,    11,     0,
-      12,     0,     0,     0,     0,    13,     0,    14,    15,    16,
-       0,     0,    17,     0,     0,     0,     0,    18,    19,    20,
-       0,     0,    21,     0,     0,     0,    22,    23,    24,    25,
-       0,     0,    26,     0,     0,     0,     0,     0,     0,     0,
-       0,    27,     0,     0,     0,     0,     0,     0,    28,    29,
-      30,    31,    32,     0,     0,    33,    34,     0,     0,    35,
-      36,     2,     3,     4,     5,    37,     6,     7,     8,     9,
-      56,    11,     0,    12,   299,     0,     0,     0,    13,     0,
-      14,    15,    16,     0,     0,     0,     0,     0,     0,     0,
-      18,    19,    20,     0,     0,    21,     0,     0,     0,     0,
-       0,    24,    25,     0,     0,    26,     0,     0,     0,     0,
-       0,     0,     0,     0,    27,     0,     0,     0,     0,     0,
-       0,    28,    29,    30,    31,    32,     0,     0,     0,    34,
-       0,     0,    35,    36,     0,     0,     0,    54,    37,     2,
-       3,     4,     5,     0,     6,     7,     8,     9,    56,    11,
-       0,    12,     0,     0,     0,     0,    13,     0,    14,    15,
-      16,     0,     0,     0,     0,     0,     0,     0,    18,    19,
-      20,     0,     0,    21,     0,     0,     0,     0,     0,    24,
-      25,     0,     0,    26,     0,     0,     0,     0,     0,     0,
-       0,     0,    27,     0,     0,     0,     0,     0,     0,    28,
-      29,    30,    31,    32,     0,     0,     0,    34,     0,     0,
-      35,    36,     0,     0,     0,    54,    37,     2,     3,     4,
-       5,     0,     6,     7,     8,     9,    56,    11,     0,    12,
-       0,     0,     0,     0,    13,     0,    14,    15,    16,     0,
-       0,     0,     0,     0,     0,     0,    18,    19,    20,     0,
-       0,    21,     0,     0,     0,     0,     0,    24,    25,     0,
-       0,    26,     0,     0,     0,     0,     0,     0,     0,     0,
-      27,     0,     0,     0,     0,     0,     0,    28,    29,    30,
-      31,    32,     0,     0,     0,    34,     0,     0,    35,    36,
-       2,     3,     4,     5,    37,     6,     7,     8,     9,    56,
-      11,     0,    12,     0,     0,     0,     0,    13,     0,    14,
-      15,     0,     0,     0,     0,     0,     0,     0,     0,    18,
-       0,    20,     0,     0,     0,     0,     0,     0,     0,     0,
-      24,    25,     0,     0,    26,     0,     0,     0,     0,     0,
-       0,     0,     0,    27,     0,     0,     0,     0,     0,     0,
-      28,    29,    30,    31,    32,     0,     0,     0,    34,     0,
-       0,    35,    36,     2,     3,     4,     5,    37,     6,     0,
-       0,     0,    56,    11,     0,    12,   116,   117,     0,   118,
-     119,    69,   120,     0,     0,     0,    70,     0,    71,    72,
-      73,    74,    57,     0,    20,   123,   124,   125,   126,   127,
-       0,     0,     0,     0,   128,   129,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    27,     0,     0,     0,
-       0,     0,     0,    28,    29,    30,    31,    32,     0,     0,
-       0,     0,     0,     0,    35,    36,     2,     3,     4,     5,
-      37,     6,     0,     0,     0,    56,    11,     0,    12,     0,
-       0,     0,     0,     0,    69,     0,     0,     0,     0,     0,
-       0,    71,     0,    73,     0,    57,     0,    20,     0,     0,
-       0,     0,     2,     3,     4,     5,     0,     6,    89,     0,
-       0,    56,    11,     0,    12,     0,     0,     0,     0,    27,
-       0,     0,     0,     0,     0,     0,    28,    29,    30,    31,
-      32,    57,     0,    20,     0,     0,     0,    35,    36,     2,
-       3,     4,     5,    37,     6,     0,     0,     0,    56,    11,
-       0,    12,     0,     0,     0,    27,     0,     0,     0,     0,
-       0,     0,    28,    29,    30,    31,    32,     0,    57,     0,
-      20,     0,     0,    35,    36,     0,     0,     0,     0,    37,
-       0,     0,     0,     0,     0,   140,     0,     0,     0,     0,
-       0,     0,    27,     0,     0,     0,     0,     0,     0,    28,
-      29,    30,    31,    32,     0,     0,     0,     0,   113,   114,
-      35,    36,     0,   115,   116,   117,   109,   118,   141,   142,
-     120,   121,   122,     0,     0,     0,   154,     0,     0,     0,
-       0,     0,   155,   123,   124,   125,   126,   127,     0,     0,
-       0,     0,   128,   129,   113,   114,     0,     0,     0,   115,
-     116,   117,     0,   118,   119,     0,   120,   121,   122,     0,
-       0,     0,   156,     0,     0,     0,     0,     0,   157,   123,
-     124,   125,   126,   127,     0,     0,     0,     0,   128,   129,
-     113,   114,     0,     0,     0,   115,   116,   117,     0,   118,
-     119,     0,   120,   121,   122,     0,     0,     0,   158,     0,
-       0,     0,     0,     0,   159,   123,   124,   125,   126,   127,
-       0,     0,     0,     0,   128,   129,   113,   114,     0,     0,
-       0,   115,   116,   117,     0,   118,   119,     0,   120,   121,
-     122,     0,     0,     0,   160,     0,     0,     0,     0,     0,
-     161,   123,   124,   125,   126,   127,     0,     0,     0,     0,
+      42,    66,    40,    49,   105,   -10,   152,   240,   -53,    55,
+     145,   -53,    92,   148,   265,   268,   113,   114,   168,   239,
+     170,   115,   116,   117,   230,   118,   119,    54,   120,   121,
+     122,    72,   237,    74,   283,   260,   269,    64,   266,    67,
+     123,   124,   125,   126,   127,   146,   106,   283,   149,   128,
+     129,   238,   276,   249,    59,   274,   275,    60,    61,    62,
+     278,   193,   279,   139,   131,    68,    76,   295,    79,    80,
+     -53,   108,   288,   289,   131,    89,    76,   153,    95,    96,
+      97,    98,    99,   100,   285,   102,   103,   104,   119,   311,
+     120,    54,   -10,    83,    84,   285,   111,   112,    54,    86,
+     310,    87,    85,   242,    81,    82,    42,   130,    40,    49,
+      88,   128,   129,    93,    62,    62,    62,   132,   133,   134,
+     136,   101,   137,   107,    65,   116,   117,   138,   118,   119,
+     196,   120,   135,   144,   147,   150,   194,   154,   172,   197,
+     208,   206,   226,   123,   124,   125,   126,   127,   220,   222,
+     253,   257,   128,   129,   262,   219,   258,   111,   169,   171,
+     273,   268,   224,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     223,   192,   298,   287,   221,   296,   301,   302,   195,   303,
+     304,   309,   198,   199,   294,   200,   201,   155,   204,   205,
+     270,   167,   207,   156,   292,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   113,   114,    91,     0,     0,
+     115,   116,   117,   225,   118,   119,     0,   120,   121,   122,
+       0,     0,     0,     0,     0,   243,     0,     0,   244,   123,
+     124,   125,   126,   127,     0,   267,     0,     0,   128,   129,
+       0,   252,   228,   229,   255,   256,     0,   261,     0,   284,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   264,
+     116,   117,     0,   118,   119,     0,   120,     0,   277,     0,
+       0,   245,   246,   247,   248,   286,   306,     0,   254,   124,
+     125,   126,   127,   290,   291,   293,     0,   128,   129,     0,
+       0,     0,     0,   263,   300,     0,     0,     0,   312,     0,
+     305,     0,   307,     0,     0,     0,     0,     0,    -6,     1,
+       0,     0,   111,     0,     0,   313,     0,   314,     0,     2,
+       3,     4,     5,   111,     6,     7,     8,     9,    10,    11,
+      12,     0,    13,     0,     0,     0,     0,    14,     0,    15,
+      16,    17,     0,     0,    18,     0,     0,     0,     0,    19,
+      20,    21,     0,     0,    22,     0,     0,     0,    23,    24,
+      25,    26,     0,     0,    27,     0,     0,     0,     0,     0,
+       0,     0,     0,    28,     0,     0,     0,     0,     0,     0,
+      29,    30,    31,    32,    33,     0,     0,    34,     0,     0,
+      35,    36,     0,     0,     0,    -6,    37,     2,     3,     4,
+       5,     0,     6,     7,     8,     9,    10,    11,    12,     0,
+      13,     0,     0,     0,     0,    14,     0,    15,    16,    17,
+       0,     0,    18,     0,     0,     0,     0,    19,    20,    21,
+       0,     0,    22,     0,     0,     0,    23,    24,    25,    26,
+       0,     0,    27,     0,     0,     0,     0,     0,     0,     0,
+       0,    28,     0,     0,     0,     0,     0,     0,    29,    30,
+      31,    32,    33,     0,     0,    34,     0,     0,    35,    36,
+       2,     3,     4,     5,    37,     6,     7,     8,     9,    10,
+      56,    12,     0,    13,   299,     0,     0,     0,    14,     0,
+      15,    16,    17,     0,     0,     0,     0,     0,     0,     0,
+      19,    20,    21,     0,     0,    22,     0,     0,     0,     0,
+       0,    25,    26,     0,     0,    27,   116,   117,     0,   118,
+     119,     0,   120,     0,    28,     0,     0,     0,     0,     0,
+       0,    29,    30,    31,    32,    33,     0,   126,   127,     0,
+       0,    35,    36,   128,   129,     0,    54,    37,     2,     3,
+       4,     5,     0,     6,     7,     8,     9,    10,    56,    12,
+       0,    13,     0,     0,     0,     0,    14,     0,    15,    16,
+      17,     0,     0,     0,     0,     0,     0,     0,    19,    20,
+      21,     0,     0,    22,     0,     0,     0,     0,     0,    25,
+      26,     0,     0,    27,     0,     0,     0,     0,     0,     0,
+       0,     0,    28,     0,     0,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,     0,     0,     0,     0,     0,    35,
+      36,     0,     0,     0,    54,    37,     2,     3,     4,     5,
+       0,     6,     7,     8,     9,    10,    56,    12,     0,    13,
+       0,     0,     0,     0,    14,     0,    15,    16,    17,     0,
+       0,     0,     0,     0,     0,     0,    19,    20,    21,     0,
+       0,    22,     0,     0,     0,     0,     0,    25,    26,     0,
+       0,    27,     0,     0,     0,     0,     0,     0,     0,     0,
+      28,     0,     0,     0,     0,     0,     0,    29,    30,    31,
+      32,    33,     0,     0,     0,     0,     0,    35,    36,     2,
+       3,     4,     5,    37,     6,     7,     8,     9,    10,    56,
+      12,     0,    13,     0,     0,     0,     0,    14,     0,    15,
+      16,     0,     0,     0,     0,     0,     0,     0,     0,    19,
+       0,    21,     0,     0,     0,     0,     0,     0,     0,     0,
+      25,    26,     0,     0,    27,     0,     0,     0,     0,     0,
+       0,     0,     0,    28,     0,     0,     0,     0,     0,     0,
+      29,    30,    31,    32,    33,     0,     0,     0,     0,     0,
+      35,    36,     2,     3,     4,     5,    37,     6,     0,     0,
+       0,     0,    56,    12,     0,    13,     0,     0,     0,     0,
+       0,    70,     0,     0,     0,     0,    71,     0,    72,    73,
+      74,    75,    57,     0,    21,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    28,     0,     0,     0,
+       0,     0,     0,    29,    30,    31,    32,    33,     0,     0,
+       0,     0,     0,    35,    36,     2,     3,     4,     5,    37,
+       6,     0,     0,     0,     0,    56,    12,     0,    13,     0,
+       0,     0,     0,     0,    70,     0,     0,     0,     0,     0,
+       0,    72,     0,    74,     0,    57,     0,    21,     0,     0,
+       0,     2,     3,     4,     5,     0,     6,     0,    90,     0,
+       0,    56,    12,     0,    13,     0,     0,     0,     0,    28,
+       0,     0,     0,     0,     0,     0,    29,    30,    31,    32,
+      33,    57,     0,    21,     0,     0,    35,    36,     2,     3,
+       4,     5,    37,     6,     0,     0,     0,     0,    56,    12,
+       0,    13,     0,     0,     0,    28,     0,     0,     0,     0,
+       0,     0,    29,    30,    31,    32,    33,     0,    57,     0,
+      21,     0,    35,    36,     0,     0,     0,     0,    37,     0,
+       0,     0,     0,     0,   141,     0,     0,     0,     0,     0,
+       0,     0,    28,     0,     0,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,     0,     0,     0,   113,   114,    35,
+      36,     0,   115,   116,   117,   109,   118,   142,   143,   120,
+     121,   122,     0,     0,   157,     0,     0,     0,     0,     0,
+     158,   123,   124,   125,   126,   127,     0,     0,     0,     0,
+     128,   129,   113,   114,     0,     0,     0,   115,   116,   117,
+       0,   118,   119,     0,   120,   121,   122,     0,     0,   159,
+       0,     0,     0,     0,     0,   160,   123,   124,   125,   126,
+     127,     0,     0,     0,     0,   128,   129,   113,   114,     0,
+       0,     0,   115,   116,   117,     0,   118,   119,     0,   120,
+     121,   122,     0,     0,   161,     0,     0,     0,     0,     0,
+     162,   123,   124,   125,   126,   127,     0,     0,     0,     0,
+     128,   129,   113,   114,     0,     0,     0,   115,   116,   117,
+       0,   118,   119,     0,   120,   121,   122,     0,     0,   231,
+       0,     0,     0,     0,     0,     0,   123,   124,   125,   126,
+     127,     0,     0,     0,     0,   128,   129,   113,   114,     0,
+       0,     0,   115,   116,   117,     0,   118,   119,     0,   120,
+     121,   122,     0,     0,   232,     0,     0,     0,     0,     0,
+       0,   123,   124,   125,   126,   127,     0,     0,     0,     0,
+     128,   129,   113,   114,     0,     0,     0,   115,   116,   117,
+       0,   118,   119,     0,   120,   121,   122,     0,     0,   233,
+       0,     0,     0,     0,     0,     0,   123,   124,   125,   126,
+     127,     0,     0,     0,     0,   128,   129,   113,   114,     0,
+       0,     0,   115,   116,   117,     0,   118,   119,     0,   120,
+     121,   122,     0,     0,   234,     0,     0,     0,     0,     0,
+       0,   123,   124,   125,   126,   127,     0,     0,     0,     0,
      128,   129,   113,   114,     0,     0,     0,   115,   116,   117,
        0,   118,   119,     0,   120,   121,   122,     0,     0,     0,
-     231,     0,     0,     0,     0,     0,     0,   123,   124,   125,
-     126,   127,     0,     0,     0,     0,   128,   129,   113,   114,
-       0,     0,     0,   115,   116,   117,     0,   118,   119,     0,
-     120,   121,   122,     0,     0,     0,   232,     0,     0,     0,
-       0,     0,     0,   123,   124,   125,   126,   127,     0,     0,
-       0,     0,   128,   129,   113,   114,     0,     0,     0,   115,
-     116,   117,     0,   118,   119,     0,   120,   121,   122,     0,
-       0,     0,   233,     0,     0,     0,     0,     0,     0,   123,
-     124,   125,   126,   127,     0,     0,     0,     0,   128,   129,
-     113,   114,     0,     0,     0,   115,   116,   117,     0,   118,
-     119,     0,   120,   121,   122,     0,     0,     0,   234,     0,
-       0,     0,     0,     0,     0,   123,   124,   125,   126,   127,
-       0,     0,     0,     0,   128,   129,   113,   114,     0,     0,
-       0,   115,   116,   117,     0,   118,   119,     0,   120,   121,
-     122,     0,     0,     0,     0,     0,     0,   151,     0,     0,
-       0,   123,   124,   125,   126,   127,     0,   113,   114,     0,
-     128,   129,   115,   116,   117,     0,   118,   119,     0,   120,
-     121,   122,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   123,   124,   125,   126,   127,     0,   113,   114,
-       0,   128,   129,   115,   116,   117,     0,   118,   119,     0,
-     120,   121,   122,     0,     0,     0,     0,     0,   162,   163,
-       0,     0,     0,   123,   124,   125,   126,   127,     0,   113,
-     114,     0,   128,   129,   115,   116,   117,     0,   118,   119,
-       0,   120,   121,   122,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   173,   123,   124,   125,   126,   127,     0,
-     113,   114,   166,   128,   129,   115,   116,   117,     0,   118,
-     119,     0,   120,   121,   122,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   123,   124,   125,   126,   127,
-       0,   113,   114,   166,   128,   129,   115,   116,   117,     0,
-     118,   119,     0,   120,   121,   122,     0,     0,     0,     0,
+     202,     0,     0,     0,     0,     0,   123,   124,   125,   126,
+     127,     0,   113,   114,     0,   128,   129,   115,   116,   117,
+       0,   118,   119,     0,   120,   121,   122,     0,     0,     0,
+       0,     0,     0,     0,     0,   203,   123,   124,   125,   126,
+     127,     0,   113,   114,     0,   128,   129,   115,   116,   117,
+       0,   118,   119,     0,   120,   121,   122,     0,     0,     0,
+       0,     0,   163,   164,     0,     0,   123,   124,   125,   126,
+     127,     0,   113,   114,     0,   128,   129,   115,   116,   117,
+       0,   118,   119,     0,   120,   121,   122,     0,     0,     0,
+       0,     0,     0,     0,     0,   173,   123,   124,   125,   126,
+     127,     0,   113,   114,   166,   128,   129,   115,   116,   117,
+       0,   118,   119,     0,   120,   121,   122,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   123,   124,   125,   126,
+     127,     0,   113,   114,   166,   128,   129,   115,   116,   117,
+       0,   118,   119,     0,   120,   121,   122,     0,     0,     0,
        0,     0,     0,     0,     0,   173,   123,   124,   125,   126,
      127,     0,   113,   114,     0,   128,   129,   115,   116,   117,
        0,   118,   119,     0,   120,   121,   122,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   123,   124,   125,
-     126,   127,     0,   -63,   -63,     0,   128,   129,   -63,   -63,
-     -63,     0,   -63,   -63,     0,   -63,   -63,   -63,     0,   116,
-     117,     0,   118,   119,     0,   120,     0,     0,   -63,     0,
-       0,   -63,   -63,     0,     0,    64,     0,   -63,   -63,   124,
-     125,   126,   127,     0,     0,     0,     0,   128,   129
+       0,     0,     0,     0,     0,     0,   123,   124,   125,   126,
+     127,     0,   -63,   -63,     0,   128,   129,   -63,   -63,   -63,
+       0,   -63,   -63,     0,   -63,   -63,   -63,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   -63,     0,     0,   -63,
+     -63,     0,     0,    65,     0,   -63,   -63
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    10,     0,     0,     0,     0,    25,    44,   224,    24,
-       1,   206,    27,    64,    65,    44,    27,    66,   107,    68,
-     109,    24,   244,   267,   270,    87,    12,    13,    89,    87,
-      92,    92,    20,    25,    20,   281,   280,    48,    20,   261,
-     235,    90,    91,    80,    20,    48,    36,    38,    38,    20,
-     101,    80,    44,    46,    47,     4,    41,    76,     7,     8,
-       9,    20,    20,    20,   223,    20,    15,    88,   284,    18,
-      80,    90,    87,    36,    88,    24,    25,    20,    27,    28,
-      29,    30,    31,    32,    92,    92,    35,    36,    37,    87,
-     306,    43,    87,    92,    20,    43,    20,    46,    47,    20,
-     259,   260,    89,    20,    44,   264,   106,   266,    57,   106,
-     106,    89,    20,    92,    24,    64,    65,   276,   277,    20,
-      69,    27,    71,    48,    43,    62,    63,    24,    65,    66,
-     139,    68,    24,    24,    83,    24,    43,   106,   256,   280,
-      25,   150,    -1,    -1,    -1,   304,    -1,    84,    85,    -1,
-      -1,    -1,   101,    90,    91,   164,    -1,    -1,   107,   108,
-     109,    -1,    -1,   172,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   172,   131,   272,    -1,   169,    -1,    -1,   137,    -1,
-      -1,    -1,   141,   142,   283,   144,   145,    -1,   147,   148,
-      -1,    -1,   151,    -1,    44,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,    -1,    56,    57,    -1,    -1,
-      -1,    61,    62,    63,   173,    65,    66,    -1,    68,    69,
-      70,    -1,    -1,    -1,    -1,    -1,   227,    -1,    -1,   230,
-      80,    81,    82,    83,    84,    85,   255,    -1,    -1,    -1,
-      90,    91,   236,   202,   203,   239,   240,    -1,   249,    -1,
-     269,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     254,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   263,
-      -1,    -1,   231,   232,   233,   234,   270,   296,    -1,   238,
-      -1,    -1,    -1,    -1,   278,   279,   280,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   253,   289,    -1,    -1,   308,    -1,
-      -1,   295,    -1,   297,    -1,    -1,    -1,    -1,    -1,     0,
-       1,    -1,    -1,   272,    -1,    -1,   310,    -1,   312,    -1,
-      11,    12,    13,    14,   283,    16,    17,    18,    19,    20,
-      21,    -1,    23,    -1,    -1,    -1,    -1,    28,    -1,    30,
-      31,    32,    -1,    -1,    35,    -1,    -1,    -1,    -1,    40,
-      41,    42,    -1,    -1,    45,    -1,    -1,    -1,    49,    50,
-      51,    52,    -1,    -1,    55,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,
-      71,    72,    73,    74,    75,    -1,    -1,    78,    79,    -1,
-      -1,    82,    83,    -1,    -1,    -1,    87,    88,    11,    12,
-      13,    14,    -1,    16,    17,    18,    19,    20,    21,    -1,
-      23,    -1,    -1,    -1,    -1,    28,    -1,    30,    31,    32,
-      -1,    -1,    35,    -1,    -1,    -1,    -1,    40,    41,    42,
-      -1,    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,
-      -1,    -1,    55,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,    71,    72,
-      73,    74,    75,    -1,    -1,    78,    79,    -1,    -1,    82,
-      83,    11,    12,    13,    14,    88,    16,    17,    18,    19,
-      20,    21,    -1,    23,    24,    -1,    -1,    -1,    28,    -1,
-      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      40,    41,    42,    -1,    -1,    45,    -1,    -1,    -1,    -1,
-      -1,    51,    52,    -1,    -1,    55,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,
-      -1,    71,    72,    73,    74,    75,    -1,    -1,    -1,    79,
-      -1,    -1,    82,    83,    -1,    -1,    -1,    87,    88,    11,
-      12,    13,    14,    -1,    16,    17,    18,    19,    20,    21,
-      -1,    23,    -1,    -1,    -1,    -1,    28,    -1,    30,    31,
-      32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    40,    41,
-      42,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    51,
-      52,    -1,    -1,    55,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,    71,
-      72,    73,    74,    75,    -1,    -1,    -1,    79,    -1,    -1,
+       0,    11,     0,     0,     0,     0,    47,   224,    25,     1,
+      45,    28,    26,    45,    25,    28,    57,    58,   107,   223,
+     109,    62,    63,    64,   206,    66,    67,    87,    69,    70,
+      71,    37,    26,    39,   267,   244,    49,    21,    49,    42,
+      81,    82,    83,    84,    85,    80,    38,   280,    80,    90,
+      91,    45,   261,   235,     4,   259,   260,     7,     8,     9,
+     264,    89,   266,    77,    92,    21,    16,   284,    21,    19,
+      87,    80,   276,   277,    92,    25,    26,    91,    28,    29,
+      30,    31,    32,    33,   270,    35,    36,    37,    67,   306,
+      69,    87,    87,    12,    13,   281,    46,    47,    87,    21,
+     304,    21,    21,    92,    47,    48,   106,    57,   106,   106,
+      21,    90,    91,    21,    64,    65,    66,    64,    65,    66,
+      70,    21,    72,    88,    88,    63,    64,    37,    66,    67,
+     140,    69,    92,    21,    84,    44,    21,    92,    44,    21,
+      21,   151,    21,    81,    82,    83,    84,    85,    89,    89,
+      45,    21,    90,    91,    25,   165,    92,   107,   108,   109,
+      21,    28,   172,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     172,   131,    44,   272,   169,    49,    25,    25,   138,    25,
+      44,    25,   142,   143,   283,   145,   146,    39,   148,   149,
+     256,   106,   152,    45,   280,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,    57,    58,    26,    -1,    -1,
+      62,    63,    64,   173,    66,    67,    -1,    69,    70,    71,
+      -1,    -1,    -1,    -1,    -1,   227,    -1,    -1,   230,    81,
+      82,    83,    84,    85,    -1,   255,    -1,    -1,    90,    91,
+      -1,   236,   202,   203,   239,   240,    -1,   249,    -1,   269,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   254,
+      63,    64,    -1,    66,    67,    -1,    69,    -1,   263,    -1,
+      -1,   231,   232,   233,   234,   270,   296,    -1,   238,    82,
+      83,    84,    85,   278,   279,   280,    -1,    90,    91,    -1,
+      -1,    -1,    -1,   253,   289,    -1,    -1,    -1,   308,    -1,
+     295,    -1,   297,    -1,    -1,    -1,    -1,    -1,     0,     1,
+      -1,    -1,   272,    -1,    -1,   310,    -1,   312,    -1,    11,
+      12,    13,    14,   283,    16,    17,    18,    19,    20,    21,
+      22,    -1,    24,    -1,    -1,    -1,    -1,    29,    -1,    31,
+      32,    33,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,
+      42,    43,    -1,    -1,    46,    -1,    -1,    -1,    50,    51,
+      52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
+      72,    73,    74,    75,    76,    -1,    -1,    79,    -1,    -1,
       82,    83,    -1,    -1,    -1,    87,    88,    11,    12,    13,
-      14,    -1,    16,    17,    18,    19,    20,    21,    -1,    23,
-      -1,    -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    40,    41,    42,    -1,
-      -1,    45,    -1,    -1,    -1,    -1,    -1,    51,    52,    -1,
-      -1,    55,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      64,    -1,    -1,    -1,    -1,    -1,    -1,    71,    72,    73,
-      74,    75,    -1,    -1,    -1,    79,    -1,    -1,    82,    83,
+      14,    -1,    16,    17,    18,    19,    20,    21,    22,    -1,
+      24,    -1,    -1,    -1,    -1,    29,    -1,    31,    32,    33,
+      -1,    -1,    36,    -1,    -1,    -1,    -1,    41,    42,    43,
+      -1,    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,
+      -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    73,
+      74,    75,    76,    -1,    -1,    79,    -1,    -1,    82,    83,
       11,    12,    13,    14,    88,    16,    17,    18,    19,    20,
-      21,    -1,    23,    -1,    -1,    -1,    -1,    28,    -1,    30,
-      31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    40,
-      -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      51,    52,    -1,    -1,    55,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,
-      71,    72,    73,    74,    75,    -1,    -1,    -1,    79,    -1,
-      -1,    82,    83,    11,    12,    13,    14,    88,    16,    -1,
-      -1,    -1,    20,    21,    -1,    23,    62,    63,    -1,    65,
-      66,    29,    68,    -1,    -1,    -1,    34,    -1,    36,    37,
-      38,    39,    40,    -1,    42,    81,    82,    83,    84,    85,
-      -1,    -1,    -1,    -1,    90,    91,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,
-      -1,    -1,    -1,    71,    72,    73,    74,    75,    -1,    -1,
-      -1,    -1,    -1,    -1,    82,    83,    11,    12,    13,    14,
-      88,    16,    -1,    -1,    -1,    20,    21,    -1,    23,    -1,
-      -1,    -1,    -1,    -1,    29,    -1,    -1,    -1,    -1,    -1,
-      -1,    36,    -1,    38,    -1,    40,    -1,    42,    -1,    -1,
-      -1,    -1,    11,    12,    13,    14,    -1,    16,    53,    -1,
-      -1,    20,    21,    -1,    23,    -1,    -1,    -1,    -1,    64,
-      -1,    -1,    -1,    -1,    -1,    -1,    71,    72,    73,    74,
-      75,    40,    -1,    42,    -1,    -1,    -1,    82,    83,    11,
-      12,    13,    14,    88,    16,    -1,    -1,    -1,    20,    21,
-      -1,    23,    -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,
-      -1,    -1,    71,    72,    73,    74,    75,    -1,    40,    -1,
-      42,    -1,    -1,    82,    83,    -1,    -1,    -1,    -1,    88,
-      -1,    -1,    -1,    -1,    -1,    33,    -1,    -1,    -1,    -1,
-      -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,    71,
-      72,    73,    74,    75,    -1,    -1,    -1,    -1,    56,    57,
-      82,    83,    -1,    61,    62,    63,    88,    65,    66,    67,
-      68,    69,    70,    -1,    -1,    -1,    38,    -1,    -1,    -1,
-      -1,    -1,    44,    81,    82,    83,    84,    85,    -1,    -1,
-      -1,    -1,    90,    91,    56,    57,    -1,    -1,    -1,    61,
-      62,    63,    -1,    65,    66,    -1,    68,    69,    70,    -1,
-      -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,    44,    81,
-      82,    83,    84,    85,    -1,    -1,    -1,    -1,    90,    91,
-      56,    57,    -1,    -1,    -1,    61,    62,    63,    -1,    65,
-      66,    -1,    68,    69,    70,    -1,    -1,    -1,    38,    -1,
-      -1,    -1,    -1,    -1,    44,    81,    82,    83,    84,    85,
-      -1,    -1,    -1,    -1,    90,    91,    56,    57,    -1,    -1,
-      -1,    61,    62,    63,    -1,    65,    66,    -1,    68,    69,
-      70,    -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,
-      44,    81,    82,    83,    84,    85,    -1,    -1,    -1,    -1,
-      90,    91,    56,    57,    -1,    -1,    -1,    61,    62,    63,
-      -1,    65,    66,    -1,    68,    69,    70,    -1,    -1,    -1,
-      38,    -1,    -1,    -1,    -1,    -1,    -1,    81,    82,    83,
-      84,    85,    -1,    -1,    -1,    -1,    90,    91,    56,    57,
-      -1,    -1,    -1,    61,    62,    63,    -1,    65,    66,    -1,
-      68,    69,    70,    -1,    -1,    -1,    38,    -1,    -1,    -1,
-      -1,    -1,    -1,    81,    82,    83,    84,    85,    -1,    -1,
-      -1,    -1,    90,    91,    56,    57,    -1,    -1,    -1,    61,
-      62,    63,    -1,    65,    66,    -1,    68,    69,    70,    -1,
-      -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,    81,
-      82,    83,    84,    85,    -1,    -1,    -1,    -1,    90,    91,
-      56,    57,    -1,    -1,    -1,    61,    62,    63,    -1,    65,
-      66,    -1,    68,    69,    70,    -1,    -1,    -1,    38,    -1,
-      -1,    -1,    -1,    -1,    -1,    81,    82,    83,    84,    85,
-      -1,    -1,    -1,    -1,    90,    91,    56,    57,    -1,    -1,
-      -1,    61,    62,    63,    -1,    65,    66,    -1,    68,    69,
-      70,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
-      -1,    81,    82,    83,    84,    85,    -1,    56,    57,    -1,
-      90,    91,    61,    62,    63,    -1,    65,    66,    -1,    68,
-      69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    81,    82,    83,    84,    85,    -1,    56,    57,
-      -1,    90,    91,    61,    62,    63,    -1,    65,    66,    -1,
-      68,    69,    70,    -1,    -1,    -1,    -1,    -1,    76,    77,
-      -1,    -1,    -1,    81,    82,    83,    84,    85,    -1,    56,
-      57,    -1,    90,    91,    61,    62,    63,    -1,    65,    66,
-      -1,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    80,    81,    82,    83,    84,    85,    -1,
-      56,    57,    89,    90,    91,    61,    62,    63,    -1,    65,
-      66,    -1,    68,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    81,    82,    83,    84,    85,
-      -1,    56,    57,    89,    90,    91,    61,    62,    63,    -1,
-      65,    66,    -1,    68,    69,    70,    -1,    -1,    -1,    -1,
+      21,    22,    -1,    24,    25,    -1,    -1,    -1,    29,    -1,
+      31,    32,    33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      41,    42,    43,    -1,    -1,    46,    -1,    -1,    -1,    -1,
+      -1,    52,    53,    -1,    -1,    56,    63,    64,    -1,    66,
+      67,    -1,    69,    -1,    65,    -1,    -1,    -1,    -1,    -1,
+      -1,    72,    73,    74,    75,    76,    -1,    84,    85,    -1,
+      -1,    82,    83,    90,    91,    -1,    87,    88,    11,    12,
+      13,    14,    -1,    16,    17,    18,    19,    20,    21,    22,
+      -1,    24,    -1,    -1,    -1,    -1,    29,    -1,    31,    32,
+      33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    42,
+      43,    -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,    52,
+      53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
+      73,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    82,
+      83,    -1,    -1,    -1,    87,    88,    11,    12,    13,    14,
+      -1,    16,    17,    18,    19,    20,    21,    22,    -1,    24,
+      -1,    -1,    -1,    -1,    29,    -1,    31,    32,    33,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    41,    42,    43,    -1,
+      -1,    46,    -1,    -1,    -1,    -1,    -1,    52,    53,    -1,
+      -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    73,    74,
+      75,    76,    -1,    -1,    -1,    -1,    -1,    82,    83,    11,
+      12,    13,    14,    88,    16,    17,    18,    19,    20,    21,
+      22,    -1,    24,    -1,    -1,    -1,    -1,    29,    -1,    31,
+      32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
+      -1,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
+      72,    73,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
+      82,    83,    11,    12,    13,    14,    88,    16,    -1,    -1,
+      -1,    -1,    21,    22,    -1,    24,    -1,    -1,    -1,    -1,
+      -1,    30,    -1,    -1,    -1,    -1,    35,    -1,    37,    38,
+      39,    40,    41,    -1,    43,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,
+      -1,    -1,    -1,    72,    73,    74,    75,    76,    -1,    -1,
+      -1,    -1,    -1,    82,    83,    11,    12,    13,    14,    88,
+      16,    -1,    -1,    -1,    -1,    21,    22,    -1,    24,    -1,
+      -1,    -1,    -1,    -1,    30,    -1,    -1,    -1,    -1,    -1,
+      -1,    37,    -1,    39,    -1,    41,    -1,    43,    -1,    -1,
+      -1,    11,    12,    13,    14,    -1,    16,    -1,    54,    -1,
+      -1,    21,    22,    -1,    24,    -1,    -1,    -1,    -1,    65,
+      -1,    -1,    -1,    -1,    -1,    -1,    72,    73,    74,    75,
+      76,    41,    -1,    43,    -1,    -1,    82,    83,    11,    12,
+      13,    14,    88,    16,    -1,    -1,    -1,    -1,    21,    22,
+      -1,    24,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,
+      -1,    -1,    72,    73,    74,    75,    76,    -1,    41,    -1,
+      43,    -1,    82,    83,    -1,    -1,    -1,    -1,    88,    -1,
+      -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
+      73,    74,    75,    76,    -1,    -1,    -1,    57,    58,    82,
+      83,    -1,    62,    63,    64,    88,    66,    67,    68,    69,
+      70,    71,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
+      45,    81,    82,    83,    84,    85,    -1,    -1,    -1,    -1,
+      90,    91,    57,    58,    -1,    -1,    -1,    62,    63,    64,
+      -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,    39,
+      -1,    -1,    -1,    -1,    -1,    45,    81,    82,    83,    84,
+      85,    -1,    -1,    -1,    -1,    90,    91,    57,    58,    -1,
+      -1,    -1,    62,    63,    64,    -1,    66,    67,    -1,    69,
+      70,    71,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
+      45,    81,    82,    83,    84,    85,    -1,    -1,    -1,    -1,
+      90,    91,    57,    58,    -1,    -1,    -1,    62,    63,    64,
+      -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,    39,
+      -1,    -1,    -1,    -1,    -1,    -1,    81,    82,    83,    84,
+      85,    -1,    -1,    -1,    -1,    90,    91,    57,    58,    -1,
+      -1,    -1,    62,    63,    64,    -1,    66,    67,    -1,    69,
+      70,    71,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,    81,    82,    83,    84,    85,    -1,    -1,    -1,    -1,
+      90,    91,    57,    58,    -1,    -1,    -1,    62,    63,    64,
+      -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,    39,
+      -1,    -1,    -1,    -1,    -1,    -1,    81,    82,    83,    84,
+      85,    -1,    -1,    -1,    -1,    90,    91,    57,    58,    -1,
+      -1,    -1,    62,    63,    64,    -1,    66,    67,    -1,    69,
+      70,    71,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,    81,    82,    83,    84,    85,    -1,    -1,    -1,    -1,
+      90,    91,    57,    58,    -1,    -1,    -1,    62,    63,    64,
+      -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,    -1,
+      45,    -1,    -1,    -1,    -1,    -1,    81,    82,    83,    84,
+      85,    -1,    57,    58,    -1,    90,    91,    62,    63,    64,
+      -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    80,    81,    82,    83,    84,
+      85,    -1,    57,    58,    -1,    90,    91,    62,    63,    64,
+      -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,    -1,
+      -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
+      85,    -1,    57,    58,    -1,    90,    91,    62,    63,    64,
+      -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    80,    81,    82,    83,    84,
+      85,    -1,    57,    58,    89,    90,    91,    62,    63,    64,
+      -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    81,    82,    83,    84,
+      85,    -1,    57,    58,    89,    90,    91,    62,    63,    64,
+      -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    80,    81,    82,    83,    84,
-      85,    -1,    56,    57,    -1,    90,    91,    61,    62,    63,
-      -1,    65,    66,    -1,    68,    69,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    82,    83,
-      84,    85,    -1,    56,    57,    -1,    90,    91,    61,    62,
-      63,    -1,    65,    66,    -1,    68,    69,    70,    -1,    62,
-      63,    -1,    65,    66,    -1,    68,    -1,    -1,    81,    -1,
-      -1,    84,    85,    -1,    -1,    88,    -1,    90,    91,    82,
-      83,    84,    85,    -1,    -1,    -1,    -1,    90,    91
+      85,    -1,    57,    58,    -1,    90,    91,    62,    63,    64,
+      -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    81,    82,    83,    84,
+      85,    -1,    57,    58,    -1,    90,    91,    62,    63,    64,
+      -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    84,
+      85,    -1,    -1,    88,    -1,    90,    91
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1189,36 +1177,36 @@ static const yytype_int16 yycheck[] =
 static const yytype_uint8 yystos[] =
 {
        0,     1,    11,    12,    13,    14,    16,    17,    18,    19,
-      20,    21,    23,    28,    30,    31,    32,    35,    40,    41,
-      42,    45,    49,    50,    51,    52,    55,    64,    71,    72,
-      73,    74,    75,    78,    79,    82,    83,    88,    94,    96,
+      20,    21,    22,    24,    29,    31,    32,    33,    36,    41,
+      42,    43,    46,    50,    51,    52,    53,    56,    65,    72,
+      73,    74,    75,    76,    79,    82,    83,    88,    94,    96,
       97,    98,    99,   100,   107,   108,   109,   114,   115,   116,
-     119,   122,   123,   130,    87,    95,    20,    40,    97,   115,
-     115,   115,   115,   131,    88,   111,    41,    20,   117,    29,
-      34,    36,    37,    38,    39,   115,   120,   121,    20,   115,
-      46,    47,    12,    13,    20,    20,    20,    20,   115,    53,
-     120,   121,    20,   118,   115,   115,   115,   115,   115,   115,
-      20,    20,   115,   115,   115,     0,    95,    88,    80,    88,
-     106,   115,   115,    56,    57,    61,    62,    63,    65,    66,
-      68,    69,    70,    81,    82,    83,    84,    85,    90,    91,
-     115,    92,   131,   131,    92,   115,   115,    36,   121,   124,
-      33,    66,    67,    20,    44,    80,   115,    44,    80,    43,
-     125,    46,   121,    92,    38,    44,    38,    44,    38,    44,
-      38,    44,    76,    77,   126,   131,    89,    96,   106,   115,
-     106,   115,    43,    80,   112,   115,   115,   115,   115,   115,
+     119,   122,   123,   130,    87,    95,    21,    41,    97,   115,
+     115,   115,   115,   131,    21,    88,   111,    42,    21,   117,
+      30,    35,    37,    38,    39,    40,   115,   120,   121,    21,
+     115,    47,    48,    12,    13,    21,    21,    21,    21,   115,
+      54,   120,   121,    21,   118,   115,   115,   115,   115,   115,
+     115,    21,   115,   115,   115,     0,    95,    88,    80,    88,
+     106,   115,   115,    57,    58,    62,    63,    64,    66,    67,
+      69,    70,    71,    81,    82,    83,    84,    85,    90,    91,
+     115,    92,   131,   131,   131,    92,   115,   115,    37,   121,
+     124,    34,    67,    68,    21,    45,    80,   115,    45,    80,
+      44,   125,    47,   121,    92,    39,    45,    39,    45,    39,
+      45,    39,    45,    77,    78,   126,    89,    96,   106,   115,
+     106,   115,    44,    80,   112,   115,   115,   115,   115,   115,
      115,   115,   115,   115,   115,   115,   115,   115,   115,   115,
-     115,   115,   115,    89,    20,   115,   111,    20,   115,   115,
-     115,   115,    44,    80,   115,   115,   111,   115,    20,   115,
+     115,   115,   115,    89,    21,   115,   111,    21,   115,   115,
+     115,   115,    45,    80,   115,   115,   111,   115,    21,   115,
      115,   115,   115,   115,   115,   115,   115,   115,   115,   111,
-      89,   112,    89,    95,   111,   115,    20,   128,   115,   115,
-     128,    38,    38,    38,    38,   127,   113,    25,    44,   113,
+      89,   112,    89,    95,   111,   115,    21,   128,   115,   115,
+     128,    39,    39,    39,    39,   127,   113,    26,    45,   113,
       98,   116,    92,    95,    95,   115,   115,   115,   115,   128,
-      95,    99,   112,    44,   115,   112,   112,    20,    92,   129,
-     129,    95,    24,   115,   112,    24,    48,   111,    27,    48,
-     103,   104,   110,    20,   113,   113,   129,   112,   113,   113,
+      95,    99,   112,    45,   115,   112,   112,    21,    92,   129,
+     129,    95,    25,   115,   112,    25,    49,   111,    28,    49,
+     103,   104,   110,    21,   113,   113,   129,   112,   113,   113,
      102,   103,   105,   110,   111,   104,   112,   106,   113,   113,
-     112,   112,   105,   112,   106,    98,    48,   101,    43,    24,
-     112,    24,    24,    24,    43,   112,   111,   112,   111,    24,
+     112,   112,   105,   112,   106,    98,    49,   101,    44,    25,
+     112,    25,    25,    25,    44,   112,   111,   112,   111,    25,
      113,    98,    99,   112,   112
 };
 
@@ -2665,7 +2653,7 @@ yyreduce:
 
   case 111:
 #line 471 "engines/director/lingo/lingo-gr.y"
-    { Common::String s("sound-"); s += *(yyvsp[(2) - (3)].s); g_lingo->codeFunc(&s, (yyvsp[(3) - (3)].narg)); ;}
+    { Common::String s(*(yyvsp[(1) - (3)].s)); s += '-'; s += *(yyvsp[(2) - (3)].s); g_lingo->codeFunc(&s, (yyvsp[(3) - (3)].narg)); ;}
     break;
 
   case 112:
@@ -2859,7 +2847,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 2863 "engines/director/lingo/lingo-gr.cpp"
+#line 2851 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 7ca6875..5c0928a 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -56,66 +56,66 @@
      BLTINNOARGSORONE = 272,
      BLTINONEARG = 273,
      BLTINARGLIST = 274,
-     ID = 275,
-     STRING = 276,
-     HANDLER = 277,
-     SYMBOL = 278,
-     ENDCLAUSE = 279,
-     tDOWN = 280,
-     tELSE = 281,
-     tNLELSIF = 282,
-     tEXIT = 283,
-     tFRAME = 284,
-     tGLOBAL = 285,
-     tGO = 286,
-     tIF = 287,
-     tINTO = 288,
-     tLOOP = 289,
-     tMACRO = 290,
-     tMOVIE = 291,
-     tNEXT = 292,
-     tOF = 293,
-     tPREVIOUS = 294,
-     tPUT = 295,
-     tREPEAT = 296,
-     tSET = 297,
-     tTHEN = 298,
-     tTO = 299,
-     tWHEN = 300,
-     tWITH = 301,
-     tWHILE = 302,
-     tNLELSE = 303,
-     tFACTORY = 304,
-     tMETHOD = 305,
-     tOPEN = 306,
-     tPLAY = 307,
-     tDONE = 308,
-     tPLAYACCEL = 309,
-     tINSTANCE = 310,
-     tGE = 311,
-     tLE = 312,
-     tGT = 313,
-     tLT = 314,
-     tEQ = 315,
-     tNEQ = 316,
-     tAND = 317,
-     tOR = 318,
-     tNOT = 319,
-     tMOD = 320,
-     tAFTER = 321,
-     tBEFORE = 322,
-     tCONCAT = 323,
-     tCONTAINS = 324,
-     tSTARTS = 325,
-     tCHAR = 326,
-     tITEM = 327,
-     tLINE = 328,
-     tWORD = 329,
-     tSPRITE = 330,
-     tINTERSECTS = 331,
-     tWITHIN = 332,
-     tON = 333,
-     tSOUND = 334
+     TWOWORDBUILTIN = 275,
+     ID = 276,
+     STRING = 277,
+     HANDLER = 278,
+     SYMBOL = 279,
+     ENDCLAUSE = 280,
+     tDOWN = 281,
+     tELSE = 282,
+     tNLELSIF = 283,
+     tEXIT = 284,
+     tFRAME = 285,
+     tGLOBAL = 286,
+     tGO = 287,
+     tIF = 288,
+     tINTO = 289,
+     tLOOP = 290,
+     tMACRO = 291,
+     tMOVIE = 292,
+     tNEXT = 293,
+     tOF = 294,
+     tPREVIOUS = 295,
+     tPUT = 296,
+     tREPEAT = 297,
+     tSET = 298,
+     tTHEN = 299,
+     tTO = 300,
+     tWHEN = 301,
+     tWITH = 302,
+     tWHILE = 303,
+     tNLELSE = 304,
+     tFACTORY = 305,
+     tMETHOD = 306,
+     tOPEN = 307,
+     tPLAY = 308,
+     tDONE = 309,
+     tPLAYACCEL = 310,
+     tINSTANCE = 311,
+     tGE = 312,
+     tLE = 313,
+     tGT = 314,
+     tLT = 315,
+     tEQ = 316,
+     tNEQ = 317,
+     tAND = 318,
+     tOR = 319,
+     tNOT = 320,
+     tMOD = 321,
+     tAFTER = 322,
+     tBEFORE = 323,
+     tCONCAT = 324,
+     tCONTAINS = 325,
+     tSTARTS = 326,
+     tCHAR = 327,
+     tITEM = 328,
+     tLINE = 329,
+     tWORD = 330,
+     tSPRITE = 331,
+     tINTERSECTS = 332,
+     tWITHIN = 333,
+     tON = 334
    };
 #endif
 /* Tokens.  */
@@ -136,66 +136,66 @@
 #define BLTINNOARGSORONE 272
 #define BLTINONEARG 273
 #define BLTINARGLIST 274
-#define ID 275
-#define STRING 276
-#define HANDLER 277
-#define SYMBOL 278
-#define ENDCLAUSE 279
-#define tDOWN 280
-#define tELSE 281
-#define tNLELSIF 282
-#define tEXIT 283
-#define tFRAME 284
-#define tGLOBAL 285
-#define tGO 286
-#define tIF 287
-#define tINTO 288
-#define tLOOP 289
-#define tMACRO 290
-#define tMOVIE 291
-#define tNEXT 292
-#define tOF 293
-#define tPREVIOUS 294
-#define tPUT 295
-#define tREPEAT 296
-#define tSET 297
-#define tTHEN 298
-#define tTO 299
-#define tWHEN 300
-#define tWITH 301
-#define tWHILE 302
-#define tNLELSE 303
-#define tFACTORY 304
-#define tMETHOD 305
-#define tOPEN 306
-#define tPLAY 307
-#define tDONE 308
-#define tPLAYACCEL 309
-#define tINSTANCE 310
-#define tGE 311
-#define tLE 312
-#define tGT 313
-#define tLT 314
-#define tEQ 315
-#define tNEQ 316
-#define tAND 317
-#define tOR 318
-#define tNOT 319
-#define tMOD 320
-#define tAFTER 321
-#define tBEFORE 322
-#define tCONCAT 323
-#define tCONTAINS 324
-#define tSTARTS 325
-#define tCHAR 326
-#define tITEM 327
-#define tLINE 328
-#define tWORD 329
-#define tSPRITE 330
-#define tINTERSECTS 331
-#define tWITHIN 332
-#define tON 333
-#define tSOUND 334
+#define TWOWORDBUILTIN 275
+#define ID 276
+#define STRING 277
+#define HANDLER 278
+#define SYMBOL 279
+#define ENDCLAUSE 280
+#define tDOWN 281
+#define tELSE 282
+#define tNLELSIF 283
+#define tEXIT 284
+#define tFRAME 285
+#define tGLOBAL 286
+#define tGO 287
+#define tIF 288
+#define tINTO 289
+#define tLOOP 290
+#define tMACRO 291
+#define tMOVIE 292
+#define tNEXT 293
+#define tOF 294
+#define tPREVIOUS 295
+#define tPUT 296
+#define tREPEAT 297
+#define tSET 298
+#define tTHEN 299
+#define tTO 300
+#define tWHEN 301
+#define tWITH 302
+#define tWHILE 303
+#define tNLELSE 304
+#define tFACTORY 305
+#define tMETHOD 306
+#define tOPEN 307
+#define tPLAY 308
+#define tDONE 309
+#define tPLAYACCEL 310
+#define tINSTANCE 311
+#define tGE 312
+#define tLE 313
+#define tGT 314
+#define tLT 315
+#define tEQ 316
+#define tNEQ 317
+#define tAND 318
+#define tOR 319
+#define tNOT 320
+#define tMOD 321
+#define tAFTER 322
+#define tBEFORE 323
+#define tCONCAT 324
+#define tCONTAINS 325
+#define tSTARTS 326
+#define tCHAR 327
+#define tITEM 328
+#define tLINE 329
+#define tWORD 330
+#define tSPRITE 331
+#define tINTERSECTS 332
+#define tWITHIN 333
+#define tON 334
 
 
 
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 0696261..33a004a 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -91,7 +91,7 @@ void checkEnd(Common::String *token, const char *expect, bool required) {
 %token<i> INT
 %token<e> THEENTITY THEENTITYWITHID
 %token<f> FLOAT
-%token<s> BLTIN BLTINNOARGS BLTINNOARGSORONE BLTINONEARG BLTINARGLIST
+%token<s> BLTIN BLTINNOARGS BLTINNOARGSORONE BLTINONEARG BLTINARGLIST TWOWORDBUILTIN
 %token<s> ID STRING HANDLER SYMBOL
 %token<s> ENDCLAUSE
 %token tDOWN tELSE tNLELSIF tEXIT tFRAME tGLOBAL tGO tIF tINTO tLOOP tMACRO
@@ -100,7 +100,7 @@ void checkEnd(Common::String *token, const char *expect, bool required) {
 %token tGE tLE tGT tLT tEQ tNEQ tAND tOR tNOT tMOD
 %token tAFTER tBEFORE tCONCAT tCONTAINS tSTARTS tCHAR tITEM tLINE tWORD
 %token tSPRITE tINTERSECTS tWITHIN
-%token tON tSOUND
+%token tON
 
 %type<code> asgn begin elseif elsestmtoneliner end expr if when repeatwhile repeatwith stmtlist
 %type<narg> argdef arglist
@@ -468,7 +468,7 @@ func: tPUT expr				{ g_lingo->code1(g_lingo->c_printtop); }
 	| BLTINARGLIST arglist	{ g_lingo->codeFunc($1, $2); }
 	| tOPEN expr tWITH expr	{ g_lingo->code1(g_lingo->c_open); }
 	| tOPEN expr 			{ g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); }
-	| tSOUND ID arglist		{ Common::String s("sound-"); s += *$2; g_lingo->codeFunc(&s, $3); }
+	| TWOWORDBUILTIN ID arglist	{ Common::String s(*$1); s += '-'; s += *$2; g_lingo->codeFunc(&s, $3); }
 	;
 
 globallist: ID				{ g_lingo->code1(g_lingo->c_global); g_lingo->codeString($1->c_str()); delete $1; }
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 65df2a2..afc5670 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 69
-#define YY_END_OF_BUFFER 70
+#define YY_NUM_RULES 68
+#define YY_END_OF_BUFFER 69
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -373,36 +373,35 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[252] =
+static yyconst flex_int16_t yy_accept[248] =
     {   0,
-        0,    0,   70,   68,    3,   66,   66,   68,   68,   68,
-       65,   65,   65,   64,   65,   65,   62,   62,   62,   62,
-       62,   62,   62,   62,   62,   62,   62,   62,   62,   62,
-       62,   62,   62,   62,    2,    2,    3,   66,    0,    0,
-        0,    0,    0,   67,    4,   61,    1,   63,   64,   60,
-       58,   59,   62,   62,   62,   62,   62,   62,   62,   62,
-       62,   62,   62,   62,   62,   22,   12,   62,   62,   62,
-       62,   62,   62,   62,   62,   62,   35,   36,   62,   38,
-       62,   62,   62,   62,   62,   62,   62,   62,   62,   51,
-       62,   62,   62,    2,    2,    0,    4,    1,   63,   62,
-
-        6,   62,   62,   62,   62,   62,   62,   16,   62,   62,
-       62,   62,    0,   62,   62,   62,   62,   62,   62,   62,
-       31,   62,   62,   34,   62,   62,   62,   41,   62,   43,
-       62,   62,   62,   62,   62,   62,   62,   62,    0,   62,
-       62,    8,   62,   10,   11,   15,    0,   16,   18,   62,
-       62,   62,    0,   62,   62,   25,   26,   27,   28,   62,
-       62,   62,   33,   37,   39,   62,   62,   62,   62,   62,
-        0,   50,   55,   62,   53,   57,   14,    5,   62,   62,
-       16,   16,   62,   19,   62,   21,   62,   62,   29,   62,
-       32,   62,   62,   44,   62,   62,   49,   49,   56,   62,
-
-        0,    7,   62,   16,   62,   20,   62,   62,   30,   62,
-       42,   52,   45,    0,    0,   49,   54,    0,   62,   17,
-       62,   62,   62,    0,    0,    0,    0,   49,   13,    9,
-       23,   62,   40,    0,    0,    0,   49,   62,    0,    0,
-        0,    0,   24,   48,   47,   48,    0,    0,    0,   46,
-        0
+        0,    0,   69,   67,    3,   65,   65,   67,   67,   67,
+       64,   64,   64,   63,   64,   64,   61,   61,   61,   61,
+       61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
+       61,   61,   61,   61,    2,    2,    3,   65,    0,    0,
+        0,    0,    0,   66,    4,   60,    1,   62,   63,   59,
+       57,   58,   61,   61,   61,   61,   61,   61,   61,   61,
+       61,   61,   61,   61,   61,   22,   12,   61,   61,   61,
+       61,   61,   61,   61,   61,   61,   35,   36,   61,   38,
+       61,   61,   61,   61,   61,   61,   61,   61,   50,   61,
+       61,   61,    2,    2,    0,    4,    1,   62,   61,    6,
+
+       61,   61,   61,   61,   61,   61,   16,   61,   61,   61,
+       61,    0,   61,   61,   61,   61,   61,   61,   61,   31,
+       61,   61,   34,   61,   61,   61,   41,   61,   43,   61,
+       61,   61,   61,   61,   61,   61,    0,   61,   61,    8,
+       61,   10,   11,   15,    0,   16,   18,   61,   61,   61,
+        0,   61,   61,   25,   26,   27,   28,   61,   61,   61,
+       33,   37,   39,   61,   61,   61,   61,    0,   49,   54,
+       61,   52,   56,   14,    5,   61,   61,   16,   16,   61,
+       19,   61,   21,   61,   61,   29,   61,   32,   61,   61,
+       61,   61,   48,   48,   55,   61,    0,    7,   61,   16,
+
+       61,   20,   61,   61,   30,   61,   42,   51,   44,    0,
+        0,   48,   53,    0,   61,   17,   61,   61,   61,    0,
+        0,    0,    0,   48,   13,    9,   23,   61,   40,    0,
+        0,    0,   48,   61,    0,    0,    0,    0,   24,   47,
+       46,   47,    0,    0,    0,   45,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -448,73 +447,71 @@ static yyconst flex_int32_t yy_meta[65] =
         5,    5,    5,    5
     } ;
 
-static yyconst flex_int16_t yy_base[263] =
+static yyconst flex_int16_t yy_base[259] =
     {   0,
-        0,   63,  187,  644,   67,   71,   75,   79,  168,    0,
-      644,  151,  148,   54,   70,  122,   65,   67,   65,   61,
+        0,   63,  160,  637,   67,   71,   75,   79,  140,    0,
+      637,  133,  126,   54,   70,   94,   65,   67,   65,   61,
        71,   87,   72,    0,  103,   81,  119,  109,  135,  118,
-       82,  149,  118,  161,  194,  214,  218,  644,  222,  207,
-      227,   82,   99,  644,    0,  644,    0,   88,   95,  644,
-      644,  644,    0,  112,   96,  105,  141,  124,  204,  142,
-      161,  164,  194,  217,  206,   88,    0,  205,  216,  212,
-      213,  225,  211,  231,  208,  215,    0,    0,  231,    0,
-      237,  234,  223,  230,  237,  239,  245,  239,  262,    0,
-      263,  251,  254,  301,  312,  260,    0,    0,   84,  274,
-
-        0,  267,  265,  265,  280,  278,  291,  323,  284,  288,
-      299,  311,  328,  297,  314,  306,  318,  307,  308,  318,
-        0,  320,  313,    0,  320,  310,  315,    0,  325,    0,
-      324,  330,  324,  364,  330,  334,  351,  358,  358,  349,
-      351,    0,  369,    0,    0,    0,  141,    0,    0,  358,
-      368,  373,  362,  377,  363,    0,    0,    0,    0,  367,
-      368,  378,    0,    0,    0,  376,  385,  385,  372,  374,
-      408,    0,    0,  397,  398,    0,  200,    0,  404,  403,
-        0,    0,  399,    0,  407,  644,  406,  402,    0,  409,
-        0,  407,  403,    0,  418,  407,  442,  465,    0,  416,
-
-      466,    0,  420,    0,  415,    0,  432,  436,    0,  427,
-        0,    0,    0,  472,  460,  476,    0,  461,  438,    0,
-      464,  469,  456,  498,  476,  476,  474,  510,  644,    0,
-        0,  466,    0,  471,  288,  483,  527,  488,  513,  534,
-      517,  538,    0,  644,  539,  644,  545,  520,  546,  551,
-      644,  599,  601,  604,  607,  613,  618,  623,  626,  631,
-      633,  638
+       82,  112,  146,  155,  194,  208,  212,  637,  216,  181,
+      220,  121,   99,  637,    0,  637,    0,   88,   95,  637,
+      637,  637,    0,  118,   96,  105,  142,  177,  197,  173,
+      183,  183,  210,  215,  204,   88,    0,  202,  217,  211,
+      213,  225,  211,  228,  208,  216,    0,    0,  228,    0,
+      235,  232,  220,  225,  227,  235,  255,  255,    0,  260,
+      248,  251,  291,  300,  253,    0,    0,   84,  267,    0,
+
+      260,  258,  263,  278,  280,  279,  314,  277,  282,  290,
+      302,  321,  293,  300,  301,  311,  300,  301,  311,    0,
+      312,  304,    0,  311,  303,  307,    0,  326,    0,  323,
+      317,  364,  322,  332,  337,  345,  349,  343,  344,    0,
+      354,    0,    0,    0,  189,    0,    0,  348,  358,  364,
+      354,  365,  352,    0,    0,    0,    0,  357,  358,  368,
+        0,    0,    0,  366,  377,  362,  363,  408,    0,    0,
+      378,  378,    0,  237,    0,  384,  390,    0,    0,  387,
+        0,  396,  637,  396,  392,    0,  398,    0,  397,  394,
+      410,  399,  436,  450,    0,  405,  434,    0,  408,    0,
+
+      405,    0,  429,  433,    0,  426,    0,    0,    0,  463,
+      443,  462,    0,  449,  436,    0,  453,  456,  443,  485,
+      463,  463,  464,  502,  637,    0,    0,  457,    0,  462,
+      430,  475,  518,  475,  490,  524,  492,  529,    0,  637,
+      530,  637,  538,  503,  539,  540,  637,  592,  594,  597,
+      600,  606,  611,  616,  619,  624,  626,  631
     } ;
 
-static yyconst flex_int16_t yy_def[263] =
+static yyconst flex_int16_t yy_def[259] =
     {   0,
-      251,    1,  251,  251,  251,  251,  251,  251,  252,  253,
-      251,  251,  251,  251,  251,  251,  254,  254,  254,  254,
-      254,  254,  254,  254,  254,  254,  254,  254,  254,  254,
-      254,  254,  254,  254,  251,  251,  251,  251,  251,  251,
-      251,  251,  252,  251,  255,  251,  256,  251,  251,  251,
-      251,  251,  254,  254,  254,  254,  254,  254,  254,  254,
-      254,  254,  254,  254,  254,  254,  254,  254,  254,  254,
-      254,  254,  254,  254,  254,  254,  254,  254,  254,  254,
-      254,  254,  254,  254,  254,  254,  254,  254,  254,  254,
-      254,  254,  254,  251,  251,  251,  255,  256,  251,  254,
-
-      254,  254,  254,  254,  254,  254,  254,  257,  254,  254,
-      254,  254,  251,  254,  254,  254,  254,  254,  254,  254,
-      254,  254,  254,  254,  254,  254,  254,  254,  254,  254,
-      254,  254,  254,  254,  254,  254,  254,  254,  251,  254,
-      254,  254,  254,  254,  254,  254,  258,  259,  254,  254,
-      254,  254,  251,  254,  254,  254,  254,  254,  254,  254,
-      254,  254,  254,  254,  254,  254,  254,  254,  254,  254,
-      260,  254,  254,  254,  254,  254,  251,  254,  254,  254,
-      261,  259,  254,  254,  254,  251,  254,  254,  254,  254,
-      254,  254,  254,  254,  254,  254,  260,  260,  254,  254,
-
-      251,  254,  254,  261,  254,  254,  254,  254,  254,  254,
-      254,  254,  254,  251,  251,  260,  254,  251,  254,  254,
-      254,  254,  254,  251,  251,  251,  251,  260,  251,  254,
-      254,  254,  254,  251,  251,  251,  260,  254,  251,  262,
-      251,  251,  254,  251,  262,  251,  251,  251,  251,  262,
-        0,  251,  251,  251,  251,  251,  251,  251,  251,  251,
-      251,  251
+      247,    1,  247,  247,  247,  247,  247,  247,  248,  249,
+      247,  247,  247,  247,  247,  247,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  247,  247,  247,  247,  247,  247,
+      247,  247,  248,  247,  251,  247,  252,  247,  247,  247,
+      247,  247,  250,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  247,  247,  247,  251,  252,  247,  250,  250,
+
+      250,  250,  250,  250,  250,  250,  253,  250,  250,  250,
+      250,  247,  250,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  250,  247,  250,  250,  250,
+      250,  250,  250,  250,  254,  255,  250,  250,  250,  250,
+      247,  250,  250,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  250,  250,  256,  250,  250,
+      250,  250,  250,  247,  250,  250,  250,  257,  255,  250,
+      250,  250,  247,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  256,  256,  250,  250,  247,  250,  250,  257,
+
+      250,  250,  250,  250,  250,  250,  250,  250,  250,  247,
+      247,  256,  250,  247,  250,  250,  250,  250,  250,  247,
+      247,  247,  247,  256,  247,  250,  250,  250,  250,  247,
+      247,  247,  256,  250,  247,  258,  247,  247,  250,  247,
+      258,  247,  247,  247,  247,  258,    0,  247,  247,  247,
+      247,  247,  247,  247,  247,  247,  247,  247
     } ;
 
-static yyconst flex_int16_t yy_nxt[709] =
+static yyconst flex_int16_t yy_nxt[702] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   11,
        13,    4,   14,   15,   11,   16,   17,   18,   19,   20,
@@ -524,79 +521,79 @@ static yyconst flex_int16_t yy_nxt[709] =
        26,   27,   28,   29,   30,   24,   31,   32,   33,   24,
        24,   34,   24,   24,   35,   48,   49,   36,   37,   38,
        38,   39,   40,   41,   41,   40,   40,   41,   41,   40,
-       39,   38,   38,   39,   50,   51,   54,   56,   57,  113,
-       59,   42,  113,   55,   58,   42,   99,   60,   65,   61,
-
-       99,   66,   84,   63,   44,   70,   48,   49,   96,   62,
-       71,   54,   56,   57,   59,  101,   42,   55,   58,   64,
-       42,   60,   65,   61,   67,   66,  102,   84,   63,   75,
-       70,   68,   96,   62,   71,   72,   52,   69,   76,   73,
-      101,   89,  147,   64,   81,  147,  100,   90,   74,   67,
-       82,  102,  104,   83,   75,   68,   77,  103,   47,   46,
-       72,   69,   76,   78,   73,   79,   89,   80,   81,   85,
-      100,   90,   74,   44,   82,  107,  104,   83,   86,   87,
-      108,   77,  103,   88,   91,   92,  251,   78,  109,   79,
-       93,   80,  251,  251,   85,   94,   38,   38,   95,  107,
-
-      251,  201,   86,   87,  201,  108,  251,   88,   40,   91,
-       92,   40,  110,  109,   93,   95,   38,   38,   95,   37,
-       38,   38,   39,   39,   38,   38,   39,   42,   40,   41,
-       41,   40,  105,  111,  251,  112,  116,  110,  114,  115,
-      117,  106,  118,  119,  251,  120,  123,   42,  251,  124,
-      121,  125,   42,  126,  127,  133,  105,  128,  111,  112,
-      129,  116,  114,  115,  117,  106,  118,  122,  119,  120,
-      123,  130,   42,  124,  131,  121,  125,  132,  126,  127,
-      133,  128,  134,  135,  129,  137,  138,  136,  251,  240,
-      251,  122,  240,  139,  140,  130,  141,  142,  131,  143,
-
-      144,  132,   94,   38,   38,   95,  145,  134,  135,  137,
-      138,  146,  136,   95,   38,   38,   95,  139,  149,  140,
-      141,  142,  150,  143,  147,  144,  151,  147,  152,  113,
-      145,  154,  113,  157,  155,   53,  146,  159,  158,  251,
-      160,  161,  149,  156,  162,  167,  150,  163,  164,  165,
-      151,  166,  168,  152,  169,  154,  170,  157,  173,  155,
-      174,  159,  153,  158,  160,  171,  161,  156,  171,  162,
-      167,  163,  164,  165,  175,  166,  168,  176,  177,  169,
-      170,  178,  173,  179,  174,  180,  153,  183,  184,  185,
-      251,  186,  172,  187,  251,  188,  189,  190,  191,  175,
-
-      192,  193,  176,  177,  194,  178,  195,  179,  196,  171,
-      180,  183,  171,  184,  185,  186,  172,  199,  187,  188,
-      189,  190,  200,  191,  202,  192,  193,  203,  209,  194,
-      195,  205,  196,  206,  207,  208,  210,  211,  212,  251,
-      213,  198,  199,  214,  217,  251,  214,  200,  219,  202,
-      221,  215,  203,  209,  220,  205,  222,  206,  207,  208,
-      210,  211,  223,  212,  213,  198,  214,  201,  217,  214,
-      201,  230,  219,  224,  215,  221,  224,  214,  220,  225,
-      214,  222,  229,  251,  231,  215,  223,  232,  251,  233,
-      218,  225,  234,  251,  227,  230,  216,  235,  236,  224,
-
-      238,  226,  224,  251,  225,  239,  227,  229,  228,  231,
-      241,  214,  232,  233,  214,  218,  225,  234,  227,  215,
-      216,  243,  235,  236,  238,  226,  251,  226,  242,  239,
-      227,  242,  228,  244,  241,  240,  215,  246,  240,  247,
-      251,  249,  247,  251,  237,  243,  247,  250,  251,  247,
-      250,  226,  250,  251,  251,  250,  251,  225,  244,  251,
-      251,  251,  246,  251,  251,  251,  249,  248,  237,  251,
-      251,  251,  227,  251,  248,  251,  251,  251,  251,  251,
-      251,  251,  225,  251,  251,  251,  251,  251,  251,  251,
-      251,  248,  251,  251,  251,  251,  227,  251,  248,   43,
-
-       43,  251,   43,   43,   43,   45,   45,   53,   53,   53,
-       97,   97,   97,   98,   98,  251,   98,   98,   98,  148,
-      251,  148,  148,  148,  181,  251,  251,  181,  181,  182,
-      182,  182,  197,  251,  251,  197,  204,  204,  204,  245,
-      251,  251,  245,    3,  251,  251,  251,  251,  251,  251,
-      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
-      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
-      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
-      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
-      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
-
-      251,  251,  251,  251,  251,  251,  251,  251
+       39,   38,   38,   39,   50,   51,   54,   56,   57,  112,
+       59,   42,  112,   55,   58,   42,   98,   60,   65,   61,
+
+       98,   66,   84,   63,   44,   70,   48,   49,   52,   62,
+       71,   54,   56,   57,   59,  100,   42,   55,   58,   64,
+       42,   60,   65,   61,   67,   66,  101,   84,   63,   75,
+       70,   68,   85,   62,   71,   72,   47,   69,   76,   73,
+      100,   46,   86,   64,   81,   44,   87,   95,   74,   67,
+       82,  101,   99,   83,   75,   68,   77,   85,  102,  247,
+       72,   69,   76,   78,   73,   79,   86,   80,   81,   88,
+       87,   95,   74,  247,   82,   89,   99,   83,   90,   91,
+      247,   77,   40,  102,   92,   40,  247,   78,  247,   79,
+      145,   80,  247,  145,   88,   93,   38,   38,   94,   89,
+
+      247,   42,  107,   90,   91,  103,  106,  108,   92,   94,
+       38,   38,   94,   37,   38,   38,   39,   39,   38,   38,
+       39,   40,   41,   41,   40,  104,   42,  107,  109,  103,
+      106,  110,  108,  111,  105,  113,  114,  115,  197,  116,
+       42,  197,  117,  118,  247,  119,  122,  120,  124,  104,
+      123,  125,  126,  109,  127,  128,  110,  111,  105,  113,
+      114,  129,  115,  116,  121,   42,  117,  130,  118,  119,
+      122,  131,  120,  124,  123,  132,  125,  126,  127,  128,
+      133,  247,  135,  136,  134,  129,  137,  138,  121,  139,
+      140,  130,   93,   38,   38,   94,  131,  141,  142,  144,
+
+      132,   94,   38,   38,   94,  133,  135,  136,  143,  134,
+      137,  147,  138,  139,  140,  145,  148,  149,  145,  150,
+      153,  141,  112,  142,  144,  112,   53,  152,  155,  154,
+      157,  156,  143,  158,  159,  147,  160,  247,  161,  162,
+      148,  149,  163,  164,  150,  153,  165,  166,  247,  167,
+      170,  152,  155,  154,  157,  151,  156,  158,  171,  159,
+      172,  160,  161,  162,  173,  168,  163,  164,  168,  174,
+      177,  165,  166,  167,  170,  175,  176,  180,  181,  151,
+      182,  184,  171,  183,  185,  172,  186,  187,  188,  173,
+      189,  247,  169,  190,  174,  177,  191,  192,  195,  175,
+
+      176,  180,  196,  181,  198,  182,  184,  183,  185,  168,
+      186,  187,  168,  188,  199,  189,  169,  205,  190,  201,
+      191,  192,  202,  195,  203,  204,  206,  196,  207,  198,
+      208,  236,  209,  213,  236,  197,  215,  210,  197,  199,
+      210,  194,  205,  201,  216,  211,  202,  217,  203,  204,
+      206,  210,  207,  218,  210,  208,  209,  213,  214,  211,
+      215,  219,  221,  210,  220,  194,  210,  220,  216,  226,
+      225,  211,  217,  227,  228,  247,  229,  223,  218,  230,
+      247,  212,  221,  214,  231,  219,  220,  221,  232,  220,
+      247,  234,  222,  226,  224,  225,  235,  223,  227,  228,
+
+      229,  223,  237,  210,  230,  212,  210,  221,  239,  231,
+      240,  211,  242,  232,  222,  234,  222,  247,  224,  238,
+      235,  223,  238,  247,  245,  236,  237,  211,  236,  247,
+      243,  247,  239,  243,  247,  240,  233,  242,  222,  243,
+      246,  246,  243,  246,  246,  247,  247,  247,  221,  245,
+      247,  247,  247,  247,  247,  247,  247,  247,  244,  247,
+      233,  247,  247,  223,  247,  247,  247,  244,  247,  247,
+      247,  247,  247,  221,  247,  247,  247,  247,  247,  247,
+      247,  247,  244,  247,  247,  247,  247,  223,  247,  247,
+      247,  244,   43,   43,  247,   43,   43,   43,   45,   45,
+
+       53,   53,   53,   96,   96,   96,   97,   97,  247,   97,
+       97,   97,  146,  247,  146,  146,  146,  178,  247,  247,
+      178,  178,  179,  179,  179,  193,  247,  247,  193,  200,
+      200,  200,  241,  247,  247,  241,    3,  247,  247,  247,
+      247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
+      247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
+      247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
+      247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
+      247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
+      247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
+
+      247
     } ;
 
-static yyconst flex_int16_t yy_chk[709] =
+static yyconst flex_int16_t yy_chk[702] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -607,75 +604,75 @@ static yyconst flex_int16_t yy_chk[709] =
         1,    1,    1,    1,    2,   14,   14,    2,    5,    5,
         5,    5,    6,    6,    6,    6,    7,    7,    7,    7,
         8,    8,    8,    8,   15,   15,   17,   18,   19,   66,
-       20,    6,   66,   17,   19,    7,   99,   21,   23,   21,
+       20,    6,   66,   17,   19,    7,   98,   21,   23,   21,
 
-       48,   23,   31,   22,   43,   26,   49,   49,   42,   21,
+       48,   23,   31,   22,   43,   26,   49,   49,   16,   21,
        26,   17,   18,   19,   20,   55,    6,   17,   19,   22,
         7,   21,   23,   21,   25,   23,   56,   31,   22,   28,
-       26,   25,   42,   21,   26,   27,   16,   25,   28,   27,
-       55,   33,  147,   22,   30,  147,   54,   33,   27,   25,
-       30,   56,   58,   30,   28,   25,   29,   57,   13,   12,
-       27,   25,   28,   29,   27,   29,   33,   29,   30,   32,
-       54,   33,   27,    9,   30,   60,   58,   30,   32,   32,
-       61,   29,   57,   32,   34,   34,    3,   29,   62,   29,
-       34,   29,    0,    0,   32,   35,   35,   35,   35,   60,
-
-        0,  177,   32,   32,  177,   61,    0,   32,   40,   34,
-       34,   40,   63,   62,   34,   36,   36,   36,   36,   37,
-       37,   37,   37,   39,   39,   39,   39,   40,   41,   41,
-       41,   41,   59,   64,    0,   65,   69,   63,   68,   68,
-       70,   59,   71,   72,    0,   73,   75,   41,    0,   76,
-       74,   79,   40,   81,   82,   88,   59,   83,   64,   65,
-       84,   69,   68,   68,   70,   59,   71,   74,   72,   73,
-       75,   85,   41,   76,   86,   74,   79,   87,   81,   82,
-       88,   83,   89,   91,   84,   92,   93,   91,    0,  235,
-        0,   74,  235,   96,  100,   85,  102,  103,   86,  104,
-
-      105,   87,   94,   94,   94,   94,  106,   89,   91,   92,
-       93,  107,   91,   95,   95,   95,   95,   96,  109,  100,
-      102,  103,  110,  104,  108,  105,  111,  108,  112,  113,
-      106,  114,  113,  116,  115,  108,  107,  118,  117,    0,
-      119,  120,  109,  115,  122,  129,  110,  123,  125,  126,
-      111,  127,  131,  112,  132,  114,  133,  116,  135,  115,
-      136,  118,  113,  117,  119,  134,  120,  115,  134,  122,
-      129,  123,  125,  126,  137,  127,  131,  138,  139,  132,
-      133,  140,  135,  141,  136,  143,  113,  150,  151,  152,
-        0,  153,  134,  154,    0,  155,  160,  161,  162,  137,
-
-      166,  167,  138,  139,  168,  140,  169,  141,  170,  171,
-      143,  150,  171,  151,  152,  153,  134,  174,  154,  155,
-      160,  161,  175,  162,  179,  166,  167,  180,  190,  168,
-      169,  183,  170,  185,  187,  188,  192,  193,  195,    0,
-      196,  171,  174,  197,  200,    0,  197,  175,  203,  179,
-      207,  197,  180,  190,  205,  183,  208,  185,  187,  188,
-      192,  193,  210,  195,  196,  171,  198,  201,  200,  198,
-      201,  219,  203,  214,  198,  207,  214,  216,  205,  215,
-      216,  208,  218,    0,  221,  216,  210,  222,    0,  223,
-      201,  214,  225,    0,  215,  219,  198,  226,  227,  224,
-
-      232,  214,  224,    0,  215,  234,  214,  218,  216,  221,
-      236,  228,  222,  223,  228,  201,  214,  225,  215,  228,
-      198,  238,  226,  227,  232,  214,    0,  224,  237,  234,
-      214,  237,  216,  239,  236,  240,  237,  241,  240,  242,
-      245,  248,  242,  245,  228,  238,  247,  249,    0,  247,
-      249,  224,  250,    0,    0,  250,    0,  242,  239,    0,
-        0,    0,  241,    0,    0,    0,  248,  242,  228,    0,
-        0,    0,  242,    0,  247,    0,    0,    0,    0,    0,
-        0,    0,  242,    0,    0,    0,    0,    0,    0,    0,
-        0,  242,    0,    0,    0,    0,  242,    0,  247,  252,
-
-      252,    0,  252,  252,  252,  253,  253,  254,  254,  254,
-      255,  255,  255,  256,  256,    0,  256,  256,  256,  257,
-        0,  257,  257,  257,  258,    0,    0,  258,  258,  259,
-      259,  259,  260,    0,    0,  260,  261,  261,  261,  262,
-        0,    0,  262,  251,  251,  251,  251,  251,  251,  251,
-      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
-      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
-      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
-      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
-      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
-
-      251,  251,  251,  251,  251,  251,  251,  251
+       26,   25,   32,   21,   26,   27,   13,   25,   28,   27,
+       55,   12,   32,   22,   30,    9,   32,   42,   27,   25,
+       30,   56,   54,   30,   28,   25,   29,   32,   57,    3,
+       27,   25,   28,   29,   27,   29,   32,   29,   30,   33,
+       32,   42,   27,    0,   30,   33,   54,   30,   34,   34,
+        0,   29,   40,   57,   34,   40,    0,   29,    0,   29,
+      145,   29,    0,  145,   33,   35,   35,   35,   35,   33,
+
+        0,   40,   61,   34,   34,   58,   60,   62,   34,   36,
+       36,   36,   36,   37,   37,   37,   37,   39,   39,   39,
+       39,   41,   41,   41,   41,   59,   40,   61,   63,   58,
+       60,   64,   62,   65,   59,   68,   68,   69,  174,   70,
+       41,  174,   71,   72,    0,   73,   75,   74,   79,   59,
+       76,   81,   82,   63,   83,   84,   64,   65,   59,   68,
+       68,   85,   69,   70,   74,   41,   71,   86,   72,   73,
+       75,   87,   74,   79,   76,   88,   81,   82,   83,   84,
+       90,    0,   91,   92,   90,   85,   95,   99,   74,  101,
+      102,   86,   93,   93,   93,   93,   87,  103,  104,  106,
+
+       88,   94,   94,   94,   94,   90,   91,   92,  105,   90,
+       95,  108,   99,  101,  102,  107,  109,  110,  107,  111,
+      114,  103,  112,  104,  106,  112,  107,  113,  115,  114,
+      117,  116,  105,  118,  119,  108,  121,    0,  122,  124,
+      109,  110,  125,  126,  111,  114,  128,  130,    0,  131,
+      133,  113,  115,  114,  117,  112,  116,  118,  134,  119,
+      135,  121,  122,  124,  136,  132,  125,  126,  132,  137,
+      141,  128,  130,  131,  133,  138,  139,  148,  149,  112,
+      150,  152,  134,  151,  153,  135,  158,  159,  160,  136,
+      164,    0,  132,  165,  137,  141,  166,  167,  171,  138,
+
+      139,  148,  172,  149,  176,  150,  152,  151,  153,  168,
+      158,  159,  168,  160,  177,  164,  132,  187,  165,  180,
+      166,  167,  182,  171,  184,  185,  189,  172,  190,  176,
+      191,  231,  192,  196,  231,  197,  199,  193,  197,  177,
+      193,  168,  187,  180,  201,  193,  182,  203,  184,  185,
+      189,  194,  190,  204,  194,  191,  192,  196,  197,  194,
+      199,  206,  211,  212,  210,  168,  212,  210,  201,  215,
+      214,  212,  203,  217,  218,    0,  219,  211,  204,  221,
+        0,  194,  210,  197,  222,  206,  220,  211,  223,  220,
+        0,  228,  210,  215,  212,  214,  230,  210,  217,  218,
+
+      219,  211,  232,  224,  221,  194,  224,  210,  234,  222,
+      235,  224,  237,  223,  220,  228,  210,    0,  212,  233,
+      230,  210,  233,    0,  244,  236,  232,  233,  236,    0,
+      238,  241,  234,  238,  241,  235,  224,  237,  220,  243,
+      245,  246,  243,  245,  246,    0,    0,    0,  238,  244,
+        0,    0,    0,    0,    0,    0,    0,    0,  238,    0,
+      224,    0,    0,  238,    0,    0,    0,  243,    0,    0,
+        0,    0,    0,  238,    0,    0,    0,    0,    0,    0,
+        0,    0,  238,    0,    0,    0,    0,  238,    0,    0,
+        0,  243,  248,  248,    0,  248,  248,  248,  249,  249,
+
+      250,  250,  250,  251,  251,  251,  252,  252,    0,  252,
+      252,  252,  253,    0,  253,  253,  253,  254,    0,    0,
+      254,  254,  255,  255,  255,  256,    0,    0,  256,  257,
+      257,  257,  258,    0,    0,  258,  247,  247,  247,  247,
+      247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
+      247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
+      247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
+      247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
+      247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
+      247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
+
+      247
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -749,7 +746,7 @@ static void countnl() {
 	g_lingo->_colnumber = strlen(p);
 }
 
-#line 753 "engines/director/lingo/lingo-lex.cpp"
+#line 750 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -937,7 +934,7 @@ YY_DECL
 #line 69 "engines/director/lingo/lingo-lex.l"
 
 
-#line 941 "engines/director/lingo/lingo-lex.cpp"
+#line 938 "engines/director/lingo/lingo-lex.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -991,13 +988,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 >= 252 )
+				if ( yy_current_state >= 248 )
 					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_base[yy_current_state] != 644 );
+		while ( yy_base[yy_current_state] != 637 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -1251,16 +1248,11 @@ YY_RULE_SETUP
 case 44:
 YY_RULE_SETUP
 #line 126 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSOUND; }		// D3
+{ count(); return tSTARTS; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 127 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSTARTS; }
-	YY_BREAK
-case 46:
-YY_RULE_SETUP
-#line 128 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1270,9 +1262,9 @@ YY_RULE_SETUP
 		return THEENTITYWITHID;
 	}
 	YY_BREAK
-case 47:
+case 46:
 YY_RULE_SETUP
-#line 136 "engines/director/lingo/lingo-lex.l"
+#line 135 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1314,9 +1306,9 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
-case 48:
+case 47:
 YY_RULE_SETUP
-#line 176 "engines/director/lingo/lingo-lex.l"
+#line 175 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1349,9 +1341,9 @@ YY_RULE_SETUP
 			return THEENTITY;
 	}
 	YY_BREAK
-case 49:
+case 48:
 YY_RULE_SETUP
-#line 207 "engines/director/lingo/lingo-lex.l"
+#line 206 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1372,69 +1364,69 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 225 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTHEN; }
+	YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 226 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTHEN; }
+{ count(); return tTO; }
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 227 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTO; }
+{ count(); return tSPRITE; }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 228 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSPRITE; }
+{ count(); return tWITH; }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 229 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITH; }
+{ count(); return tWITHIN; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 230 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITHIN; }
+{ count(); return tWHEN; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 231 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHEN; }
+{ count(); return tWHILE; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 232 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHILE; }
+{ count(); return tWORD; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 233 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWORD; }
+#line 234 "engines/director/lingo/lingo-lex.l"
+{ count(); return tNEQ; }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 235 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEQ; }
+{ count(); return tGE; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 236 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGE; }
+{ count(); return tLE; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 237 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLE; }
-	YY_BREAK
-case 61:
-YY_RULE_SETUP
-#line 238 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONCAT; }
 	YY_BREAK
-case 62:
+case 61:
 YY_RULE_SETUP
-#line 240 "engines/director/lingo/lingo-lex.l"
+#line 239 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1442,6 +1434,9 @@ YY_RULE_SETUP
 		if (g_lingo->_ignoreMe && yylval.s->equalsIgnoreCase("me"))
 			return ID;
 
+		if (g_lingo->_twoWordBuiltins.contains(yytext))
+			return TWOWORDBUILTIN;
+
 		if (g_lingo->_handlers.contains(yytext)) {
 			if (g_lingo->_handlers[yytext]->type == BLTIN && g_lingo->_handlers[yytext]->parens == false) {
 				if (g_lingo->_handlers[yytext]->nargs == 0) {
@@ -1465,43 +1460,43 @@ YY_RULE_SETUP
 		return ID;
 	}
 	YY_BREAK
-case 63:
+case 62:
 YY_RULE_SETUP
-#line 269 "engines/director/lingo/lingo-lex.l"
+#line 271 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
-case 64:
+case 63:
 YY_RULE_SETUP
-#line 270 "engines/director/lingo/lingo-lex.l"
+#line 272 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
-case 65:
+case 64:
 YY_RULE_SETUP
-#line 271 "engines/director/lingo/lingo-lex.l"
+#line 273 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
-case 66:
-/* rule 66 can match eol */
+case 65:
+/* rule 65 can match eol */
 YY_RULE_SETUP
-#line 272 "engines/director/lingo/lingo-lex.l"
+#line 274 "engines/director/lingo/lingo-lex.l"
 { return '\n'; }
 	YY_BREAK
-case 67:
+case 66:
 YY_RULE_SETUP
-#line 273 "engines/director/lingo/lingo-lex.l"
+#line 275 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
-case 68:
+case 67:
 YY_RULE_SETUP
-#line 274 "engines/director/lingo/lingo-lex.l"
+#line 276 "engines/director/lingo/lingo-lex.l"
 
 	YY_BREAK
-case 69:
+case 68:
 YY_RULE_SETUP
-#line 276 "engines/director/lingo/lingo-lex.l"
+#line 278 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1505 "engines/director/lingo/lingo-lex.cpp"
+#line 1500 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1794,7 +1789,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 >= 252 )
+			if ( yy_current_state >= 248 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1822,11 +1817,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 >= 252 )
+		if ( yy_current_state >= 248 )
 			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 == 251);
+	yy_is_jam = (yy_current_state == 247);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2501,7 +2496,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 276 "engines/director/lingo/lingo-lex.l"
+#line 278 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 75fc176..afd90ae 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -123,7 +123,6 @@ whitespace [\t ]
 (?i:put)			{ count(); return tPUT; }
 (?i:repeat)			{ count(); return tREPEAT; }
 (?i:set)			{ count(); return tSET; }
-(?i:sound)			{ count(); return tSOUND; }		// D3
 (?i:starts)			{ count(); return tSTARTS; }
 (?i:the[ \t]+sqrt[\t ]+of[\t ]+)	{
 		count();
@@ -244,6 +243,9 @@ whitespace [\t ]
 		if (g_lingo->_ignoreMe && yylval.s->equalsIgnoreCase("me"))
 			return ID;
 
+		if (g_lingo->_twoWordBuiltins.contains(yytext))
+			return TWOWORDBUILTIN;
+
 		if (g_lingo->_handlers.contains(yytext)) {
 			if (g_lingo->_handlers[yytext]->type == BLTIN && g_lingo->_handlers[yytext]->parens == false) {
 				if (g_lingo->_handlers[yytext]->nargs == 0) {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 54a719e..f2d315e 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -350,7 +350,9 @@ public:
 
 	static void b_constrainH(int nargs);
 	static void b_constrainV(int nargs);
+	static void b_duplicateCast(int nargs);
 	static void b_editableText(int nargs);
+	static void b_eraseCast(int nargs);
 	static void b_installMenu(int nargs);
 	static void b_label(int nargs);
 	static void b_marker(int nargs);
@@ -448,6 +450,7 @@ public:
 	Common::Array<int> _labelstack;
 
 	SymbolHash _handlers;
+	Common::HashMap<Common::String, bool> _twoWordBuiltins;
 
 	int _linenumber;
 	int _colnumber;





More information about the Scummvm-git-logs mailing list