[Scummvm-cvs-logs] scummvm master -> e52bdfd5ed2043f0bb5f4312d63bc53edf52d5a3

sev- sev at scummvm.org
Thu Aug 4 23:01:07 CEST 2016


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

Summary:
7ec2e7bc31 DIRECTOR: Lingo: Added 'alert' and 'beep' function stubs
415cefd702 DIRECTOR: Lingo: Added stubs for 'closeDA', 'closeResFile' and 'closeXlib'
8883a03e21 DIRECTOR: Lingo: Simplified code generation for constants
e52bdfd5ed DIRECTOR: Lingo: Added stubs for 'continue', 'cursor' and 'delay'


Commit: 7ec2e7bc31bbc6a916586c5aa0eecae98559eee4
    https://github.com/scummvm/scummvm/commit/7ec2e7bc31bbc6a916586c5aa0eecae98559eee4
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-04T23:00:55+02:00

Commit Message:
DIRECTOR: Lingo: Added 'alert' and 'beep' function stubs

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-funcs.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-code.cpp b/engines/director/lingo/lingo-code.cpp
index b0099dc..d529290 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -688,6 +688,21 @@ void Lingo::c_gotoprevious() {
 	g_lingo->func_gotoprevious();
 }
 
+void Lingo::c_alert() {
+	Datum d = g_lingo->pop();
+
+	d.toString();
+
+	g_lingo->func_alert(*d.u.s);
+
+	delete d.u.s;
+}
+
+void Lingo::c_beep() {
+	Datum d = g_lingo->pop();
+	g_lingo->func_beep(d.u.i);
+}
+
 void Lingo::c_call() {
 	Common::String name((char *)&(*g_lingo->_currentScript)[g_lingo->_pc]);
 	g_lingo->_pc += g_lingo->calcStringAlignment(name.c_str());
diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index 08b3d45..4f48689 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -222,4 +222,12 @@ void Lingo::func_gotoprevious() {
 	_vm->_currentScore->gotoprevious();
 }
 
+void Lingo::func_alert(Common::String &s) {
+	warning("STUB: func_alert(%s)", s.c_str());
+}
+
+void Lingo::func_beep(int num) {
+	warning("STUB: func_beep(%d)", num);
+}
+
 }
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index ce6e11b..d776d4a 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -112,21 +112,23 @@
      tNLELSE = 301,
      tFACTORY = 302,
      tMETHOD = 303,
-     tGE = 304,
-     tLE = 305,
-     tGT = 306,
-     tLT = 307,
-     tEQ = 308,
-     tNEQ = 309,
-     tAND = 310,
-     tOR = 311,
-     tNOT = 312,
-     tCONCAT = 313,
-     tCONTAINS = 314,
-     tSTARTS = 315,
-     tSPRITE = 316,
-     tINTERSECTS = 317,
-     tWITHIN = 318
+     tALERT = 304,
+     tBEEP = 305,
+     tGE = 306,
+     tLE = 307,
+     tGT = 308,
+     tLT = 309,
+     tEQ = 310,
+     tNEQ = 311,
+     tAND = 312,
+     tOR = 313,
+     tNOT = 314,
+     tCONCAT = 315,
+     tCONTAINS = 316,
+     tSTARTS = 317,
+     tSPRITE = 318,
+     tINTERSECTS = 319,
+     tWITHIN = 320
    };
 #endif
 /* Tokens.  */
@@ -176,21 +178,23 @@
 #define tNLELSE 301
 #define tFACTORY 302
 #define tMETHOD 303
-#define tGE 304
-#define tLE 305
-#define tGT 306
-#define tLT 307
-#define tEQ 308
-#define tNEQ 309
-#define tAND 310
-#define tOR 311
-#define tNOT 312
-#define tCONCAT 313
-#define tCONTAINS 314
-#define tSTARTS 315
-#define tSPRITE 316
-#define tINTERSECTS 317
-#define tWITHIN 318
+#define tALERT 304
+#define tBEEP 305
+#define tGE 306
+#define tLE 307
+#define tGT 308
+#define tLT 309
+#define tEQ 310
+#define tNEQ 311
+#define tAND 312
+#define tOR 313
+#define tNOT 314
+#define tCONCAT 315
+#define tCONTAINS 316
+#define tSTARTS 317
+#define tSPRITE 318
+#define tINTERSECTS 319
+#define tWITHIN 320
 
 
 
@@ -248,7 +252,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 193 of yacc.c.  */
-#line 252 "engines/director/lingo/lingo-gr.cpp"
+#line 256 "engines/director/lingo/lingo-gr.cpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -261,7 +265,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 265 "engines/director/lingo/lingo-gr.cpp"
+#line 269 "engines/director/lingo/lingo-gr.cpp"
 
 #ifdef short
 # undef short
@@ -474,22 +478,22 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  77
+#define YYFINAL  81
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   719
+#define YYLAST   785
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  77
+#define YYNTOKENS  79
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  34
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  118
+#define YYNRULES  121
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  254
+#define YYNSTATES  258
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   318
+#define YYMAXUTOK   320
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -498,12 +502,12 @@ union yyalloc
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      70,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      72,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,    69,    75,     2,
-      71,    72,    67,    65,    76,    66,     2,    68,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    71,    77,     2,
+      73,    74,    69,    67,    78,    68,     2,    70,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      74,    64,    73,     2,     2,     2,     2,     2,     2,     2,
+      76,    66,    75,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -528,7 +532,8 @@ static const yytype_uint8 yytranslate[] =
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65
 };
 
 #if YYDEBUG
@@ -545,59 +550,61 @@ static const yytype_uint16 yyprhs[] =
      246,   248,   251,   253,   257,   261,   265,   269,   273,   277,
      281,   285,   289,   293,   297,   300,   304,   308,   312,   316,
      319,   322,   326,   331,   336,   339,   342,   345,   347,   349,
-     352,   354,   358,   361,   364,   367,   370,   374,   377,   381,
-     384,   387,   389,   393,   396,   400,   401,   410,   413,   414,
-     423,   424,   426,   430,   435,   436,   440,   441,   443
+     352,   355,   358,   360,   362,   366,   369,   372,   375,   378,
+     382,   385,   389,   392,   395,   397,   401,   404,   408,   409,
+     418,   421,   422,   431,   432,   434,   438,   443,   444,   448,
+     449,   451
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      78,     0,    -1,    78,    79,    80,    -1,    80,    -1,     1,
-      70,    -1,    70,    -1,    -1,   104,    -1,    99,    -1,   109,
-      -1,    81,    -1,    83,    -1,    38,    98,    29,    19,    -1,
-      40,    19,    64,    98,    -1,    40,    12,    64,    98,    -1,
-      40,    13,    98,    64,    98,    -1,    40,    19,    42,    98,
-      -1,    40,    12,    42,    98,    -1,    40,    13,    98,    42,
-      98,    -1,    98,    -1,    99,    -1,    82,    -1,    84,    -1,
-      91,    71,    90,    72,    97,    96,    23,    39,    -1,    92,
-      64,    98,    96,    42,    98,    96,    97,    96,    23,    39,
-      -1,    92,    64,    98,    96,    20,    42,    98,    96,    97,
-      96,    23,    39,    -1,    43,    19,    41,    98,    -1,    93,
-      90,    41,    79,    97,    96,    23,    28,    -1,    93,    90,
-      41,    79,    97,    96,    46,    97,    96,    23,    28,    -1,
-      93,    90,    41,    79,    97,    96,    95,    86,    96,    23,
-      28,    -1,    93,    90,    41,    95,    82,    96,    -1,    93,
-      90,    41,    95,    82,    96,    46,    95,    82,    96,    -1,
-      93,    90,    41,    95,    82,    96,    87,    96,    85,    96,
-      -1,    -1,    46,    95,    82,    -1,    86,    89,    -1,    89,
-      -1,    87,    88,    -1,    88,    -1,    94,    90,    41,    95,
-      83,    96,    -1,    87,    -1,    94,    90,    41,    97,    96,
-      -1,    98,    -1,    98,    64,    98,    -1,    71,    90,    72,
+      80,     0,    -1,    80,    81,    82,    -1,    82,    -1,     1,
+      72,    -1,    72,    -1,    -1,   106,    -1,   101,    -1,   111,
+      -1,    83,    -1,    85,    -1,    38,   100,    29,    19,    -1,
+      40,    19,    66,   100,    -1,    40,    12,    66,   100,    -1,
+      40,    13,   100,    66,   100,    -1,    40,    19,    42,   100,
+      -1,    40,    12,    42,   100,    -1,    40,    13,   100,    42,
+     100,    -1,   100,    -1,   101,    -1,    84,    -1,    86,    -1,
+      93,    73,    92,    74,    99,    98,    23,    39,    -1,    94,
+      66,   100,    98,    42,   100,    98,    99,    98,    23,    39,
+      -1,    94,    66,   100,    98,    20,    42,   100,    98,    99,
+      98,    23,    39,    -1,    43,    19,    41,   100,    -1,    95,
+      92,    41,    81,    99,    98,    23,    28,    -1,    95,    92,
+      41,    81,    99,    98,    46,    99,    98,    23,    28,    -1,
+      95,    92,    41,    81,    99,    98,    97,    88,    98,    23,
+      28,    -1,    95,    92,    41,    97,    84,    98,    -1,    95,
+      92,    41,    97,    84,    98,    46,    97,    84,    98,    -1,
+      95,    92,    41,    97,    84,    98,    89,    98,    87,    98,
+      -1,    -1,    46,    97,    84,    -1,    88,    91,    -1,    91,
+      -1,    89,    90,    -1,    90,    -1,    96,    92,    41,    97,
+      85,    98,    -1,    89,    -1,    96,    92,    41,    99,    98,
+      -1,   100,    -1,   100,    66,   100,    -1,    73,    92,    74,
       -1,    39,    45,    -1,    39,    44,    19,    -1,    28,    -1,
-      22,    -1,    -1,    -1,    -1,    97,    79,    -1,    97,    83,
+      22,    -1,    -1,    -1,    -1,    99,    81,    -1,    99,    85,
       -1,    11,    -1,    14,    -1,    17,    -1,    16,    -1,    19,
-      71,   110,    72,    -1,    19,    -1,    12,    -1,    13,    98,
-      -1,    81,    -1,    98,    65,    98,    -1,    98,    66,    98,
-      -1,    98,    67,    98,    -1,    98,    68,    98,    -1,    98,
-      73,    98,    -1,    98,    74,    98,    -1,    98,    54,    98,
-      -1,    98,    49,    98,    -1,    98,    50,    98,    -1,    98,
-      55,    98,    -1,    98,    56,    98,    -1,    57,    98,    -1,
-      98,    75,    98,    -1,    98,    58,    98,    -1,    98,    59,
-      98,    -1,    98,    60,    98,    -1,    65,    98,    -1,    66,
-      98,    -1,    71,    98,    72,    -1,    61,    98,    62,    98,
-      -1,    61,    98,    63,    98,    -1,    32,    17,    -1,    33,
-      19,    -1,    38,    98,    -1,   101,    -1,    24,    -1,    26,
-     100,    -1,    19,    -1,   100,    76,    19,    -1,    27,    30,
-      -1,    27,    35,    -1,    27,    37,    -1,    27,   102,    -1,
-      27,   102,   103,    -1,    27,   103,    -1,    42,    25,    17,
-      -1,    25,    17,    -1,    42,    17,    -1,    17,    -1,    36,
-      34,    17,    -1,    34,    17,    -1,    42,    34,    17,    -1,
-      -1,    31,    19,   105,    95,   107,    79,   108,    97,    -1,
-      47,    19,    -1,    -1,    48,    19,   106,    95,   107,    79,
-     108,    97,    -1,    -1,    19,    -1,   107,    76,    19,    -1,
-     107,    79,    76,    19,    -1,    -1,    19,    95,   110,    -1,
-      -1,    98,    -1,   110,    76,    98,    -1
+      73,   112,    74,    -1,    19,    -1,    12,    -1,    13,   100,
+      -1,    83,    -1,   100,    67,   100,    -1,   100,    68,   100,
+      -1,   100,    69,   100,    -1,   100,    70,   100,    -1,   100,
+      75,   100,    -1,   100,    76,   100,    -1,   100,    56,   100,
+      -1,   100,    51,   100,    -1,   100,    52,   100,    -1,   100,
+      57,   100,    -1,   100,    58,   100,    -1,    59,   100,    -1,
+     100,    77,   100,    -1,   100,    60,   100,    -1,   100,    61,
+     100,    -1,   100,    62,   100,    -1,    67,   100,    -1,    68,
+     100,    -1,    73,   100,    74,    -1,    63,   100,    64,   100,
+      -1,    63,   100,    65,   100,    -1,    32,    17,    -1,    33,
+      19,    -1,    38,   100,    -1,   103,    -1,    24,    -1,    26,
+     102,    -1,    49,   100,    -1,    50,    11,    -1,    50,    -1,
+      19,    -1,   102,    78,    19,    -1,    27,    30,    -1,    27,
+      35,    -1,    27,    37,    -1,    27,   104,    -1,    27,   104,
+     105,    -1,    27,   105,    -1,    42,    25,    17,    -1,    25,
+      17,    -1,    42,    17,    -1,    17,    -1,    36,    34,    17,
+      -1,    34,    17,    -1,    42,    34,    17,    -1,    -1,    31,
+      19,   107,    97,   109,    81,   110,    99,    -1,    47,    19,
+      -1,    -1,    48,    19,   108,    97,   109,    81,   110,    99,
+      -1,    -1,    19,    -1,   109,    78,    19,    -1,   109,    81,
+      78,    19,    -1,    -1,    19,    97,   112,    -1,    -1,   100,
+      -1,   112,    78,   100,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -612,9 +619,10 @@ static const yytype_uint16 yyrline[] =
      367,   374,   380,   381,   382,   383,   384,   385,   386,   387,
      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
      398,   399,   400,   401,   404,   405,   406,   407,   408,   410,
-     413,   414,   425,   426,   427,   428,   433,   439,   446,   447,
-     448,   449,   452,   453,   454,   482,   482,   488,   491,   491,
-     497,   498,   499,   500,   502,   506,   514,   515,   516
+     411,   412,   418,   426,   427,   438,   439,   440,   441,   446,
+     452,   459,   460,   461,   462,   465,   466,   467,   495,   495,
+     501,   504,   504,   510,   511,   512,   513,   515,   519,   527,
+     528,   529
 };
 #endif
 
@@ -630,11 +638,11 @@ static const char *const yytname[] =
   "tFRAME", "tGLOBAL", "tGO", "tIF", "tINTO", "tLOOP", "tMACRO", "tMCI",
   "tMCIWAIT", "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT",
   "tSET", "tTHEN", "tTO", "tWHEN", "tWITH", "tWHILE", "tNLELSE",
-  "tFACTORY", "tMETHOD", "tGE", "tLE", "tGT", "tLT", "tEQ", "tNEQ", "tAND",
-  "tOR", "tNOT", "tCONCAT", "tCONTAINS", "tSTARTS", "tSPRITE",
-  "tINTERSECTS", "tWITHIN", "'='", "'+'", "'-'", "'*'", "'/'", "'%'",
-  "'\\n'", "'('", "')'", "'>'", "'<'", "'&'", "','", "$accept", "program",
-  "nl", "programline", "asgn", "stmtoneliner", "stmt", "ifstmt",
+  "tFACTORY", "tMETHOD", "tALERT", "tBEEP", "tGE", "tLE", "tGT", "tLT",
+  "tEQ", "tNEQ", "tAND", "tOR", "tNOT", "tCONCAT", "tCONTAINS", "tSTARTS",
+  "tSPRITE", "tINTERSECTS", "tWITHIN", "'='", "'+'", "'-'", "'*'", "'/'",
+  "'%'", "'\\n'", "'('", "')'", "'>'", "'<'", "'&'", "','", "$accept",
+  "program", "nl", "programline", "asgn", "stmtoneliner", "stmt", "ifstmt",
   "elsestmtoneliner", "elseifstmt", "elseifstmtoneliner",
   "elseifstmtoneliner1", "elseifstmt1", "cond", "repeatwhile",
   "repeatwith", "if", "elseif", "begin", "end", "stmtlist", "expr", "func",
@@ -654,26 +662,27 @@ static const yytype_uint16 yytoknum[] =
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,    61,    43,    45,    42,    47,    37,
-      10,    40,    41,    62,    60,    38,    44
+     315,   316,   317,   318,   319,   320,    61,    43,    45,    42,
+      47,    37,    10,    40,    41,    62,    60,    38,    44
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    77,    78,    78,    78,    79,    80,    80,    80,    80,
-      80,    80,    81,    81,    81,    81,    81,    81,    81,    82,
-      82,    83,    83,    83,    83,    83,    83,    84,    84,    84,
-      84,    84,    84,    85,    85,    86,    86,    87,    87,    88,
-      89,    89,    90,    90,    90,    91,    92,    93,    94,    95,
-      96,    97,    97,    97,    98,    98,    98,    98,    98,    98,
-      98,    98,    98,    98,    98,    98,    98,    98,    98,    98,
-      98,    98,    98,    98,    98,    98,    98,    98,    98,    98,
-      98,    98,    98,    98,    99,    99,    99,    99,    99,    99,
-     100,   100,   101,   101,   101,   101,   101,   101,   102,   102,
-     102,   102,   103,   103,   103,   105,   104,   104,   106,   104,
-     107,   107,   107,   107,   108,   109,   110,   110,   110
+       0,    79,    80,    80,    80,    81,    82,    82,    82,    82,
+      82,    82,    83,    83,    83,    83,    83,    83,    83,    84,
+      84,    85,    85,    85,    85,    85,    85,    86,    86,    86,
+      86,    86,    86,    87,    87,    88,    88,    89,    89,    90,
+      91,    91,    92,    92,    92,    93,    94,    95,    96,    97,
+      98,    99,    99,    99,   100,   100,   100,   100,   100,   100,
+     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
+     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
+     100,   100,   100,   100,   101,   101,   101,   101,   101,   101,
+     101,   101,   101,   102,   102,   103,   103,   103,   103,   103,
+     103,   104,   104,   104,   104,   105,   105,   105,   107,   106,
+     106,   108,   106,   109,   109,   109,   109,   110,   111,   112,
+     112,   112
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -688,9 +697,10 @@ static const yytype_uint8 yyr2[] =
        1,     2,     1,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     2,     3,     3,     3,     3,     2,
        2,     3,     4,     4,     2,     2,     2,     1,     1,     2,
-       1,     3,     2,     2,     2,     2,     3,     2,     3,     2,
-       2,     1,     3,     2,     3,     0,     8,     2,     0,     8,
-       0,     1,     3,     4,     0,     3,     0,     1,     3
+       2,     2,     1,     1,     3,     2,     2,     2,     2,     3,
+       2,     3,     2,     2,     1,     3,     2,     3,     0,     8,
+       2,     0,     8,     0,     1,     3,     4,     0,     3,     0,
+       1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -700,81 +710,81 @@ static const yytype_uint8 yydefact[] =
 {
        0,     0,    54,    60,     0,    55,    57,    56,    49,    88,
        0,     0,    47,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     3,    62,
-      21,    11,    22,     0,     0,     0,    19,     8,    87,     7,
-       9,     4,    59,     0,    62,    61,   116,   116,    90,    89,
-     101,     0,    92,     0,    93,     0,    94,     0,    95,    97,
-     105,    84,    85,    86,     0,    45,     0,     0,     0,     0,
-     107,   108,    74,     0,    79,    80,     0,     1,     5,     6,
-       0,     0,     0,     0,    42,     0,     0,     0,     0,     0,
+       0,     0,     0,    92,     0,     0,     0,     0,     0,     0,
+       3,    62,    21,    11,    22,     0,     0,     0,    19,     8,
+      87,     7,     9,     4,    59,     0,    62,    61,   119,   119,
+      93,    89,   104,     0,    95,     0,    96,     0,    97,     0,
+      98,   100,   108,    84,    85,    86,     0,    45,     0,     0,
+       0,     0,   110,   111,    90,    91,    74,     0,    79,    80,
+       0,     1,     5,     6,     0,     0,     0,     0,    42,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   117,     0,   115,     0,    99,   103,     0,   100,     0,
-       0,     0,    96,    49,     0,    46,     0,     0,     0,     0,
-       0,     0,    49,     0,     0,    81,     2,     0,    50,     0,
-       0,    49,     0,    70,    71,    69,    72,    73,    76,    77,
-      78,    63,    64,    65,    66,    67,    68,    75,    58,     0,
-      91,   102,    98,   104,   110,    12,    17,    14,     0,     0,
-      16,    13,    26,   110,    82,    83,    51,     0,    44,    51,
-       0,    43,   118,   111,     0,    18,    15,     0,    50,     0,
-       0,    50,    50,    20,     0,   114,   114,    52,    53,     0,
-       0,    50,    49,    30,   112,     0,    51,    51,     0,    50,
-      51,     0,    51,     0,    48,    49,    50,    38,     0,   113,
-     106,   109,    23,    51,    50,    27,    50,    50,    40,    36,
-       0,     0,    37,    33,     0,    50,     0,     0,    35,     0,
-       0,    50,    49,    50,    49,     0,     0,     0,     0,    49,
-      31,     0,    32,     0,     0,    24,    28,    29,    50,    34,
-      50,    25,    41,    39
+       0,     0,     0,     0,     0,   120,     0,   118,     0,   102,
+     106,     0,   103,     0,     0,     0,    99,    49,     0,    46,
+       0,     0,     0,     0,     0,     0,    49,     0,     0,    81,
+       2,     0,    50,     0,     0,    49,     0,    70,    71,    69,
+      72,    73,    76,    77,    78,    63,    64,    65,    66,    67,
+      68,    75,    58,     0,    94,   105,   101,   107,   113,    12,
+      17,    14,     0,     0,    16,    13,    26,   113,    82,    83,
+      51,     0,    44,    51,     0,    43,   121,   114,     0,    18,
+      15,     0,    50,     0,     0,    50,    50,    20,     0,   117,
+     117,    52,    53,     0,     0,    50,    49,    30,   115,     0,
+      51,    51,     0,    50,    51,     0,    51,     0,    48,    49,
+      50,    38,     0,   116,   109,   112,    23,    51,    50,    27,
+      50,    50,    40,    36,     0,     0,    37,    33,     0,    50,
+       0,     0,    35,     0,     0,    50,    49,    50,    49,     0,
+       0,     0,     0,    49,    31,     0,    32,     0,     0,    24,
+      28,    29,    50,    34,    50,    25,    41,    39
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    27,   187,    28,    44,    30,   188,    32,   233,   217,
-     218,   207,   219,    83,    33,    34,    35,   208,   243,   167,
-     178,    36,   183,    49,    38,    58,    59,    39,   113,   122,
-     174,   196,    40,   102
+      -1,    29,   191,    30,    46,    32,   192,    34,   237,   221,
+     222,   211,   223,    87,    35,    36,    37,   212,   247,   171,
+     182,    38,   187,    51,    40,    60,    61,    41,   117,   126,
+     178,   200,    42,   106
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -187
+#define YYPACT_NINF -188
 static const yytype_int16 yypact[] =
 {
-     188,   -39,  -187,  -187,   407,  -187,  -187,  -187,   617,  -187,
-      40,   122,  -187,    43,    26,    48,   407,    28,    52,    49,
-      51,    55,   407,   407,   407,   407,   407,    15,  -187,    33,
-    -187,  -187,  -187,     4,    13,   439,   595,  -187,  -187,  -187,
-    -187,  -187,    34,   407,  -187,   595,   407,   407,  -187,     5,
-    -187,    91,  -187,    92,  -187,    76,  -187,    17,    24,  -187,
-    -187,  -187,  -187,   453,    93,  -187,   -29,   407,   -23,    70,
-    -187,  -187,   121,   497,   121,   121,   546,  -187,  -187,   249,
-     439,   407,   439,    72,   573,   407,   407,   407,   407,   407,
-     407,   407,   407,   407,   407,   407,   407,   407,   407,   407,
-     453,   595,   -22,    38,    97,  -187,  -187,   100,  -187,   103,
-     110,    94,  -187,  -187,   114,  -187,   407,   407,   475,   407,
-     407,   407,  -187,   407,   407,  -187,  -187,    57,   595,    64,
-     519,    68,   407,   595,   595,   595,   595,   595,   595,   595,
-     595,   644,   644,   121,   121,   595,   595,   595,  -187,   407,
-    -187,  -187,  -187,  -187,   124,  -187,   595,   595,   407,   407,
-     595,   595,   595,   124,   595,   595,  -187,    10,  -187,  -187,
-     377,   595,   595,  -187,   -54,   595,   595,   -54,   305,    98,
-     407,   305,  -187,  -187,   125,    65,    65,  -187,  -187,   123,
-     407,   595,    -6,    -8,  -187,   126,  -187,  -187,   115,   595,
-    -187,   127,  -187,   140,  -187,  -187,   140,  -187,   439,  -187,
-     305,   305,  -187,  -187,   305,  -187,   305,   140,   140,  -187,
-     439,   377,  -187,   117,   108,   305,   142,   143,  -187,   144,
-     128,  -187,  -187,  -187,  -187,   145,   133,   150,   155,   -13,
-    -187,   377,  -187,   341,   134,  -187,  -187,  -187,   305,  -187,
-    -187,  -187,  -187,  -187
+     192,   -51,  -188,  -188,   500,  -188,  -188,  -188,   668,  -188,
+      36,   743,  -188,    39,    47,    46,   500,   -13,    44,    48,
+      49,    50,   500,    55,   500,   500,   500,   500,   500,     4,
+    -188,     8,  -188,  -188,  -188,    -3,     6,   517,   646,  -188,
+    -188,  -188,  -188,  -188,     1,   500,  -188,   646,   500,   500,
+    -188,    -5,  -188,    58,  -188,    60,  -188,    45,  -188,    19,
+      18,  -188,  -188,  -188,  -188,   531,    59,  -188,   -33,   500,
+     -31,    41,  -188,  -188,   646,  -188,   284,   575,   284,   284,
+     597,  -188,  -188,   280,   517,   500,   517,    43,   624,   500,
+     500,   500,   500,   500,   500,   500,   500,   500,   500,   500,
+     500,   500,   500,   500,   531,   646,   -29,    11,    88,  -188,
+    -188,    92,  -188,    94,    95,    79,  -188,  -188,    96,  -188,
+     500,   500,   553,   500,   500,   500,  -188,   500,   500,  -188,
+    -188,    40,   646,    42,   101,    52,   500,   646,   646,   646,
+     646,   646,   646,   646,   646,   695,   695,   284,   284,   646,
+     646,   646,  -188,   500,  -188,  -188,  -188,  -188,    98,  -188,
+     646,   646,   500,   500,   646,   646,   646,    98,   646,   646,
+    -188,    -1,  -188,  -188,   459,   646,   646,  -188,   -56,   646,
+     646,   -56,   338,    76,   500,   338,  -188,  -188,   102,    54,
+      54,  -188,  -188,    97,   500,   646,    -6,    -8,  -188,   114,
+    -188,  -188,   100,   646,  -188,   106,  -188,   113,  -188,  -188,
+     113,  -188,   517,  -188,   338,   338,  -188,  -188,   338,  -188,
+     338,   113,   113,  -188,   517,   459,  -188,    90,    99,   338,
+     118,   119,  -188,   121,   104,  -188,  -188,  -188,  -188,   123,
+     108,   109,   120,   -10,  -188,   459,  -188,   401,   110,  -188,
+    -188,  -188,   338,  -188,  -188,  -188,  -188,  -188
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -187,  -187,   -24,   105,     7,  -165,     0,  -187,  -187,  -187,
-      -3,  -186,   -31,   -78,  -187,  -187,  -187,  -164,    -7,  -170,
-     -65,     2,    23,  -187,  -187,  -187,   129,  -187,  -187,  -187,
-      30,    11,  -187,   156
+    -188,  -188,   -27,    67,     7,  -164,     0,  -188,  -188,  -188,
+     -41,  -185,   -61,   -81,  -188,  -188,  -188,  -187,    -7,    51,
+    -158,     2,    23,  -188,  -188,  -188,   112,  -188,  -188,  -188,
+      12,   -24,  -188,   124
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -784,154 +794,168 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -60
 static const yytype_int16 yytable[] =
 {
-      31,    47,   127,    79,   129,   182,    45,    29,   189,   -51,
-     -51,   192,   193,   116,   204,    77,    78,   201,    63,   119,
-     222,   200,   184,    37,    72,    73,    74,    75,    76,   213,
-     179,    41,   222,   -10,   108,   117,   223,    84,   205,   220,
-     202,   120,   109,    61,   226,   100,   227,   229,   101,   101,
-     148,   110,   180,   220,   149,   235,   231,   -51,    53,    48,
-      55,   240,    60,   242,    66,    67,   111,    62,    69,   118,
-      70,    68,    64,    65,    71,    80,   249,    81,   252,    31,
-     253,   104,    84,   128,   130,    78,    29,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,    37,   -10,   181,    46,   154,   169,   105,   106,
-     107,   121,   115,   131,   149,   163,   150,   151,   156,   157,
-     152,   160,   161,   162,   170,   164,   165,   153,   110,   166,
-     224,   210,   211,   155,   171,   214,   168,   216,    78,    50,
-     190,   195,   230,   173,   194,   209,   198,    51,   225,   234,
-     185,   172,    52,   186,   212,   215,    53,    54,    55,    56,
-     175,   176,   204,   232,    57,   236,   237,   238,   244,   239,
-      85,    86,   245,   251,   248,    87,    88,    89,   246,    90,
-      91,    92,   191,   247,   126,   203,   228,   112,    -6,     1,
-     206,     0,   199,   177,    97,    98,    99,   197,   221,     2,
-       3,     4,     5,   103,     6,     7,     0,     8,     0,     0,
-      84,     0,     9,     0,    10,    11,    12,     0,     0,    13,
-      14,    15,    84,     0,     0,   241,    16,    17,    18,     0,
-       0,    19,     0,     0,     0,    20,    21,     0,     0,     0,
-       0,     0,     0,   250,     0,    22,     0,     0,     0,    23,
-       0,     0,     0,    24,    25,     0,     0,     0,    -6,    26,
-       2,     3,     4,     5,     0,     6,     7,     0,     8,     0,
-       0,     0,     0,     9,     0,    10,    11,    12,     0,     0,
-      13,    14,    15,     0,     0,     0,     0,    16,    17,    18,
-       0,     0,    19,     0,     0,     0,    20,    21,     0,     0,
-       0,     0,     0,     0,     0,     0,    22,     0,     0,     0,
-      23,     0,     0,     0,    24,    25,     2,     3,     4,     5,
-      26,     6,     7,     0,    42,     0,     0,     0,     0,     9,
-       0,    10,    11,    12,     0,     0,     0,    14,    15,     0,
-       0,     0,     0,    16,    17,    18,     0,     0,    19,     0,
-       0,     0,     2,     3,     4,     5,     0,     6,     7,     0,
-      42,     0,    22,     0,     0,     9,    23,    10,    11,    12,
-      24,    25,     0,    14,    15,    78,    26,     0,     0,    16,
-      17,    18,     0,     0,    19,     0,     0,     0,     2,     3,
-       4,     5,     0,     6,     7,     0,    42,     0,    22,     0,
-       0,     9,    23,    10,    11,     0,    24,    25,     0,    14,
-      15,     0,    26,     0,     0,    16,     0,    18,     2,     3,
-       4,     5,     0,     6,     7,     0,    42,     0,     0,     0,
-       0,     0,     0,     0,    22,     0,     0,     0,    23,     0,
-       0,     0,    24,    25,     0,    43,     0,    18,    26,     0,
-       2,     3,     4,     5,     0,     6,     7,     0,    42,     0,
-       0,     0,     0,     0,    22,     0,     0,     0,    23,     0,
-       0,     0,    24,    25,     0,     0,     0,    43,    26,    18,
-       0,     0,   114,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    22,     0,     0,     0,
-      23,     0,    85,    86,    24,    25,     0,    87,    88,    89,
-      82,    90,    91,    92,     0,     0,     0,   158,    93,    94,
-      95,    96,     0,     0,    85,    86,    97,    98,    99,    87,
-      88,    89,     0,    90,    91,    92,     0,     0,     0,   159,
-      93,    94,    95,    96,     0,     0,    85,    86,    97,    98,
-      99,    87,    88,    89,     0,    90,    91,    92,     0,   123,
-     124,     0,    93,    94,    95,    96,     0,     0,    85,    86,
-      97,    98,    99,    87,    88,    89,     0,    90,    91,    92,
-       0,     0,     0,   132,    93,    94,    95,    96,     0,     0,
-       0,   125,    97,    98,    99,    85,    86,     0,     0,     0,
-      87,    88,    89,     0,    90,    91,    92,     0,     0,     0,
-       0,    93,    94,    95,    96,     0,     0,     0,   125,    97,
-      98,    99,    85,    86,     0,     0,     0,    87,    88,    89,
-       0,    90,    91,    92,     0,     0,     0,   132,    93,    94,
-      95,    96,     0,     0,    85,    86,    97,    98,    99,    87,
-      88,    89,     0,    90,    91,    92,     0,     0,     0,     0,
-      93,    94,    95,    96,     0,     0,   -59,   -59,    97,    98,
-      99,   -59,   -59,   -59,     0,   -59,   -59,   -59,     0,     0,
-       0,     0,     0,     0,   -59,   -59,     0,     0,    46,     0,
-     -59,   -59,   -59,    85,    86,     0,     0,     0,    87,    88,
-      89,     0,    90,    91,    92,     0,     0,     0,     0,     0,
-       0,    95,    96,     0,     0,     0,     0,    97,    98,    99
+      33,    49,    83,   131,    81,   133,    47,    31,   -10,   120,
+     186,   123,   -51,   -51,   208,   185,    82,   205,    65,   183,
+     224,    43,   188,    39,    74,   226,    76,    77,    78,    79,
+      80,    66,    67,   121,   224,   124,   112,   226,   209,    88,
+     206,   184,   214,   215,   113,   152,   218,   104,   220,   153,
+     105,   105,    55,   114,    57,    50,    68,    69,    62,   229,
+     115,   235,   -51,    70,    63,    64,    75,    71,    72,    73,
+      84,   122,    85,   108,    48,   109,    82,   110,   119,   111,
+     -10,   253,   125,    33,   135,   252,    88,   132,   134,   153,
+      31,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,    39,   154,   173,   155,
+     158,   156,   157,   114,   170,   159,   172,   177,   194,   167,
+     202,   198,   160,   161,    82,   164,   165,   166,   174,   168,
+     169,   228,   199,   213,   219,   208,   236,   250,   175,   216,
+     238,   240,   241,   234,   242,   243,   248,   249,   251,   255,
+     130,   189,    89,    90,   190,   176,   210,    91,    92,    93,
+     232,    94,    95,    96,   179,   180,   201,   136,    97,    98,
+      99,   100,   116,   107,     0,   129,   101,   102,   103,   181,
+       0,     0,     0,     0,     0,     0,   195,     0,     0,   207,
+       0,     0,    -6,     1,     0,     0,   203,     0,     0,     0,
+       0,     0,   225,     2,     3,     4,     5,     0,     6,     7,
+       0,     8,     0,     0,    88,     0,     9,     0,    10,    11,
+      12,     0,     0,    13,    14,    15,    88,     0,     0,   245,
+      16,    17,    18,   193,     0,    19,   196,   197,     0,    20,
+      21,    22,    23,     0,     0,     0,   204,   254,     0,     0,
+       0,    24,     0,     0,   217,    25,     0,     0,     0,    26,
+      27,   227,     0,     0,    -6,    28,     0,     0,     0,   230,
+       0,   231,   233,     0,     0,     0,     0,     0,     0,     0,
+     239,     0,     0,     0,     0,     0,   244,     0,   246,     0,
+       0,     2,     3,     4,     5,     0,     6,     7,     0,     8,
+       0,     0,     0,   256,     9,   257,    10,    11,    12,     0,
+       0,    13,    14,    15,     0,     0,     0,     0,    16,    17,
+      18,     0,     0,    19,     0,     0,     0,    20,    21,    22,
+      23,     0,     0,     0,     0,    89,    90,     0,     0,    24,
+      91,    92,    93,    25,    94,    95,    96,    26,    27,     2,
+       3,     4,     5,    28,     6,     7,     0,    44,     0,   101,
+     102,   103,     9,     0,    10,    11,    12,     0,     0,     0,
+      14,    15,     0,     0,     0,     0,    16,    17,    18,     0,
+       0,    19,     0,     0,     0,     0,     0,    22,    23,     0,
+       0,     0,     0,     0,     0,     0,     0,    24,     0,     0,
+       0,    25,     0,     0,     0,    26,    27,     0,     0,     0,
+      82,    28,     2,     3,     4,     5,     0,     6,     7,     0,
+      44,     0,     0,     0,     0,     9,     0,    10,    11,    12,
+       0,     0,     0,    14,    15,     0,     0,     0,     0,    16,
+      17,    18,     0,     0,    19,     0,     0,     0,     0,     0,
+      22,    23,     0,     0,     0,     0,     0,     0,     0,     0,
+      24,     0,     0,     0,    25,     0,     0,     0,    26,    27,
+       2,     3,     4,     5,    28,     6,     7,     0,    44,     0,
+       0,     0,     0,     9,     0,    10,    11,     0,     0,     0,
+       0,    14,    15,     0,     0,     0,     0,    16,     0,    18,
+       0,     0,     0,     0,     0,     0,     0,     0,    22,    23,
+       0,     2,     3,     4,     5,     0,     6,     7,    24,    44,
+       0,     0,    25,     0,     0,     0,    26,    27,     2,     3,
+       4,     5,    28,     6,     7,     0,    44,     0,    45,     0,
+      18,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    45,     0,    18,     0,    24,
+     118,     0,     0,    25,     0,     0,     0,    26,    27,     0,
+       0,     0,     0,    28,     0,     0,    24,     0,     0,     0,
+      25,     0,    89,    90,    26,    27,     0,    91,    92,    93,
+      86,    94,    95,    96,     0,   162,     0,     0,    97,    98,
+      99,   100,     0,     0,    89,    90,   101,   102,   103,    91,
+      92,    93,     0,    94,    95,    96,     0,     0,     0,   163,
+      97,    98,    99,   100,     0,     0,    89,    90,   101,   102,
+     103,    91,    92,    93,     0,    94,    95,    96,     0,   127,
+     128,     0,    97,    98,    99,   100,     0,     0,    89,    90,
+     101,   102,   103,    91,    92,    93,     0,    94,    95,    96,
+       0,     0,     0,     0,    97,    98,    99,   100,     0,     0,
+       0,   129,   101,   102,   103,    89,    90,     0,     0,     0,
+      91,    92,    93,     0,    94,    95,    96,     0,     0,     0,
+     136,    97,    98,    99,   100,     0,     0,    89,    90,   101,
+     102,   103,    91,    92,    93,     0,    94,    95,    96,     0,
+       0,     0,     0,    97,    98,    99,   100,     0,     0,   -59,
+     -59,   101,   102,   103,   -59,   -59,   -59,     0,   -59,   -59,
+     -59,     0,     0,     0,     0,     0,     0,   -59,   -59,     0,
+       0,    48,     0,   -59,   -59,   -59,    89,    90,     0,     0,
+       0,    91,    92,    93,     0,    94,    95,    96,     0,     0,
+      52,     0,     0,     0,    99,   100,     0,     0,    53,     0,
+     101,   102,   103,    54,     0,     0,     0,    55,    56,    57,
+      58,     0,     0,     0,     0,    59
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,     8,    80,    27,    82,   170,     4,     0,   178,    22,
-      23,   181,   182,    42,    22,     0,    70,    23,    16,    42,
-     206,   191,    76,     0,    22,    23,    24,    25,    26,   199,
-      20,    70,   218,     0,    17,    64,   206,    35,    46,   203,
-      46,    64,    25,    17,   214,    43,   216,   217,    46,    47,
-      72,    34,    42,   217,    76,   225,   221,    70,    34,    19,
-      36,   231,    19,   233,    12,    13,    42,    19,    19,    67,
-      19,    19,    44,    45,    19,    71,   241,    64,   248,    79,
-     250,    76,    80,    81,    82,    70,    79,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,    79,    70,   169,    71,   113,   131,    17,    17,
-      34,    41,    19,    41,    76,   122,    19,    17,   116,   117,
-      17,   119,   120,   121,   131,   123,   124,    17,    34,    72,
-     208,   196,   197,    19,   132,   200,    72,   202,    70,    17,
-      42,    76,   220,    19,    19,    19,    23,    25,   213,    41,
-     174,   149,    30,   177,    39,    28,    34,    35,    36,    37,
-     158,   159,    22,    46,    42,    23,    23,    23,    23,    41,
-      49,    50,    39,    39,   239,    54,    55,    56,    28,    58,
-      59,    60,   180,    28,    79,   192,   217,    58,     0,     1,
-     193,    -1,   190,   163,    73,    74,    75,   186,   205,    11,
-      12,    13,    14,    47,    16,    17,    -1,    19,    -1,    -1,
-     208,    -1,    24,    -1,    26,    27,    28,    -1,    -1,    31,
-      32,    33,   220,    -1,    -1,   232,    38,    39,    40,    -1,
-      -1,    43,    -1,    -1,    -1,    47,    48,    -1,    -1,    -1,
-      -1,    -1,    -1,   243,    -1,    57,    -1,    -1,    -1,    61,
-      -1,    -1,    -1,    65,    66,    -1,    -1,    -1,    70,    71,
-      11,    12,    13,    14,    -1,    16,    17,    -1,    19,    -1,
-      -1,    -1,    -1,    24,    -1,    26,    27,    28,    -1,    -1,
-      31,    32,    33,    -1,    -1,    -1,    -1,    38,    39,    40,
-      -1,    -1,    43,    -1,    -1,    -1,    47,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    -1,
-      61,    -1,    -1,    -1,    65,    66,    11,    12,    13,    14,
-      71,    16,    17,    -1,    19,    -1,    -1,    -1,    -1,    24,
-      -1,    26,    27,    28,    -1,    -1,    -1,    32,    33,    -1,
-      -1,    -1,    -1,    38,    39,    40,    -1,    -1,    43,    -1,
-      -1,    -1,    11,    12,    13,    14,    -1,    16,    17,    -1,
-      19,    -1,    57,    -1,    -1,    24,    61,    26,    27,    28,
-      65,    66,    -1,    32,    33,    70,    71,    -1,    -1,    38,
-      39,    40,    -1,    -1,    43,    -1,    -1,    -1,    11,    12,
-      13,    14,    -1,    16,    17,    -1,    19,    -1,    57,    -1,
-      -1,    24,    61,    26,    27,    -1,    65,    66,    -1,    32,
-      33,    -1,    71,    -1,    -1,    38,    -1,    40,    11,    12,
-      13,    14,    -1,    16,    17,    -1,    19,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    -1,
-      -1,    -1,    65,    66,    -1,    38,    -1,    40,    71,    -1,
-      11,    12,    13,    14,    -1,    16,    17,    -1,    19,    -1,
-      -1,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    -1,
-      -1,    -1,    65,    66,    -1,    -1,    -1,    38,    71,    40,
-      -1,    -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    -1,
-      61,    -1,    49,    50,    65,    66,    -1,    54,    55,    56,
-      71,    58,    59,    60,    -1,    -1,    -1,    42,    65,    66,
-      67,    68,    -1,    -1,    49,    50,    73,    74,    75,    54,
-      55,    56,    -1,    58,    59,    60,    -1,    -1,    -1,    64,
-      65,    66,    67,    68,    -1,    -1,    49,    50,    73,    74,
-      75,    54,    55,    56,    -1,    58,    59,    60,    -1,    62,
-      63,    -1,    65,    66,    67,    68,    -1,    -1,    49,    50,
-      73,    74,    75,    54,    55,    56,    -1,    58,    59,    60,
-      -1,    -1,    -1,    64,    65,    66,    67,    68,    -1,    -1,
-      -1,    72,    73,    74,    75,    49,    50,    -1,    -1,    -1,
-      54,    55,    56,    -1,    58,    59,    60,    -1,    -1,    -1,
-      -1,    65,    66,    67,    68,    -1,    -1,    -1,    72,    73,
-      74,    75,    49,    50,    -1,    -1,    -1,    54,    55,    56,
-      -1,    58,    59,    60,    -1,    -1,    -1,    64,    65,    66,
-      67,    68,    -1,    -1,    49,    50,    73,    74,    75,    54,
-      55,    56,    -1,    58,    59,    60,    -1,    -1,    -1,    -1,
-      65,    66,    67,    68,    -1,    -1,    49,    50,    73,    74,
-      75,    54,    55,    56,    -1,    58,    59,    60,    -1,    -1,
-      -1,    -1,    -1,    -1,    67,    68,    -1,    -1,    71,    -1,
-      73,    74,    75,    49,    50,    -1,    -1,    -1,    54,    55,
-      56,    -1,    58,    59,    60,    -1,    -1,    -1,    -1,    -1,
-      -1,    67,    68,    -1,    -1,    -1,    -1,    73,    74,    75
+       0,     8,    29,    84,     0,    86,     4,     0,     0,    42,
+     174,    42,    22,    23,    22,   173,    72,    23,    16,    20,
+     207,    72,    78,     0,    22,   210,    24,    25,    26,    27,
+      28,    44,    45,    66,   221,    66,    17,   222,    46,    37,
+      46,    42,   200,   201,    25,    74,   204,    45,   206,    78,
+      48,    49,    34,    34,    36,    19,    12,    13,    19,   217,
+      42,   225,    72,    19,    17,    19,    11,    19,    19,    19,
+      73,    69,    66,    78,    73,    17,    72,    17,    19,    34,
+      72,   245,    41,    83,    41,   243,    84,    85,    86,    78,
+      83,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,    83,    19,   135,    17,
+     117,    17,    17,    34,    74,    19,    74,    19,    42,   126,
+      23,    19,   120,   121,    72,   123,   124,   125,   135,   127,
+     128,   212,    78,    19,    28,    22,    46,    28,   136,    39,
+      41,    23,    23,   224,    23,    41,    23,    39,    28,    39,
+      83,   178,    51,    52,   181,   153,   197,    56,    57,    58,
+     221,    60,    61,    62,   162,   163,   190,    66,    67,    68,
+      69,    70,    60,    49,    -1,    74,    75,    76,    77,   167,
+      -1,    -1,    -1,    -1,    -1,    -1,   184,    -1,    -1,   196,
+      -1,    -1,     0,     1,    -1,    -1,   194,    -1,    -1,    -1,
+      -1,    -1,   209,    11,    12,    13,    14,    -1,    16,    17,
+      -1,    19,    -1,    -1,   212,    -1,    24,    -1,    26,    27,
+      28,    -1,    -1,    31,    32,    33,   224,    -1,    -1,   236,
+      38,    39,    40,   182,    -1,    43,   185,   186,    -1,    47,
+      48,    49,    50,    -1,    -1,    -1,   195,   247,    -1,    -1,
+      -1,    59,    -1,    -1,   203,    63,    -1,    -1,    -1,    67,
+      68,   210,    -1,    -1,    72,    73,    -1,    -1,    -1,   218,
+      -1,   220,   221,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     229,    -1,    -1,    -1,    -1,    -1,   235,    -1,   237,    -1,
+      -1,    11,    12,    13,    14,    -1,    16,    17,    -1,    19,
+      -1,    -1,    -1,   252,    24,   254,    26,    27,    28,    -1,
+      -1,    31,    32,    33,    -1,    -1,    -1,    -1,    38,    39,
+      40,    -1,    -1,    43,    -1,    -1,    -1,    47,    48,    49,
+      50,    -1,    -1,    -1,    -1,    51,    52,    -1,    -1,    59,
+      56,    57,    58,    63,    60,    61,    62,    67,    68,    11,
+      12,    13,    14,    73,    16,    17,    -1,    19,    -1,    75,
+      76,    77,    24,    -1,    26,    27,    28,    -1,    -1,    -1,
+      32,    33,    -1,    -1,    -1,    -1,    38,    39,    40,    -1,
+      -1,    43,    -1,    -1,    -1,    -1,    -1,    49,    50,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,    -1,    -1,
+      -1,    63,    -1,    -1,    -1,    67,    68,    -1,    -1,    -1,
+      72,    73,    11,    12,    13,    14,    -1,    16,    17,    -1,
+      19,    -1,    -1,    -1,    -1,    24,    -1,    26,    27,    28,
+      -1,    -1,    -1,    32,    33,    -1,    -1,    -1,    -1,    38,
+      39,    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    -1,
+      49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      59,    -1,    -1,    -1,    63,    -1,    -1,    -1,    67,    68,
+      11,    12,    13,    14,    73,    16,    17,    -1,    19,    -1,
+      -1,    -1,    -1,    24,    -1,    26,    27,    -1,    -1,    -1,
+      -1,    32,    33,    -1,    -1,    -1,    -1,    38,    -1,    40,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    50,
+      -1,    11,    12,    13,    14,    -1,    16,    17,    59,    19,
+      -1,    -1,    63,    -1,    -1,    -1,    67,    68,    11,    12,
+      13,    14,    73,    16,    17,    -1,    19,    -1,    38,    -1,
+      40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    38,    -1,    40,    -1,    59,
+      29,    -1,    -1,    63,    -1,    -1,    -1,    67,    68,    -1,
+      -1,    -1,    -1,    73,    -1,    -1,    59,    -1,    -1,    -1,
+      63,    -1,    51,    52,    67,    68,    -1,    56,    57,    58,
+      73,    60,    61,    62,    -1,    42,    -1,    -1,    67,    68,
+      69,    70,    -1,    -1,    51,    52,    75,    76,    77,    56,
+      57,    58,    -1,    60,    61,    62,    -1,    -1,    -1,    66,
+      67,    68,    69,    70,    -1,    -1,    51,    52,    75,    76,
+      77,    56,    57,    58,    -1,    60,    61,    62,    -1,    64,
+      65,    -1,    67,    68,    69,    70,    -1,    -1,    51,    52,
+      75,    76,    77,    56,    57,    58,    -1,    60,    61,    62,
+      -1,    -1,    -1,    -1,    67,    68,    69,    70,    -1,    -1,
+      -1,    74,    75,    76,    77,    51,    52,    -1,    -1,    -1,
+      56,    57,    58,    -1,    60,    61,    62,    -1,    -1,    -1,
+      66,    67,    68,    69,    70,    -1,    -1,    51,    52,    75,
+      76,    77,    56,    57,    58,    -1,    60,    61,    62,    -1,
+      -1,    -1,    -1,    67,    68,    69,    70,    -1,    -1,    51,
+      52,    75,    76,    77,    56,    57,    58,    -1,    60,    61,
+      62,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    -1,
+      -1,    73,    -1,    75,    76,    77,    51,    52,    -1,    -1,
+      -1,    56,    57,    58,    -1,    60,    61,    62,    -1,    -1,
+      17,    -1,    -1,    -1,    69,    70,    -1,    -1,    25,    -1,
+      75,    76,    77,    30,    -1,    -1,    -1,    34,    35,    36,
+      37,    -1,    -1,    -1,    -1,    42
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -940,30 +964,30 @@ static const yytype_uint8 yystos[] =
 {
        0,     1,    11,    12,    13,    14,    16,    17,    19,    24,
       26,    27,    28,    31,    32,    33,    38,    39,    40,    43,
-      47,    48,    57,    61,    65,    66,    71,    78,    80,    81,
-      82,    83,    84,    91,    92,    93,    98,    99,   101,   104,
-     109,    70,    19,    38,    81,    98,    71,    95,    19,   100,
-      17,    25,    30,    34,    35,    36,    37,    42,   102,   103,
-      19,    17,    19,    98,    44,    45,    12,    13,    19,    19,
-      19,    19,    98,    98,    98,    98,    98,     0,    70,    79,
-      71,    64,    71,    90,    98,    49,    50,    54,    55,    56,
-      58,    59,    60,    65,    66,    67,    68,    73,    74,    75,
-      98,    98,   110,   110,    76,    17,    17,    34,    17,    25,
-      34,    42,   103,   105,    29,    19,    42,    64,    98,    42,
-      64,    41,   106,    62,    63,    72,    80,    90,    98,    90,
-      98,    41,    64,    98,    98,    98,    98,    98,    98,    98,
-      98,    98,    98,    98,    98,    98,    98,    98,    72,    76,
-      19,    17,    17,    17,    95,    19,    98,    98,    42,    64,
-      98,    98,    98,    95,    98,    98,    72,    96,    72,    79,
-      95,    98,    98,    19,   107,    98,    98,   107,    97,    20,
-      42,    97,    82,    99,    76,    79,    79,    79,    83,    96,
-      42,    98,    96,    96,    19,    76,   108,   108,    23,    98,
-      96,    23,    46,    95,    22,    46,    87,    88,    94,    19,
-      97,    97,    39,    96,    97,    28,    97,    86,    87,    89,
-      94,    95,    88,    96,    90,    97,    96,    96,    89,    96,
-      90,    82,    46,    85,    41,    96,    23,    23,    23,    41,
-      96,    95,    96,    95,    23,    39,    28,    28,    97,    82,
-      83,    39,    96,    96
+      47,    48,    49,    50,    59,    63,    67,    68,    73,    80,
+      82,    83,    84,    85,    86,    93,    94,    95,   100,   101,
+     103,   106,   111,    72,    19,    38,    83,   100,    73,    97,
+      19,   102,    17,    25,    30,    34,    35,    36,    37,    42,
+     104,   105,    19,    17,    19,   100,    44,    45,    12,    13,
+      19,    19,    19,    19,   100,    11,   100,   100,   100,   100,
+     100,     0,    72,    81,    73,    66,    73,    92,   100,    51,
+      52,    56,    57,    58,    60,    61,    62,    67,    68,    69,
+      70,    75,    76,    77,   100,   100,   112,   112,    78,    17,
+      17,    34,    17,    25,    34,    42,   105,   107,    29,    19,
+      42,    66,   100,    42,    66,    41,   108,    64,    65,    74,
+      82,    92,   100,    92,   100,    41,    66,   100,   100,   100,
+     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
+     100,   100,    74,    78,    19,    17,    17,    17,    97,    19,
+     100,   100,    42,    66,   100,   100,   100,    97,   100,   100,
+      74,    98,    74,    81,    97,   100,   100,    19,   109,   100,
+     100,   109,    99,    20,    42,    99,    84,   101,    78,    81,
+      81,    81,    85,    98,    42,   100,    98,    98,    19,    78,
+     110,   110,    23,   100,    98,    23,    46,    97,    22,    46,
+      89,    90,    96,    19,    99,    99,    39,    98,    99,    28,
+      99,    88,    89,    91,    96,    97,    90,    98,    92,    99,
+      98,    98,    91,    98,    92,    84,    46,    87,    41,    98,
+      23,    23,    23,    41,    98,    97,    98,    97,    23,    39,
+      28,    28,    99,    84,    85,    39,    98,    98
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2288,32 +2312,57 @@ yyreduce:
     break;
 
   case 90:
-#line 413 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
+#line 411 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_alert); ;}
     break;
 
   case 91:
-#line 414 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
+#line 412 "engines/director/lingo/lingo-gr.y"
+    {
+		g_lingo->code1(g_lingo->c_constpush);
+		inst i = 0;
+		WRITE_UINT32(&i, (yyvsp[(2) - (2)].i));
+		g_lingo->code1(i);
+		g_lingo->code1(g_lingo->c_beep); ;}
     break;
 
   case 92:
-#line 425 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoloop); ;}
+#line 418 "engines/director/lingo/lingo-gr.y"
+    {
+		g_lingo->code1(g_lingo->c_constpush);
+		inst i = 0;
+		WRITE_UINT32(&i, 0);
+		g_lingo->code1(i);
+		g_lingo->code1(g_lingo->c_beep); ;}
     break;
 
   case 93:
 #line 426 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotonext); ;}
+    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 94:
 #line 427 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
   case 95:
-#line 428 "engines/director/lingo/lingo-gr.y"
+#line 438 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotoloop); ;}
+    break;
+
+  case 96:
+#line 439 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotonext); ;}
+    break;
+
+  case 97:
+#line 440 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+    break;
+
+  case 98:
+#line 441 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_goto);
 		g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str());
@@ -2321,8 +2370,8 @@ yyreduce:
 		delete (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 96:
-#line 433 "engines/director/lingo/lingo-gr.y"
+  case 99:
+#line 446 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_goto);
 		g_lingo->codeString((yyvsp[(2) - (3)].s)->c_str());
@@ -2331,8 +2380,8 @@ yyreduce:
 		delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 97:
-#line 439 "engines/director/lingo/lingo-gr.y"
+  case 100:
+#line 452 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_goto);
 		g_lingo->codeString("");
@@ -2340,48 +2389,48 @@ yyreduce:
 		delete (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 98:
-#line 446 "engines/director/lingo/lingo-gr.y"
+  case 101:
+#line 459 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 99:
-#line 447 "engines/director/lingo/lingo-gr.y"
+  case 102:
+#line 460 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 100:
-#line 448 "engines/director/lingo/lingo-gr.y"
+  case 103:
+#line 461 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 101:
-#line 449 "engines/director/lingo/lingo-gr.y"
+  case 104:
+#line 462 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 102:
-#line 452 "engines/director/lingo/lingo-gr.y"
+  case 105:
+#line 465 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 103:
-#line 453 "engines/director/lingo/lingo-gr.y"
+  case 106:
+#line 466 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 104:
-#line 454 "engines/director/lingo/lingo-gr.y"
+  case 107:
+#line 467 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 105:
-#line 482 "engines/director/lingo/lingo-gr.y"
+  case 108:
+#line 495 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 106:
-#line 483 "engines/director/lingo/lingo-gr.y"
+  case 109:
+#line 496 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
@@ -2389,20 +2438,20 @@ yyreduce:
 			g_lingo->_indef = false; ;}
     break;
 
-  case 107:
-#line 488 "engines/director/lingo/lingo-gr.y"
+  case 110:
+#line 501 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeFactory(*(yyvsp[(2) - (2)].s));
 		;}
     break;
 
-  case 108:
-#line 491 "engines/director/lingo/lingo-gr.y"
+  case 111:
+#line 504 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; ;}
     break;
 
-  case 109:
-#line 492 "engines/director/lingo/lingo-gr.y"
+  case 112:
+#line 505 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
@@ -2410,33 +2459,33 @@ yyreduce:
 			g_lingo->_indef = false; ;}
     break;
 
-  case 110:
-#line 497 "engines/director/lingo/lingo-gr.y"
+  case 113:
+#line 510 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 111:
-#line 498 "engines/director/lingo/lingo-gr.y"
+  case 114:
+#line 511 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
     break;
 
-  case 112:
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 115:
+#line 512 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 113:
-#line 500 "engines/director/lingo/lingo-gr.y"
+  case 116:
+#line 513 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
-  case 114:
-#line 502 "engines/director/lingo/lingo-gr.y"
+  case 117:
+#line 515 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArgStore(); ;}
     break;
 
-  case 115:
-#line 506 "engines/director/lingo/lingo-gr.y"
+  case 118:
+#line 519 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_call);
 		g_lingo->codeString((yyvsp[(1) - (3)].s)->c_str());
@@ -2445,24 +2494,24 @@ yyreduce:
 		g_lingo->code1(numpar); ;}
     break;
 
-  case 116:
-#line 514 "engines/director/lingo/lingo-gr.y"
+  case 119:
+#line 527 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 117:
-#line 515 "engines/director/lingo/lingo-gr.y"
+  case 120:
+#line 528 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 118:
-#line 516 "engines/director/lingo/lingo-gr.y"
+  case 121:
+#line 529 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 2466 "engines/director/lingo/lingo-gr.cpp"
+#line 2515 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2676,6 +2725,6 @@ yyreturn:
 }
 
 
-#line 519 "engines/director/lingo/lingo-gr.y"
+#line 532 "engines/director/lingo/lingo-gr.y"
 
 
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index f5d97e9..bca98cb 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -85,21 +85,23 @@
      tNLELSE = 301,
      tFACTORY = 302,
      tMETHOD = 303,
-     tGE = 304,
-     tLE = 305,
-     tGT = 306,
-     tLT = 307,
-     tEQ = 308,
-     tNEQ = 309,
-     tAND = 310,
-     tOR = 311,
-     tNOT = 312,
-     tCONCAT = 313,
-     tCONTAINS = 314,
-     tSTARTS = 315,
-     tSPRITE = 316,
-     tINTERSECTS = 317,
-     tWITHIN = 318
+     tALERT = 304,
+     tBEEP = 305,
+     tGE = 306,
+     tLE = 307,
+     tGT = 308,
+     tLT = 309,
+     tEQ = 310,
+     tNEQ = 311,
+     tAND = 312,
+     tOR = 313,
+     tNOT = 314,
+     tCONCAT = 315,
+     tCONTAINS = 316,
+     tSTARTS = 317,
+     tSPRITE = 318,
+     tINTERSECTS = 319,
+     tWITHIN = 320
    };
 #endif
 /* Tokens.  */
@@ -149,21 +151,23 @@
 #define tNLELSE 301
 #define tFACTORY 302
 #define tMETHOD 303
-#define tGE 304
-#define tLE 305
-#define tGT 306
-#define tLT 307
-#define tEQ 308
-#define tNEQ 309
-#define tAND 310
-#define tOR 311
-#define tNOT 312
-#define tCONCAT 313
-#define tCONTAINS 314
-#define tSTARTS 315
-#define tSPRITE 316
-#define tINTERSECTS 317
-#define tWITHIN 318
+#define tALERT 304
+#define tBEEP 305
+#define tGE 306
+#define tLE 307
+#define tGT 308
+#define tLT 309
+#define tEQ 310
+#define tNEQ 311
+#define tAND 312
+#define tOR 313
+#define tNOT 314
+#define tCONCAT 315
+#define tCONTAINS 316
+#define tSTARTS 317
+#define tSPRITE 318
+#define tINTERSECTS 319
+#define tWITHIN 320
 
 
 
@@ -181,7 +185,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 1529 of yacc.c.  */
-#line 185 "engines/director/lingo/lingo-gr.hpp"
+#line 189 "engines/director/lingo/lingo-gr.hpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 59a103b..d8b7519 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -85,7 +85,7 @@ void yyerror(char *s) {
 %token<s> ID
 %token tDOWN tELSE tNLELSIF tEND tEXIT tFRAME tGLOBAL tGO tIF tINTO tLOOP tMACRO
 %token tMCI tMCIWAIT tMOVIE tNEXT tOF tPREVIOUS tPUT tREPEAT tSET tTHEN tTO tWHEN
-%token tWITH tWHILE tNLELSE tFACTORY tMETHOD
+%token tWITH tWHILE tNLELSE tFACTORY tMETHOD tALERT tBEEP
 %token tGE tLE tGT tLT tEQ tNEQ tAND tOR tNOT
 %token tCONCAT tCONTAINS tSTARTS
 %token tSPRITE tINTERSECTS tWITHIN
@@ -408,6 +408,19 @@ func: tMCI vSTRING			{ g_lingo->code1(g_lingo->c_mci); g_lingo->codeString($2->c
 	| tEXIT					{ g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
 							  g_lingo->code1(g_lingo->c_procret); }
 	| tGLOBAL globallist
+	| tALERT expr			{ g_lingo->code1(g_lingo->c_alert); }
+	| tBEEP vINT			{
+		g_lingo->code1(g_lingo->c_constpush);
+		inst i = 0;
+		WRITE_UINT32(&i, $2);
+		g_lingo->code1(i);
+		g_lingo->code1(g_lingo->c_beep); }
+	| tBEEP 				{
+		g_lingo->code1(g_lingo->c_constpush);
+		inst i = 0;
+		WRITE_UINT32(&i, 0);
+		g_lingo->code1(i);
+		g_lingo->code1(g_lingo->c_beep); }
 	;
 
 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 1fd200d..d4f2a01 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 54
-#define YY_END_OF_BUFFER 55
+#define YY_NUM_RULES 56
+#define YY_END_OF_BUFFER 57
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -373,28 +373,30 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[186] =
+static yyconst flex_int16_t yy_accept[194] =
     {   0,
-        0,    0,   55,   53,    3,   51,   51,   53,   53,   50,
-       50,   50,   49,   50,   50,   47,   47,   47,   47,   47,
-       47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
-       47,   47,    2,    2,    3,   51,    0,    0,   51,    0,
-        0,   52,   46,    1,   48,   49,   45,   43,   44,   47,
-       47,   47,   47,   47,   47,   47,   47,   47,   47,   16,
-        7,   47,   47,   47,   47,   47,   47,   47,   47,   27,
-       28,   47,   47,   47,   47,   47,   47,   47,   37,   47,
-       47,    2,    2,    0,    1,   48,    4,   47,   47,   47,
-       11,   47,   47,   47,   47,   47,   47,   47,   21,   47,
-
-       47,   47,   26,   47,   30,   47,   32,   47,   47,   47,
-       47,   47,   47,    0,   47,    6,   10,   13,   47,   47,
-       47,   47,   18,   19,   47,   47,   47,   47,   25,   47,
-       47,   47,   47,    0,   36,   41,   47,   39,    9,   47,
-       47,   14,   47,   47,   20,   47,   47,   24,   47,   47,
-       47,   47,   35,   42,   47,    0,   47,   47,   15,   47,
-       47,   23,   47,   31,   38,   33,    0,   40,    0,   47,
-       12,   47,   22,   47,    0,    8,    5,   47,   29,    0,
-       47,    0,   17,   34,    0
+        0,    0,   57,   55,    3,   53,   53,   55,   55,   52,
+       52,   52,   51,   52,   52,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,    2,    2,    3,   53,    0,    0,   53,
+        0,    0,   54,   48,    1,   50,   51,   47,   45,   46,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   18,    9,   49,   49,   49,   49,   49,   49,
+       49,   49,   29,   30,   49,   49,   49,   49,   49,   49,
+       49,   39,   49,   49,    2,    2,    0,    1,   50,   49,
+        5,   49,   49,   49,   49,   13,   49,   49,   49,   49,
+
+       49,   49,   49,   23,   49,   49,   49,   28,   49,   32,
+       49,   34,   49,   49,   49,   49,   49,   49,    0,   49,
+        6,   49,    8,   12,   15,   49,   49,   49,   49,   20,
+       21,   49,   49,   49,   49,   27,   49,   49,   49,   49,
+        0,   38,   43,   49,   41,   11,    4,   49,   49,   16,
+       49,   49,   22,   49,   49,   26,   49,   49,   49,   49,
+       37,   44,   49,    0,   49,   49,   17,   49,   49,   25,
+       49,   33,   40,   35,    0,   42,    0,   49,   14,   49,
+       24,   49,    0,   10,    7,   49,   31,    0,   49,    0,
+       19,   36,    0
+
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -439,115 +441,120 @@ static yyconst flex_int32_t yy_meta[61] =
         6,    6,    6,    6,    6,    6,    6,    6,    6,    6
     } ;
 
-static yyconst flex_int16_t yy_base[191] =
+static yyconst flex_int16_t yy_base[199] =
     {   0,
-        0,   59,  210,  446,   63,   67,   71,   75,  192,  446,
-      150,  148,   52,   68,  137,   56,    0,   56,   57,   67,
-       72,   68,   68,   69,  112,   70,   79,  103,   81,  109,
-      120,  121,  170,  174,  178,  101,  182,  186,  190,   97,
-      143,  446,  446,    0,   90,  124,  446,  446,  446,    0,
-      112,  110,  104,  115,  147,  167,  179,  182,  119,    0,
-        0,  167,  172,  184,  179,  172,  173,  172,  179,    0,
-        0,  193,  183,  187,  185,  188,  198,  200,    0,  205,
-      200,  242,  254,  211,    0,   80,    0,  217,  223,  232,
-        0,  221,  222,  234,  245,  243,  235,  236,  232,  246,
-
-      246,  242,    0,  244,    0,  260,    0,  257,  252,  279,
-      261,  266,  273,  277,  283,    0,    0,    0,  272,  283,
-      292,  279,    0,    0,  282,  297,  287,  294,    0,  293,
-      302,  289,  292,  201,    0,    0,  299,  302,  325,  305,
-      304,    0,  310,  308,    0,  320,  327,    0,  320,  318,
-      327,  320,  351,    0,  327,  358,  328,  322,    0,  342,
-      332,    0,  332,    0,    0,    0,  370,    0,  346,  337,
-        0,  359,    0,  348,  360,  446,    0,  351,    0,  384,
-      353,  390,    0,  391,  446,  421,  423,  429,  434,  439
+        0,   59,  205,  459,   63,   67,   71,   75,  167,  459,
+      164,  149,   52,   68,  134,   58,   68,   56,   61,   67,
+       83,   68,    0,   77,   67,  113,  106,  109,   90,   81,
+      116,  109,  128,  174,  178,  182,   98,  186,  190,  194,
+      113,  136,  459,  459,    0,   94,  155,  459,  459,  459,
+        0,   90,  151,  151,  113,  109,  169,  183,  179,  186,
+      189,  178,    0,    0,  175,  180,  193,  188,  183,  182,
+      181,  186,    0,    0,  193,  187,  191,  189,  192,  209,
+      213,    0,  227,  217,  249,  255,  224,    0,   88,  231,
+        0,  233,  231,  237,  228,    0,  233,  234,  241,  252,
+
+      254,  246,  246,  242,  247,  256,  249,    0,  249,    0,
+      272,    0,  271,  266,  305,  274,  277,  287,  292,  276,
+        0,  297,    0,    0,    0,  286,  297,  302,  290,    0,
+        0,  293,  307,  298,  304,    0,  304,  313,  298,  302,
+       86,    0,    0,  319,  316,  340,    0,  325,  320,    0,
+      329,  325,    0,  335,  341,    0,  333,  332,  346,  336,
+      364,    0,  341,  369,  343,  338,    0,  357,  346,    0,
+      347,    0,    0,    0,  383,    0,  361,  355,    0,  377,
+        0,  365,  377,  459,    0,  367,    0,  402,  371,  408,
+        0,  410,  459,  434,  436,  442,  447,  452
+
     } ;
 
-static yyconst flex_int16_t yy_def[191] =
+static yyconst flex_int16_t yy_def[199] =
     {   0,
-      185,    1,  185,  185,  185,  185,  185,  185,  186,  185,
-      185,  185,  185,  185,  185,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  185,  185,  185,  185,  185,  185,  185,  185,
-      186,  185,  185,  188,  185,  185,  185,  185,  185,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  185,  185,  185,  188,  185,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  185,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  187,  189,  187,  187,  187,  187,  185,  187,
-      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
-      187,  187,  189,  187,  187,  185,  187,  187,  187,  187,
-      187,  187,  187,  187,  187,  187,  185,  187,  185,  187,
-      187,  187,  187,  187,  185,  185,  187,  187,  187,  185,
-      187,  190,  187,  190,    0,  185,  185,  185,  185,  185
+      193,    1,  193,  193,  193,  193,  193,  193,  194,  193,
+      193,  193,  193,  193,  193,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  193,  193,  193,  193,  193,  193,  193,
+      193,  194,  193,  193,  196,  193,  193,  193,  193,  193,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  193,  193,  193,  196,  193,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  193,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      197,  195,  195,  195,  195,  193,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      197,  195,  195,  193,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  193,  195,  193,  195,  195,  195,
+      195,  195,  193,  193,  195,  195,  195,  193,  195,  198,
+      195,  198,    0,  193,  193,  193,  193,  193
+
     } ;
 
-static yyconst flex_int16_t yy_nxt[507] =
+static yyconst flex_int16_t yy_nxt[520] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,    4,
        13,   14,   10,   15,   16,   17,   18,   19,   20,   21,
-       22,   17,   23,   17,   24,   25,   26,   27,   28,   29,
-       30,   31,   17,   17,   32,   17,   17,   17,   16,   17,
-       18,   19,   20,   21,   22,   17,   23,   24,   25,   26,
-       27,   28,   29,   30,   31,   17,   17,   32,   17,   17,
-       33,   45,   46,   34,   35,   36,   36,   37,   38,   39,
-       39,   38,   38,   39,   39,   38,   37,   36,   36,   37,
-       47,   48,   51,   52,   53,   40,   57,   61,   68,   40,
-       86,   54,   59,   55,   62,   60,   63,   69,   70,   74,
-
-       86,   58,   56,   36,   36,   51,   52,   53,   71,   40,
-       57,   61,   68,   40,   54,   59,   55,   62,   60,   63,
-       69,   84,   70,   74,   58,   56,   64,   75,   65,   87,
-       66,   71,   72,   45,   46,   73,   88,   76,   89,   67,
-       77,   78,   80,   81,   84,   90,   95,   79,   42,   49,
-       64,   75,   65,   87,   66,   72,   44,   43,   73,   88,
-       76,   89,   67,   77,   91,   78,   80,   81,   90,   95,
-       79,   82,   36,   36,   83,   83,   36,   36,   83,   35,
-       36,   36,   37,   37,   36,   36,   37,   38,   91,   92,
-       38,   38,   39,   39,   38,   93,   94,   42,   96,   97,
-
-       98,   99,  134,  100,   40,  134,  101,  102,   40,  185,
-      103,  104,  109,   92,  105,  106,  107,  108,  110,   93,
-       94,   96,   97,  111,   98,   99,  100,  112,   40,  101,
-      102,  113,   40,  103,  185,  104,  109,  105,  106,  107,
-      108,  114,  110,   82,   36,   36,   83,  111,  115,  116,
-      117,  112,  118,  119,  113,   83,   36,   36,   83,  120,
-      121,  122,  185,  124,  114,  125,  126,  127,  128,  185,
-      123,  115,  116,  129,  117,  118,  119,  130,  131,  132,
-      134,  133,  120,  134,  121,  122,  124,  136,  125,  126,
-      137,  127,  128,  123,  138,  139,  129,  140,  185,  141,
-
-      130,  142,  131,  132,  133,  135,  143,  185,  144,  145,
-      136,  146,  148,  137,  147,  149,  150,  154,  138,  139,
-      151,  140,  141,  152,  155,  142,  156,  157,  135,  156,
-      143,  144,  145,  158,  159,  146,  148,  147,  160,  149,
-      150,  154,  161,  151,  162,  165,  152,  163,  155,  164,
-      166,  157,  167,  168,  170,  167,  158,  159,  171,  156,
-      172,  160,  156,  173,  174,  176,  161,  177,  162,  165,
-      163,  167,  164,  166,  167,  178,  168,  170,  179,  180,
-      169,  171,  181,  183,  172,  182,  173,  174,  182,  176,
-      177,  182,  185,  185,  182,  185,  185,  175,  185,  178,
-
-      185,  179,  185,  180,  169,  181,  183,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      175,   41,   41,  185,   41,   41,   41,   50,   50,   85,
-       85,  185,  185,   85,   85,  153,  185,  185,  185,  153,
-      184,  185,  185,  185,  184,    3,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-
-      185,  185,  185,  185,  185,  185
+       22,   23,   24,   23,   25,   26,   27,   28,   29,   30,
+       31,   32,   23,   23,   33,   23,   23,   23,   16,   17,
+       18,   19,   20,   21,   22,   23,   24,   25,   26,   27,
+       28,   29,   30,   31,   32,   23,   23,   33,   23,   23,
+       34,   46,   47,   35,   36,   37,   37,   38,   39,   40,
+       40,   39,   39,   40,   40,   39,   38,   37,   37,   38,
+       48,   49,   52,   55,   53,   41,   54,  141,   56,   41,
+      141,   57,   62,   58,   66,   63,   64,   60,   89,   77,
+
+       37,   37,   59,   65,   89,   52,   55,   53,   90,   41,
+       54,   56,   61,   41,   57,   62,   58,   66,   63,   75,
+       64,   60,   76,   77,   71,   59,   65,   67,   73,   68,
+       81,   69,   90,   72,   78,   61,   82,   87,   74,   93,
+       70,   43,   75,   94,   79,   76,   50,   80,   71,   83,
+       84,   67,   73,   68,   81,   69,   72,   45,   78,   82,
+       87,   74,   93,   70,   46,   47,   94,   79,   91,   92,
+       80,   44,   43,   83,   84,   85,   37,   37,   86,   86,
+       37,   37,   86,   36,   37,   37,   38,   38,   37,   37,
+       38,   39,   91,   92,   39,   39,   40,   40,   39,   95,
+
+       96,   97,   98,   99,  193,  100,  101,  102,   41,  103,
+      104,  109,   41,  193,  105,  106,  107,  108,  110,  111,
+      112,  113,   95,  114,   96,   97,   98,   99,  100,  101,
+      102,  115,   41,  103,  104,  109,   41,  105,  106,  107,
+      108,  110,  111,  112,  113,  116,  124,  114,  118,  117,
+       85,   37,   37,   86,  119,  115,   86,   37,   37,   86,
+      120,  121,  122,  123,  125,  126,  127,  128,  134,  116,
+      124,  118,  129,  117,  131,  132,  133,  119,  135,  193,
+      136,  130,  137,  120,  121,  122,  123,  125,  126,  127,
+      138,  128,  134,  139,  193,  140,  129,  131,  132,  133,
+
+      143,  144,  135,  136,  130,  137,  141,  147,  145,  141,
+      146,  148,  193,  149,  138,  150,  151,  139,  140,  152,
+      153,  154,  156,  143,  144,  155,  157,  158,  193,  159,
+      147,  142,  145,  160,  146,  148,  149,  162,  163,  150,
+      151,  164,  152,  153,  164,  154,  156,  165,  155,  166,
+      157,  158,  159,  167,  142,  168,  160,  169,  170,  193,
+      171,  162,  163,  172,  173,  175,  174,  176,  175,  178,
+      164,  165,  166,  164,  179,  180,  167,  181,  168,  182,
+      184,  169,  170,  171,  175,  185,  172,  175,  173,  174,
+      176,  177,  178,  186,  193,  187,  188,  179,  189,  180,
+
+      181,  191,  182,  190,  184,  193,  190,  193,  185,  190,
+      183,  193,  190,  193,  193,  177,  193,  186,  187,  193,
+      188,  189,  193,  193,  191,  193,  193,  193,  193,  193,
+      193,  193,  193,  183,   42,   42,  193,   42,   42,   42,
+       51,   51,   88,   88,  193,  193,   88,   88,  161,  193,
+      193,  193,  161,  192,  193,  193,  193,  192,    3,  193,
+      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+
+      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+      193,  193,  193,  193,  193,  193,  193,  193,  193
     } ;
 
-static yyconst flex_int16_t yy_chk[507] =
+static yyconst flex_int16_t yy_chk[520] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -557,54 +564,55 @@ static yyconst flex_int16_t yy_chk[507] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         2,   13,   13,    2,    5,    5,    5,    5,    6,    6,
         6,    6,    7,    7,    7,    7,    8,    8,    8,    8,
-       14,   14,   16,   18,   19,    6,   21,   23,   26,    7,
-       86,   20,   22,   20,   23,   22,   24,   26,   27,   29,
-
-       45,   21,   20,   36,   36,   16,   18,   19,   27,    6,
-       21,   23,   26,    7,   20,   22,   20,   23,   22,   24,
-       26,   40,   27,   29,   21,   20,   25,   30,   25,   51,
-       25,   27,   28,   46,   46,   28,   52,   30,   53,   25,
-       30,   31,   32,   32,   40,   54,   59,   31,   41,   15,
-       25,   30,   25,   51,   25,   28,   12,   11,   28,   52,
-       30,   53,   25,   30,   55,   31,   32,   32,   54,   59,
-       31,   33,   33,   33,   33,   34,   34,   34,   34,   35,
-       35,   35,   35,   37,   37,   37,   37,   38,   55,   56,
-       38,   39,   39,   39,   39,   57,   58,    9,   62,   63,
-
-       64,   65,  134,   66,   38,  134,   67,   68,   39,    3,
-       69,   72,   77,   56,   73,   74,   75,   76,   78,   57,
-       58,   62,   63,   80,   64,   65,   66,   80,   38,   67,
-       68,   81,   39,   69,    0,   72,   77,   73,   74,   75,
-       76,   84,   78,   82,   82,   82,   82,   80,   88,   89,
-       90,   80,   92,   93,   81,   83,   83,   83,   83,   94,
-       95,   96,    0,   97,   84,   98,   99,  100,  101,    0,
-       96,   88,   89,  102,   90,   92,   93,  104,  106,  108,
-      110,  109,   94,  110,   95,   96,   97,  111,   98,   99,
-      112,  100,  101,   96,  113,  114,  102,  115,    0,  119,
-
-      104,  120,  106,  108,  109,  110,  121,    0,  122,  125,
-      111,  126,  128,  112,  127,  130,  131,  137,  113,  114,
-      132,  115,  119,  133,  138,  120,  139,  140,  110,  139,
-      121,  122,  125,  141,  143,  126,  128,  127,  144,  130,
-      131,  137,  146,  132,  147,  151,  133,  149,  138,  150,
-      152,  140,  153,  155,  157,  153,  141,  143,  158,  156,
-      160,  144,  156,  161,  163,  169,  146,  170,  147,  151,
-      149,  167,  150,  152,  167,  172,  155,  157,  174,  175,
-      156,  158,  178,  181,  160,  180,  161,  163,  180,  169,
-      170,  182,  184,    0,  182,  184,    0,  167,    0,  172,
-
-        0,  174,    0,  175,  156,  178,  181,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      167,  186,  186,    0,  186,  186,  186,  187,  187,  188,
-      188,    0,    0,  188,  188,  189,    0,    0,    0,  189,
-      190,    0,    0,    0,  190,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
-
-      185,  185,  185,  185,  185,  185
+       14,   14,   16,   18,   16,    6,   17,  141,   19,    7,
+      141,   20,   22,   20,   25,   22,   24,   21,   89,   30,
+
+       37,   37,   20,   24,   46,   16,   18,   16,   52,    6,
+       17,   19,   21,    7,   20,   22,   20,   25,   22,   29,
+       24,   21,   29,   30,   27,   20,   24,   26,   28,   26,
+       32,   26,   52,   27,   31,   21,   32,   41,   28,   55,
+       26,   42,   29,   56,   31,   29,   15,   31,   27,   33,
+       33,   26,   28,   26,   32,   26,   27,   12,   31,   32,
+       41,   28,   55,   26,   47,   47,   56,   31,   53,   54,
+       31,   11,    9,   33,   33,   34,   34,   34,   34,   35,
+       35,   35,   35,   36,   36,   36,   36,   38,   38,   38,
+       38,   39,   53,   54,   39,   40,   40,   40,   40,   57,
+
+       58,   59,   60,   61,    3,   62,   65,   66,   39,   67,
+       68,   75,   40,    0,   69,   70,   71,   72,   76,   77,
+       78,   79,   57,   80,   58,   59,   60,   61,   62,   65,
+       66,   81,   39,   67,   68,   75,   40,   69,   70,   71,
+       72,   76,   77,   78,   79,   83,   95,   80,   84,   83,
+       85,   85,   85,   85,   87,   81,   86,   86,   86,   86,
+       90,   92,   93,   94,   97,   98,   99,  100,  105,   83,
+       95,   84,  101,   83,  102,  103,  104,   87,  106,    0,
+      107,  101,  109,   90,   92,   93,   94,   97,   98,   99,
+      111,  100,  105,  113,    0,  114,  101,  102,  103,  104,
+
+      116,  117,  106,  107,  101,  109,  115,  120,  118,  115,
+      119,  122,    0,  126,  111,  127,  128,  113,  114,  129,
+      132,  133,  135,  116,  117,  134,  137,  138,    0,  139,
+      120,  115,  118,  140,  119,  122,  126,  144,  145,  127,
+      128,  146,  129,  132,  146,  133,  135,  148,  134,  149,
+      137,  138,  139,  151,  115,  152,  140,  154,  155,    0,
+      157,  144,  145,  158,  159,  161,  160,  163,  161,  165,
+      164,  148,  149,  164,  166,  168,  151,  169,  152,  171,
+      177,  154,  155,  157,  175,  178,  158,  175,  159,  160,
+      163,  164,  165,  180,    0,  182,  183,  166,  186,  168,
+
+      169,  189,  171,  188,  177,    0,  188,    0,  178,  190,
+      175,  192,  190,    0,  192,  164,    0,  180,  182,    0,
+      183,  186,    0,    0,  189,    0,    0,    0,    0,    0,
+        0,    0,    0,  175,  194,  194,    0,  194,  194,  194,
+      195,  195,  196,  196,    0,    0,  196,  196,  197,    0,
+        0,    0,  197,  198,    0,    0,    0,  198,  193,  193,
+      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+
+      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+      193,  193,  193,  193,  193,  193,  193,  193,  193
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -674,7 +682,7 @@ static void countnl() {
 	g_lingo->_colnumber = strlen(p);
 }
 
-#line 678 "engines/director/lingo/lingo-lex.cpp"
+#line 686 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -862,7 +870,7 @@ YY_DECL
 #line 65 "engines/director/lingo/lingo-lex.l"
 
 
-#line 866 "engines/director/lingo/lingo-lex.cpp"
+#line 874 "engines/director/lingo/lingo-lex.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -916,13 +924,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 >= 186 )
+				if ( yy_current_state >= 194 )
 					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] != 446 );
+		while ( yy_base[yy_current_state] != 459 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -964,158 +972,168 @@ YY_RULE_SETUP
 case 4:
 YY_RULE_SETUP
 #line 71 "engines/director/lingo/lingo-lex.l"
-{ count(); return tAND; }
+{ count(); return tALERT; }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
 #line 72 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONTAINS; }
+{ count(); return tAND; }
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
 #line 73 "engines/director/lingo/lingo-lex.l"
-{ count(); return tDOWN; }
+{ count(); return tBEEP; }
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
 #line 74 "engines/director/lingo/lingo-lex.l"
-{ count(); return tIF; }
+{ count(); return tCONTAINS; }
 	YY_BREAK
 case 8:
-/* rule 8 can match eol */
 YY_RULE_SETUP
 #line 75 "engines/director/lingo/lingo-lex.l"
-{ countnl(); return tNLELSIF; }
+{ count(); return tDOWN; }
 	YY_BREAK
 case 9:
-/* rule 9 can match eol */
 YY_RULE_SETUP
 #line 76 "engines/director/lingo/lingo-lex.l"
-{ countnl(); return tNLELSE; }
+{ count(); return tIF; }
 	YY_BREAK
 case 10:
+/* rule 10 can match eol */
 YY_RULE_SETUP
 #line 77 "engines/director/lingo/lingo-lex.l"
-{ count(); return tELSE; }
+{ countnl(); return tNLELSIF; }
 	YY_BREAK
 case 11:
+/* rule 11 can match eol */
 YY_RULE_SETUP
 #line 78 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEND; }
+{ countnl(); return tNLELSE; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
 #line 79 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFACTORY; }
+{ count(); return tELSE; }
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
 #line 80 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEXIT; }
+{ count(); return tEND; }
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
 #line 81 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFRAME; }
+{ count(); return tFACTORY; }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
 #line 82 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGLOBAL; }
+{ count(); return tEXIT; }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
 #line 83 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGO; }
+{ count(); return tFRAME; }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 84 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTERSECTS; }
+{ count(); return tGLOBAL; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 85 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTO; }
+{ count(); return tGO; }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 86 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLOOP; }
+{ count(); return tINTERSECTS; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 87 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMACRO; }
+{ count(); return tINTO; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 88 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMCI; }
+{ count(); return tLOOP; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 89 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMCIWAIT; }
+{ count(); return tMACRO; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 90 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMETHOD; }
+{ count(); return tMCI; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 91 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOVIE; }
+{ count(); return tMCIWAIT; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 92 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEXT; }
+{ count(); return tMETHOD; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 93 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNOT; }
+{ count(); return tMOVIE; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 94 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOF; }
+{ count(); return tNEXT; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 95 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOR; }
+{ count(); return tNOT; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 96 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPREVIOUS; }
+{ count(); return tOF; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 97 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPUT; }
+{ count(); return tOR; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 98 "engines/director/lingo/lingo-lex.l"
-{ count(); return tREPEAT; }
+{ count(); return tPREVIOUS; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 99 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSET; }
+{ count(); return tPUT; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 100 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSTARTS; }
+{ count(); return tREPEAT; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 101 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSET; }
+	YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 102 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSTARTS; }
+	YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 103 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1157,9 +1175,9 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
-case 35:
+case 37:
 YY_RULE_SETUP
-#line 141 "engines/director/lingo/lingo-lex.l"
+#line 143 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1180,64 +1198,64 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 160 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTHEN; }
-	YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 161 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTO; }
-	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 162 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSPRITE; }
+{ count(); return tTHEN; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 163 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITH; }
+{ count(); return tTO; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 164 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITHIN; }
+{ count(); return tSPRITE; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 165 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHEN; }
+{ count(); return tWITH; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 166 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHILE; }
+{ count(); return tWITHIN; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 168 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEQ; }
+#line 167 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWHEN; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 169 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGE; }
+#line 168 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWHILE; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 170 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLE; }
+{ count(); return tNEQ; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 171 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONCAT; }
+{ count(); return tGE; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
+#line 172 "engines/director/lingo/lingo-lex.l"
+{ count(); return tLE; }
+	YY_BREAK
+case 48:
+YY_RULE_SETUP
 #line 173 "engines/director/lingo/lingo-lex.l"
+{ count(); return tCONCAT; }
+	YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 175 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1250,43 +1268,43 @@ YY_RULE_SETUP
 		return ID;
 	}
 	YY_BREAK
-case 48:
-YY_RULE_SETUP
-#line 184 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.f = atof(yytext); return vFLOAT; }
-	YY_BREAK
-case 49:
-YY_RULE_SETUP
-#line 185 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.i = strtol(yytext, NULL, 10); return vINT; }
-	YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 186 "engines/director/lingo/lingo-lex.l"
-{ count(); return *yytext; }
+{ count(); yylval.f = atof(yytext); return vFLOAT; }
 	YY_BREAK
 case 51:
-/* rule 51 can match eol */
 YY_RULE_SETUP
 #line 187 "engines/director/lingo/lingo-lex.l"
-{ return '\n'; }
+{ count(); yylval.i = strtol(yytext, NULL, 10); return vINT; }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 188 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return vSTRING; }
+{ count(); return *yytext; }
 	YY_BREAK
 case 53:
+/* rule 53 can match eol */
 YY_RULE_SETUP
 #line 189 "engines/director/lingo/lingo-lex.l"
-
+{ return '\n'; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
+#line 190 "engines/director/lingo/lingo-lex.l"
+{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return vSTRING; }
+	YY_BREAK
+case 55:
+YY_RULE_SETUP
 #line 191 "engines/director/lingo/lingo-lex.l"
+
+	YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 193 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1290 "engines/director/lingo/lingo-lex.cpp"
+#line 1308 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1579,7 +1597,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 >= 186 )
+			if ( yy_current_state >= 194 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1607,11 +1625,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 >= 186 )
+		if ( yy_current_state >= 194 )
 			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 == 185);
+	yy_is_jam = (yy_current_state == 193);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2286,7 +2304,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 191 "engines/director/lingo/lingo-lex.l"
+#line 193 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index e96a82e..b9ecfc3 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -68,7 +68,9 @@ whitespace [\t ]
 ^{whitespace}+		{ count(); }
 [\t]+				{ count(); return ' '; }
 
+(?i:alert)			{ count(); return tALERT; }
 (?i:and)			{ count(); return tAND; }
+(?i:beep)			{ count(); return tBEEP; }
 (?i:contains)		{ count(); return tCONTAINS; }
 (?i:down)			{ count(); return tDOWN; }
 (?i:if)				{ count(); return tIF; }
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index fb68dbb..023a194 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -244,6 +244,9 @@ public:
 	static void c_gotoprevious();
 	static void c_global();
 
+	static void c_alert();
+	static void c_beep();
+
 	static void b_abs();
 	static void b_atan();
 	static void b_chars();
@@ -273,6 +276,8 @@ public:
 	void func_gotoloop();
 	void func_gotonext();
 	void func_gotoprevious();
+	void func_alert(Common::String &s);
+	void func_beep(int num);
 
 public:
 	void setTheEntity(int entity, Datum &id, int field, Datum &d);


Commit: 415cefd702bbc36538ed8faeab609253fdbc0540
    https://github.com/scummvm/scummvm/commit/415cefd702bbc36538ed8faeab609253fdbc0540
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-04T23:00:55+02:00

Commit Message:
DIRECTOR: Lingo: Added stubs for 'closeDA', 'closeResFile' and 'closeXlib'

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-code.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 d4acc1a..15716bf 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -48,9 +48,10 @@ static struct BuiltinProto {
 	{ "length",	Lingo::b_length, 1 },
 	{ "string",	Lingo::b_string, 1 },
 	// Misc
-	{ "dontpassevent", Lingo::b_dontpassevent, -1 },
-	{ "updatestage", Lingo::b_updatestage, -1 },
-	{ "ilk",	 Lingo::b_ilk, 1 },
+	{ "closeDA",	 	Lingo::b_closeDA, -1 },
+	{ "dontpassevent",	Lingo::b_dontpassevent, -1 },
+	{ "updatestage",	Lingo::b_updatestage, -1 },
+	{ "ilk",	 		Lingo::b_ilk, 1 },
 	// point
 	{ "point",	Lingo::b_point, 2 },
 	{ 0, 0, 0 }
@@ -239,6 +240,10 @@ void Lingo::b_ilk() {
 	g_lingo->push(d);
 }
 
+void Lingo::b_closeDA() {
+	warning("STUB: b_closeDA");
+}
+
 ///////////////////
 // Point
 ///////////////////
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index d529290..db5b013 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -698,6 +698,26 @@ void Lingo::c_alert() {
 	delete d.u.s;
 }
 
+void Lingo::c_closeResFile() {
+	Datum d = g_lingo->pop();
+
+	d.toString();
+
+	warning("STUB: c_closeResFile(%s)", d.u.s->c_str());
+
+	delete d.u.s;
+}
+
+void Lingo::c_closeXlib() {
+	Datum d = g_lingo->pop();
+
+	d.toString();
+
+	warning("STUB: c_closeXlib(%s)", d.u.s->c_str());
+
+	delete d.u.s;
+}
+
 void Lingo::c_beep() {
 	Datum d = g_lingo->pop();
 	g_lingo->func_beep(d.u.i);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index d776d4a..64dd708 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -114,21 +114,23 @@
      tMETHOD = 303,
      tALERT = 304,
      tBEEP = 305,
-     tGE = 306,
-     tLE = 307,
-     tGT = 308,
-     tLT = 309,
-     tEQ = 310,
-     tNEQ = 311,
-     tAND = 312,
-     tOR = 313,
-     tNOT = 314,
-     tCONCAT = 315,
-     tCONTAINS = 316,
-     tSTARTS = 317,
-     tSPRITE = 318,
-     tINTERSECTS = 319,
-     tWITHIN = 320
+     tCLOSERESFILE = 306,
+     tCLOSEXLIB = 307,
+     tGE = 308,
+     tLE = 309,
+     tGT = 310,
+     tLT = 311,
+     tEQ = 312,
+     tNEQ = 313,
+     tAND = 314,
+     tOR = 315,
+     tNOT = 316,
+     tCONCAT = 317,
+     tCONTAINS = 318,
+     tSTARTS = 319,
+     tSPRITE = 320,
+     tINTERSECTS = 321,
+     tWITHIN = 322
    };
 #endif
 /* Tokens.  */
@@ -180,21 +182,23 @@
 #define tMETHOD 303
 #define tALERT 304
 #define tBEEP 305
-#define tGE 306
-#define tLE 307
-#define tGT 308
-#define tLT 309
-#define tEQ 310
-#define tNEQ 311
-#define tAND 312
-#define tOR 313
-#define tNOT 314
-#define tCONCAT 315
-#define tCONTAINS 316
-#define tSTARTS 317
-#define tSPRITE 318
-#define tINTERSECTS 319
-#define tWITHIN 320
+#define tCLOSERESFILE 306
+#define tCLOSEXLIB 307
+#define tGE 308
+#define tLE 309
+#define tGT 310
+#define tLT 311
+#define tEQ 312
+#define tNEQ 313
+#define tAND 314
+#define tOR 315
+#define tNOT 316
+#define tCONCAT 317
+#define tCONTAINS 318
+#define tSTARTS 319
+#define tSPRITE 320
+#define tINTERSECTS 321
+#define tWITHIN 322
 
 
 
@@ -252,7 +256,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 193 of yacc.c.  */
-#line 256 "engines/director/lingo/lingo-gr.cpp"
+#line 260 "engines/director/lingo/lingo-gr.cpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -265,7 +269,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 269 "engines/director/lingo/lingo-gr.cpp"
+#line 273 "engines/director/lingo/lingo-gr.cpp"
 
 #ifdef short
 # undef short
@@ -478,22 +482,22 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  81
+#define YYFINAL  85
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   785
+#define YYLAST   801
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  79
+#define YYNTOKENS  81
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  34
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  121
+#define YYNRULES  125
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  258
+#define YYNSTATES  262
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   320
+#define YYMAXUTOK   322
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -502,12 +506,12 @@ union yyalloc
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      72,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      74,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,    71,    77,     2,
-      73,    74,    69,    67,    78,    68,     2,    70,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    73,    79,     2,
+      75,    76,    71,    69,    80,    70,     2,    72,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      76,    66,    75,     2,     2,     2,     2,     2,     2,     2,
+      78,    68,    77,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -533,7 +537,7 @@ static const yytype_uint8 yytranslate[] =
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65
+      65,    66,    67
 };
 
 #if YYDEBUG
@@ -550,61 +554,62 @@ static const yytype_uint16 yyprhs[] =
      246,   248,   251,   253,   257,   261,   265,   269,   273,   277,
      281,   285,   289,   293,   297,   300,   304,   308,   312,   316,
      319,   322,   326,   331,   336,   339,   342,   345,   347,   349,
-     352,   355,   358,   360,   362,   366,   369,   372,   375,   378,
-     382,   385,   389,   392,   395,   397,   401,   404,   408,   409,
-     418,   421,   422,   431,   432,   434,   438,   443,   444,   448,
-     449,   451
+     352,   355,   358,   360,   363,   365,   368,   370,   372,   376,
+     379,   382,   385,   388,   392,   395,   399,   402,   405,   407,
+     411,   414,   418,   419,   428,   431,   432,   441,   442,   444,
+     448,   453,   454,   458,   459,   461
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      80,     0,    -1,    80,    81,    82,    -1,    82,    -1,     1,
-      72,    -1,    72,    -1,    -1,   106,    -1,   101,    -1,   111,
-      -1,    83,    -1,    85,    -1,    38,   100,    29,    19,    -1,
-      40,    19,    66,   100,    -1,    40,    12,    66,   100,    -1,
-      40,    13,   100,    66,   100,    -1,    40,    19,    42,   100,
-      -1,    40,    12,    42,   100,    -1,    40,    13,   100,    42,
-     100,    -1,   100,    -1,   101,    -1,    84,    -1,    86,    -1,
-      93,    73,    92,    74,    99,    98,    23,    39,    -1,    94,
-      66,   100,    98,    42,   100,    98,    99,    98,    23,    39,
-      -1,    94,    66,   100,    98,    20,    42,   100,    98,    99,
-      98,    23,    39,    -1,    43,    19,    41,   100,    -1,    95,
-      92,    41,    81,    99,    98,    23,    28,    -1,    95,    92,
-      41,    81,    99,    98,    46,    99,    98,    23,    28,    -1,
-      95,    92,    41,    81,    99,    98,    97,    88,    98,    23,
-      28,    -1,    95,    92,    41,    97,    84,    98,    -1,    95,
-      92,    41,    97,    84,    98,    46,    97,    84,    98,    -1,
-      95,    92,    41,    97,    84,    98,    89,    98,    87,    98,
-      -1,    -1,    46,    97,    84,    -1,    88,    91,    -1,    91,
-      -1,    89,    90,    -1,    90,    -1,    96,    92,    41,    97,
-      85,    98,    -1,    89,    -1,    96,    92,    41,    99,    98,
-      -1,   100,    -1,   100,    66,   100,    -1,    73,    92,    74,
+      82,     0,    -1,    82,    83,    84,    -1,    84,    -1,     1,
+      74,    -1,    74,    -1,    -1,   108,    -1,   103,    -1,   113,
+      -1,    85,    -1,    87,    -1,    38,   102,    29,    19,    -1,
+      40,    19,    68,   102,    -1,    40,    12,    68,   102,    -1,
+      40,    13,   102,    68,   102,    -1,    40,    19,    42,   102,
+      -1,    40,    12,    42,   102,    -1,    40,    13,   102,    42,
+     102,    -1,   102,    -1,   103,    -1,    86,    -1,    88,    -1,
+      95,    75,    94,    76,   101,   100,    23,    39,    -1,    96,
+      68,   102,   100,    42,   102,   100,   101,   100,    23,    39,
+      -1,    96,    68,   102,   100,    20,    42,   102,   100,   101,
+     100,    23,    39,    -1,    43,    19,    41,   102,    -1,    97,
+      94,    41,    83,   101,   100,    23,    28,    -1,    97,    94,
+      41,    83,   101,   100,    46,   101,   100,    23,    28,    -1,
+      97,    94,    41,    83,   101,   100,    99,    90,   100,    23,
+      28,    -1,    97,    94,    41,    99,    86,   100,    -1,    97,
+      94,    41,    99,    86,   100,    46,    99,    86,   100,    -1,
+      97,    94,    41,    99,    86,   100,    91,   100,    89,   100,
+      -1,    -1,    46,    99,    86,    -1,    90,    93,    -1,    93,
+      -1,    91,    92,    -1,    92,    -1,    98,    94,    41,    99,
+      87,   100,    -1,    91,    -1,    98,    94,    41,   101,   100,
+      -1,   102,    -1,   102,    68,   102,    -1,    75,    94,    76,
       -1,    39,    45,    -1,    39,    44,    19,    -1,    28,    -1,
-      22,    -1,    -1,    -1,    -1,    99,    81,    -1,    99,    85,
+      22,    -1,    -1,    -1,    -1,   101,    83,    -1,   101,    87,
       -1,    11,    -1,    14,    -1,    17,    -1,    16,    -1,    19,
-      73,   112,    74,    -1,    19,    -1,    12,    -1,    13,   100,
-      -1,    83,    -1,   100,    67,   100,    -1,   100,    68,   100,
-      -1,   100,    69,   100,    -1,   100,    70,   100,    -1,   100,
-      75,   100,    -1,   100,    76,   100,    -1,   100,    56,   100,
-      -1,   100,    51,   100,    -1,   100,    52,   100,    -1,   100,
-      57,   100,    -1,   100,    58,   100,    -1,    59,   100,    -1,
-     100,    77,   100,    -1,   100,    60,   100,    -1,   100,    61,
-     100,    -1,   100,    62,   100,    -1,    67,   100,    -1,    68,
-     100,    -1,    73,   100,    74,    -1,    63,   100,    64,   100,
-      -1,    63,   100,    65,   100,    -1,    32,    17,    -1,    33,
-      19,    -1,    38,   100,    -1,   103,    -1,    24,    -1,    26,
-     102,    -1,    49,   100,    -1,    50,    11,    -1,    50,    -1,
-      19,    -1,   102,    78,    19,    -1,    27,    30,    -1,    27,
-      35,    -1,    27,    37,    -1,    27,   104,    -1,    27,   104,
-     105,    -1,    27,   105,    -1,    42,    25,    17,    -1,    25,
+      75,   114,    76,    -1,    19,    -1,    12,    -1,    13,   102,
+      -1,    85,    -1,   102,    69,   102,    -1,   102,    70,   102,
+      -1,   102,    71,   102,    -1,   102,    72,   102,    -1,   102,
+      77,   102,    -1,   102,    78,   102,    -1,   102,    58,   102,
+      -1,   102,    53,   102,    -1,   102,    54,   102,    -1,   102,
+      59,   102,    -1,   102,    60,   102,    -1,    61,   102,    -1,
+     102,    79,   102,    -1,   102,    62,   102,    -1,   102,    63,
+     102,    -1,   102,    64,   102,    -1,    69,   102,    -1,    70,
+     102,    -1,    75,   102,    76,    -1,    65,   102,    66,   102,
+      -1,    65,   102,    67,   102,    -1,    32,    17,    -1,    33,
+      19,    -1,    38,   102,    -1,   105,    -1,    24,    -1,    26,
+     104,    -1,    49,   102,    -1,    50,    11,    -1,    50,    -1,
+      51,   102,    -1,    51,    -1,    52,   102,    -1,    52,    -1,
+      19,    -1,   104,    80,    19,    -1,    27,    30,    -1,    27,
+      35,    -1,    27,    37,    -1,    27,   106,    -1,    27,   106,
+     107,    -1,    27,   107,    -1,    42,    25,    17,    -1,    25,
       17,    -1,    42,    17,    -1,    17,    -1,    36,    34,    17,
       -1,    34,    17,    -1,    42,    34,    17,    -1,    -1,    31,
-      19,   107,    97,   109,    81,   110,    99,    -1,    47,    19,
-      -1,    -1,    48,    19,   108,    97,   109,    81,   110,    99,
-      -1,    -1,    19,    -1,   109,    78,    19,    -1,   109,    81,
-      78,    19,    -1,    -1,    19,    97,   112,    -1,    -1,   100,
-      -1,   112,    78,   100,    -1
+      19,   109,    99,   111,    83,   112,   101,    -1,    47,    19,
+      -1,    -1,    48,    19,   110,    99,   111,    83,   112,   101,
+      -1,    -1,    19,    -1,   111,    80,    19,    -1,   111,    83,
+      80,    19,    -1,    -1,    19,    99,   114,    -1,    -1,   102,
+      -1,   114,    80,   102,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -619,10 +624,10 @@ static const yytype_uint16 yyrline[] =
      367,   374,   380,   381,   382,   383,   384,   385,   386,   387,
      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
      398,   399,   400,   401,   404,   405,   406,   407,   408,   410,
-     411,   412,   418,   426,   427,   438,   439,   440,   441,   446,
-     452,   459,   460,   461,   462,   465,   466,   467,   495,   495,
-     501,   504,   504,   510,   511,   512,   513,   515,   519,   527,
-     528,   529
+     411,   412,   418,   424,   425,   431,   432,   440,   441,   452,
+     453,   454,   455,   460,   466,   473,   474,   475,   476,   479,
+     480,   481,   509,   509,   515,   518,   518,   524,   525,   526,
+     527,   529,   533,   541,   542,   543
 };
 #endif
 
@@ -638,16 +643,16 @@ static const char *const yytname[] =
   "tFRAME", "tGLOBAL", "tGO", "tIF", "tINTO", "tLOOP", "tMACRO", "tMCI",
   "tMCIWAIT", "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT",
   "tSET", "tTHEN", "tTO", "tWHEN", "tWITH", "tWHILE", "tNLELSE",
-  "tFACTORY", "tMETHOD", "tALERT", "tBEEP", "tGE", "tLE", "tGT", "tLT",
-  "tEQ", "tNEQ", "tAND", "tOR", "tNOT", "tCONCAT", "tCONTAINS", "tSTARTS",
-  "tSPRITE", "tINTERSECTS", "tWITHIN", "'='", "'+'", "'-'", "'*'", "'/'",
-  "'%'", "'\\n'", "'('", "')'", "'>'", "'<'", "'&'", "','", "$accept",
-  "program", "nl", "programline", "asgn", "stmtoneliner", "stmt", "ifstmt",
-  "elsestmtoneliner", "elseifstmt", "elseifstmtoneliner",
-  "elseifstmtoneliner1", "elseifstmt1", "cond", "repeatwhile",
-  "repeatwith", "if", "elseif", "begin", "end", "stmtlist", "expr", "func",
-  "globallist", "gotofunc", "gotoframe", "gotomovie", "defn", "@1", "@2",
-  "argdef", "argstore", "macro", "arglist", 0
+  "tFACTORY", "tMETHOD", "tALERT", "tBEEP", "tCLOSERESFILE", "tCLOSEXLIB",
+  "tGE", "tLE", "tGT", "tLT", "tEQ", "tNEQ", "tAND", "tOR", "tNOT",
+  "tCONCAT", "tCONTAINS", "tSTARTS", "tSPRITE", "tINTERSECTS", "tWITHIN",
+  "'='", "'+'", "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "'>'",
+  "'<'", "'&'", "','", "$accept", "program", "nl", "programline", "asgn",
+  "stmtoneliner", "stmt", "ifstmt", "elsestmtoneliner", "elseifstmt",
+  "elseifstmtoneliner", "elseifstmtoneliner1", "elseifstmt1", "cond",
+  "repeatwhile", "repeatwith", "if", "elseif", "begin", "end", "stmtlist",
+  "expr", "func", "globallist", "gotofunc", "gotoframe", "gotomovie",
+  "defn", "@1", "@2", "argdef", "argstore", "macro", "arglist", 0
 };
 #endif
 
@@ -662,27 +667,28 @@ static const yytype_uint16 yytoknum[] =
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,    61,    43,    45,    42,
-      47,    37,    10,    40,    41,    62,    60,    38,    44
+     315,   316,   317,   318,   319,   320,   321,   322,    61,    43,
+      45,    42,    47,    37,    10,    40,    41,    62,    60,    38,
+      44
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    79,    80,    80,    80,    81,    82,    82,    82,    82,
-      82,    82,    83,    83,    83,    83,    83,    83,    83,    84,
-      84,    85,    85,    85,    85,    85,    85,    86,    86,    86,
-      86,    86,    86,    87,    87,    88,    88,    89,    89,    90,
-      91,    91,    92,    92,    92,    93,    94,    95,    96,    97,
-      98,    99,    99,    99,   100,   100,   100,   100,   100,   100,
-     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
-     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
-     100,   100,   100,   100,   101,   101,   101,   101,   101,   101,
-     101,   101,   101,   102,   102,   103,   103,   103,   103,   103,
-     103,   104,   104,   104,   104,   105,   105,   105,   107,   106,
-     106,   108,   106,   109,   109,   109,   109,   110,   111,   112,
-     112,   112
+       0,    81,    82,    82,    82,    83,    84,    84,    84,    84,
+      84,    84,    85,    85,    85,    85,    85,    85,    85,    86,
+      86,    87,    87,    87,    87,    87,    87,    88,    88,    88,
+      88,    88,    88,    89,    89,    90,    90,    91,    91,    92,
+      93,    93,    94,    94,    94,    95,    96,    97,    98,    99,
+     100,   101,   101,   101,   102,   102,   102,   102,   102,   102,
+     102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
+     102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
+     102,   102,   102,   102,   103,   103,   103,   103,   103,   103,
+     103,   103,   103,   103,   103,   103,   103,   104,   104,   105,
+     105,   105,   105,   105,   105,   106,   106,   106,   106,   107,
+     107,   107,   109,   108,   108,   110,   108,   111,   111,   111,
+     111,   112,   113,   114,   114,   114
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -697,10 +703,10 @@ static const yytype_uint8 yyr2[] =
        1,     2,     1,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     2,     3,     3,     3,     3,     2,
        2,     3,     4,     4,     2,     2,     2,     1,     1,     2,
-       2,     2,     1,     1,     3,     2,     2,     2,     2,     3,
-       2,     3,     2,     2,     1,     3,     2,     3,     0,     8,
-       2,     0,     8,     0,     1,     3,     4,     0,     3,     0,
-       1,     3
+       2,     2,     1,     2,     1,     2,     1,     1,     3,     2,
+       2,     2,     2,     3,     2,     3,     2,     2,     1,     3,
+       2,     3,     0,     8,     2,     0,     8,     0,     1,     3,
+       4,     0,     3,     0,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -710,81 +716,83 @@ static const yytype_uint8 yydefact[] =
 {
        0,     0,    54,    60,     0,    55,    57,    56,    49,    88,
        0,     0,    47,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    92,     0,     0,     0,     0,     0,     0,
-       3,    62,    21,    11,    22,     0,     0,     0,    19,     8,
-      87,     7,     9,     4,    59,     0,    62,    61,   119,   119,
-      93,    89,   104,     0,    95,     0,    96,     0,    97,     0,
-      98,   100,   108,    84,    85,    86,     0,    45,     0,     0,
-       0,     0,   110,   111,    90,    91,    74,     0,    79,    80,
-       0,     1,     5,     6,     0,     0,     0,     0,    42,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   120,     0,   118,     0,   102,
-     106,     0,   103,     0,     0,     0,    99,    49,     0,    46,
-       0,     0,     0,     0,     0,     0,    49,     0,     0,    81,
-       2,     0,    50,     0,     0,    49,     0,    70,    71,    69,
-      72,    73,    76,    77,    78,    63,    64,    65,    66,    67,
-      68,    75,    58,     0,    94,   105,   101,   107,   113,    12,
-      17,    14,     0,     0,    16,    13,    26,   113,    82,    83,
-      51,     0,    44,    51,     0,    43,   121,   114,     0,    18,
-      15,     0,    50,     0,     0,    50,    50,    20,     0,   117,
-     117,    52,    53,     0,     0,    50,    49,    30,   115,     0,
-      51,    51,     0,    50,    51,     0,    51,     0,    48,    49,
-      50,    38,     0,   116,   109,   112,    23,    51,    50,    27,
-      50,    50,    40,    36,     0,     0,    37,    33,     0,    50,
-       0,     0,    35,     0,     0,    50,    49,    50,    49,     0,
-       0,     0,     0,    49,    31,     0,    32,     0,     0,    24,
-      28,    29,    50,    34,    50,    25,    41,    39
+       0,     0,     0,    92,    94,    96,     0,     0,     0,     0,
+       0,     0,     3,    62,    21,    11,    22,     0,     0,     0,
+      19,     8,    87,     7,     9,     4,    59,     0,    62,    61,
+     123,   123,    97,    89,   108,     0,    99,     0,   100,     0,
+     101,     0,   102,   104,   112,    84,    85,    86,     0,    45,
+       0,     0,     0,     0,   114,   115,    90,    91,    93,    95,
+      74,     0,    79,    80,     0,     1,     5,     6,     0,     0,
+       0,     0,    42,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   124,
+       0,   122,     0,   106,   110,     0,   107,     0,     0,     0,
+     103,    49,     0,    46,     0,     0,     0,     0,     0,     0,
+      49,     0,     0,    81,     2,     0,    50,     0,     0,    49,
+       0,    70,    71,    69,    72,    73,    76,    77,    78,    63,
+      64,    65,    66,    67,    68,    75,    58,     0,    98,   109,
+     105,   111,   117,    12,    17,    14,     0,     0,    16,    13,
+      26,   117,    82,    83,    51,     0,    44,    51,     0,    43,
+     125,   118,     0,    18,    15,     0,    50,     0,     0,    50,
+      50,    20,     0,   121,   121,    52,    53,     0,     0,    50,
+      49,    30,   119,     0,    51,    51,     0,    50,    51,     0,
+      51,     0,    48,    49,    50,    38,     0,   120,   113,   116,
+      23,    51,    50,    27,    50,    50,    40,    36,     0,     0,
+      37,    33,     0,    50,     0,     0,    35,     0,     0,    50,
+      49,    50,    49,     0,     0,     0,     0,    49,    31,     0,
+      32,     0,     0,    24,    28,    29,    50,    34,    50,    25,
+      41,    39
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    29,   191,    30,    46,    32,   192,    34,   237,   221,
-     222,   211,   223,    87,    35,    36,    37,   212,   247,   171,
-     182,    38,   187,    51,    40,    60,    61,    41,   117,   126,
-     178,   200,    42,   106
+      -1,    31,   195,    32,    48,    34,   196,    36,   241,   225,
+     226,   215,   227,    91,    37,    38,    39,   216,   251,   175,
+     186,    40,   191,    53,    42,    62,    63,    43,   121,   130,
+     182,   204,    44,   110
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -188
+#define YYPACT_NINF -192
 static const yytype_int16 yypact[] =
 {
-     192,   -51,  -188,  -188,   500,  -188,  -188,  -188,   668,  -188,
-      36,   743,  -188,    39,    47,    46,   500,   -13,    44,    48,
-      49,    50,   500,    55,   500,   500,   500,   500,   500,     4,
-    -188,     8,  -188,  -188,  -188,    -3,     6,   517,   646,  -188,
-    -188,  -188,  -188,  -188,     1,   500,  -188,   646,   500,   500,
-    -188,    -5,  -188,    58,  -188,    60,  -188,    45,  -188,    19,
-      18,  -188,  -188,  -188,  -188,   531,    59,  -188,   -33,   500,
-     -31,    41,  -188,  -188,   646,  -188,   284,   575,   284,   284,
-     597,  -188,  -188,   280,   517,   500,   517,    43,   624,   500,
-     500,   500,   500,   500,   500,   500,   500,   500,   500,   500,
-     500,   500,   500,   500,   531,   646,   -29,    11,    88,  -188,
-    -188,    92,  -188,    94,    95,    79,  -188,  -188,    96,  -188,
-     500,   500,   553,   500,   500,   500,  -188,   500,   500,  -188,
-    -188,    40,   646,    42,   101,    52,   500,   646,   646,   646,
-     646,   646,   646,   646,   646,   695,   695,   284,   284,   646,
-     646,   646,  -188,   500,  -188,  -188,  -188,  -188,    98,  -188,
-     646,   646,   500,   500,   646,   646,   646,    98,   646,   646,
-    -188,    -1,  -188,  -188,   459,   646,   646,  -188,   -56,   646,
-     646,   -56,   338,    76,   500,   338,  -188,  -188,   102,    54,
-      54,  -188,  -188,    97,   500,   646,    -6,    -8,  -188,   114,
-    -188,  -188,   100,   646,  -188,   106,  -188,   113,  -188,  -188,
-     113,  -188,   517,  -188,   338,   338,  -188,  -188,   338,  -188,
-     338,   113,   113,  -188,   517,   459,  -188,    90,    99,   338,
-     118,   119,  -188,   121,   104,  -188,  -188,  -188,  -188,   123,
-     108,   109,   120,   -10,  -188,   459,  -188,   401,   110,  -188,
-    -188,  -188,   338,  -188,  -188,  -188,  -188,  -188
+     196,   -57,  -192,  -192,   105,  -192,  -192,  -192,   695,  -192,
+      26,   147,  -192,    28,     5,    31,   105,    14,    70,    49,
+      56,    60,   105,     9,   105,   105,   105,   105,   105,   105,
+     105,     3,  -192,     4,  -192,  -192,  -192,    13,    43,   530,
+     226,  -192,  -192,  -192,  -192,  -192,    18,   105,  -192,   226,
+     105,   105,  -192,    35,  -192,    77,  -192,    96,  -192,    91,
+    -192,    29,    38,  -192,  -192,  -192,  -192,   544,   109,  -192,
+     -34,   105,   -32,    95,  -192,  -192,   226,  -192,   226,   226,
+       7,   597,     7,     7,   646,  -192,  -192,   302,   530,   105,
+     530,    97,   673,   105,   105,   105,   105,   105,   105,   105,
+     105,   105,   105,   105,   105,   105,   105,   105,   544,   226,
+     -61,    57,   120,  -192,  -192,   123,  -192,   124,   127,   112,
+    -192,  -192,   129,  -192,   105,   105,   575,   105,   105,   105,
+    -192,   105,   105,  -192,  -192,    73,   226,    74,   619,    78,
+     105,   226,   226,   226,   226,   226,   226,   226,   226,   722,
+     722,     7,     7,   226,   226,   226,  -192,   105,  -192,  -192,
+    -192,  -192,   132,  -192,   226,   226,   105,   105,   226,   226,
+     226,   132,   226,   226,  -192,     1,  -192,  -192,   487,   226,
+     226,  -192,   -23,   226,   226,   -23,   362,   113,   105,   362,
+    -192,  -192,   135,    80,    80,  -192,  -192,   134,   105,   226,
+      -9,    -6,  -192,   139,  -192,  -192,   122,   226,  -192,   137,
+    -192,   140,  -192,  -192,   140,  -192,   530,  -192,   362,   362,
+    -192,  -192,   362,  -192,   362,   140,   140,  -192,   530,   487,
+    -192,   117,   126,   362,   148,   150,  -192,   153,   138,  -192,
+    -192,  -192,  -192,   155,   146,   158,   159,   -10,  -192,   487,
+    -192,   427,   149,  -192,  -192,  -192,   362,  -192,  -192,  -192,
+    -192,  -192
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -188,  -188,   -27,    67,     7,  -164,     0,  -188,  -188,  -188,
-     -41,  -185,   -61,   -81,  -188,  -188,  -188,  -187,    -7,    51,
-    -158,     2,    23,  -188,  -188,  -188,   112,  -188,  -188,  -188,
-      12,   -24,  -188,   124
+    -192,  -192,   -29,   104,    25,  -173,     0,  -192,  -192,  -192,
+      -3,  -191,   -33,   -81,  -192,  -192,  -192,  -163,    -7,    69,
+    -166,     2,    33,  -192,  -192,  -192,   133,  -192,  -192,  -192,
+      23,     8,  -192,   152
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -794,168 +802,172 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -60
 static const yytype_int16 yytable[] =
 {
-      33,    49,    83,   131,    81,   133,    47,    31,   -10,   120,
-     186,   123,   -51,   -51,   208,   185,    82,   205,    65,   183,
-     224,    43,   188,    39,    74,   226,    76,    77,    78,    79,
-      80,    66,    67,   121,   224,   124,   112,   226,   209,    88,
-     206,   184,   214,   215,   113,   152,   218,   104,   220,   153,
-     105,   105,    55,   114,    57,    50,    68,    69,    62,   229,
-     115,   235,   -51,    70,    63,    64,    75,    71,    72,    73,
-      84,   122,    85,   108,    48,   109,    82,   110,   119,   111,
-     -10,   253,   125,    33,   135,   252,    88,   132,   134,   153,
-      31,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,    39,   154,   173,   155,
-     158,   156,   157,   114,   170,   159,   172,   177,   194,   167,
-     202,   198,   160,   161,    82,   164,   165,   166,   174,   168,
-     169,   228,   199,   213,   219,   208,   236,   250,   175,   216,
-     238,   240,   241,   234,   242,   243,   248,   249,   251,   255,
-     130,   189,    89,    90,   190,   176,   210,    91,    92,    93,
-     232,    94,    95,    96,   179,   180,   201,   136,    97,    98,
-      99,   100,   116,   107,     0,   129,   101,   102,   103,   181,
-       0,     0,     0,     0,     0,     0,   195,     0,     0,   207,
-       0,     0,    -6,     1,     0,     0,   203,     0,     0,     0,
-       0,     0,   225,     2,     3,     4,     5,     0,     6,     7,
-       0,     8,     0,     0,    88,     0,     9,     0,    10,    11,
-      12,     0,     0,    13,    14,    15,    88,     0,     0,   245,
-      16,    17,    18,   193,     0,    19,   196,   197,     0,    20,
-      21,    22,    23,     0,     0,     0,   204,   254,     0,     0,
-       0,    24,     0,     0,   217,    25,     0,     0,     0,    26,
-      27,   227,     0,     0,    -6,    28,     0,     0,     0,   230,
-       0,   231,   233,     0,     0,     0,     0,     0,     0,     0,
-     239,     0,     0,     0,     0,     0,   244,     0,   246,     0,
-       0,     2,     3,     4,     5,     0,     6,     7,     0,     8,
-       0,     0,     0,   256,     9,   257,    10,    11,    12,     0,
-       0,    13,    14,    15,     0,     0,     0,     0,    16,    17,
-      18,     0,     0,    19,     0,     0,     0,    20,    21,    22,
-      23,     0,     0,     0,     0,    89,    90,     0,     0,    24,
-      91,    92,    93,    25,    94,    95,    96,    26,    27,     2,
-       3,     4,     5,    28,     6,     7,     0,    44,     0,   101,
-     102,   103,     9,     0,    10,    11,    12,     0,     0,     0,
-      14,    15,     0,     0,     0,     0,    16,    17,    18,     0,
-       0,    19,     0,     0,     0,     0,     0,    22,    23,     0,
-       0,     0,     0,     0,     0,     0,     0,    24,     0,     0,
-       0,    25,     0,     0,     0,    26,    27,     0,     0,     0,
-      82,    28,     2,     3,     4,     5,     0,     6,     7,     0,
-      44,     0,     0,     0,     0,     9,     0,    10,    11,    12,
-       0,     0,     0,    14,    15,     0,     0,     0,     0,    16,
-      17,    18,     0,     0,    19,     0,     0,     0,     0,     0,
-      22,    23,     0,     0,     0,     0,     0,     0,     0,     0,
-      24,     0,     0,     0,    25,     0,     0,     0,    26,    27,
-       2,     3,     4,     5,    28,     6,     7,     0,    44,     0,
-       0,     0,     0,     9,     0,    10,    11,     0,     0,     0,
-       0,    14,    15,     0,     0,     0,     0,    16,     0,    18,
-       0,     0,     0,     0,     0,     0,     0,     0,    22,    23,
-       0,     2,     3,     4,     5,     0,     6,     7,    24,    44,
-       0,     0,    25,     0,     0,     0,    26,    27,     2,     3,
-       4,     5,    28,     6,     7,     0,    44,     0,    45,     0,
-      18,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    45,     0,    18,     0,    24,
-     118,     0,     0,    25,     0,     0,     0,    26,    27,     0,
-       0,     0,     0,    28,     0,     0,    24,     0,     0,     0,
-      25,     0,    89,    90,    26,    27,     0,    91,    92,    93,
-      86,    94,    95,    96,     0,   162,     0,     0,    97,    98,
-      99,   100,     0,     0,    89,    90,   101,   102,   103,    91,
-      92,    93,     0,    94,    95,    96,     0,     0,     0,   163,
-      97,    98,    99,   100,     0,     0,    89,    90,   101,   102,
-     103,    91,    92,    93,     0,    94,    95,    96,     0,   127,
-     128,     0,    97,    98,    99,   100,     0,     0,    89,    90,
-     101,   102,   103,    91,    92,    93,     0,    94,    95,    96,
-       0,     0,     0,     0,    97,    98,    99,   100,     0,     0,
-       0,   129,   101,   102,   103,    89,    90,     0,     0,     0,
-      91,    92,    93,     0,    94,    95,    96,     0,     0,     0,
-     136,    97,    98,    99,   100,     0,     0,    89,    90,   101,
-     102,   103,    91,    92,    93,     0,    94,    95,    96,     0,
-       0,     0,     0,    97,    98,    99,   100,     0,     0,   -59,
-     -59,   101,   102,   103,   -59,   -59,   -59,     0,   -59,   -59,
-     -59,     0,     0,     0,     0,     0,     0,   -59,   -59,     0,
-       0,    48,     0,   -59,   -59,   -59,    89,    90,     0,     0,
-       0,    91,    92,    93,     0,    94,    95,    96,     0,     0,
-      52,     0,     0,     0,    99,   100,     0,     0,    53,     0,
-     101,   102,   103,    54,     0,     0,     0,    55,    56,    57,
-      58,     0,     0,     0,     0,    59
+      35,    51,    87,    85,   -10,   190,    49,   135,   124,   137,
+     127,   189,   -51,   -51,   209,   156,   212,    45,    67,   157,
+      77,   187,    65,   230,    76,    33,    78,    79,    80,    81,
+      82,    83,    84,    41,   125,   230,   128,   210,   218,   219,
+     213,    92,   222,   188,   224,    52,   116,    64,   228,   108,
+      66,    86,   109,   109,   117,   233,   239,   192,    68,    69,
+      93,    94,   228,   118,   -51,    95,    96,    97,    73,    98,
+      99,   100,    57,   126,    59,    74,   257,    86,   -10,    75,
+     119,   256,    70,    71,   105,   106,   107,    35,    88,    72,
+      92,   136,   138,    50,   113,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     177,    89,    33,   114,   162,   112,     2,     3,     4,     5,
+      41,     6,     7,   171,    46,   115,   164,   165,   123,   168,
+     169,   170,   178,   172,   173,   232,   129,   157,   139,   158,
+     159,   160,   179,    47,   161,    18,   118,   238,   163,   174,
+     176,   181,    86,   193,   202,   198,   194,   206,   217,   180,
+     203,   220,   212,   240,    54,   223,    26,   242,   183,   184,
+      27,   244,    55,   245,    28,    29,   246,    56,   252,   247,
+      30,    57,    58,    59,    60,   253,   254,   255,   259,    61,
+     199,   134,   236,   211,   185,   120,    -6,     1,   214,     0,
+     207,     0,   205,   111,     0,     0,   229,     2,     3,     4,
+       5,     0,     6,     7,     0,     8,     0,     0,    92,     0,
+       9,     0,    10,    11,    12,     0,     0,    13,    14,    15,
+      92,     0,     0,   249,    16,    17,    18,     0,     0,    19,
+       0,     0,     0,    20,    21,    22,    23,    24,    25,     0,
+       0,   258,     0,     0,     0,   197,     0,    26,   200,   201,
+       0,    27,     0,     0,     0,    28,    29,     0,   208,     0,
+      -6,    30,     0,     0,     0,     0,   221,     0,     0,    93,
+      94,     0,     0,   231,    95,    96,    97,     0,    98,    99,
+     100,   234,     0,   235,   237,   101,   102,   103,   104,     0,
+       0,     0,   243,   105,   106,   107,     0,     0,   248,     0,
+     250,     0,     0,     2,     3,     4,     5,     0,     6,     7,
+       0,     8,     0,     0,     0,   260,     9,   261,    10,    11,
+      12,     0,     0,    13,    14,    15,     0,     0,     0,     0,
+      16,    17,    18,     0,     0,    19,     0,     0,     0,    20,
+      21,    22,    23,    24,    25,     0,     0,     0,     0,     0,
+       0,     0,     0,    26,     0,     0,     0,    27,     0,     0,
+       0,    28,    29,     2,     3,     4,     5,    30,     6,     7,
+       0,    46,     0,     0,     0,     0,     9,     0,    10,    11,
+      12,     0,     0,     0,    14,    15,     0,     0,     0,     0,
+      16,    17,    18,     0,     0,    19,     0,     0,     0,     0,
+       0,    22,    23,    24,    25,     0,     0,     0,     0,     0,
+       0,     0,     0,    26,     0,     0,     0,    27,     0,     0,
+       0,    28,    29,     0,     0,     0,    86,    30,     2,     3,
+       4,     5,     0,     6,     7,     0,    46,     0,     0,     0,
+       0,     9,     0,    10,    11,    12,     0,     0,     0,    14,
+      15,     0,     0,     0,     0,    16,    17,    18,     0,     0,
+      19,     0,     0,     0,     0,     0,    22,    23,    24,    25,
+       0,     0,     0,     0,     0,     0,     0,     0,    26,     0,
+       0,     0,    27,     0,     0,     0,    28,    29,     2,     3,
+       4,     5,    30,     6,     7,     0,    46,     0,     0,     0,
+       0,     9,     0,    10,    11,     0,     0,     0,     0,    14,
+      15,     0,     0,     0,     0,    16,     0,    18,     0,     0,
+       0,     0,     0,     0,     0,     0,    22,    23,    24,    25,
+       0,     2,     3,     4,     5,     0,     6,     7,    26,    46,
+       0,     0,    27,     0,     0,     0,    28,    29,     0,     0,
+       0,     0,    30,     0,     0,     0,     0,     0,    47,     0,
+      18,     0,     0,   122,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    26,     0,     0,     0,    27,     0,    93,    94,    28,
+      29,     0,    95,    96,    97,    90,    98,    99,   100,     0,
+       0,     0,     0,   101,   102,   103,   104,   166,     0,     0,
+       0,   105,   106,   107,     0,     0,     0,     0,    93,    94,
+       0,     0,     0,    95,    96,    97,     0,    98,    99,   100,
+       0,     0,     0,   167,   101,   102,   103,   104,     0,     0,
+      93,    94,   105,   106,   107,    95,    96,    97,     0,    98,
+      99,   100,     0,   131,   132,     0,   101,   102,   103,   104,
+       0,     0,    93,    94,   105,   106,   107,    95,    96,    97,
+       0,    98,    99,   100,     0,     0,     0,   140,   101,   102,
+     103,   104,     0,     0,     0,   133,   105,   106,   107,    93,
+      94,     0,     0,     0,    95,    96,    97,     0,    98,    99,
+     100,     0,     0,     0,     0,   101,   102,   103,   104,     0,
+       0,     0,   133,   105,   106,   107,    93,    94,     0,     0,
+       0,    95,    96,    97,     0,    98,    99,   100,     0,     0,
+       0,   140,   101,   102,   103,   104,     0,     0,   -59,   -59,
+     105,   106,   107,   -59,   -59,   -59,     0,   -59,   -59,   -59,
+       0,     0,     0,     0,     0,     0,   -59,   -59,     0,     0,
+      50,     0,   -59,   -59,   -59,    93,    94,     0,     0,     0,
+      95,    96,    97,     0,    98,    99,   100,     0,     0,     0,
+       0,     0,     0,   103,   104,     0,     0,     0,     0,   105,
+     106,   107
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,     8,    29,    84,     0,    86,     4,     0,     0,    42,
-     174,    42,    22,    23,    22,   173,    72,    23,    16,    20,
-     207,    72,    78,     0,    22,   210,    24,    25,    26,    27,
-      28,    44,    45,    66,   221,    66,    17,   222,    46,    37,
-      46,    42,   200,   201,    25,    74,   204,    45,   206,    78,
-      48,    49,    34,    34,    36,    19,    12,    13,    19,   217,
-      42,   225,    72,    19,    17,    19,    11,    19,    19,    19,
-      73,    69,    66,    78,    73,    17,    72,    17,    19,    34,
-      72,   245,    41,    83,    41,   243,    84,    85,    86,    78,
-      83,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,    83,    19,   135,    17,
-     117,    17,    17,    34,    74,    19,    74,    19,    42,   126,
-      23,    19,   120,   121,    72,   123,   124,   125,   135,   127,
-     128,   212,    78,    19,    28,    22,    46,    28,   136,    39,
-      41,    23,    23,   224,    23,    41,    23,    39,    28,    39,
-      83,   178,    51,    52,   181,   153,   197,    56,    57,    58,
-     221,    60,    61,    62,   162,   163,   190,    66,    67,    68,
-      69,    70,    60,    49,    -1,    74,    75,    76,    77,   167,
-      -1,    -1,    -1,    -1,    -1,    -1,   184,    -1,    -1,   196,
-      -1,    -1,     0,     1,    -1,    -1,   194,    -1,    -1,    -1,
-      -1,    -1,   209,    11,    12,    13,    14,    -1,    16,    17,
-      -1,    19,    -1,    -1,   212,    -1,    24,    -1,    26,    27,
-      28,    -1,    -1,    31,    32,    33,   224,    -1,    -1,   236,
-      38,    39,    40,   182,    -1,    43,   185,   186,    -1,    47,
-      48,    49,    50,    -1,    -1,    -1,   195,   247,    -1,    -1,
-      -1,    59,    -1,    -1,   203,    63,    -1,    -1,    -1,    67,
-      68,   210,    -1,    -1,    72,    73,    -1,    -1,    -1,   218,
-      -1,   220,   221,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     229,    -1,    -1,    -1,    -1,    -1,   235,    -1,   237,    -1,
-      -1,    11,    12,    13,    14,    -1,    16,    17,    -1,    19,
-      -1,    -1,    -1,   252,    24,   254,    26,    27,    28,    -1,
-      -1,    31,    32,    33,    -1,    -1,    -1,    -1,    38,    39,
-      40,    -1,    -1,    43,    -1,    -1,    -1,    47,    48,    49,
-      50,    -1,    -1,    -1,    -1,    51,    52,    -1,    -1,    59,
-      56,    57,    58,    63,    60,    61,    62,    67,    68,    11,
-      12,    13,    14,    73,    16,    17,    -1,    19,    -1,    75,
-      76,    77,    24,    -1,    26,    27,    28,    -1,    -1,    -1,
-      32,    33,    -1,    -1,    -1,    -1,    38,    39,    40,    -1,
-      -1,    43,    -1,    -1,    -1,    -1,    -1,    49,    50,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,    -1,    -1,
-      -1,    63,    -1,    -1,    -1,    67,    68,    -1,    -1,    -1,
-      72,    73,    11,    12,    13,    14,    -1,    16,    17,    -1,
-      19,    -1,    -1,    -1,    -1,    24,    -1,    26,    27,    28,
-      -1,    -1,    -1,    32,    33,    -1,    -1,    -1,    -1,    38,
-      39,    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    -1,
-      49,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      59,    -1,    -1,    -1,    63,    -1,    -1,    -1,    67,    68,
-      11,    12,    13,    14,    73,    16,    17,    -1,    19,    -1,
-      -1,    -1,    -1,    24,    -1,    26,    27,    -1,    -1,    -1,
-      -1,    32,    33,    -1,    -1,    -1,    -1,    38,    -1,    40,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    50,
-      -1,    11,    12,    13,    14,    -1,    16,    17,    59,    19,
-      -1,    -1,    63,    -1,    -1,    -1,    67,    68,    11,    12,
-      13,    14,    73,    16,    17,    -1,    19,    -1,    38,    -1,
-      40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    38,    -1,    40,    -1,    59,
-      29,    -1,    -1,    63,    -1,    -1,    -1,    67,    68,    -1,
-      -1,    -1,    -1,    73,    -1,    -1,    59,    -1,    -1,    -1,
-      63,    -1,    51,    52,    67,    68,    -1,    56,    57,    58,
-      73,    60,    61,    62,    -1,    42,    -1,    -1,    67,    68,
-      69,    70,    -1,    -1,    51,    52,    75,    76,    77,    56,
-      57,    58,    -1,    60,    61,    62,    -1,    -1,    -1,    66,
-      67,    68,    69,    70,    -1,    -1,    51,    52,    75,    76,
-      77,    56,    57,    58,    -1,    60,    61,    62,    -1,    64,
-      65,    -1,    67,    68,    69,    70,    -1,    -1,    51,    52,
-      75,    76,    77,    56,    57,    58,    -1,    60,    61,    62,
-      -1,    -1,    -1,    -1,    67,    68,    69,    70,    -1,    -1,
-      -1,    74,    75,    76,    77,    51,    52,    -1,    -1,    -1,
-      56,    57,    58,    -1,    60,    61,    62,    -1,    -1,    -1,
-      66,    67,    68,    69,    70,    -1,    -1,    51,    52,    75,
-      76,    77,    56,    57,    58,    -1,    60,    61,    62,    -1,
-      -1,    -1,    -1,    67,    68,    69,    70,    -1,    -1,    51,
-      52,    75,    76,    77,    56,    57,    58,    -1,    60,    61,
-      62,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    -1,
-      -1,    73,    -1,    75,    76,    77,    51,    52,    -1,    -1,
-      -1,    56,    57,    58,    -1,    60,    61,    62,    -1,    -1,
-      17,    -1,    -1,    -1,    69,    70,    -1,    -1,    25,    -1,
-      75,    76,    77,    30,    -1,    -1,    -1,    34,    35,    36,
-      37,    -1,    -1,    -1,    -1,    42
+       0,     8,    31,     0,     0,   178,     4,    88,    42,    90,
+      42,   177,    22,    23,    23,    76,    22,    74,    16,    80,
+      11,    20,    17,   214,    22,     0,    24,    25,    26,    27,
+      28,    29,    30,     0,    68,   226,    68,    46,   204,   205,
+      46,    39,   208,    42,   210,    19,    17,    19,   211,    47,
+      19,    74,    50,    51,    25,   221,   229,    80,    44,    45,
+      53,    54,   225,    34,    74,    58,    59,    60,    19,    62,
+      63,    64,    34,    71,    36,    19,   249,    74,    74,    19,
+      42,   247,    12,    13,    77,    78,    79,    87,    75,    19,
+      88,    89,    90,    75,    17,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     139,    68,    87,    17,   121,    80,    11,    12,    13,    14,
+      87,    16,    17,   130,    19,    34,   124,   125,    19,   127,
+     128,   129,   139,   131,   132,   216,    41,    80,    41,    19,
+      17,    17,   140,    38,    17,    40,    34,   228,    19,    76,
+      76,    19,    74,   182,    19,    42,   185,    23,    19,   157,
+      80,    39,    22,    46,    17,    28,    61,    41,   166,   167,
+      65,    23,    25,    23,    69,    70,    23,    30,    23,    41,
+      75,    34,    35,    36,    37,    39,    28,    28,    39,    42,
+     188,    87,   225,   200,   171,    62,     0,     1,   201,    -1,
+     198,    -1,   194,    51,    -1,    -1,   213,    11,    12,    13,
+      14,    -1,    16,    17,    -1,    19,    -1,    -1,   216,    -1,
+      24,    -1,    26,    27,    28,    -1,    -1,    31,    32,    33,
+     228,    -1,    -1,   240,    38,    39,    40,    -1,    -1,    43,
+      -1,    -1,    -1,    47,    48,    49,    50,    51,    52,    -1,
+      -1,   251,    -1,    -1,    -1,   186,    -1,    61,   189,   190,
+      -1,    65,    -1,    -1,    -1,    69,    70,    -1,   199,    -1,
+      74,    75,    -1,    -1,    -1,    -1,   207,    -1,    -1,    53,
+      54,    -1,    -1,   214,    58,    59,    60,    -1,    62,    63,
+      64,   222,    -1,   224,   225,    69,    70,    71,    72,    -1,
+      -1,    -1,   233,    77,    78,    79,    -1,    -1,   239,    -1,
+     241,    -1,    -1,    11,    12,    13,    14,    -1,    16,    17,
+      -1,    19,    -1,    -1,    -1,   256,    24,   258,    26,    27,
+      28,    -1,    -1,    31,    32,    33,    -1,    -1,    -1,    -1,
+      38,    39,    40,    -1,    -1,    43,    -1,    -1,    -1,    47,
+      48,    49,    50,    51,    52,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    61,    -1,    -1,    -1,    65,    -1,    -1,
+      -1,    69,    70,    11,    12,    13,    14,    75,    16,    17,
+      -1,    19,    -1,    -1,    -1,    -1,    24,    -1,    26,    27,
+      28,    -1,    -1,    -1,    32,    33,    -1,    -1,    -1,    -1,
+      38,    39,    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,
+      -1,    49,    50,    51,    52,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    61,    -1,    -1,    -1,    65,    -1,    -1,
+      -1,    69,    70,    -1,    -1,    -1,    74,    75,    11,    12,
+      13,    14,    -1,    16,    17,    -1,    19,    -1,    -1,    -1,
+      -1,    24,    -1,    26,    27,    28,    -1,    -1,    -1,    32,
+      33,    -1,    -1,    -1,    -1,    38,    39,    40,    -1,    -1,
+      43,    -1,    -1,    -1,    -1,    -1,    49,    50,    51,    52,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,    -1,
+      -1,    -1,    65,    -1,    -1,    -1,    69,    70,    11,    12,
+      13,    14,    75,    16,    17,    -1,    19,    -1,    -1,    -1,
+      -1,    24,    -1,    26,    27,    -1,    -1,    -1,    -1,    32,
+      33,    -1,    -1,    -1,    -1,    38,    -1,    40,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    49,    50,    51,    52,
+      -1,    11,    12,    13,    14,    -1,    16,    17,    61,    19,
+      -1,    -1,    65,    -1,    -1,    -1,    69,    70,    -1,    -1,
+      -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,    38,    -1,
+      40,    -1,    -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    61,    -1,    -1,    -1,    65,    -1,    53,    54,    69,
+      70,    -1,    58,    59,    60,    75,    62,    63,    64,    -1,
+      -1,    -1,    -1,    69,    70,    71,    72,    42,    -1,    -1,
+      -1,    77,    78,    79,    -1,    -1,    -1,    -1,    53,    54,
+      -1,    -1,    -1,    58,    59,    60,    -1,    62,    63,    64,
+      -1,    -1,    -1,    68,    69,    70,    71,    72,    -1,    -1,
+      53,    54,    77,    78,    79,    58,    59,    60,    -1,    62,
+      63,    64,    -1,    66,    67,    -1,    69,    70,    71,    72,
+      -1,    -1,    53,    54,    77,    78,    79,    58,    59,    60,
+      -1,    62,    63,    64,    -1,    -1,    -1,    68,    69,    70,
+      71,    72,    -1,    -1,    -1,    76,    77,    78,    79,    53,
+      54,    -1,    -1,    -1,    58,    59,    60,    -1,    62,    63,
+      64,    -1,    -1,    -1,    -1,    69,    70,    71,    72,    -1,
+      -1,    -1,    76,    77,    78,    79,    53,    54,    -1,    -1,
+      -1,    58,    59,    60,    -1,    62,    63,    64,    -1,    -1,
+      -1,    68,    69,    70,    71,    72,    -1,    -1,    53,    54,
+      77,    78,    79,    58,    59,    60,    -1,    62,    63,    64,
+      -1,    -1,    -1,    -1,    -1,    -1,    71,    72,    -1,    -1,
+      75,    -1,    77,    78,    79,    53,    54,    -1,    -1,    -1,
+      58,    59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,
+      -1,    -1,    -1,    71,    72,    -1,    -1,    -1,    -1,    77,
+      78,    79
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -964,30 +976,31 @@ static const yytype_uint8 yystos[] =
 {
        0,     1,    11,    12,    13,    14,    16,    17,    19,    24,
       26,    27,    28,    31,    32,    33,    38,    39,    40,    43,
-      47,    48,    49,    50,    59,    63,    67,    68,    73,    80,
-      82,    83,    84,    85,    86,    93,    94,    95,   100,   101,
-     103,   106,   111,    72,    19,    38,    83,   100,    73,    97,
-      19,   102,    17,    25,    30,    34,    35,    36,    37,    42,
-     104,   105,    19,    17,    19,   100,    44,    45,    12,    13,
-      19,    19,    19,    19,   100,    11,   100,   100,   100,   100,
-     100,     0,    72,    81,    73,    66,    73,    92,   100,    51,
-      52,    56,    57,    58,    60,    61,    62,    67,    68,    69,
-      70,    75,    76,    77,   100,   100,   112,   112,    78,    17,
-      17,    34,    17,    25,    34,    42,   105,   107,    29,    19,
-      42,    66,   100,    42,    66,    41,   108,    64,    65,    74,
-      82,    92,   100,    92,   100,    41,    66,   100,   100,   100,
-     100,   100,   100,   100,   100,   100,   100,   100,   100,   100,
-     100,   100,    74,    78,    19,    17,    17,    17,    97,    19,
-     100,   100,    42,    66,   100,   100,   100,    97,   100,   100,
-      74,    98,    74,    81,    97,   100,   100,    19,   109,   100,
-     100,   109,    99,    20,    42,    99,    84,   101,    78,    81,
-      81,    81,    85,    98,    42,   100,    98,    98,    19,    78,
-     110,   110,    23,   100,    98,    23,    46,    97,    22,    46,
-      89,    90,    96,    19,    99,    99,    39,    98,    99,    28,
-      99,    88,    89,    91,    96,    97,    90,    98,    92,    99,
-      98,    98,    91,    98,    92,    84,    46,    87,    41,    98,
-      23,    23,    23,    41,    98,    97,    98,    97,    23,    39,
-      28,    28,    99,    84,    85,    39,    98,    98
+      47,    48,    49,    50,    51,    52,    61,    65,    69,    70,
+      75,    82,    84,    85,    86,    87,    88,    95,    96,    97,
+     102,   103,   105,   108,   113,    74,    19,    38,    85,   102,
+      75,    99,    19,   104,    17,    25,    30,    34,    35,    36,
+      37,    42,   106,   107,    19,    17,    19,   102,    44,    45,
+      12,    13,    19,    19,    19,    19,   102,    11,   102,   102,
+     102,   102,   102,   102,   102,     0,    74,    83,    75,    68,
+      75,    94,   102,    53,    54,    58,    59,    60,    62,    63,
+      64,    69,    70,    71,    72,    77,    78,    79,   102,   102,
+     114,   114,    80,    17,    17,    34,    17,    25,    34,    42,
+     107,   109,    29,    19,    42,    68,   102,    42,    68,    41,
+     110,    66,    67,    76,    84,    94,   102,    94,   102,    41,
+      68,   102,   102,   102,   102,   102,   102,   102,   102,   102,
+     102,   102,   102,   102,   102,   102,    76,    80,    19,    17,
+      17,    17,    99,    19,   102,   102,    42,    68,   102,   102,
+     102,    99,   102,   102,    76,   100,    76,    83,    99,   102,
+     102,    19,   111,   102,   102,   111,   101,    20,    42,   101,
+      86,   103,    80,    83,    83,    83,    87,   100,    42,   102,
+     100,   100,    19,    80,   112,   112,    23,   102,   100,    23,
+      46,    99,    22,    46,    91,    92,    98,    19,   101,   101,
+      39,   100,   101,    28,   101,    90,    91,    93,    98,    99,
+      92,   100,    94,   101,   100,   100,    93,   100,    94,    86,
+      46,    89,    41,   100,    23,    23,    23,    41,   100,    99,
+     100,    99,    23,    39,    28,    28,   101,    86,    87,    39,
+     100,   100
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2337,32 +2350,62 @@ yyreduce:
     break;
 
   case 93:
-#line 426 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
+#line 424 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_closeResFile); ;}
     break;
 
   case 94:
-#line 427 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
+#line 425 "engines/director/lingo/lingo-gr.y"
+    {
+		g_lingo->code1(g_lingo->c_constpush);
+		inst i = 0;
+		WRITE_UINT32(&i, 0);
+		g_lingo->code1(i);
+		g_lingo->code1(g_lingo->c_closeResFile); ;}
     break;
 
   case 95:
-#line 438 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoloop); ;}
+#line 431 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_closeXlib); ;}
     break;
 
   case 96:
-#line 439 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotonext); ;}
+#line 432 "engines/director/lingo/lingo-gr.y"
+    {
+		g_lingo->code1(g_lingo->c_constpush);
+		inst i = 0;
+		WRITE_UINT32(&i, 0);
+		g_lingo->code1(i);
+		g_lingo->code1(g_lingo->c_closeXlib); ;}
     break;
 
   case 97:
 #line 440 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 98:
 #line 441 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
+    break;
+
+  case 99:
+#line 452 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotoloop); ;}
+    break;
+
+  case 100:
+#line 453 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotonext); ;}
+    break;
+
+  case 101:
+#line 454 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+    break;
+
+  case 102:
+#line 455 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_goto);
 		g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str());
@@ -2370,8 +2413,8 @@ yyreduce:
 		delete (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 99:
-#line 446 "engines/director/lingo/lingo-gr.y"
+  case 103:
+#line 460 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_goto);
 		g_lingo->codeString((yyvsp[(2) - (3)].s)->c_str());
@@ -2380,8 +2423,8 @@ yyreduce:
 		delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 100:
-#line 452 "engines/director/lingo/lingo-gr.y"
+  case 104:
+#line 466 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_goto);
 		g_lingo->codeString("");
@@ -2389,48 +2432,48 @@ yyreduce:
 		delete (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 101:
-#line 459 "engines/director/lingo/lingo-gr.y"
+  case 105:
+#line 473 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 102:
-#line 460 "engines/director/lingo/lingo-gr.y"
+  case 106:
+#line 474 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 103:
-#line 461 "engines/director/lingo/lingo-gr.y"
+  case 107:
+#line 475 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 104:
-#line 462 "engines/director/lingo/lingo-gr.y"
+  case 108:
+#line 476 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 105:
-#line 465 "engines/director/lingo/lingo-gr.y"
+  case 109:
+#line 479 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 106:
-#line 466 "engines/director/lingo/lingo-gr.y"
+  case 110:
+#line 480 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 107:
-#line 467 "engines/director/lingo/lingo-gr.y"
+  case 111:
+#line 481 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 108:
-#line 495 "engines/director/lingo/lingo-gr.y"
+  case 112:
+#line 509 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 109:
-#line 496 "engines/director/lingo/lingo-gr.y"
+  case 113:
+#line 510 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
@@ -2438,20 +2481,20 @@ yyreduce:
 			g_lingo->_indef = false; ;}
     break;
 
-  case 110:
-#line 501 "engines/director/lingo/lingo-gr.y"
+  case 114:
+#line 515 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeFactory(*(yyvsp[(2) - (2)].s));
 		;}
     break;
 
-  case 111:
-#line 504 "engines/director/lingo/lingo-gr.y"
+  case 115:
+#line 518 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; ;}
     break;
 
-  case 112:
-#line 505 "engines/director/lingo/lingo-gr.y"
+  case 116:
+#line 519 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
@@ -2459,33 +2502,33 @@ yyreduce:
 			g_lingo->_indef = false; ;}
     break;
 
-  case 113:
-#line 510 "engines/director/lingo/lingo-gr.y"
+  case 117:
+#line 524 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 114:
-#line 511 "engines/director/lingo/lingo-gr.y"
+  case 118:
+#line 525 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
     break;
 
-  case 115:
-#line 512 "engines/director/lingo/lingo-gr.y"
+  case 119:
+#line 526 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 116:
-#line 513 "engines/director/lingo/lingo-gr.y"
+  case 120:
+#line 527 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
-  case 117:
-#line 515 "engines/director/lingo/lingo-gr.y"
+  case 121:
+#line 529 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArgStore(); ;}
     break;
 
-  case 118:
-#line 519 "engines/director/lingo/lingo-gr.y"
+  case 122:
+#line 533 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_call);
 		g_lingo->codeString((yyvsp[(1) - (3)].s)->c_str());
@@ -2494,24 +2537,24 @@ yyreduce:
 		g_lingo->code1(numpar); ;}
     break;
 
-  case 119:
-#line 527 "engines/director/lingo/lingo-gr.y"
+  case 123:
+#line 541 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 120:
-#line 528 "engines/director/lingo/lingo-gr.y"
+  case 124:
+#line 542 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 121:
-#line 529 "engines/director/lingo/lingo-gr.y"
+  case 125:
+#line 543 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 2515 "engines/director/lingo/lingo-gr.cpp"
+#line 2558 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2725,6 +2768,6 @@ yyreturn:
 }
 
 
-#line 532 "engines/director/lingo/lingo-gr.y"
+#line 546 "engines/director/lingo/lingo-gr.y"
 
 
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index bca98cb..539db63 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -87,21 +87,23 @@
      tMETHOD = 303,
      tALERT = 304,
      tBEEP = 305,
-     tGE = 306,
-     tLE = 307,
-     tGT = 308,
-     tLT = 309,
-     tEQ = 310,
-     tNEQ = 311,
-     tAND = 312,
-     tOR = 313,
-     tNOT = 314,
-     tCONCAT = 315,
-     tCONTAINS = 316,
-     tSTARTS = 317,
-     tSPRITE = 318,
-     tINTERSECTS = 319,
-     tWITHIN = 320
+     tCLOSERESFILE = 306,
+     tCLOSEXLIB = 307,
+     tGE = 308,
+     tLE = 309,
+     tGT = 310,
+     tLT = 311,
+     tEQ = 312,
+     tNEQ = 313,
+     tAND = 314,
+     tOR = 315,
+     tNOT = 316,
+     tCONCAT = 317,
+     tCONTAINS = 318,
+     tSTARTS = 319,
+     tSPRITE = 320,
+     tINTERSECTS = 321,
+     tWITHIN = 322
    };
 #endif
 /* Tokens.  */
@@ -153,21 +155,23 @@
 #define tMETHOD 303
 #define tALERT 304
 #define tBEEP 305
-#define tGE 306
-#define tLE 307
-#define tGT 308
-#define tLT 309
-#define tEQ 310
-#define tNEQ 311
-#define tAND 312
-#define tOR 313
-#define tNOT 314
-#define tCONCAT 315
-#define tCONTAINS 316
-#define tSTARTS 317
-#define tSPRITE 318
-#define tINTERSECTS 319
-#define tWITHIN 320
+#define tCLOSERESFILE 306
+#define tCLOSEXLIB 307
+#define tGE 308
+#define tLE 309
+#define tGT 310
+#define tLT 311
+#define tEQ 312
+#define tNEQ 313
+#define tAND 314
+#define tOR 315
+#define tNOT 316
+#define tCONCAT 317
+#define tCONTAINS 318
+#define tSTARTS 319
+#define tSPRITE 320
+#define tINTERSECTS 321
+#define tWITHIN 322
 
 
 
@@ -185,7 +189,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 1529 of yacc.c.  */
-#line 189 "engines/director/lingo/lingo-gr.hpp"
+#line 193 "engines/director/lingo/lingo-gr.hpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index d8b7519..a85644f 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -85,7 +85,7 @@ void yyerror(char *s) {
 %token<s> ID
 %token tDOWN tELSE tNLELSIF tEND tEXIT tFRAME tGLOBAL tGO tIF tINTO tLOOP tMACRO
 %token tMCI tMCIWAIT tMOVIE tNEXT tOF tPREVIOUS tPUT tREPEAT tSET tTHEN tTO tWHEN
-%token tWITH tWHILE tNLELSE tFACTORY tMETHOD tALERT tBEEP
+%token tWITH tWHILE tNLELSE tFACTORY tMETHOD tALERT tBEEP tCLOSERESFILE tCLOSEXLIB
 %token tGE tLE tGT tLT tEQ tNEQ tAND tOR tNOT
 %token tCONCAT tCONTAINS tSTARTS
 %token tSPRITE tINTERSECTS tWITHIN
@@ -421,6 +421,20 @@ func: tMCI vSTRING			{ g_lingo->code1(g_lingo->c_mci); g_lingo->codeString($2->c
 		WRITE_UINT32(&i, 0);
 		g_lingo->code1(i);
 		g_lingo->code1(g_lingo->c_beep); }
+	| tCLOSERESFILE expr	{ g_lingo->code1(g_lingo->c_closeResFile); }
+	| tCLOSERESFILE 		{
+		g_lingo->code1(g_lingo->c_constpush);
+		inst i = 0;
+		WRITE_UINT32(&i, 0);
+		g_lingo->code1(i);
+		g_lingo->code1(g_lingo->c_closeResFile); }
+	| tCLOSEXLIB expr	{ g_lingo->code1(g_lingo->c_closeXlib); }
+	| tCLOSEXLIB 		{
+		g_lingo->code1(g_lingo->c_constpush);
+		inst i = 0;
+		WRITE_UINT32(&i, 0);
+		g_lingo->code1(i);
+		g_lingo->code1(g_lingo->c_closeXlib); }
 	;
 
 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 d4f2a01..23bd7d0 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 56
-#define YY_END_OF_BUFFER 57
+#define YY_NUM_RULES 58
+#define YY_END_OF_BUFFER 59
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -373,30 +373,31 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[194] =
+static yyconst flex_int16_t yy_accept[209] =
     {   0,
-        0,    0,   57,   55,    3,   53,   53,   55,   55,   52,
-       52,   52,   51,   52,   52,   49,   49,   49,   49,   49,
-       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
-       49,   49,   49,    2,    2,    3,   53,    0,    0,   53,
-        0,    0,   54,   48,    1,   50,   51,   47,   45,   46,
-       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
-       49,   49,   18,    9,   49,   49,   49,   49,   49,   49,
-       49,   49,   29,   30,   49,   49,   49,   49,   49,   49,
-       49,   39,   49,   49,    2,    2,    0,    1,   50,   49,
-        5,   49,   49,   49,   49,   13,   49,   49,   49,   49,
-
-       49,   49,   49,   23,   49,   49,   49,   28,   49,   32,
-       49,   34,   49,   49,   49,   49,   49,   49,    0,   49,
-        6,   49,    8,   12,   15,   49,   49,   49,   49,   20,
-       21,   49,   49,   49,   49,   27,   49,   49,   49,   49,
-        0,   38,   43,   49,   41,   11,    4,   49,   49,   16,
-       49,   49,   22,   49,   49,   26,   49,   49,   49,   49,
-       37,   44,   49,    0,   49,   49,   17,   49,   49,   25,
-       49,   33,   40,   35,    0,   42,    0,   49,   14,   49,
-       24,   49,    0,   10,    7,   49,   31,    0,   49,    0,
-       19,   36,    0
-
+        0,    0,   59,   57,    3,   55,   55,   57,   57,   54,
+       54,   54,   53,   54,   54,   51,   51,   51,   51,   51,
+       51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
+       51,   51,   51,    2,    2,    3,   55,    0,    0,   55,
+        0,    0,   56,   50,    1,   52,   53,   49,   47,   48,
+       51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
+       51,   51,   51,   20,   11,   51,   51,   51,   51,   51,
+       51,   51,   51,   31,   32,   51,   51,   51,   51,   51,
+       51,   51,   41,   51,   51,    2,    2,    0,    1,   52,
+       51,    5,   51,   51,   51,   51,   51,   15,   51,   51,
+
+       51,   51,   51,   51,   51,   25,   51,   51,   51,   30,
+       51,   34,   51,   36,   51,   51,   51,   51,   51,   51,
+        0,   51,    6,   51,   51,   10,   14,   17,   51,   51,
+       51,   51,   22,   23,   51,   51,   51,   51,   29,   51,
+       51,   51,   51,    0,   40,   45,   51,   43,   13,    4,
+       51,   51,   51,   18,   51,   51,   24,   51,   51,   28,
+       51,   51,   51,   51,   39,   46,   51,    0,   51,   51,
+       51,   51,   19,   51,   51,   27,   51,   35,   42,   37,
+        0,   44,    0,   51,   51,   51,   16,   51,   26,   51,
+        0,   12,   51,   51,    9,   51,   33,    0,   51,    8,
+
+       51,    0,   51,   21,   38,   51,    7,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -441,59 +442,63 @@ static yyconst flex_int32_t yy_meta[61] =
         6,    6,    6,    6,    6,    6,    6,    6,    6,    6
     } ;
 
-static yyconst flex_int16_t yy_base[199] =
+static yyconst flex_int16_t yy_base[214] =
     {   0,
-        0,   59,  205,  459,   63,   67,   71,   75,  167,  459,
-      164,  149,   52,   68,  134,   58,   68,   56,   61,   67,
-       83,   68,    0,   77,   67,  113,  106,  109,   90,   81,
-      116,  109,  128,  174,  178,  182,   98,  186,  190,  194,
-      113,  136,  459,  459,    0,   94,  155,  459,  459,  459,
-        0,   90,  151,  151,  113,  109,  169,  183,  179,  186,
-      189,  178,    0,    0,  175,  180,  193,  188,  183,  182,
-      181,  186,    0,    0,  193,  187,  191,  189,  192,  209,
-      213,    0,  227,  217,  249,  255,  224,    0,   88,  231,
-        0,  233,  231,  237,  228,    0,  233,  234,  241,  252,
-
-      254,  246,  246,  242,  247,  256,  249,    0,  249,    0,
-      272,    0,  271,  266,  305,  274,  277,  287,  292,  276,
-        0,  297,    0,    0,    0,  286,  297,  302,  290,    0,
-        0,  293,  307,  298,  304,    0,  304,  313,  298,  302,
-       86,    0,    0,  319,  316,  340,    0,  325,  320,    0,
-      329,  325,    0,  335,  341,    0,  333,  332,  346,  336,
-      364,    0,  341,  369,  343,  338,    0,  357,  346,    0,
-      347,    0,    0,    0,  383,    0,  361,  355,    0,  377,
-        0,  365,  377,  459,    0,  367,    0,  402,  371,  408,
-        0,  410,  459,  434,  436,  442,  447,  452
-
+        0,   59,  252,  486,   63,   67,   71,   75,  167,  486,
+      164,  157,   52,   68,  152,   58,   68,   64,   56,   68,
+       83,   69,    0,   82,   68,  106,  105,  108,  107,   86,
+      112,  131,  128,  166,  176,  181,   96,  185,  189,  193,
+      110,  140,  486,  486,    0,   92,  132,  486,  486,  486,
+        0,  111,  158,  173,  111,  172,  166,  171,  175,  180,
+      187,  190,  179,    0,    0,  178,  183,  196,  191,  186,
+      185,  184,  189,    0,    0,  196,  191,  197,  199,  205,
+      225,  226,    0,  228,  218,  257,  263,  222,    0,   90,
+      225,    0,  227,  226,  231,  243,  229,    0,  242,  245,
+
+      255,  266,  264,  256,  257,  253,  267,  267,  262,    0,
+      261,    0,  277,    0,  275,  271,  300,  276,  284,  277,
+      293,  284,    0,  300,  306,    0,    0,    0,  297,  309,
+      314,  301,    0,    0,  305,  319,  309,  316,    0,  315,
+      325,  310,  312,   86,    0,    0,  327,  324,  204,    0,
+      319,  328,  327,    0,  336,  332,    0,  343,  350,    0,
+      345,  342,  350,  345,  377,    0,  350,  383,  362,  362,
+      362,  354,    0,  364,  362,    0,  362,    0,    0,    0,
+      396,    0,  382,  373,  385,  380,    0,  392,    0,  382,
+      395,  486,  396,  403,    0,  389,    0,  418,  399,    0,
+
+      394,  426,  404,    0,  433,  418,    0,  486,  461,  463,
+      469,  474,  479
     } ;
 
-static yyconst flex_int16_t yy_def[199] =
+static yyconst flex_int16_t yy_def[214] =
     {   0,
-      193,    1,  193,  193,  193,  193,  193,  193,  194,  193,
-      193,  193,  193,  193,  193,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  193,  193,  193,  193,  193,  193,  193,
-      193,  194,  193,  193,  196,  193,  193,  193,  193,  193,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  193,  193,  193,  196,  193,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  193,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      197,  195,  195,  195,  195,  193,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
-      197,  195,  195,  193,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  193,  195,  193,  195,  195,  195,
-      195,  195,  193,  193,  195,  195,  195,  193,  195,  198,
-      195,  198,    0,  193,  193,  193,  193,  193
-
+      208,    1,  208,  208,  208,  208,  208,  208,  209,  208,
+      208,  208,  208,  208,  208,  210,  210,  210,  210,  210,
+      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
+      210,  210,  210,  208,  208,  208,  208,  208,  208,  208,
+      208,  209,  208,  208,  211,  208,  208,  208,  208,  208,
+      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
+      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
+      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
+      210,  210,  210,  210,  210,  208,  208,  208,  211,  208,
+      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
+
+      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
+      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
+      208,  210,  210,  210,  210,  210,  210,  210,  210,  210,
+      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
+      210,  210,  210,  212,  210,  210,  210,  210,  208,  210,
+      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
+      210,  210,  210,  210,  212,  210,  210,  208,  210,  210,
+      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
+      208,  210,  208,  210,  210,  210,  210,  210,  210,  210,
+      208,  208,  210,  210,  210,  210,  210,  208,  210,  210,
+
+      210,  213,  210,  210,  213,  210,  210,    0,  208,  208,
+      208,  208,  208
     } ;
 
-static yyconst flex_int16_t yy_nxt[520] =
+static yyconst flex_int16_t yy_nxt[547] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,    4,
        13,   14,   10,   15,   16,   17,   18,   19,   20,   21,
@@ -503,58 +508,61 @@ static yyconst flex_int16_t yy_nxt[520] =
        28,   29,   30,   31,   32,   23,   23,   33,   23,   23,
        34,   46,   47,   35,   36,   37,   37,   38,   39,   40,
        40,   39,   39,   40,   40,   39,   38,   37,   37,   38,
-       48,   49,   52,   55,   53,   41,   54,  141,   56,   41,
-      141,   57,   62,   58,   66,   63,   64,   60,   89,   77,
-
-       37,   37,   59,   65,   89,   52,   55,   53,   90,   41,
-       54,   56,   61,   41,   57,   62,   58,   66,   63,   75,
-       64,   60,   76,   77,   71,   59,   65,   67,   73,   68,
-       81,   69,   90,   72,   78,   61,   82,   87,   74,   93,
-       70,   43,   75,   94,   79,   76,   50,   80,   71,   83,
-       84,   67,   73,   68,   81,   69,   72,   45,   78,   82,
-       87,   74,   93,   70,   46,   47,   94,   79,   91,   92,
-       80,   44,   43,   83,   84,   85,   37,   37,   86,   86,
-       37,   37,   86,   36,   37,   37,   38,   38,   37,   37,
-       38,   39,   91,   92,   39,   39,   40,   40,   39,   95,
-
-       96,   97,   98,   99,  193,  100,  101,  102,   41,  103,
-      104,  109,   41,  193,  105,  106,  107,  108,  110,  111,
-      112,  113,   95,  114,   96,   97,   98,   99,  100,  101,
-      102,  115,   41,  103,  104,  109,   41,  105,  106,  107,
-      108,  110,  111,  112,  113,  116,  124,  114,  118,  117,
-       85,   37,   37,   86,  119,  115,   86,   37,   37,   86,
-      120,  121,  122,  123,  125,  126,  127,  128,  134,  116,
-      124,  118,  129,  117,  131,  132,  133,  119,  135,  193,
-      136,  130,  137,  120,  121,  122,  123,  125,  126,  127,
-      138,  128,  134,  139,  193,  140,  129,  131,  132,  133,
-
-      143,  144,  135,  136,  130,  137,  141,  147,  145,  141,
-      146,  148,  193,  149,  138,  150,  151,  139,  140,  152,
-      153,  154,  156,  143,  144,  155,  157,  158,  193,  159,
-      147,  142,  145,  160,  146,  148,  149,  162,  163,  150,
-      151,  164,  152,  153,  164,  154,  156,  165,  155,  166,
-      157,  158,  159,  167,  142,  168,  160,  169,  170,  193,
-      171,  162,  163,  172,  173,  175,  174,  176,  175,  178,
-      164,  165,  166,  164,  179,  180,  167,  181,  168,  182,
-      184,  169,  170,  171,  175,  185,  172,  175,  173,  174,
-      176,  177,  178,  186,  193,  187,  188,  179,  189,  180,
-
-      181,  191,  182,  190,  184,  193,  190,  193,  185,  190,
-      183,  193,  190,  193,  193,  177,  193,  186,  187,  193,
-      188,  189,  193,  193,  191,  193,  193,  193,  193,  193,
-      193,  193,  193,  183,   42,   42,  193,   42,   42,   42,
-       51,   51,   88,   88,  193,  193,   88,   88,  161,  193,
-      193,  193,  161,  192,  193,  193,  193,  192,    3,  193,
-      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
-      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
-      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
-      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
-
-      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
-      193,  193,  193,  193,  193,  193,  193,  193,  193
+       48,   49,   52,   57,   53,   41,   54,  144,   55,   41,
+      144,   56,   58,   63,   59,   67,   64,   61,   37,   37,
+
+       90,   65,   90,   60,   78,   52,   57,   53,   66,   41,
+       54,   55,   62,   41,   56,   58,   63,   59,   67,   64,
+       68,   61,   69,   72,   70,   65,   60,   74,   78,   91,
+       79,   66,   73,   71,   88,   62,   76,   75,   94,   77,
+       80,   46,   47,   81,   68,   43,   69,   72,   70,   84,
+       85,   74,   82,   91,   79,   73,   71,   88,   83,   76,
+       75,   94,   77,   80,   50,   45,   81,   86,   37,   37,
+       87,   44,   43,   84,   85,   92,   82,   87,   37,   37,
+       87,   83,   36,   37,   37,   38,   38,   37,   37,   38,
+       39,   93,   98,   39,   39,   40,   40,   39,   95,   92,
+
+       96,   97,   99,  100,  101,  168,  102,   41,  168,  103,
+      104,   41,  105,  106,  111,   93,   98,  107,  108,  109,
+      110,   95,  112,   96,   97,  113,   99,  100,  101,  102,
+      114,   41,  103,  104,  115,   41,  105,  106,  111,  116,
+      107,  108,  109,  110,  117,  112,  118,  127,  113,  120,
+      119,  208,  121,  114,  122,  123,  124,  115,   86,   37,
+       37,   87,  125,  116,   87,   37,   37,   87,  117,  126,
+      118,  127,  120,  128,  119,  121,  129,  122,  123,  124,
+      130,  131,  132,  208,  134,  125,  135,  136,  137,  138,
+      208,  133,  126,  139,  140,  141,  128,  142,  148,  129,
+
+      143,  144,  146,  130,  144,  131,  132,  134,  147,  135,
+      136,  149,  137,  138,  133,  150,  139,  140,  151,  141,
+      152,  142,  148,  143,  153,  146,  145,  154,  155,  208,
+      156,  147,  157,  158,  160,  149,  159,  161,  150,  162,
+      208,  163,  151,  164,  152,  166,  167,  153,  169,  145,
+      171,  154,  155,  156,  170,  157,  172,  158,  160,  159,
+      173,  161,  174,  162,  163,  175,  164,  176,  179,  166,
+      167,  169,  177,  178,  171,  180,  182,  170,  181,  172,
+      184,  181,  188,  173,  168,  174,  185,  168,  186,  175,
+      187,  176,  179,  189,  190,  177,  178,  181,  180,  182,
+
+      181,  192,  208,  193,  184,  183,  188,  194,  196,  185,
+      195,  186,  197,  187,  198,  199,  189,  190,  200,  202,
+      201,  203,  202,  191,  204,  192,  193,  202,  206,  183,
+      202,  194,  196,  195,  208,  197,  207,  208,  198,  199,
+      208,  208,  200,  201,  208,  203,  191,  204,  208,  208,
+      208,  206,  208,  208,  208,  208,  208,  208,  208,  208,
+      207,   42,   42,  208,   42,   42,   42,   51,   51,   89,
+       89,  208,  208,   89,   89,  165,  208,  208,  208,  165,
+      205,  208,  208,  208,  205,    3,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208
     } ;
 
-static yyconst flex_int16_t yy_chk[520] =
+static yyconst flex_int16_t yy_chk[547] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -564,55 +572,58 @@ static yyconst flex_int16_t yy_chk[520] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         2,   13,   13,    2,    5,    5,    5,    5,    6,    6,
         6,    6,    7,    7,    7,    7,    8,    8,    8,    8,
-       14,   14,   16,   18,   16,    6,   17,  141,   19,    7,
-      141,   20,   22,   20,   25,   22,   24,   21,   89,   30,
-
-       37,   37,   20,   24,   46,   16,   18,   16,   52,    6,
-       17,   19,   21,    7,   20,   22,   20,   25,   22,   29,
-       24,   21,   29,   30,   27,   20,   24,   26,   28,   26,
-       32,   26,   52,   27,   31,   21,   32,   41,   28,   55,
-       26,   42,   29,   56,   31,   29,   15,   31,   27,   33,
-       33,   26,   28,   26,   32,   26,   27,   12,   31,   32,
-       41,   28,   55,   26,   47,   47,   56,   31,   53,   54,
-       31,   11,    9,   33,   33,   34,   34,   34,   34,   35,
-       35,   35,   35,   36,   36,   36,   36,   38,   38,   38,
-       38,   39,   53,   54,   39,   40,   40,   40,   40,   57,
-
-       58,   59,   60,   61,    3,   62,   65,   66,   39,   67,
-       68,   75,   40,    0,   69,   70,   71,   72,   76,   77,
-       78,   79,   57,   80,   58,   59,   60,   61,   62,   65,
-       66,   81,   39,   67,   68,   75,   40,   69,   70,   71,
-       72,   76,   77,   78,   79,   83,   95,   80,   84,   83,
-       85,   85,   85,   85,   87,   81,   86,   86,   86,   86,
-       90,   92,   93,   94,   97,   98,   99,  100,  105,   83,
-       95,   84,  101,   83,  102,  103,  104,   87,  106,    0,
-      107,  101,  109,   90,   92,   93,   94,   97,   98,   99,
-      111,  100,  105,  113,    0,  114,  101,  102,  103,  104,
-
-      116,  117,  106,  107,  101,  109,  115,  120,  118,  115,
-      119,  122,    0,  126,  111,  127,  128,  113,  114,  129,
-      132,  133,  135,  116,  117,  134,  137,  138,    0,  139,
-      120,  115,  118,  140,  119,  122,  126,  144,  145,  127,
-      128,  146,  129,  132,  146,  133,  135,  148,  134,  149,
-      137,  138,  139,  151,  115,  152,  140,  154,  155,    0,
-      157,  144,  145,  158,  159,  161,  160,  163,  161,  165,
-      164,  148,  149,  164,  166,  168,  151,  169,  152,  171,
-      177,  154,  155,  157,  175,  178,  158,  175,  159,  160,
-      163,  164,  165,  180,    0,  182,  183,  166,  186,  168,
-
-      169,  189,  171,  188,  177,    0,  188,    0,  178,  190,
-      175,  192,  190,    0,  192,  164,    0,  180,  182,    0,
-      183,  186,    0,    0,  189,    0,    0,    0,    0,    0,
-        0,    0,    0,  175,  194,  194,    0,  194,  194,  194,
-      195,  195,  196,  196,    0,    0,  196,  196,  197,    0,
-        0,    0,  197,  198,    0,    0,    0,  198,  193,  193,
-      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
-      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
-      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
-      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
-
-      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
-      193,  193,  193,  193,  193,  193,  193,  193,  193
+       14,   14,   16,   19,   16,    6,   17,  144,   18,    7,
+      144,   18,   20,   22,   20,   25,   22,   21,   37,   37,
+
+       90,   24,   46,   20,   30,   16,   19,   16,   24,    6,
+       17,   18,   21,    7,   18,   20,   22,   20,   25,   22,
+       26,   21,   26,   27,   26,   24,   20,   28,   30,   52,
+       31,   24,   27,   26,   41,   21,   29,   28,   55,   29,
+       31,   47,   47,   31,   26,   42,   26,   27,   26,   33,
+       33,   28,   32,   52,   31,   27,   26,   41,   32,   29,
+       28,   55,   29,   31,   15,   12,   31,   34,   34,   34,
+       34,   11,    9,   33,   33,   53,   32,   35,   35,   35,
+       35,   32,   36,   36,   36,   36,   38,   38,   38,   38,
+       39,   54,   59,   39,   40,   40,   40,   40,   56,   53,
+
+       57,   58,   60,   61,   62,  149,   63,   39,  149,   66,
+       67,   40,   68,   69,   76,   54,   59,   70,   71,   72,
+       73,   56,   77,   57,   58,   78,   60,   61,   62,   63,
+       79,   39,   66,   67,   80,   40,   68,   69,   76,   81,
+       70,   71,   72,   73,   82,   77,   84,   97,   78,   85,
+       84,    3,   88,   79,   91,   93,   94,   80,   86,   86,
+       86,   86,   95,   81,   87,   87,   87,   87,   82,   96,
+       84,   97,   85,   99,   84,   88,  100,   91,   93,   94,
+      101,  102,  103,    0,  104,   95,  105,  106,  107,  108,
+        0,  103,   96,  109,  111,  113,   99,  115,  120,  100,
+
+      116,  117,  118,  101,  117,  102,  103,  104,  119,  105,
+      106,  121,  107,  108,  103,  122,  109,  111,  124,  113,
+      125,  115,  120,  116,  129,  118,  117,  130,  131,    0,
+      132,  119,  135,  136,  138,  121,  137,  140,  122,  141,
+        0,  142,  124,  143,  125,  147,  148,  129,  151,  117,
+      152,  130,  131,  132,  151,  135,  153,  136,  138,  137,
+      155,  140,  156,  141,  142,  158,  143,  159,  163,  147,
+      148,  151,  161,  162,  152,  164,  167,  151,  165,  153,
+      169,  165,  174,  155,  168,  156,  170,  168,  171,  158,
+      172,  159,  163,  175,  177,  161,  162,  181,  164,  167,
+
+      181,  183,    0,  184,  169,  168,  174,  185,  188,  170,
+      186,  171,  190,  172,  191,  193,  175,  177,  194,  198,
+      196,  199,  198,  181,  201,  183,  184,  202,  203,  168,
+      202,  185,  188,  186,  205,  190,  206,  205,  191,  193,
+        0,    0,  194,  196,    0,  199,  181,  201,    0,    0,
+        0,  203,    0,    0,    0,    0,    0,    0,    0,    0,
+      206,  209,  209,    0,  209,  209,  209,  210,  210,  211,
+      211,    0,    0,  211,  211,  212,    0,    0,    0,  212,
+      213,    0,    0,    0,  213,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -682,7 +693,7 @@ static void countnl() {
 	g_lingo->_colnumber = strlen(p);
 }
 
-#line 686 "engines/director/lingo/lingo-lex.cpp"
+#line 697 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -870,7 +881,7 @@ YY_DECL
 #line 65 "engines/director/lingo/lingo-lex.l"
 
 
-#line 874 "engines/director/lingo/lingo-lex.cpp"
+#line 885 "engines/director/lingo/lingo-lex.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -924,13 +935,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 >= 194 )
+				if ( yy_current_state >= 209 )
 					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] != 459 );
+		while ( yy_base[yy_current_state] != 486 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -987,153 +998,163 @@ YY_RULE_SETUP
 case 7:
 YY_RULE_SETUP
 #line 74 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONTAINS; }
+{ count(); return tCLOSERESFILE; }
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
 #line 75 "engines/director/lingo/lingo-lex.l"
-{ count(); return tDOWN; }
+{ count(); return tCLOSEXLIB; }
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
 #line 76 "engines/director/lingo/lingo-lex.l"
-{ count(); return tIF; }
+{ count(); return tCONTAINS; }
 	YY_BREAK
 case 10:
-/* rule 10 can match eol */
 YY_RULE_SETUP
 #line 77 "engines/director/lingo/lingo-lex.l"
-{ countnl(); return tNLELSIF; }
+{ count(); return tDOWN; }
 	YY_BREAK
 case 11:
-/* rule 11 can match eol */
 YY_RULE_SETUP
 #line 78 "engines/director/lingo/lingo-lex.l"
-{ countnl(); return tNLELSE; }
+{ count(); return tIF; }
 	YY_BREAK
 case 12:
+/* rule 12 can match eol */
 YY_RULE_SETUP
 #line 79 "engines/director/lingo/lingo-lex.l"
-{ count(); return tELSE; }
+{ countnl(); return tNLELSIF; }
 	YY_BREAK
 case 13:
+/* rule 13 can match eol */
 YY_RULE_SETUP
 #line 80 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEND; }
+{ countnl(); return tNLELSE; }
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
 #line 81 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFACTORY; }
+{ count(); return tELSE; }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
 #line 82 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEXIT; }
+{ count(); return tEND; }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
 #line 83 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFRAME; }
+{ count(); return tFACTORY; }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 84 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGLOBAL; }
+{ count(); return tEXIT; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 85 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGO; }
+{ count(); return tFRAME; }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 86 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTERSECTS; }
+{ count(); return tGLOBAL; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 87 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTO; }
+{ count(); return tGO; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 88 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLOOP; }
+{ count(); return tINTERSECTS; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 89 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMACRO; }
+{ count(); return tINTO; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 90 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMCI; }
+{ count(); return tLOOP; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 91 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMCIWAIT; }
+{ count(); return tMACRO; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 92 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMETHOD; }
+{ count(); return tMCI; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 93 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOVIE; }
+{ count(); return tMCIWAIT; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 94 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEXT; }
+{ count(); return tMETHOD; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 95 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNOT; }
+{ count(); return tMOVIE; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 96 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOF; }
+{ count(); return tNEXT; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 97 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOR; }
+{ count(); return tNOT; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 98 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPREVIOUS; }
+{ count(); return tOF; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 99 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPUT; }
+{ count(); return tOR; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 100 "engines/director/lingo/lingo-lex.l"
-{ count(); return tREPEAT; }
+{ count(); return tPREVIOUS; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 101 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSET; }
+{ count(); return tPUT; }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 102 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSTARTS; }
+{ count(); return tREPEAT; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 103 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSET; }
+	YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 104 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSTARTS; }
+	YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 105 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1175,9 +1196,9 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
-case 37:
+case 39:
 YY_RULE_SETUP
-#line 143 "engines/director/lingo/lingo-lex.l"
+#line 145 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1198,64 +1219,64 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 162 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTHEN; }
-	YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 163 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTO; }
-	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 164 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSPRITE; }
+{ count(); return tTHEN; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 165 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITH; }
+{ count(); return tTO; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 166 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITHIN; }
+{ count(); return tSPRITE; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 167 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHEN; }
+{ count(); return tWITH; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 168 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHILE; }
+{ count(); return tWITHIN; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 170 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEQ; }
+#line 169 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWHEN; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 171 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGE; }
+#line 170 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWHILE; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 172 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLE; }
+{ count(); return tNEQ; }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 173 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONCAT; }
+{ count(); return tGE; }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
+#line 174 "engines/director/lingo/lingo-lex.l"
+{ count(); return tLE; }
+	YY_BREAK
+case 50:
+YY_RULE_SETUP
 #line 175 "engines/director/lingo/lingo-lex.l"
+{ count(); return tCONCAT; }
+	YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 177 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1268,43 +1289,43 @@ YY_RULE_SETUP
 		return ID;
 	}
 	YY_BREAK
-case 50:
-YY_RULE_SETUP
-#line 186 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.f = atof(yytext); return vFLOAT; }
-	YY_BREAK
-case 51:
-YY_RULE_SETUP
-#line 187 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.i = strtol(yytext, NULL, 10); return vINT; }
-	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 188 "engines/director/lingo/lingo-lex.l"
-{ count(); return *yytext; }
+{ count(); yylval.f = atof(yytext); return vFLOAT; }
 	YY_BREAK
 case 53:
-/* rule 53 can match eol */
 YY_RULE_SETUP
 #line 189 "engines/director/lingo/lingo-lex.l"
-{ return '\n'; }
+{ count(); yylval.i = strtol(yytext, NULL, 10); return vINT; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 190 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return vSTRING; }
+{ count(); return *yytext; }
 	YY_BREAK
 case 55:
+/* rule 55 can match eol */
 YY_RULE_SETUP
 #line 191 "engines/director/lingo/lingo-lex.l"
-
+{ return '\n'; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
+#line 192 "engines/director/lingo/lingo-lex.l"
+{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return vSTRING; }
+	YY_BREAK
+case 57:
+YY_RULE_SETUP
 #line 193 "engines/director/lingo/lingo-lex.l"
+
+	YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 195 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1308 "engines/director/lingo/lingo-lex.cpp"
+#line 1329 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1597,7 +1618,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 >= 194 )
+			if ( yy_current_state >= 209 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1625,11 +1646,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 >= 194 )
+		if ( yy_current_state >= 209 )
 			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 == 193);
+	yy_is_jam = (yy_current_state == 208);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2304,7 +2325,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 193 "engines/director/lingo/lingo-lex.l"
+#line 195 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index b9ecfc3..6c317ef 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -71,6 +71,8 @@ whitespace [\t ]
 (?i:alert)			{ count(); return tALERT; }
 (?i:and)			{ count(); return tAND; }
 (?i:beep)			{ count(); return tBEEP; }
+(?i:closeResFile)	{ count(); return tCLOSERESFILE; }
+(?i:closeXlib)		{ count(); return tCLOSEXLIB; }
 (?i:contains)		{ count(); return tCONTAINS; }
 (?i:down)			{ count(); return tDOWN; }
 (?i:if)				{ count(); return tIF; }
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 023a194..4b25a57 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -246,6 +246,8 @@ public:
 
 	static void c_alert();
 	static void c_beep();
+	static void c_closeResFile();
+	static void c_closeXlib();
 
 	static void b_abs();
 	static void b_atan();
@@ -267,6 +269,7 @@ public:
 	static void b_dontpassevent();
 	static void b_updatestage();
 	static void b_ilk();
+	static void b_closeDA();
 
 	static void b_point();
 


Commit: 8883a03e21394de1667aac0fc0c74b4bc558b032
    https://github.com/scummvm/scummvm/commit/8883a03e21394de1667aac0fc0c74b4bc558b032
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-04T23:00:55+02:00

Commit Message:
DIRECTOR: Lingo: Simplified code generation for constants

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



diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 6c5b5e6..217ca56 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -184,6 +184,15 @@ int Lingo::codeFloat(double f) {
 	return _currentScript->size();
 }
 
+int Lingo::codeConst(int val) {
+	int res = g_lingo->code1(g_lingo->c_constpush);
+	inst i = 0;
+	WRITE_UINT32(&i, val);
+	g_lingo->code1(i);
+
+	return res;
+}
+
 void Lingo::codeArg(Common::String *s) {
 	_argstack.push_back(s);
 }
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 64dd708..b3eec3f 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -620,14 +620,14 @@ static const yytype_uint16 yyrline[] =
      174,   176,   177,   182,   193,   209,   221,   226,   233,   242,
      251,   261,   271,   282,   283,   286,   287,   290,   291,   294,
      302,   303,   311,   312,   313,   315,   317,   323,   329,   336,
-     338,   340,   341,   342,   345,   350,   353,   356,   360,   363,
-     367,   374,   380,   381,   382,   383,   384,   385,   386,   387,
-     388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
-     398,   399,   400,   401,   404,   405,   406,   407,   408,   410,
-     411,   412,   418,   424,   425,   431,   432,   440,   441,   452,
-     453,   454,   455,   460,   466,   473,   474,   475,   476,   479,
-     480,   481,   509,   509,   515,   518,   518,   524,   525,   526,
-     527,   529,   533,   541,   542,   543
+     338,   340,   341,   342,   345,   346,   349,   352,   356,   359,
+     363,   370,   376,   377,   378,   379,   380,   381,   382,   383,
+     384,   385,   386,   387,   388,   389,   390,   391,   392,   393,
+     394,   395,   396,   397,   400,   401,   402,   403,   404,   406,
+     407,   408,   411,   414,   415,   418,   419,   424,   425,   436,
+     437,   438,   439,   444,   450,   457,   458,   459,   460,   463,
+     464,   465,   493,   493,   499,   502,   502,   508,   509,   510,
+     511,   513,   517,   525,   526,   527
 };
 #endif
 
@@ -1855,7 +1855,7 @@ yyreduce:
   case 14:
 #line 134 "engines/director/lingo/lingo-gr.y"
     {
-		g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id
+		g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentityassign);
 		inst e = 0, f = 0;
 		WRITE_UINT32(&e, (yyvsp[(2) - (4)].e)[0]);
@@ -1889,7 +1889,7 @@ yyreduce:
   case 17:
 #line 156 "engines/director/lingo/lingo-gr.y"
     {
-		g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id
+		g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentityassign);
 		inst e = 0, f = 0;
 		WRITE_UINT32(&e, (yyvsp[(2) - (4)].e)[0]);
@@ -2133,44 +2133,40 @@ yyreduce:
 
   case 54:
 #line 345 "engines/director/lingo/lingo-gr.y"
-    {
-		(yyval.code) = g_lingo->code1(g_lingo->c_constpush);
-		inst i = 0;
-		WRITE_UINT32(&i, (yyvsp[(1) - (1)].i));
-		g_lingo->code1(i); ;}
+    { (yyval.code) = g_lingo->codeConst((yyvsp[(1) - (1)].i)); ;}
     break;
 
   case 55:
-#line 350 "engines/director/lingo/lingo-gr.y"
+#line 346 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_fconstpush);
 		g_lingo->codeFloat((yyvsp[(1) - (1)].f)); ;}
     break;
 
   case 56:
-#line 353 "engines/director/lingo/lingo-gr.y"
+#line 349 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_stringpush);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;}
     break;
 
   case 57:
-#line 356 "engines/director/lingo/lingo-gr.y"
+#line 352 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->_handlers[*(yyvsp[(1) - (1)].s)]->u.func);
-		(yyval.code) = g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy value
+		g_lingo->codeConst(0); // Put dummy value
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 58:
-#line 360 "engines/director/lingo/lingo-gr.y"
+#line 356 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg));
 		delete (yyvsp[(1) - (4)].s); ;}
     break;
 
   case 59:
-#line 363 "engines/director/lingo/lingo-gr.y"
+#line 359 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_eval);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str());
@@ -2178,9 +2174,9 @@ yyreduce:
     break;
 
   case 60:
-#line 367 "engines/director/lingo/lingo-gr.y"
+#line 363 "engines/director/lingo/lingo-gr.y"
     {
-		(yyval.code) = g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id
+		(yyval.code) = g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentitypush);
 		inst e = 0, f = 0;
 		WRITE_UINT32(&e, (yyvsp[(1) - (1)].e)[0]);
@@ -2189,7 +2185,7 @@ yyreduce:
     break;
 
   case 61:
-#line 374 "engines/director/lingo/lingo-gr.y"
+#line 370 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_theentitypush);
 		inst e = 0, f = 0;
@@ -2199,213 +2195,201 @@ yyreduce:
     break;
 
   case 63:
-#line 381 "engines/director/lingo/lingo-gr.y"
+#line 377 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_add); ;}
     break;
 
   case 64:
-#line 382 "engines/director/lingo/lingo-gr.y"
+#line 378 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_sub); ;}
     break;
 
   case 65:
-#line 383 "engines/director/lingo/lingo-gr.y"
+#line 379 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mul); ;}
     break;
 
   case 66:
-#line 384 "engines/director/lingo/lingo-gr.y"
+#line 380 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_div); ;}
     break;
 
   case 67:
-#line 385 "engines/director/lingo/lingo-gr.y"
+#line 381 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gt); ;}
     break;
 
   case 68:
-#line 386 "engines/director/lingo/lingo-gr.y"
+#line 382 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lt); ;}
     break;
 
   case 69:
-#line 387 "engines/director/lingo/lingo-gr.y"
+#line 383 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_neq); ;}
     break;
 
   case 70:
-#line 388 "engines/director/lingo/lingo-gr.y"
+#line 384 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_ge); ;}
     break;
 
   case 71:
-#line 389 "engines/director/lingo/lingo-gr.y"
+#line 385 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_le); ;}
     break;
 
   case 72:
-#line 390 "engines/director/lingo/lingo-gr.y"
+#line 386 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_and); ;}
     break;
 
   case 73:
-#line 391 "engines/director/lingo/lingo-gr.y"
+#line 387 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_or); ;}
     break;
 
   case 74:
-#line 392 "engines/director/lingo/lingo-gr.y"
+#line 388 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_not); ;}
     break;
 
   case 75:
-#line 393 "engines/director/lingo/lingo-gr.y"
+#line 389 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_ampersand); ;}
     break;
 
   case 76:
-#line 394 "engines/director/lingo/lingo-gr.y"
+#line 390 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_concat); ;}
     break;
 
   case 77:
-#line 395 "engines/director/lingo/lingo-gr.y"
+#line 391 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_contains); ;}
     break;
 
   case 78:
-#line 396 "engines/director/lingo/lingo-gr.y"
+#line 392 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_starts); ;}
     break;
 
   case 79:
-#line 397 "engines/director/lingo/lingo-gr.y"
+#line 393 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (2)].code); ;}
     break;
 
   case 80:
-#line 398 "engines/director/lingo/lingo-gr.y"
+#line 394 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;}
     break;
 
   case 81:
-#line 399 "engines/director/lingo/lingo-gr.y"
+#line 395 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (3)].code); ;}
     break;
 
   case 82:
-#line 400 "engines/director/lingo/lingo-gr.y"
+#line 396 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_intersects); ;}
     break;
 
   case 83:
-#line 401 "engines/director/lingo/lingo-gr.y"
+#line 397 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_within); ;}
     break;
 
   case 84:
-#line 404 "engines/director/lingo/lingo-gr.y"
+#line 400 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mci); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;}
     break;
 
   case 85:
-#line 405 "engines/director/lingo/lingo-gr.y"
+#line 401 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mciwait); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;}
     break;
 
   case 86:
-#line 406 "engines/director/lingo/lingo-gr.y"
+#line 402 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_printtop); ;}
     break;
 
   case 88:
-#line 408 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
+#line 404 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->codeConst(0); // Push fake value on stack
 							  g_lingo->code1(g_lingo->c_procret); ;}
     break;
 
   case 90:
-#line 411 "engines/director/lingo/lingo-gr.y"
+#line 407 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_alert); ;}
     break;
 
   case 91:
-#line 412 "engines/director/lingo/lingo-gr.y"
+#line 408 "engines/director/lingo/lingo-gr.y"
     {
-		g_lingo->code1(g_lingo->c_constpush);
-		inst i = 0;
-		WRITE_UINT32(&i, (yyvsp[(2) - (2)].i));
-		g_lingo->code1(i);
+		g_lingo->codeConst((yyvsp[(2) - (2)].i));
 		g_lingo->code1(g_lingo->c_beep); ;}
     break;
 
   case 92:
-#line 418 "engines/director/lingo/lingo-gr.y"
+#line 411 "engines/director/lingo/lingo-gr.y"
     {
-		g_lingo->code1(g_lingo->c_constpush);
-		inst i = 0;
-		WRITE_UINT32(&i, 0);
-		g_lingo->code1(i);
+		g_lingo->codeConst(0);
 		g_lingo->code1(g_lingo->c_beep); ;}
     break;
 
   case 93:
-#line 424 "engines/director/lingo/lingo-gr.y"
+#line 414 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_closeResFile); ;}
     break;
 
   case 94:
-#line 425 "engines/director/lingo/lingo-gr.y"
+#line 415 "engines/director/lingo/lingo-gr.y"
     {
-		g_lingo->code1(g_lingo->c_constpush);
-		inst i = 0;
-		WRITE_UINT32(&i, 0);
-		g_lingo->code1(i);
+		g_lingo->codeConst(0);
 		g_lingo->code1(g_lingo->c_closeResFile); ;}
     break;
 
   case 95:
-#line 431 "engines/director/lingo/lingo-gr.y"
+#line 418 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_closeXlib); ;}
     break;
 
   case 96:
-#line 432 "engines/director/lingo/lingo-gr.y"
+#line 419 "engines/director/lingo/lingo-gr.y"
     {
-		g_lingo->code1(g_lingo->c_constpush);
-		inst i = 0;
-		WRITE_UINT32(&i, 0);
-		g_lingo->code1(i);
+		g_lingo->codeConst(0);
 		g_lingo->code1(g_lingo->c_closeXlib); ;}
     break;
 
   case 97:
-#line 440 "engines/director/lingo/lingo-gr.y"
+#line 424 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 98:
-#line 441 "engines/director/lingo/lingo-gr.y"
+#line 425 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
   case 99:
-#line 452 "engines/director/lingo/lingo-gr.y"
+#line 436 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotoloop); ;}
     break;
 
   case 100:
-#line 453 "engines/director/lingo/lingo-gr.y"
+#line 437 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotonext); ;}
     break;
 
   case 101:
-#line 454 "engines/director/lingo/lingo-gr.y"
+#line 438 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotoprevious); ;}
     break;
 
   case 102:
-#line 455 "engines/director/lingo/lingo-gr.y"
+#line 439 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_goto);
 		g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str());
@@ -2414,7 +2398,7 @@ yyreduce:
     break;
 
   case 103:
-#line 460 "engines/director/lingo/lingo-gr.y"
+#line 444 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_goto);
 		g_lingo->codeString((yyvsp[(2) - (3)].s)->c_str());
@@ -2424,7 +2408,7 @@ yyreduce:
     break;
 
   case 104:
-#line 466 "engines/director/lingo/lingo-gr.y"
+#line 450 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_goto);
 		g_lingo->codeString("");
@@ -2433,102 +2417,102 @@ yyreduce:
     break;
 
   case 105:
-#line 473 "engines/director/lingo/lingo-gr.y"
+#line 457 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(3) - (3)].s); ;}
     break;
 
   case 106:
-#line 474 "engines/director/lingo/lingo-gr.y"
+#line 458 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); ;}
     break;
 
   case 107:
-#line 475 "engines/director/lingo/lingo-gr.y"
+#line 459 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); ;}
     break;
 
   case 108:
-#line 476 "engines/director/lingo/lingo-gr.y"
+#line 460 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 109:
-#line 479 "engines/director/lingo/lingo-gr.y"
+#line 463 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(3) - (3)].s); ;}
     break;
 
   case 110:
-#line 480 "engines/director/lingo/lingo-gr.y"
+#line 464 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); ;}
     break;
 
   case 111:
-#line 481 "engines/director/lingo/lingo-gr.y"
+#line 465 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(3) - (3)].s); ;}
     break;
 
   case 112:
-#line 509 "engines/director/lingo/lingo-gr.y"
+#line 493 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
   case 113:
-#line 510 "engines/director/lingo/lingo-gr.y"
+#line 494 "engines/director/lingo/lingo-gr.y"
     {
-			g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
+			g_lingo->codeConst(0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
 			g_lingo->define(*(yyvsp[(2) - (8)].s), (yyvsp[(4) - (8)].code), (yyvsp[(5) - (8)].narg));
 			g_lingo->_indef = false; ;}
     break;
 
   case 114:
-#line 515 "engines/director/lingo/lingo-gr.y"
+#line 499 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeFactory(*(yyvsp[(2) - (2)].s));
 		;}
     break;
 
   case 115:
-#line 518 "engines/director/lingo/lingo-gr.y"
+#line 502 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; ;}
     break;
 
   case 116:
-#line 519 "engines/director/lingo/lingo-gr.y"
+#line 503 "engines/director/lingo/lingo-gr.y"
     {
-			g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
+			g_lingo->codeConst(0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
 			g_lingo->define(*(yyvsp[(2) - (8)].s), (yyvsp[(4) - (8)].code), (yyvsp[(5) - (8)].narg), &g_lingo->_currentFactory);
 			g_lingo->_indef = false; ;}
     break;
 
   case 117:
-#line 524 "engines/director/lingo/lingo-gr.y"
+#line 508 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
   case 118:
-#line 525 "engines/director/lingo/lingo-gr.y"
+#line 509 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
     break;
 
   case 119:
-#line 526 "engines/director/lingo/lingo-gr.y"
+#line 510 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
   case 120:
-#line 527 "engines/director/lingo/lingo-gr.y"
+#line 511 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
   case 121:
-#line 529 "engines/director/lingo/lingo-gr.y"
+#line 513 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArgStore(); ;}
     break;
 
   case 122:
-#line 533 "engines/director/lingo/lingo-gr.y"
+#line 517 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_call);
 		g_lingo->codeString((yyvsp[(1) - (3)].s)->c_str());
@@ -2538,23 +2522,23 @@ yyreduce:
     break;
 
   case 123:
-#line 541 "engines/director/lingo/lingo-gr.y"
+#line 525 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
   case 124:
-#line 542 "engines/director/lingo/lingo-gr.y"
+#line 526 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
   case 125:
-#line 543 "engines/director/lingo/lingo-gr.y"
+#line 527 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 2558 "engines/director/lingo/lingo-gr.cpp"
+#line 2542 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2768,6 +2752,6 @@ yyreturn:
 }
 
 
-#line 546 "engines/director/lingo/lingo-gr.y"
+#line 530 "engines/director/lingo/lingo-gr.y"
 
 
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index a85644f..882a153 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -132,7 +132,7 @@ asgn: tPUT expr tINTO ID 		{
 		$$ = $4;
 		delete $2; }
 	| tSET vTHEENTITY '=' expr	{
-		g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id
+		g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentityassign);
 		inst e = 0, f = 0;
 		WRITE_UINT32(&e, $2[0]);
@@ -154,7 +154,7 @@ asgn: tPUT expr tINTO ID 		{
 		$$ = $4;
 		delete $2; }
 	| tSET vTHEENTITY tTO expr	{
-		g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id
+		g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentityassign);
 		inst e = 0, f = 0;
 		WRITE_UINT32(&e, $2[0]);
@@ -342,11 +342,7 @@ stmtlist: /* nothing */		{ $$ = g_lingo->_currentScript->size(); }
 	| stmtlist stmt
 	;
 
-expr: vINT		{
-		$$ = g_lingo->code1(g_lingo->c_constpush);
-		inst i = 0;
-		WRITE_UINT32(&i, $1);
-		g_lingo->code1(i); }
+expr: vINT		{ $$ = g_lingo->codeConst($1); }
 	| vFLOAT		{
 		$$ = g_lingo->code1(g_lingo->c_fconstpush);
 		g_lingo->codeFloat($1); }
@@ -355,7 +351,7 @@ expr: vINT		{
 		g_lingo->codeString($1->c_str()); }
 	| vBLTINNOARGS 	{
 		$$ = g_lingo->code1(g_lingo->_handlers[*$1]->u.func);
-		$$ = g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy value
+		g_lingo->codeConst(0); // Put dummy value
 		delete $1; }
 	| ID '(' arglist ')'	{
 		$$ = g_lingo->codeFunc($1, $3);
@@ -365,7 +361,7 @@ expr: vINT		{
 		g_lingo->codeString($1->c_str());
 		delete $1; }
 	| vTHEENTITY	{
-		$$ = g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id
+		$$ = g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentitypush);
 		inst e = 0, f = 0;
 		WRITE_UINT32(&e, $1[0]);
@@ -405,35 +401,23 @@ func: tMCI vSTRING			{ g_lingo->code1(g_lingo->c_mci); g_lingo->codeString($2->c
 	| tMCIWAIT ID			{ g_lingo->code1(g_lingo->c_mciwait); g_lingo->codeString($2->c_str()); delete $2; }
 	| tPUT expr				{ g_lingo->code1(g_lingo->c_printtop); }
 	| gotofunc
-	| tEXIT					{ g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
+	| tEXIT					{ g_lingo->codeConst(0); // Push fake value on stack
 							  g_lingo->code1(g_lingo->c_procret); }
 	| tGLOBAL globallist
 	| tALERT expr			{ g_lingo->code1(g_lingo->c_alert); }
 	| tBEEP vINT			{
-		g_lingo->code1(g_lingo->c_constpush);
-		inst i = 0;
-		WRITE_UINT32(&i, $2);
-		g_lingo->code1(i);
+		g_lingo->codeConst($2);
 		g_lingo->code1(g_lingo->c_beep); }
 	| tBEEP 				{
-		g_lingo->code1(g_lingo->c_constpush);
-		inst i = 0;
-		WRITE_UINT32(&i, 0);
-		g_lingo->code1(i);
+		g_lingo->codeConst(0);
 		g_lingo->code1(g_lingo->c_beep); }
 	| tCLOSERESFILE expr	{ g_lingo->code1(g_lingo->c_closeResFile); }
 	| tCLOSERESFILE 		{
-		g_lingo->code1(g_lingo->c_constpush);
-		inst i = 0;
-		WRITE_UINT32(&i, 0);
-		g_lingo->code1(i);
+		g_lingo->codeConst(0);
 		g_lingo->code1(g_lingo->c_closeResFile); }
 	| tCLOSEXLIB expr	{ g_lingo->code1(g_lingo->c_closeXlib); }
 	| tCLOSEXLIB 		{
-		g_lingo->code1(g_lingo->c_constpush);
-		inst i = 0;
-		WRITE_UINT32(&i, 0);
-		g_lingo->code1(i);
+		g_lingo->codeConst(0);
 		g_lingo->code1(g_lingo->c_closeXlib); }
 	;
 
@@ -508,7 +492,7 @@ gotomovie: tOF tMOVIE vSTRING	{ $$ = $3; }
 //   on keyword
 defn: tMACRO ID { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); }
 		begin argdef nl argstore stmtlist 		{
-			g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
+			g_lingo->codeConst(0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
 			g_lingo->define(*$2, $4, $5);
 			g_lingo->_indef = false; }
@@ -517,7 +501,7 @@ defn: tMACRO ID { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); }
 		}
 	| tMETHOD ID { g_lingo->_indef = true; }
 		begin argdef nl argstore stmtlist 		{
-			g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
+			g_lingo->codeConst(0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
 			g_lingo->define(*$2, $4, $5, &g_lingo->_currentFactory);
 			g_lingo->_indef = false; }	;
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 4b25a57..d2c5f32 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -173,6 +173,7 @@ public:
 	int code3(inst code_1, inst code_2, inst code_3) { int o = code1(code_1); code1(code_2); code1(code_3); return o; }
 	int codeString(const char *s);
 	void codeLabel(int label);
+	int codeConst(int val);
 
 	int calcStringAlignment(const char *s) {
 		return calcCodeAlignment(strlen(s) + 1);


Commit: e52bdfd5ed2043f0bb5f4312d63bc53edf52d5a3
    https://github.com/scummvm/scummvm/commit/e52bdfd5ed2043f0bb5f4312d63bc53edf52d5a3
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-04T23:00:55+02:00

Commit Message:
DIRECTOR: Lingo: Added stubs for 'continue', 'cursor' and 'delay'

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-code.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 15716bf..8a779b9 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -49,6 +49,7 @@ static struct BuiltinProto {
 	{ "string",	Lingo::b_string, 1 },
 	// Misc
 	{ "closeDA",	 	Lingo::b_closeDA, -1 },
+	{ "continue",		Lingo::b_continue, -1 },
 	{ "dontpassevent",	Lingo::b_dontpassevent, -1 },
 	{ "updatestage",	Lingo::b_updatestage, -1 },
 	{ "ilk",	 		Lingo::b_ilk, 1 },
@@ -244,6 +245,10 @@ void Lingo::b_closeDA() {
 	warning("STUB: b_closeDA");
 }
 
+void Lingo::b_continue() {
+	warning("STUB: b_continue");
+}
+
 ///////////////////
 // Point
 ///////////////////
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index db5b013..b6388be 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -723,6 +723,18 @@ void Lingo::c_beep() {
 	g_lingo->func_beep(d.u.i);
 }
 
+void Lingo::c_cursor() {
+	Datum d = g_lingo->pop();
+	d.toInt();
+	warning("STUB: c_cursor(%d)", d.u.i);
+}
+
+void Lingo::c_delay() {
+	Datum d = g_lingo->pop();
+	d.toInt();
+	warning("STUB: c_delay(%d)", d.u.i);
+}
+
 void Lingo::c_call() {
 	Common::String name((char *)&(*g_lingo->_currentScript)[g_lingo->_pc]);
 	g_lingo->_pc += g_lingo->calcStringAlignment(name.c_str());
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index b3eec3f..fa37d73 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -116,21 +116,23 @@
      tBEEP = 305,
      tCLOSERESFILE = 306,
      tCLOSEXLIB = 307,
-     tGE = 308,
-     tLE = 309,
-     tGT = 310,
-     tLT = 311,
-     tEQ = 312,
-     tNEQ = 313,
-     tAND = 314,
-     tOR = 315,
-     tNOT = 316,
-     tCONCAT = 317,
-     tCONTAINS = 318,
-     tSTARTS = 319,
-     tSPRITE = 320,
-     tINTERSECTS = 321,
-     tWITHIN = 322
+     tCURSOR = 308,
+     tDELAY = 309,
+     tGE = 310,
+     tLE = 311,
+     tGT = 312,
+     tLT = 313,
+     tEQ = 314,
+     tNEQ = 315,
+     tAND = 316,
+     tOR = 317,
+     tNOT = 318,
+     tCONCAT = 319,
+     tCONTAINS = 320,
+     tSTARTS = 321,
+     tSPRITE = 322,
+     tINTERSECTS = 323,
+     tWITHIN = 324
    };
 #endif
 /* Tokens.  */
@@ -184,21 +186,23 @@
 #define tBEEP 305
 #define tCLOSERESFILE 306
 #define tCLOSEXLIB 307
-#define tGE 308
-#define tLE 309
-#define tGT 310
-#define tLT 311
-#define tEQ 312
-#define tNEQ 313
-#define tAND 314
-#define tOR 315
-#define tNOT 316
-#define tCONCAT 317
-#define tCONTAINS 318
-#define tSTARTS 319
-#define tSPRITE 320
-#define tINTERSECTS 321
-#define tWITHIN 322
+#define tCURSOR 308
+#define tDELAY 309
+#define tGE 310
+#define tLE 311
+#define tGT 312
+#define tLT 313
+#define tEQ 314
+#define tNEQ 315
+#define tAND 316
+#define tOR 317
+#define tNOT 318
+#define tCONCAT 319
+#define tCONTAINS 320
+#define tSTARTS 321
+#define tSPRITE 322
+#define tINTERSECTS 323
+#define tWITHIN 324
 
 
 
@@ -256,7 +260,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 193 of yacc.c.  */
-#line 260 "engines/director/lingo/lingo-gr.cpp"
+#line 264 "engines/director/lingo/lingo-gr.cpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -269,7 +273,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 273 "engines/director/lingo/lingo-gr.cpp"
+#line 277 "engines/director/lingo/lingo-gr.cpp"
 
 #ifdef short
 # undef short
@@ -482,22 +486,22 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  85
+#define YYFINAL  89
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   801
+#define YYLAST   755
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  81
+#define YYNTOKENS  83
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  34
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  125
+#define YYNRULES  127
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  262
+#define YYNSTATES  266
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   322
+#define YYMAXUTOK   324
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -506,12 +510,12 @@ union yyalloc
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      74,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      76,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,    73,    79,     2,
-      75,    76,    71,    69,    80,    70,     2,    72,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    75,    81,     2,
+      77,    78,    73,    71,    82,    72,     2,    74,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      78,    68,    77,     2,     2,     2,     2,     2,     2,     2,
+      80,    70,    79,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -537,7 +541,7 @@ static const yytype_uint8 yytranslate[] =
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67
+      65,    66,    67,    68,    69
 };
 
 #if YYDEBUG
@@ -554,80 +558,81 @@ static const yytype_uint16 yyprhs[] =
      246,   248,   251,   253,   257,   261,   265,   269,   273,   277,
      281,   285,   289,   293,   297,   300,   304,   308,   312,   316,
      319,   322,   326,   331,   336,   339,   342,   345,   347,   349,
-     352,   355,   358,   360,   363,   365,   368,   370,   372,   376,
-     379,   382,   385,   388,   392,   395,   399,   402,   405,   407,
-     411,   414,   418,   419,   428,   431,   432,   441,   442,   444,
-     448,   453,   454,   458,   459,   461
+     352,   355,   358,   360,   363,   365,   368,   370,   373,   376,
+     378,   382,   385,   388,   391,   394,   398,   401,   405,   408,
+     411,   413,   417,   420,   424,   425,   434,   437,   438,   447,
+     448,   450,   454,   459,   460,   464,   465,   467
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      82,     0,    -1,    82,    83,    84,    -1,    84,    -1,     1,
-      74,    -1,    74,    -1,    -1,   108,    -1,   103,    -1,   113,
-      -1,    85,    -1,    87,    -1,    38,   102,    29,    19,    -1,
-      40,    19,    68,   102,    -1,    40,    12,    68,   102,    -1,
-      40,    13,   102,    68,   102,    -1,    40,    19,    42,   102,
-      -1,    40,    12,    42,   102,    -1,    40,    13,   102,    42,
-     102,    -1,   102,    -1,   103,    -1,    86,    -1,    88,    -1,
-      95,    75,    94,    76,   101,   100,    23,    39,    -1,    96,
-      68,   102,   100,    42,   102,   100,   101,   100,    23,    39,
-      -1,    96,    68,   102,   100,    20,    42,   102,   100,   101,
-     100,    23,    39,    -1,    43,    19,    41,   102,    -1,    97,
-      94,    41,    83,   101,   100,    23,    28,    -1,    97,    94,
-      41,    83,   101,   100,    46,   101,   100,    23,    28,    -1,
-      97,    94,    41,    83,   101,   100,    99,    90,   100,    23,
-      28,    -1,    97,    94,    41,    99,    86,   100,    -1,    97,
-      94,    41,    99,    86,   100,    46,    99,    86,   100,    -1,
-      97,    94,    41,    99,    86,   100,    91,   100,    89,   100,
-      -1,    -1,    46,    99,    86,    -1,    90,    93,    -1,    93,
-      -1,    91,    92,    -1,    92,    -1,    98,    94,    41,    99,
-      87,   100,    -1,    91,    -1,    98,    94,    41,   101,   100,
-      -1,   102,    -1,   102,    68,   102,    -1,    75,    94,    76,
+      84,     0,    -1,    84,    85,    86,    -1,    86,    -1,     1,
+      76,    -1,    76,    -1,    -1,   110,    -1,   105,    -1,   115,
+      -1,    87,    -1,    89,    -1,    38,   104,    29,    19,    -1,
+      40,    19,    70,   104,    -1,    40,    12,    70,   104,    -1,
+      40,    13,   104,    70,   104,    -1,    40,    19,    42,   104,
+      -1,    40,    12,    42,   104,    -1,    40,    13,   104,    42,
+     104,    -1,   104,    -1,   105,    -1,    88,    -1,    90,    -1,
+      97,    77,    96,    78,   103,   102,    23,    39,    -1,    98,
+      70,   104,   102,    42,   104,   102,   103,   102,    23,    39,
+      -1,    98,    70,   104,   102,    20,    42,   104,   102,   103,
+     102,    23,    39,    -1,    43,    19,    41,   104,    -1,    99,
+      96,    41,    85,   103,   102,    23,    28,    -1,    99,    96,
+      41,    85,   103,   102,    46,   103,   102,    23,    28,    -1,
+      99,    96,    41,    85,   103,   102,   101,    92,   102,    23,
+      28,    -1,    99,    96,    41,   101,    88,   102,    -1,    99,
+      96,    41,   101,    88,   102,    46,   101,    88,   102,    -1,
+      99,    96,    41,   101,    88,   102,    93,   102,    91,   102,
+      -1,    -1,    46,   101,    88,    -1,    92,    95,    -1,    95,
+      -1,    93,    94,    -1,    94,    -1,   100,    96,    41,   101,
+      89,   102,    -1,    93,    -1,   100,    96,    41,   103,   102,
+      -1,   104,    -1,   104,    70,   104,    -1,    77,    96,    78,
       -1,    39,    45,    -1,    39,    44,    19,    -1,    28,    -1,
-      22,    -1,    -1,    -1,    -1,   101,    83,    -1,   101,    87,
+      22,    -1,    -1,    -1,    -1,   103,    85,    -1,   103,    89,
       -1,    11,    -1,    14,    -1,    17,    -1,    16,    -1,    19,
-      75,   114,    76,    -1,    19,    -1,    12,    -1,    13,   102,
-      -1,    85,    -1,   102,    69,   102,    -1,   102,    70,   102,
-      -1,   102,    71,   102,    -1,   102,    72,   102,    -1,   102,
-      77,   102,    -1,   102,    78,   102,    -1,   102,    58,   102,
-      -1,   102,    53,   102,    -1,   102,    54,   102,    -1,   102,
-      59,   102,    -1,   102,    60,   102,    -1,    61,   102,    -1,
-     102,    79,   102,    -1,   102,    62,   102,    -1,   102,    63,
-     102,    -1,   102,    64,   102,    -1,    69,   102,    -1,    70,
-     102,    -1,    75,   102,    76,    -1,    65,   102,    66,   102,
-      -1,    65,   102,    67,   102,    -1,    32,    17,    -1,    33,
-      19,    -1,    38,   102,    -1,   105,    -1,    24,    -1,    26,
-     104,    -1,    49,   102,    -1,    50,    11,    -1,    50,    -1,
-      51,   102,    -1,    51,    -1,    52,   102,    -1,    52,    -1,
-      19,    -1,   104,    80,    19,    -1,    27,    30,    -1,    27,
-      35,    -1,    27,    37,    -1,    27,   106,    -1,    27,   106,
-     107,    -1,    27,   107,    -1,    42,    25,    17,    -1,    25,
-      17,    -1,    42,    17,    -1,    17,    -1,    36,    34,    17,
-      -1,    34,    17,    -1,    42,    34,    17,    -1,    -1,    31,
-      19,   109,    99,   111,    83,   112,   101,    -1,    47,    19,
-      -1,    -1,    48,    19,   110,    99,   111,    83,   112,   101,
-      -1,    -1,    19,    -1,   111,    80,    19,    -1,   111,    83,
-      80,    19,    -1,    -1,    19,    99,   114,    -1,    -1,   102,
-      -1,   114,    80,   102,    -1
+      77,   116,    78,    -1,    19,    -1,    12,    -1,    13,   104,
+      -1,    87,    -1,   104,    71,   104,    -1,   104,    72,   104,
+      -1,   104,    73,   104,    -1,   104,    74,   104,    -1,   104,
+      79,   104,    -1,   104,    80,   104,    -1,   104,    60,   104,
+      -1,   104,    55,   104,    -1,   104,    56,   104,    -1,   104,
+      61,   104,    -1,   104,    62,   104,    -1,    63,   104,    -1,
+     104,    81,   104,    -1,   104,    64,   104,    -1,   104,    65,
+     104,    -1,   104,    66,   104,    -1,    71,   104,    -1,    72,
+     104,    -1,    77,   104,    78,    -1,    67,   104,    68,   104,
+      -1,    67,   104,    69,   104,    -1,    32,    17,    -1,    33,
+      19,    -1,    38,   104,    -1,   107,    -1,    24,    -1,    26,
+     106,    -1,    49,   104,    -1,    50,    11,    -1,    50,    -1,
+      51,   104,    -1,    51,    -1,    52,   104,    -1,    52,    -1,
+      53,   104,    -1,    54,   104,    -1,    19,    -1,   106,    82,
+      19,    -1,    27,    30,    -1,    27,    35,    -1,    27,    37,
+      -1,    27,   108,    -1,    27,   108,   109,    -1,    27,   109,
+      -1,    42,    25,    17,    -1,    25,    17,    -1,    42,    17,
+      -1,    17,    -1,    36,    34,    17,    -1,    34,    17,    -1,
+      42,    34,    17,    -1,    -1,    31,    19,   111,   101,   113,
+      85,   114,   103,    -1,    47,    19,    -1,    -1,    48,    19,
+     112,   101,   113,    85,   114,   103,    -1,    -1,    19,    -1,
+     113,    82,    19,    -1,   113,    85,    82,    19,    -1,    -1,
+      19,   101,   116,    -1,    -1,   104,    -1,   116,    82,   104,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   104,   104,   105,   106,   109,   114,   115,   116,   117,
-     118,   119,   122,   128,   134,   142,   150,   156,   164,   173,
-     174,   176,   177,   182,   193,   209,   221,   226,   233,   242,
-     251,   261,   271,   282,   283,   286,   287,   290,   291,   294,
-     302,   303,   311,   312,   313,   315,   317,   323,   329,   336,
-     338,   340,   341,   342,   345,   346,   349,   352,   356,   359,
-     363,   370,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,   385,   386,   387,   388,   389,   390,   391,   392,   393,
-     394,   395,   396,   397,   400,   401,   402,   403,   404,   406,
-     407,   408,   411,   414,   415,   418,   419,   424,   425,   436,
-     437,   438,   439,   444,   450,   457,   458,   459,   460,   463,
-     464,   465,   493,   493,   499,   502,   502,   508,   509,   510,
-     511,   513,   517,   525,   526,   527
+       0,   105,   105,   106,   107,   110,   115,   116,   117,   118,
+     119,   120,   123,   129,   135,   143,   151,   157,   165,   174,
+     175,   177,   178,   183,   194,   210,   222,   227,   234,   243,
+     252,   262,   272,   283,   284,   287,   288,   291,   292,   295,
+     303,   304,   312,   313,   314,   316,   318,   324,   330,   337,
+     339,   341,   342,   343,   346,   347,   350,   353,   357,   360,
+     364,   371,   377,   378,   379,   380,   381,   382,   383,   384,
+     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+     395,   396,   397,   398,   401,   402,   403,   404,   405,   407,
+     408,   409,   412,   415,   416,   419,   420,   423,   424,   427,
+     428,   439,   440,   441,   442,   447,   453,   460,   461,   462,
+     463,   466,   467,   468,   496,   496,   502,   505,   505,   511,
+     512,   513,   514,   516,   520,   528,   529,   530
 };
 #endif
 
@@ -644,15 +649,16 @@ static const char *const yytname[] =
   "tMCIWAIT", "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT",
   "tSET", "tTHEN", "tTO", "tWHEN", "tWITH", "tWHILE", "tNLELSE",
   "tFACTORY", "tMETHOD", "tALERT", "tBEEP", "tCLOSERESFILE", "tCLOSEXLIB",
-  "tGE", "tLE", "tGT", "tLT", "tEQ", "tNEQ", "tAND", "tOR", "tNOT",
-  "tCONCAT", "tCONTAINS", "tSTARTS", "tSPRITE", "tINTERSECTS", "tWITHIN",
-  "'='", "'+'", "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "'>'",
-  "'<'", "'&'", "','", "$accept", "program", "nl", "programline", "asgn",
-  "stmtoneliner", "stmt", "ifstmt", "elsestmtoneliner", "elseifstmt",
-  "elseifstmtoneliner", "elseifstmtoneliner1", "elseifstmt1", "cond",
-  "repeatwhile", "repeatwith", "if", "elseif", "begin", "end", "stmtlist",
-  "expr", "func", "globallist", "gotofunc", "gotoframe", "gotomovie",
-  "defn", "@1", "@2", "argdef", "argstore", "macro", "arglist", 0
+  "tCURSOR", "tDELAY", "tGE", "tLE", "tGT", "tLT", "tEQ", "tNEQ", "tAND",
+  "tOR", "tNOT", "tCONCAT", "tCONTAINS", "tSTARTS", "tSPRITE",
+  "tINTERSECTS", "tWITHIN", "'='", "'+'", "'-'", "'*'", "'/'", "'%'",
+  "'\\n'", "'('", "')'", "'>'", "'<'", "'&'", "','", "$accept", "program",
+  "nl", "programline", "asgn", "stmtoneliner", "stmt", "ifstmt",
+  "elsestmtoneliner", "elseifstmt", "elseifstmtoneliner",
+  "elseifstmtoneliner1", "elseifstmt1", "cond", "repeatwhile",
+  "repeatwith", "if", "elseif", "begin", "end", "stmtlist", "expr", "func",
+  "globallist", "gotofunc", "gotoframe", "gotomovie", "defn", "@1", "@2",
+  "argdef", "argstore", "macro", "arglist", 0
 };
 #endif
 
@@ -667,28 +673,28 @@ static const yytype_uint16 yytoknum[] =
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,    61,    43,
-      45,    42,    47,    37,    10,    40,    41,    62,    60,    38,
-      44
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+      61,    43,    45,    42,    47,    37,    10,    40,    41,    62,
+      60,    38,    44
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    81,    82,    82,    82,    83,    84,    84,    84,    84,
-      84,    84,    85,    85,    85,    85,    85,    85,    85,    86,
-      86,    87,    87,    87,    87,    87,    87,    88,    88,    88,
-      88,    88,    88,    89,    89,    90,    90,    91,    91,    92,
-      93,    93,    94,    94,    94,    95,    96,    97,    98,    99,
-     100,   101,   101,   101,   102,   102,   102,   102,   102,   102,
-     102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
-     102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
-     102,   102,   102,   102,   103,   103,   103,   103,   103,   103,
-     103,   103,   103,   103,   103,   103,   103,   104,   104,   105,
-     105,   105,   105,   105,   105,   106,   106,   106,   106,   107,
-     107,   107,   109,   108,   108,   110,   108,   111,   111,   111,
-     111,   112,   113,   114,   114,   114
+       0,    83,    84,    84,    84,    85,    86,    86,    86,    86,
+      86,    86,    87,    87,    87,    87,    87,    87,    87,    88,
+      88,    89,    89,    89,    89,    89,    89,    90,    90,    90,
+      90,    90,    90,    91,    91,    92,    92,    93,    93,    94,
+      95,    95,    96,    96,    96,    97,    98,    99,   100,   101,
+     102,   103,   103,   103,   104,   104,   104,   104,   104,   104,
+     104,   104,   104,   104,   104,   104,   104,   104,   104,   104,
+     104,   104,   104,   104,   104,   104,   104,   104,   104,   104,
+     104,   104,   104,   104,   105,   105,   105,   105,   105,   105,
+     105,   105,   105,   105,   105,   105,   105,   105,   105,   106,
+     106,   107,   107,   107,   107,   107,   107,   108,   108,   108,
+     108,   109,   109,   109,   111,   110,   110,   112,   110,   113,
+     113,   113,   113,   114,   115,   116,   116,   116
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -703,10 +709,10 @@ static const yytype_uint8 yyr2[] =
        1,     2,     1,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     2,     3,     3,     3,     3,     2,
        2,     3,     4,     4,     2,     2,     2,     1,     1,     2,
-       2,     2,     1,     2,     1,     2,     1,     1,     3,     2,
-       2,     2,     2,     3,     2,     3,     2,     2,     1,     3,
-       2,     3,     0,     8,     2,     0,     8,     0,     1,     3,
-       4,     0,     3,     0,     1,     3
+       2,     2,     1,     2,     1,     2,     1,     2,     2,     1,
+       3,     2,     2,     2,     2,     3,     2,     3,     2,     2,
+       1,     3,     2,     3,     0,     8,     2,     0,     8,     0,
+       1,     3,     4,     0,     3,     0,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -717,82 +723,82 @@ static const yytype_uint8 yydefact[] =
        0,     0,    54,    60,     0,    55,    57,    56,    49,    88,
        0,     0,    47,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    92,    94,    96,     0,     0,     0,     0,
-       0,     0,     3,    62,    21,    11,    22,     0,     0,     0,
-      19,     8,    87,     7,     9,     4,    59,     0,    62,    61,
-     123,   123,    97,    89,   108,     0,    99,     0,   100,     0,
-     101,     0,   102,   104,   112,    84,    85,    86,     0,    45,
-       0,     0,     0,     0,   114,   115,    90,    91,    93,    95,
-      74,     0,    79,    80,     0,     1,     5,     6,     0,     0,
-       0,     0,    42,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   124,
-       0,   122,     0,   106,   110,     0,   107,     0,     0,     0,
-     103,    49,     0,    46,     0,     0,     0,     0,     0,     0,
-      49,     0,     0,    81,     2,     0,    50,     0,     0,    49,
-       0,    70,    71,    69,    72,    73,    76,    77,    78,    63,
-      64,    65,    66,    67,    68,    75,    58,     0,    98,   109,
-     105,   111,   117,    12,    17,    14,     0,     0,    16,    13,
-      26,   117,    82,    83,    51,     0,    44,    51,     0,    43,
-     125,   118,     0,    18,    15,     0,    50,     0,     0,    50,
-      50,    20,     0,   121,   121,    52,    53,     0,     0,    50,
-      49,    30,   119,     0,    51,    51,     0,    50,    51,     0,
-      51,     0,    48,    49,    50,    38,     0,   120,   113,   116,
-      23,    51,    50,    27,    50,    50,    40,    36,     0,     0,
-      37,    33,     0,    50,     0,     0,    35,     0,     0,    50,
-      49,    50,    49,     0,     0,     0,     0,    49,    31,     0,
-      32,     0,     0,    24,    28,    29,    50,    34,    50,    25,
-      41,    39
+       0,     0,     0,     0,     3,    62,    21,    11,    22,     0,
+       0,     0,    19,     8,    87,     7,     9,     4,    59,     0,
+      62,    61,   125,   125,    99,    89,   110,     0,   101,     0,
+     102,     0,   103,     0,   104,   106,   114,    84,    85,    86,
+       0,    45,     0,     0,     0,     0,   116,   117,    90,    91,
+      93,    95,    97,    98,    74,     0,    79,    80,     0,     1,
+       5,     6,     0,     0,     0,     0,    42,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   126,     0,   124,     0,   108,   112,     0,
+     109,     0,     0,     0,   105,    49,     0,    46,     0,     0,
+       0,     0,     0,     0,    49,     0,     0,    81,     2,     0,
+      50,     0,     0,    49,     0,    70,    71,    69,    72,    73,
+      76,    77,    78,    63,    64,    65,    66,    67,    68,    75,
+      58,     0,   100,   111,   107,   113,   119,    12,    17,    14,
+       0,     0,    16,    13,    26,   119,    82,    83,    51,     0,
+      44,    51,     0,    43,   127,   120,     0,    18,    15,     0,
+      50,     0,     0,    50,    50,    20,     0,   123,   123,    52,
+      53,     0,     0,    50,    49,    30,   121,     0,    51,    51,
+       0,    50,    51,     0,    51,     0,    48,    49,    50,    38,
+       0,   122,   115,   118,    23,    51,    50,    27,    50,    50,
+      40,    36,     0,     0,    37,    33,     0,    50,     0,     0,
+      35,     0,     0,    50,    49,    50,    49,     0,     0,     0,
+       0,    49,    31,     0,    32,     0,     0,    24,    28,    29,
+      50,    34,    50,    25,    41,    39
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    31,   195,    32,    48,    34,   196,    36,   241,   225,
-     226,   215,   227,    91,    37,    38,    39,   216,   251,   175,
-     186,    40,   191,    53,    42,    62,    63,    43,   121,   130,
-     182,   204,    44,   110
+      -1,    33,   199,    34,    50,    36,   200,    38,   245,   229,
+     230,   219,   231,    95,    39,    40,    41,   220,   255,   179,
+     190,    42,   195,    55,    44,    64,    65,    45,   125,   134,
+     186,   208,    46,   114
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -192
+#define YYPACT_NINF -181
 static const yytype_int16 yypact[] =
 {
-     196,   -57,  -192,  -192,   105,  -192,  -192,  -192,   695,  -192,
-      26,   147,  -192,    28,     5,    31,   105,    14,    70,    49,
-      56,    60,   105,     9,   105,   105,   105,   105,   105,   105,
-     105,     3,  -192,     4,  -192,  -192,  -192,    13,    43,   530,
-     226,  -192,  -192,  -192,  -192,  -192,    18,   105,  -192,   226,
-     105,   105,  -192,    35,  -192,    77,  -192,    96,  -192,    91,
-    -192,    29,    38,  -192,  -192,  -192,  -192,   544,   109,  -192,
-     -34,   105,   -32,    95,  -192,  -192,   226,  -192,   226,   226,
-       7,   597,     7,     7,   646,  -192,  -192,   302,   530,   105,
-     530,    97,   673,   105,   105,   105,   105,   105,   105,   105,
-     105,   105,   105,   105,   105,   105,   105,   105,   544,   226,
-     -61,    57,   120,  -192,  -192,   123,  -192,   124,   127,   112,
-    -192,  -192,   129,  -192,   105,   105,   575,   105,   105,   105,
-    -192,   105,   105,  -192,  -192,    73,   226,    74,   619,    78,
-     105,   226,   226,   226,   226,   226,   226,   226,   226,   722,
-     722,     7,     7,   226,   226,   226,  -192,   105,  -192,  -192,
-    -192,  -192,   132,  -192,   226,   226,   105,   105,   226,   226,
-     226,   132,   226,   226,  -192,     1,  -192,  -192,   487,   226,
-     226,  -192,   -23,   226,   226,   -23,   362,   113,   105,   362,
-    -192,  -192,   135,    80,    80,  -192,  -192,   134,   105,   226,
-      -9,    -6,  -192,   139,  -192,  -192,   122,   226,  -192,   137,
-    -192,   140,  -192,  -192,   140,  -192,   530,  -192,   362,   362,
-    -192,  -192,   362,  -192,   362,   140,   140,  -192,   530,   487,
-    -192,   117,   126,   362,   148,   150,  -192,   153,   138,  -192,
-    -192,  -192,  -192,   155,   146,   158,   159,   -10,  -192,   487,
-    -192,   427,   149,  -192,  -192,  -192,   362,  -192,  -192,  -192,
-    -192,  -192
+     200,   -64,  -181,  -181,    52,  -181,  -181,  -181,    88,  -181,
+      -5,   141,  -181,     4,    29,    28,    52,    40,    64,    63,
+      68,    69,    52,    11,    52,    52,    52,    52,    52,    52,
+      52,    52,    52,     3,  -181,     5,  -181,  -181,  -181,   -20,
+      16,   540,   226,  -181,  -181,  -181,  -181,  -181,    12,    52,
+    -181,   226,    52,    52,  -181,   -34,  -181,    76,  -181,    80,
+    -181,    83,  -181,    33,    38,  -181,  -181,  -181,  -181,   521,
+     101,  -181,   -33,    52,   -32,    81,  -181,  -181,   226,  -181,
+     226,   226,   226,   226,   126,   576,   126,   126,   625,  -181,
+    -181,   304,   540,    52,   540,    84,   652,    52,    52,    52,
+      52,    52,    52,    52,    52,    52,    52,    52,    52,    52,
+      52,    52,   521,   226,   -22,    39,   107,  -181,  -181,   111,
+    -181,   115,   123,   108,  -181,  -181,   122,  -181,    52,    52,
+     554,    52,    52,    52,  -181,    52,    52,  -181,  -181,    77,
+     226,    78,   598,    71,    52,   226,   226,   226,   226,   226,
+     226,   226,   226,   674,   674,   126,   126,   226,   226,   226,
+    -181,    52,  -181,  -181,  -181,  -181,   140,  -181,   226,   226,
+      52,    52,   226,   226,   226,   140,   226,   226,  -181,    20,
+    -181,  -181,   495,   226,   226,  -181,   -61,   226,   226,   -61,
+     366,   103,    52,   366,  -181,  -181,   145,    92,    92,  -181,
+    -181,   147,    52,   226,    -4,    -2,  -181,   160,  -181,  -181,
+     146,   226,  -181,   152,  -181,   162,  -181,  -181,   162,  -181,
+     540,  -181,   366,   366,  -181,  -181,   366,  -181,   366,   162,
+     162,  -181,   540,   495,  -181,   143,   154,   366,   170,   173,
+    -181,   175,   158,  -181,  -181,  -181,  -181,   179,   164,   180,
+     181,    -6,  -181,   495,  -181,   433,   176,  -181,  -181,  -181,
+     366,  -181,  -181,  -181,  -181,  -181
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -192,  -192,   -29,   104,    25,  -173,     0,  -192,  -192,  -192,
-      -3,  -191,   -33,   -81,  -192,  -192,  -192,  -163,    -7,    69,
-    -166,     2,    33,  -192,  -192,  -192,   133,  -192,  -192,  -192,
-      23,     8,  -192,   152
+    -181,  -181,   -29,   127,     7,  -180,     0,  -181,  -181,  -181,
+      15,  -169,    -8,   -81,  -181,  -181,  -181,  -170,    -7,    67,
+    -173,     2,    25,  -181,  -181,  -181,   159,  -181,  -181,  -181,
+      50,    31,  -181,   177
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -802,172 +808,162 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -60
 static const yytype_int16 yytable[] =
 {
-      35,    51,    87,    85,   -10,   190,    49,   135,   124,   137,
-     127,   189,   -51,   -51,   209,   156,   212,    45,    67,   157,
-      77,   187,    65,   230,    76,    33,    78,    79,    80,    81,
-      82,    83,    84,    41,   125,   230,   128,   210,   218,   219,
-     213,    92,   222,   188,   224,    52,   116,    64,   228,   108,
-      66,    86,   109,   109,   117,   233,   239,   192,    68,    69,
-      93,    94,   228,   118,   -51,    95,    96,    97,    73,    98,
-      99,   100,    57,   126,    59,    74,   257,    86,   -10,    75,
-     119,   256,    70,    71,   105,   106,   107,    35,    88,    72,
-      92,   136,   138,    50,   113,   141,   142,   143,   144,   145,
+      37,    53,   194,    89,    91,   -10,    51,    35,   193,   128,
+     131,   139,    47,   141,    54,    90,   -51,   -51,    69,   213,
+     216,   196,    79,    66,    78,    43,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,   222,   223,   129,   132,   226,
+     191,   228,   214,    96,   217,   232,    67,    68,   116,   234,
+     120,   112,   237,   243,   113,   113,   160,    92,   121,   232,
+     161,   234,   192,     2,     3,     4,     5,   122,     6,     7,
+     -51,    48,    59,   261,    61,   130,    72,    73,   260,    90,
+     123,   -10,    75,    74,    70,    71,    93,    76,    77,    52,
+      49,    37,    18,   117,    96,   140,   142,   118,    35,   145,
      146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     177,    89,    33,   114,   162,   112,     2,     3,     4,     5,
-      41,     6,     7,   171,    46,   115,   164,   165,   123,   168,
-     169,   170,   178,   172,   173,   232,   129,   157,   139,   158,
-     159,   160,   179,    47,   161,    18,   118,   238,   163,   174,
-     176,   181,    86,   193,   202,   198,   194,   206,   217,   180,
-     203,   220,   212,   240,    54,   223,    26,   242,   183,   184,
-      27,   244,    55,   245,    28,    29,   246,    56,   252,   247,
-      30,    57,    58,    59,    60,   253,   254,   255,   259,    61,
-     199,   134,   236,   211,   185,   120,    -6,     1,   214,     0,
-     207,     0,   205,   111,     0,     0,   229,     2,     3,     4,
-       5,     0,     6,     7,     0,     8,     0,     0,    92,     0,
-       9,     0,    10,    11,    12,     0,     0,    13,    14,    15,
-      92,     0,     0,   249,    16,    17,    18,     0,     0,    19,
-       0,     0,     0,    20,    21,    22,    23,    24,    25,     0,
-       0,   258,     0,     0,     0,   197,     0,    26,   200,   201,
-       0,    27,     0,     0,     0,    28,    29,     0,   208,     0,
-      -6,    30,     0,     0,     0,     0,   221,     0,     0,    93,
-      94,     0,     0,   231,    95,    96,    97,     0,    98,    99,
-     100,   234,     0,   235,   237,   101,   102,   103,   104,     0,
-       0,     0,   243,   105,   106,   107,     0,     0,   248,     0,
-     250,     0,     0,     2,     3,     4,     5,     0,     6,     7,
-       0,     8,     0,     0,     0,   260,     9,   261,    10,    11,
-      12,     0,     0,    13,    14,    15,     0,     0,     0,     0,
-      16,    17,    18,     0,     0,    19,     0,     0,     0,    20,
-      21,    22,    23,    24,    25,     0,     0,     0,     0,     0,
-       0,     0,     0,    26,     0,     0,     0,    27,     0,     0,
-       0,    28,    29,     2,     3,     4,     5,    30,     6,     7,
-       0,    46,     0,     0,     0,     0,     9,     0,    10,    11,
-      12,     0,     0,     0,    14,    15,     0,     0,     0,     0,
-      16,    17,    18,     0,     0,    19,     0,     0,     0,     0,
-       0,    22,    23,    24,    25,     0,     0,     0,     0,     0,
-       0,     0,     0,    26,     0,     0,     0,    27,     0,     0,
-       0,    28,    29,     0,     0,     0,    86,    30,     2,     3,
-       4,     5,     0,     6,     7,     0,    46,     0,     0,     0,
-       0,     9,     0,    10,    11,    12,     0,     0,     0,    14,
-      15,     0,     0,     0,     0,    16,    17,    18,     0,     0,
-      19,     0,     0,     0,     0,     0,    22,    23,    24,    25,
-       0,     0,     0,     0,     0,     0,     0,     0,    26,     0,
-       0,     0,    27,     0,     0,     0,    28,    29,     2,     3,
-       4,     5,    30,     6,     7,     0,    46,     0,     0,     0,
-       0,     9,     0,    10,    11,     0,     0,     0,     0,    14,
-      15,     0,     0,     0,     0,    16,     0,    18,     0,     0,
-       0,     0,     0,     0,     0,     0,    22,    23,    24,    25,
-       0,     2,     3,     4,     5,     0,     6,     7,    26,    46,
-       0,     0,    27,     0,     0,     0,    28,    29,     0,     0,
-       0,     0,    30,     0,     0,     0,     0,     0,    47,     0,
-      18,     0,     0,   122,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    26,     0,     0,     0,    27,     0,    93,    94,    28,
-      29,     0,    95,    96,    97,    90,    98,    99,   100,     0,
-       0,     0,     0,   101,   102,   103,   104,   166,     0,     0,
-       0,   105,   106,   107,     0,     0,     0,     0,    93,    94,
-       0,     0,     0,    95,    96,    97,     0,    98,    99,   100,
-       0,     0,     0,   167,   101,   102,   103,   104,     0,     0,
-      93,    94,   105,   106,   107,    95,    96,    97,     0,    98,
-      99,   100,     0,   131,   132,     0,   101,   102,   103,   104,
-       0,     0,    93,    94,   105,   106,   107,    95,    96,    97,
-       0,    98,    99,   100,     0,     0,     0,   140,   101,   102,
-     103,   104,     0,     0,     0,   133,   105,   106,   107,    93,
-      94,     0,     0,     0,    95,    96,    97,     0,    98,    99,
-     100,     0,     0,     0,     0,   101,   102,   103,   104,     0,
-       0,     0,   133,   105,   106,   107,    93,    94,     0,     0,
-       0,    95,    96,    97,     0,    98,    99,   100,     0,     0,
-       0,   140,   101,   102,   103,   104,     0,     0,   -59,   -59,
-     105,   106,   107,   -59,   -59,   -59,     0,   -59,   -59,   -59,
-       0,     0,     0,     0,     0,     0,   -59,   -59,     0,     0,
-      50,     0,   -59,   -59,   -59,    93,    94,     0,     0,     0,
-      95,    96,    97,     0,    98,    99,   100,     0,     0,     0,
-       0,     0,     0,   103,   104,     0,     0,     0,     0,   105,
-     106,   107
+     156,   157,   158,   159,   181,    28,    43,   119,   166,    29,
+     127,   161,   133,    30,    31,   143,   162,   175,   163,    32,
+     168,   169,   164,   172,   173,   174,   182,   176,   177,   236,
+     165,   167,   122,   -59,   -59,   202,   183,    90,   -59,   -59,
+     -59,   242,   -59,   -59,   -59,   178,   180,   197,    56,   185,
+     198,   -59,   -59,   184,   206,    52,    57,   -59,   -59,   -59,
+     210,    58,   187,   188,   207,    59,    60,    61,    62,   221,
+     227,    97,    98,    63,   216,   224,    99,   100,   101,   244,
+     102,   103,   104,   248,   203,   246,   249,   215,   250,   251,
+      -6,     1,   256,   257,   211,   109,   110,   111,   258,   259,
+     233,     2,     3,     4,     5,   263,     6,     7,   138,     8,
+     218,   240,    96,   124,     9,   189,    10,    11,    12,   209,
+     115,    13,    14,    15,    96,     0,     0,   253,    16,    17,
+      18,     0,     0,    19,     0,     0,     0,    20,    21,    22,
+      23,    24,    25,    26,    27,   262,     0,   201,     0,     0,
+     204,   205,     0,    28,     0,     0,     0,    29,     0,     0,
+     212,    30,    31,     0,     0,     0,    -6,    32,   225,     0,
+       0,    97,    98,     0,     0,   235,    99,   100,   101,     0,
+     102,   103,   104,   238,     0,   239,   241,   105,   106,   107,
+     108,     0,     0,     0,   247,   109,   110,   111,     0,     0,
+     252,     0,   254,     0,     0,     2,     3,     4,     5,     0,
+       6,     7,     0,     8,     0,     0,     0,   264,     9,   265,
+      10,    11,    12,     0,     0,    13,    14,    15,     0,     0,
+       0,     0,    16,    17,    18,     0,     0,    19,     0,     0,
+       0,    20,    21,    22,    23,    24,    25,    26,    27,     0,
+       0,     0,     0,     0,     0,     0,     0,    28,     0,     0,
+       0,    29,     0,     0,     0,    30,    31,     2,     3,     4,
+       5,    32,     6,     7,     0,    48,     0,     0,     0,     0,
+       9,     0,    10,    11,    12,     0,     0,     0,    14,    15,
+       0,     0,     0,     0,    16,    17,    18,     0,     0,    19,
+       0,     0,     0,     0,     0,    22,    23,    24,    25,    26,
+      27,     0,     0,     0,     0,     0,     0,     0,     0,    28,
+       0,     0,     0,    29,     0,     0,     0,    30,    31,     0,
+       0,     0,    90,    32,     2,     3,     4,     5,     0,     6,
+       7,     0,    48,     0,     0,     0,     0,     9,     0,    10,
+      11,    12,     0,     0,     0,    14,    15,     0,     0,     0,
+       0,    16,    17,    18,     0,     0,    19,     0,     0,     0,
+       0,     0,    22,    23,    24,    25,    26,    27,     0,     0,
+       0,     0,     0,     0,     0,     0,    28,     0,     0,     0,
+      29,     0,     0,     0,    30,    31,     2,     3,     4,     5,
+      32,     6,     7,     0,    48,     0,     0,     0,     0,     9,
+       0,    10,    11,     0,     0,     0,     0,    14,    15,     0,
+       0,     0,     0,    16,     0,    18,     0,     0,     0,     0,
+       0,     0,     0,     0,    22,    23,    24,    25,    26,    27,
+     126,     2,     3,     4,     5,     0,     6,     7,    28,    48,
+       0,     0,    29,     0,     0,     0,    30,    31,     0,     0,
+       0,     0,    32,     0,     0,     0,    97,    98,    49,     0,
+      18,    99,   100,   101,     0,   102,   103,   104,     0,     0,
+       0,     0,   105,   106,   107,   108,   170,     0,     0,     0,
+     109,   110,   111,    28,     0,     0,     0,    29,     0,    97,
+      98,    30,    31,     0,    99,   100,   101,    94,   102,   103,
+     104,     0,     0,     0,   171,   105,   106,   107,   108,     0,
+       0,    97,    98,   109,   110,   111,    99,   100,   101,     0,
+     102,   103,   104,     0,   135,   136,     0,   105,   106,   107,
+     108,     0,     0,    97,    98,   109,   110,   111,    99,   100,
+     101,     0,   102,   103,   104,     0,     0,     0,   144,   105,
+     106,   107,   108,     0,     0,     0,   137,   109,   110,   111,
+      97,    98,     0,     0,     0,    99,   100,   101,     0,   102,
+     103,   104,     0,     0,     0,     0,   105,   106,   107,   108,
+       0,     0,     0,   137,   109,   110,   111,    97,    98,     0,
+       0,     0,    99,   100,   101,     0,   102,   103,   104,     0,
+       0,     0,   144,   105,   106,   107,   108,     0,     0,    97,
+      98,   109,   110,   111,    99,   100,   101,     0,   102,   103,
+     104,     0,     0,     0,     0,     0,     0,   107,   108,     0,
+       0,     0,     0,   109,   110,   111
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,     8,    31,     0,     0,   178,     4,    88,    42,    90,
-      42,   177,    22,    23,    23,    76,    22,    74,    16,    80,
-      11,    20,    17,   214,    22,     0,    24,    25,    26,    27,
-      28,    29,    30,     0,    68,   226,    68,    46,   204,   205,
-      46,    39,   208,    42,   210,    19,    17,    19,   211,    47,
-      19,    74,    50,    51,    25,   221,   229,    80,    44,    45,
-      53,    54,   225,    34,    74,    58,    59,    60,    19,    62,
-      63,    64,    34,    71,    36,    19,   249,    74,    74,    19,
-      42,   247,    12,    13,    77,    78,    79,    87,    75,    19,
-      88,    89,    90,    75,    17,    93,    94,    95,    96,    97,
+       0,     8,   182,     0,    33,     0,     4,     0,   181,    42,
+      42,    92,    76,    94,    19,    76,    22,    23,    16,    23,
+      22,    82,    11,    19,    22,     0,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,   208,   209,    70,    70,   212,
+      20,   214,    46,    41,    46,   215,    17,    19,    82,   218,
+      17,    49,   225,   233,    52,    53,    78,    77,    25,   229,
+      82,   230,    42,    11,    12,    13,    14,    34,    16,    17,
+      76,    19,    34,   253,    36,    73,    12,    13,   251,    76,
+      42,    76,    19,    19,    44,    45,    70,    19,    19,    77,
+      38,    91,    40,    17,    92,    93,    94,    17,    91,    97,
       98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     139,    68,    87,    17,   121,    80,    11,    12,    13,    14,
-      87,    16,    17,   130,    19,    34,   124,   125,    19,   127,
-     128,   129,   139,   131,   132,   216,    41,    80,    41,    19,
-      17,    17,   140,    38,    17,    40,    34,   228,    19,    76,
-      76,    19,    74,   182,    19,    42,   185,    23,    19,   157,
-      80,    39,    22,    46,    17,    28,    61,    41,   166,   167,
-      65,    23,    25,    23,    69,    70,    23,    30,    23,    41,
-      75,    34,    35,    36,    37,    39,    28,    28,    39,    42,
-     188,    87,   225,   200,   171,    62,     0,     1,   201,    -1,
-     198,    -1,   194,    51,    -1,    -1,   213,    11,    12,    13,
-      14,    -1,    16,    17,    -1,    19,    -1,    -1,   216,    -1,
-      24,    -1,    26,    27,    28,    -1,    -1,    31,    32,    33,
-     228,    -1,    -1,   240,    38,    39,    40,    -1,    -1,    43,
-      -1,    -1,    -1,    47,    48,    49,    50,    51,    52,    -1,
-      -1,   251,    -1,    -1,    -1,   186,    -1,    61,   189,   190,
-      -1,    65,    -1,    -1,    -1,    69,    70,    -1,   199,    -1,
-      74,    75,    -1,    -1,    -1,    -1,   207,    -1,    -1,    53,
-      54,    -1,    -1,   214,    58,    59,    60,    -1,    62,    63,
-      64,   222,    -1,   224,   225,    69,    70,    71,    72,    -1,
-      -1,    -1,   233,    77,    78,    79,    -1,    -1,   239,    -1,
-     241,    -1,    -1,    11,    12,    13,    14,    -1,    16,    17,
-      -1,    19,    -1,    -1,    -1,   256,    24,   258,    26,    27,
-      28,    -1,    -1,    31,    32,    33,    -1,    -1,    -1,    -1,
-      38,    39,    40,    -1,    -1,    43,    -1,    -1,    -1,    47,
-      48,    49,    50,    51,    52,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    61,    -1,    -1,    -1,    65,    -1,    -1,
-      -1,    69,    70,    11,    12,    13,    14,    75,    16,    17,
-      -1,    19,    -1,    -1,    -1,    -1,    24,    -1,    26,    27,
-      28,    -1,    -1,    -1,    32,    33,    -1,    -1,    -1,    -1,
-      38,    39,    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,
-      -1,    49,    50,    51,    52,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    61,    -1,    -1,    -1,    65,    -1,    -1,
-      -1,    69,    70,    -1,    -1,    -1,    74,    75,    11,    12,
-      13,    14,    -1,    16,    17,    -1,    19,    -1,    -1,    -1,
-      -1,    24,    -1,    26,    27,    28,    -1,    -1,    -1,    32,
-      33,    -1,    -1,    -1,    -1,    38,    39,    40,    -1,    -1,
-      43,    -1,    -1,    -1,    -1,    -1,    49,    50,    51,    52,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,    -1,
-      -1,    -1,    65,    -1,    -1,    -1,    69,    70,    11,    12,
-      13,    14,    75,    16,    17,    -1,    19,    -1,    -1,    -1,
-      -1,    24,    -1,    26,    27,    -1,    -1,    -1,    -1,    32,
-      33,    -1,    -1,    -1,    -1,    38,    -1,    40,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    49,    50,    51,    52,
-      -1,    11,    12,    13,    14,    -1,    16,    17,    61,    19,
-      -1,    -1,    65,    -1,    -1,    -1,    69,    70,    -1,    -1,
-      -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,    38,    -1,
-      40,    -1,    -1,    29,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    61,    -1,    -1,    -1,    65,    -1,    53,    54,    69,
-      70,    -1,    58,    59,    60,    75,    62,    63,    64,    -1,
-      -1,    -1,    -1,    69,    70,    71,    72,    42,    -1,    -1,
-      -1,    77,    78,    79,    -1,    -1,    -1,    -1,    53,    54,
-      -1,    -1,    -1,    58,    59,    60,    -1,    62,    63,    64,
-      -1,    -1,    -1,    68,    69,    70,    71,    72,    -1,    -1,
-      53,    54,    77,    78,    79,    58,    59,    60,    -1,    62,
-      63,    64,    -1,    66,    67,    -1,    69,    70,    71,    72,
-      -1,    -1,    53,    54,    77,    78,    79,    58,    59,    60,
-      -1,    62,    63,    64,    -1,    -1,    -1,    68,    69,    70,
-      71,    72,    -1,    -1,    -1,    76,    77,    78,    79,    53,
-      54,    -1,    -1,    -1,    58,    59,    60,    -1,    62,    63,
-      64,    -1,    -1,    -1,    -1,    69,    70,    71,    72,    -1,
-      -1,    -1,    76,    77,    78,    79,    53,    54,    -1,    -1,
-      -1,    58,    59,    60,    -1,    62,    63,    64,    -1,    -1,
-      -1,    68,    69,    70,    71,    72,    -1,    -1,    53,    54,
-      77,    78,    79,    58,    59,    60,    -1,    62,    63,    64,
-      -1,    -1,    -1,    -1,    -1,    -1,    71,    72,    -1,    -1,
-      75,    -1,    77,    78,    79,    53,    54,    -1,    -1,    -1,
-      58,    59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,
-      -1,    -1,    -1,    71,    72,    -1,    -1,    -1,    -1,    77,
-      78,    79
+     108,   109,   110,   111,   143,    63,    91,    34,   125,    67,
+      19,    82,    41,    71,    72,    41,    19,   134,    17,    77,
+     128,   129,    17,   131,   132,   133,   143,   135,   136,   220,
+      17,    19,    34,    55,    56,    42,   144,    76,    60,    61,
+      62,   232,    64,    65,    66,    78,    78,   186,    17,    19,
+     189,    73,    74,   161,    19,    77,    25,    79,    80,    81,
+      23,    30,   170,   171,    82,    34,    35,    36,    37,    19,
+      28,    55,    56,    42,    22,    39,    60,    61,    62,    46,
+      64,    65,    66,    23,   192,    41,    23,   204,    23,    41,
+       0,     1,    23,    39,   202,    79,    80,    81,    28,    28,
+     217,    11,    12,    13,    14,    39,    16,    17,    91,    19,
+     205,   229,   220,    64,    24,   175,    26,    27,    28,   198,
+      53,    31,    32,    33,   232,    -1,    -1,   244,    38,    39,
+      40,    -1,    -1,    43,    -1,    -1,    -1,    47,    48,    49,
+      50,    51,    52,    53,    54,   255,    -1,   190,    -1,    -1,
+     193,   194,    -1,    63,    -1,    -1,    -1,    67,    -1,    -1,
+     203,    71,    72,    -1,    -1,    -1,    76,    77,   211,    -1,
+      -1,    55,    56,    -1,    -1,   218,    60,    61,    62,    -1,
+      64,    65,    66,   226,    -1,   228,   229,    71,    72,    73,
+      74,    -1,    -1,    -1,   237,    79,    80,    81,    -1,    -1,
+     243,    -1,   245,    -1,    -1,    11,    12,    13,    14,    -1,
+      16,    17,    -1,    19,    -1,    -1,    -1,   260,    24,   262,
+      26,    27,    28,    -1,    -1,    31,    32,    33,    -1,    -1,
+      -1,    -1,    38,    39,    40,    -1,    -1,    43,    -1,    -1,
+      -1,    47,    48,    49,    50,    51,    52,    53,    54,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,    -1,    -1,
+      -1,    67,    -1,    -1,    -1,    71,    72,    11,    12,    13,
+      14,    77,    16,    17,    -1,    19,    -1,    -1,    -1,    -1,
+      24,    -1,    26,    27,    28,    -1,    -1,    -1,    32,    33,
+      -1,    -1,    -1,    -1,    38,    39,    40,    -1,    -1,    43,
+      -1,    -1,    -1,    -1,    -1,    49,    50,    51,    52,    53,
+      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,
+      -1,    -1,    -1,    67,    -1,    -1,    -1,    71,    72,    -1,
+      -1,    -1,    76,    77,    11,    12,    13,    14,    -1,    16,
+      17,    -1,    19,    -1,    -1,    -1,    -1,    24,    -1,    26,
+      27,    28,    -1,    -1,    -1,    32,    33,    -1,    -1,    -1,
+      -1,    38,    39,    40,    -1,    -1,    43,    -1,    -1,    -1,
+      -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    63,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    71,    72,    11,    12,    13,    14,
+      77,    16,    17,    -1,    19,    -1,    -1,    -1,    -1,    24,
+      -1,    26,    27,    -1,    -1,    -1,    -1,    32,    33,    -1,
+      -1,    -1,    -1,    38,    -1,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
+      29,    11,    12,    13,    14,    -1,    16,    17,    63,    19,
+      -1,    -1,    67,    -1,    -1,    -1,    71,    72,    -1,    -1,
+      -1,    -1,    77,    -1,    -1,    -1,    55,    56,    38,    -1,
+      40,    60,    61,    62,    -1,    64,    65,    66,    -1,    -1,
+      -1,    -1,    71,    72,    73,    74,    42,    -1,    -1,    -1,
+      79,    80,    81,    63,    -1,    -1,    -1,    67,    -1,    55,
+      56,    71,    72,    -1,    60,    61,    62,    77,    64,    65,
+      66,    -1,    -1,    -1,    70,    71,    72,    73,    74,    -1,
+      -1,    55,    56,    79,    80,    81,    60,    61,    62,    -1,
+      64,    65,    66,    -1,    68,    69,    -1,    71,    72,    73,
+      74,    -1,    -1,    55,    56,    79,    80,    81,    60,    61,
+      62,    -1,    64,    65,    66,    -1,    -1,    -1,    70,    71,
+      72,    73,    74,    -1,    -1,    -1,    78,    79,    80,    81,
+      55,    56,    -1,    -1,    -1,    60,    61,    62,    -1,    64,
+      65,    66,    -1,    -1,    -1,    -1,    71,    72,    73,    74,
+      -1,    -1,    -1,    78,    79,    80,    81,    55,    56,    -1,
+      -1,    -1,    60,    61,    62,    -1,    64,    65,    66,    -1,
+      -1,    -1,    70,    71,    72,    73,    74,    -1,    -1,    55,
+      56,    79,    80,    81,    60,    61,    62,    -1,    64,    65,
+      66,    -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    -1,
+      -1,    -1,    -1,    79,    80,    81
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -976,31 +972,31 @@ static const yytype_uint8 yystos[] =
 {
        0,     1,    11,    12,    13,    14,    16,    17,    19,    24,
       26,    27,    28,    31,    32,    33,    38,    39,    40,    43,
-      47,    48,    49,    50,    51,    52,    61,    65,    69,    70,
-      75,    82,    84,    85,    86,    87,    88,    95,    96,    97,
-     102,   103,   105,   108,   113,    74,    19,    38,    85,   102,
-      75,    99,    19,   104,    17,    25,    30,    34,    35,    36,
-      37,    42,   106,   107,    19,    17,    19,   102,    44,    45,
-      12,    13,    19,    19,    19,    19,   102,    11,   102,   102,
-     102,   102,   102,   102,   102,     0,    74,    83,    75,    68,
-      75,    94,   102,    53,    54,    58,    59,    60,    62,    63,
-      64,    69,    70,    71,    72,    77,    78,    79,   102,   102,
-     114,   114,    80,    17,    17,    34,    17,    25,    34,    42,
-     107,   109,    29,    19,    42,    68,   102,    42,    68,    41,
-     110,    66,    67,    76,    84,    94,   102,    94,   102,    41,
-      68,   102,   102,   102,   102,   102,   102,   102,   102,   102,
-     102,   102,   102,   102,   102,   102,    76,    80,    19,    17,
-      17,    17,    99,    19,   102,   102,    42,    68,   102,   102,
-     102,    99,   102,   102,    76,   100,    76,    83,    99,   102,
-     102,    19,   111,   102,   102,   111,   101,    20,    42,   101,
-      86,   103,    80,    83,    83,    83,    87,   100,    42,   102,
-     100,   100,    19,    80,   112,   112,    23,   102,   100,    23,
-      46,    99,    22,    46,    91,    92,    98,    19,   101,   101,
-      39,   100,   101,    28,   101,    90,    91,    93,    98,    99,
-      92,   100,    94,   101,   100,   100,    93,   100,    94,    86,
-      46,    89,    41,   100,    23,    23,    23,    41,   100,    99,
-     100,    99,    23,    39,    28,    28,   101,    86,    87,    39,
-     100,   100
+      47,    48,    49,    50,    51,    52,    53,    54,    63,    67,
+      71,    72,    77,    84,    86,    87,    88,    89,    90,    97,
+      98,    99,   104,   105,   107,   110,   115,    76,    19,    38,
+      87,   104,    77,   101,    19,   106,    17,    25,    30,    34,
+      35,    36,    37,    42,   108,   109,    19,    17,    19,   104,
+      44,    45,    12,    13,    19,    19,    19,    19,   104,    11,
+     104,   104,   104,   104,   104,   104,   104,   104,   104,     0,
+      76,    85,    77,    70,    77,    96,   104,    55,    56,    60,
+      61,    62,    64,    65,    66,    71,    72,    73,    74,    79,
+      80,    81,   104,   104,   116,   116,    82,    17,    17,    34,
+      17,    25,    34,    42,   109,   111,    29,    19,    42,    70,
+     104,    42,    70,    41,   112,    68,    69,    78,    86,    96,
+     104,    96,   104,    41,    70,   104,   104,   104,   104,   104,
+     104,   104,   104,   104,   104,   104,   104,   104,   104,   104,
+      78,    82,    19,    17,    17,    17,   101,    19,   104,   104,
+      42,    70,   104,   104,   104,   101,   104,   104,    78,   102,
+      78,    85,   101,   104,   104,    19,   113,   104,   104,   113,
+     103,    20,    42,   103,    88,   105,    82,    85,    85,    85,
+      89,   102,    42,   104,   102,   102,    19,    82,   114,   114,
+      23,   104,   102,    23,    46,   101,    22,    46,    93,    94,
+     100,    19,   103,   103,    39,   102,   103,    28,   103,    92,
+      93,    95,   100,   101,    94,   102,    96,   103,   102,   102,
+      95,   102,    96,    88,    46,    91,    41,   102,    23,    23,
+      23,    41,   102,   101,   102,   101,    23,    39,    28,    28,
+     103,    88,    89,    39,   102,   102
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -1815,12 +1811,12 @@ yyreduce:
   switch (yyn)
     {
         case 4:
-#line 106 "engines/director/lingo/lingo-gr.y"
+#line 107 "engines/director/lingo/lingo-gr.y"
     { yyerrok; ;}
     break;
 
   case 5:
-#line 109 "engines/director/lingo/lingo-gr.y"
+#line 110 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->_linenumber++;
 		g_lingo->_colnumber = 1;
@@ -1828,12 +1824,12 @@ yyreduce:
     break;
 
   case 10:
-#line 118 "engines/director/lingo/lingo-gr.y"
+#line 119 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_xpop); ;}
     break;
 
   case 12:
-#line 122 "engines/director/lingo/lingo-gr.y"
+#line 123 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_varpush);
 		g_lingo->codeString((yyvsp[(4) - (4)].s)->c_str());
@@ -1843,7 +1839,7 @@ yyreduce:
     break;
 
   case 13:
-#line 128 "engines/director/lingo/lingo-gr.y"
+#line 129 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_varpush);
 		g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str());
@@ -1853,7 +1849,7 @@ yyreduce:
     break;
 
   case 14:
-#line 134 "engines/director/lingo/lingo-gr.y"
+#line 135 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentityassign);
@@ -1865,7 +1861,7 @@ yyreduce:
     break;
 
   case 15:
-#line 142 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_swap);
 		g_lingo->code1(g_lingo->c_theentityassign);
@@ -1877,7 +1873,7 @@ yyreduce:
     break;
 
   case 16:
-#line 150 "engines/director/lingo/lingo-gr.y"
+#line 151 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_varpush);
 		g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str());
@@ -1887,7 +1883,7 @@ yyreduce:
     break;
 
   case 17:
-#line 156 "engines/director/lingo/lingo-gr.y"
+#line 157 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentityassign);
@@ -1899,7 +1895,7 @@ yyreduce:
     break;
 
   case 18:
-#line 164 "engines/director/lingo/lingo-gr.y"
+#line 165 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_swap);
 		g_lingo->code1(g_lingo->c_theentityassign);
@@ -1911,12 +1907,12 @@ yyreduce:
     break;
 
   case 19:
-#line 173 "engines/director/lingo/lingo-gr.y"
+#line 174 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_xpop); ;}
     break;
 
   case 23:
-#line 182 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
     {
 		inst body = 0, end = 0;
 		WRITE_UINT32(&body, (yyvsp[(5) - (8)].code));
@@ -1926,7 +1922,7 @@ yyreduce:
     break;
 
   case 24:
-#line 193 "engines/director/lingo/lingo-gr.y"
+#line 194 "engines/director/lingo/lingo-gr.y"
     {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[(3) - (11)].code));
@@ -1942,7 +1938,7 @@ yyreduce:
     break;
 
   case 25:
-#line 209 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
     {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[(3) - (12)].code));
@@ -1958,14 +1954,14 @@ yyreduce:
     break;
 
   case 26:
-#line 221 "engines/director/lingo/lingo-gr.y"
+#line 222 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->code1(g_lingo->c_ifcode);
 		;}
     break;
 
   case 27:
-#line 226 "engines/director/lingo/lingo-gr.y"
+#line 227 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(5) - (8)].code));
@@ -1976,7 +1972,7 @@ yyreduce:
     break;
 
   case 28:
-#line 233 "engines/director/lingo/lingo-gr.y"
+#line 234 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(5) - (11)].code));
@@ -1989,7 +1985,7 @@ yyreduce:
     break;
 
   case 29:
-#line 242 "engines/director/lingo/lingo-gr.y"
+#line 243 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(5) - (11)].code));
@@ -2002,7 +1998,7 @@ yyreduce:
     break;
 
   case 30:
-#line 251 "engines/director/lingo/lingo-gr.y"
+#line 252 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code));
@@ -2016,7 +2012,7 @@ yyreduce:
     break;
 
   case 31:
-#line 261 "engines/director/lingo/lingo-gr.y"
+#line 262 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (10)].code));
@@ -2030,7 +2026,7 @@ yyreduce:
     break;
 
   case 32:
-#line 271 "engines/director/lingo/lingo-gr.y"
+#line 272 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (10)].code));
@@ -2044,17 +2040,17 @@ yyreduce:
     break;
 
   case 33:
-#line 282 "engines/director/lingo/lingo-gr.y"
+#line 283 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = 0; ;}
     break;
 
   case 34:
-#line 283 "engines/director/lingo/lingo-gr.y"
+#line 284 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (3)].code); ;}
     break;
 
   case 39:
-#line 294 "engines/director/lingo/lingo-gr.y"
+#line 295 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code));
@@ -2064,7 +2060,7 @@ yyreduce:
     break;
 
   case 41:
-#line 303 "engines/director/lingo/lingo-gr.y"
+#line 304 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (5)].code));
@@ -2074,22 +2070,22 @@ yyreduce:
     break;
 
   case 42:
-#line 311 "engines/director/lingo/lingo-gr.y"
+#line 312 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(STOP); ;}
     break;
 
   case 43:
-#line 312 "engines/director/lingo/lingo-gr.y"
+#line 313 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code2(g_lingo->c_eq, STOP); ;}
     break;
 
   case 45:
-#line 315 "engines/director/lingo/lingo-gr.y"
+#line 316 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->code3(g_lingo->c_repeatwhilecode, STOP, STOP); ;}
     break;
 
   case 46:
-#line 317 "engines/director/lingo/lingo-gr.y"
+#line 318 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code3(g_lingo->c_repeatwithcode, STOP, STOP);
 		g_lingo->code3(STOP, STOP, STOP);
@@ -2098,7 +2094,7 @@ yyreduce:
     break;
 
   case 47:
-#line 323 "engines/director/lingo/lingo-gr.y"
+#line 324 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_ifcode);
 		g_lingo->code3(STOP, STOP, STOP);
@@ -2107,7 +2103,7 @@ yyreduce:
     break;
 
   case 48:
-#line 329 "engines/director/lingo/lingo-gr.y"
+#line 330 "engines/director/lingo/lingo-gr.y"
     {
 		inst skipEnd;
 		WRITE_UINT32(&skipEnd, 1); // We have to skip end to avoid multiple executions
@@ -2117,41 +2113,41 @@ yyreduce:
     break;
 
   case 49:
-#line 336 "engines/director/lingo/lingo-gr.y"
+#line 337 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
   case 50:
-#line 338 "engines/director/lingo/lingo-gr.y"
+#line 339 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
   case 51:
-#line 340 "engines/director/lingo/lingo-gr.y"
+#line 341 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
   case 54:
-#line 345 "engines/director/lingo/lingo-gr.y"
+#line 346 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->codeConst((yyvsp[(1) - (1)].i)); ;}
     break;
 
   case 55:
-#line 346 "engines/director/lingo/lingo-gr.y"
+#line 347 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_fconstpush);
 		g_lingo->codeFloat((yyvsp[(1) - (1)].f)); ;}
     break;
 
   case 56:
-#line 349 "engines/director/lingo/lingo-gr.y"
+#line 350 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_stringpush);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;}
     break;
 
   case 57:
-#line 352 "engines/director/lingo/lingo-gr.y"
+#line 353 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->_handlers[*(yyvsp[(1) - (1)].s)]->u.func);
 		g_lingo->codeConst(0); // Put dummy value
@@ -2159,14 +2155,14 @@ yyreduce:
     break;
 
   case 58:
-#line 356 "engines/director/lingo/lingo-gr.y"
+#line 357 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg));
 		delete (yyvsp[(1) - (4)].s); ;}
     break;
 
   case 59:
-#line 359 "engines/director/lingo/lingo-gr.y"
+#line 360 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_eval);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str());
@@ -2174,7 +2170,7 @@ yyreduce:
     break;
 
   case 60:
-#line 363 "engines/director/lingo/lingo-gr.y"
+#line 364 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentitypush);
@@ -2185,7 +2181,7 @@ yyreduce:
     break;
 
   case 61:
-#line 370 "engines/director/lingo/lingo-gr.y"
+#line 371 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_theentitypush);
 		inst e = 0, f = 0;
@@ -2195,201 +2191,211 @@ yyreduce:
     break;
 
   case 63:
-#line 377 "engines/director/lingo/lingo-gr.y"
+#line 378 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_add); ;}
     break;
 
   case 64:
-#line 378 "engines/director/lingo/lingo-gr.y"
+#line 379 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_sub); ;}
     break;
 
   case 65:
-#line 379 "engines/director/lingo/lingo-gr.y"
+#line 380 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mul); ;}
     break;
 
   case 66:
-#line 380 "engines/director/lingo/lingo-gr.y"
+#line 381 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_div); ;}
     break;
 
   case 67:
-#line 381 "engines/director/lingo/lingo-gr.y"
+#line 382 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gt); ;}
     break;
 
   case 68:
-#line 382 "engines/director/lingo/lingo-gr.y"
+#line 383 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lt); ;}
     break;
 
   case 69:
-#line 383 "engines/director/lingo/lingo-gr.y"
+#line 384 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_neq); ;}
     break;
 
   case 70:
-#line 384 "engines/director/lingo/lingo-gr.y"
+#line 385 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_ge); ;}
     break;
 
   case 71:
-#line 385 "engines/director/lingo/lingo-gr.y"
+#line 386 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_le); ;}
     break;
 
   case 72:
-#line 386 "engines/director/lingo/lingo-gr.y"
+#line 387 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_and); ;}
     break;
 
   case 73:
-#line 387 "engines/director/lingo/lingo-gr.y"
+#line 388 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_or); ;}
     break;
 
   case 74:
-#line 388 "engines/director/lingo/lingo-gr.y"
+#line 389 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_not); ;}
     break;
 
   case 75:
-#line 389 "engines/director/lingo/lingo-gr.y"
+#line 390 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_ampersand); ;}
     break;
 
   case 76:
-#line 390 "engines/director/lingo/lingo-gr.y"
+#line 391 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_concat); ;}
     break;
 
   case 77:
-#line 391 "engines/director/lingo/lingo-gr.y"
+#line 392 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_contains); ;}
     break;
 
   case 78:
-#line 392 "engines/director/lingo/lingo-gr.y"
+#line 393 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_starts); ;}
     break;
 
   case 79:
-#line 393 "engines/director/lingo/lingo-gr.y"
+#line 394 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (2)].code); ;}
     break;
 
   case 80:
-#line 394 "engines/director/lingo/lingo-gr.y"
+#line 395 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;}
     break;
 
   case 81:
-#line 395 "engines/director/lingo/lingo-gr.y"
+#line 396 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (3)].code); ;}
     break;
 
   case 82:
-#line 396 "engines/director/lingo/lingo-gr.y"
+#line 397 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_intersects); ;}
     break;
 
   case 83:
-#line 397 "engines/director/lingo/lingo-gr.y"
+#line 398 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_within); ;}
     break;
 
   case 84:
-#line 400 "engines/director/lingo/lingo-gr.y"
+#line 401 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mci); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;}
     break;
 
   case 85:
-#line 401 "engines/director/lingo/lingo-gr.y"
+#line 402 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mciwait); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;}
     break;
 
   case 86:
-#line 402 "engines/director/lingo/lingo-gr.y"
+#line 403 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_printtop); ;}
     break;
 
   case 88:
-#line 404 "engines/director/lingo/lingo-gr.y"
+#line 405 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeConst(0); // Push fake value on stack
 							  g_lingo->code1(g_lingo->c_procret); ;}
     break;
 
   case 90:
-#line 407 "engines/director/lingo/lingo-gr.y"
+#line 408 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_alert); ;}
     break;
 
   case 91:
-#line 408 "engines/director/lingo/lingo-gr.y"
+#line 409 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst((yyvsp[(2) - (2)].i));
 		g_lingo->code1(g_lingo->c_beep); ;}
     break;
 
   case 92:
-#line 411 "engines/director/lingo/lingo-gr.y"
+#line 412 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(0);
 		g_lingo->code1(g_lingo->c_beep); ;}
     break;
 
   case 93:
-#line 414 "engines/director/lingo/lingo-gr.y"
+#line 415 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_closeResFile); ;}
     break;
 
   case 94:
-#line 415 "engines/director/lingo/lingo-gr.y"
+#line 416 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(0);
 		g_lingo->code1(g_lingo->c_closeResFile); ;}
     break;
 
   case 95:
-#line 418 "engines/director/lingo/lingo-gr.y"
+#line 419 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_closeXlib); ;}
     break;
 
   case 96:
-#line 419 "engines/director/lingo/lingo-gr.y"
+#line 420 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(0);
 		g_lingo->code1(g_lingo->c_closeXlib); ;}
     break;
 
   case 97:
+#line 423 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_cursor); ;}
+    break;
+
+  case 98:
 #line 424 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_delay); ;}
+    break;
+
+  case 99:
+#line 427 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 98:
-#line 425 "engines/director/lingo/lingo-gr.y"
+  case 100:
+#line 428 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 99:
-#line 436 "engines/director/lingo/lingo-gr.y"
+  case 101:
+#line 439 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotoloop); ;}
     break;
 
-  case 100:
-#line 437 "engines/director/lingo/lingo-gr.y"
+  case 102:
+#line 440 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotonext); ;}
     break;
 
-  case 101:
-#line 438 "engines/director/lingo/lingo-gr.y"
+  case 103:
+#line 441 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotoprevious); ;}
     break;
 
-  case 102:
-#line 439 "engines/director/lingo/lingo-gr.y"
+  case 104:
+#line 442 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_goto);
 		g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str());
@@ -2397,8 +2403,8 @@ yyreduce:
 		delete (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 103:
-#line 444 "engines/director/lingo/lingo-gr.y"
+  case 105:
+#line 447 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_goto);
 		g_lingo->codeString((yyvsp[(2) - (3)].s)->c_str());
@@ -2407,8 +2413,8 @@ yyreduce:
 		delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 104:
-#line 450 "engines/director/lingo/lingo-gr.y"
+  case 106:
+#line 453 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_goto);
 		g_lingo->codeString("");
@@ -2416,48 +2422,48 @@ yyreduce:
 		delete (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 105:
-#line 457 "engines/director/lingo/lingo-gr.y"
+  case 107:
+#line 460 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 106:
-#line 458 "engines/director/lingo/lingo-gr.y"
+  case 108:
+#line 461 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 107:
-#line 459 "engines/director/lingo/lingo-gr.y"
+  case 109:
+#line 462 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 108:
-#line 460 "engines/director/lingo/lingo-gr.y"
+  case 110:
+#line 463 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 109:
-#line 463 "engines/director/lingo/lingo-gr.y"
+  case 111:
+#line 466 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 110:
-#line 464 "engines/director/lingo/lingo-gr.y"
+  case 112:
+#line 467 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(2) - (2)].s); ;}
     break;
 
-  case 111:
-#line 465 "engines/director/lingo/lingo-gr.y"
+  case 113:
+#line 468 "engines/director/lingo/lingo-gr.y"
     { (yyval.s) = (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 112:
-#line 493 "engines/director/lingo/lingo-gr.y"
+  case 114:
+#line 496 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 113:
-#line 494 "engines/director/lingo/lingo-gr.y"
+  case 115:
+#line 497 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeConst(0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
@@ -2465,20 +2471,20 @@ yyreduce:
 			g_lingo->_indef = false; ;}
     break;
 
-  case 114:
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 116:
+#line 502 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeFactory(*(yyvsp[(2) - (2)].s));
 		;}
     break;
 
-  case 115:
-#line 502 "engines/director/lingo/lingo-gr.y"
+  case 117:
+#line 505 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; ;}
     break;
 
-  case 116:
-#line 503 "engines/director/lingo/lingo-gr.y"
+  case 118:
+#line 506 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeConst(0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
@@ -2486,33 +2492,33 @@ yyreduce:
 			g_lingo->_indef = false; ;}
     break;
 
-  case 117:
-#line 508 "engines/director/lingo/lingo-gr.y"
+  case 119:
+#line 511 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 118:
-#line 509 "engines/director/lingo/lingo-gr.y"
+  case 120:
+#line 512 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
     break;
 
-  case 119:
-#line 510 "engines/director/lingo/lingo-gr.y"
+  case 121:
+#line 513 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 120:
-#line 511 "engines/director/lingo/lingo-gr.y"
+  case 122:
+#line 514 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
-  case 121:
-#line 513 "engines/director/lingo/lingo-gr.y"
+  case 123:
+#line 516 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArgStore(); ;}
     break;
 
-  case 122:
-#line 517 "engines/director/lingo/lingo-gr.y"
+  case 124:
+#line 520 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_call);
 		g_lingo->codeString((yyvsp[(1) - (3)].s)->c_str());
@@ -2521,24 +2527,24 @@ yyreduce:
 		g_lingo->code1(numpar); ;}
     break;
 
-  case 123:
-#line 525 "engines/director/lingo/lingo-gr.y"
+  case 125:
+#line 528 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 124:
-#line 526 "engines/director/lingo/lingo-gr.y"
+  case 126:
+#line 529 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 125:
-#line 527 "engines/director/lingo/lingo-gr.y"
+  case 127:
+#line 530 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 2542 "engines/director/lingo/lingo-gr.cpp"
+#line 2548 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2752,6 +2758,6 @@ yyreturn:
 }
 
 
-#line 530 "engines/director/lingo/lingo-gr.y"
+#line 533 "engines/director/lingo/lingo-gr.y"
 
 
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 539db63..baec65c 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -89,21 +89,23 @@
      tBEEP = 305,
      tCLOSERESFILE = 306,
      tCLOSEXLIB = 307,
-     tGE = 308,
-     tLE = 309,
-     tGT = 310,
-     tLT = 311,
-     tEQ = 312,
-     tNEQ = 313,
-     tAND = 314,
-     tOR = 315,
-     tNOT = 316,
-     tCONCAT = 317,
-     tCONTAINS = 318,
-     tSTARTS = 319,
-     tSPRITE = 320,
-     tINTERSECTS = 321,
-     tWITHIN = 322
+     tCURSOR = 308,
+     tDELAY = 309,
+     tGE = 310,
+     tLE = 311,
+     tGT = 312,
+     tLT = 313,
+     tEQ = 314,
+     tNEQ = 315,
+     tAND = 316,
+     tOR = 317,
+     tNOT = 318,
+     tCONCAT = 319,
+     tCONTAINS = 320,
+     tSTARTS = 321,
+     tSPRITE = 322,
+     tINTERSECTS = 323,
+     tWITHIN = 324
    };
 #endif
 /* Tokens.  */
@@ -157,21 +159,23 @@
 #define tBEEP 305
 #define tCLOSERESFILE 306
 #define tCLOSEXLIB 307
-#define tGE 308
-#define tLE 309
-#define tGT 310
-#define tLT 311
-#define tEQ 312
-#define tNEQ 313
-#define tAND 314
-#define tOR 315
-#define tNOT 316
-#define tCONCAT 317
-#define tCONTAINS 318
-#define tSTARTS 319
-#define tSPRITE 320
-#define tINTERSECTS 321
-#define tWITHIN 322
+#define tCURSOR 308
+#define tDELAY 309
+#define tGE 310
+#define tLE 311
+#define tGT 312
+#define tLT 313
+#define tEQ 314
+#define tNEQ 315
+#define tAND 316
+#define tOR 317
+#define tNOT 318
+#define tCONCAT 319
+#define tCONTAINS 320
+#define tSTARTS 321
+#define tSPRITE 322
+#define tINTERSECTS 323
+#define tWITHIN 324
 
 
 
@@ -189,7 +193,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 1529 of yacc.c.  */
-#line 193 "engines/director/lingo/lingo-gr.hpp"
+#line 197 "engines/director/lingo/lingo-gr.hpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 882a153..82833e8 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -86,6 +86,7 @@ void yyerror(char *s) {
 %token tDOWN tELSE tNLELSIF tEND tEXIT tFRAME tGLOBAL tGO tIF tINTO tLOOP tMACRO
 %token tMCI tMCIWAIT tMOVIE tNEXT tOF tPREVIOUS tPUT tREPEAT tSET tTHEN tTO tWHEN
 %token tWITH tWHILE tNLELSE tFACTORY tMETHOD tALERT tBEEP tCLOSERESFILE tCLOSEXLIB
+%token tCURSOR tDELAY
 %token tGE tLE tGT tLT tEQ tNEQ tAND tOR tNOT
 %token tCONCAT tCONTAINS tSTARTS
 %token tSPRITE tINTERSECTS tWITHIN
@@ -419,6 +420,8 @@ func: tMCI vSTRING			{ g_lingo->code1(g_lingo->c_mci); g_lingo->codeString($2->c
 	| tCLOSEXLIB 		{
 		g_lingo->codeConst(0);
 		g_lingo->code1(g_lingo->c_closeXlib); }
+	| tCURSOR expr		{ g_lingo->code1(g_lingo->c_cursor); }
+	| tDELAY expr		{ g_lingo->code1(g_lingo->c_delay); }
 	;
 
 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 23bd7d0..813510a 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 58
-#define YY_END_OF_BUFFER 59
+#define YY_NUM_RULES 60
+#define YY_END_OF_BUFFER 61
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -373,31 +373,32 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[209] =
+static yyconst flex_int16_t yy_accept[218] =
     {   0,
-        0,    0,   59,   57,    3,   55,   55,   57,   57,   54,
-       54,   54,   53,   54,   54,   51,   51,   51,   51,   51,
-       51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
-       51,   51,   51,    2,    2,    3,   55,    0,    0,   55,
-        0,    0,   56,   50,    1,   52,   53,   49,   47,   48,
-       51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
-       51,   51,   51,   20,   11,   51,   51,   51,   51,   51,
-       51,   51,   51,   31,   32,   51,   51,   51,   51,   51,
-       51,   51,   41,   51,   51,    2,    2,    0,    1,   52,
-       51,    5,   51,   51,   51,   51,   51,   15,   51,   51,
-
-       51,   51,   51,   51,   51,   25,   51,   51,   51,   30,
-       51,   34,   51,   36,   51,   51,   51,   51,   51,   51,
-        0,   51,    6,   51,   51,   10,   14,   17,   51,   51,
-       51,   51,   22,   23,   51,   51,   51,   51,   29,   51,
-       51,   51,   51,    0,   40,   45,   51,   43,   13,    4,
-       51,   51,   51,   18,   51,   51,   24,   51,   51,   28,
-       51,   51,   51,   51,   39,   46,   51,    0,   51,   51,
-       51,   51,   19,   51,   51,   27,   51,   35,   42,   37,
-        0,   44,    0,   51,   51,   51,   16,   51,   26,   51,
-        0,   12,   51,   51,    9,   51,   33,    0,   51,    8,
-
-       51,    0,   51,   21,   38,   51,    7,    0
+        0,    0,   61,   59,    3,   57,   57,   59,   59,   56,
+       56,   56,   55,   56,   56,   53,   53,   53,   53,   53,
+       53,   53,   53,   53,   53,   53,   53,   53,   53,   53,
+       53,   53,   53,    2,    2,    3,   57,    0,    0,   57,
+        0,    0,   58,   52,    1,   54,   55,   51,   49,   50,
+       53,   53,   53,   53,   53,   53,   53,   53,   53,   53,
+       53,   53,   53,   53,   53,   22,   13,   53,   53,   53,
+       53,   53,   53,   53,   53,   33,   34,   53,   53,   53,
+       53,   53,   53,   53,   43,   53,   53,    2,    2,    0,
+        1,   54,   53,    5,   53,   53,   53,   53,   53,   53,
+
+       53,   17,   53,   53,   53,   53,   53,   53,   53,   27,
+       53,   53,   53,   32,   53,   36,   53,   38,   53,   53,
+       53,   53,   53,   53,    0,   53,    6,   53,   53,   53,
+       53,   12,   16,   19,   53,   53,   53,   53,   24,   25,
+       53,   53,   53,   53,   31,   53,   53,   53,   53,    0,
+       42,   47,   53,   45,   15,    4,   53,   53,   53,   11,
+       53,   20,   53,   53,   26,   53,   53,   30,   53,   53,
+       53,   53,   41,   48,   53,    0,   53,   53,   53,   10,
+       53,   21,   53,   53,   29,   53,   37,   44,   39,    0,
+       46,    0,   53,   53,   53,   18,   53,   28,   53,    0,
+
+       14,   53,   53,    9,   53,   35,    0,   53,    8,   53,
+        0,   53,   23,   40,   53,    7,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -442,63 +443,65 @@ static yyconst flex_int32_t yy_meta[61] =
         6,    6,    6,    6,    6,    6,    6,    6,    6,    6
     } ;
 
-static yyconst flex_int16_t yy_base[214] =
+static yyconst flex_int16_t yy_base[223] =
     {   0,
-        0,   59,  252,  486,   63,   67,   71,   75,  167,  486,
-      164,  157,   52,   68,  152,   58,   68,   64,   56,   68,
-       83,   69,    0,   82,   68,  106,  105,  108,  107,   86,
-      112,  131,  128,  166,  176,  181,   96,  185,  189,  193,
-      110,  140,  486,  486,    0,   92,  132,  486,  486,  486,
-        0,  111,  158,  173,  111,  172,  166,  171,  175,  180,
-      187,  190,  179,    0,    0,  178,  183,  196,  191,  186,
-      185,  184,  189,    0,    0,  196,  191,  197,  199,  205,
-      225,  226,    0,  228,  218,  257,  263,  222,    0,   90,
-      225,    0,  227,  226,  231,  243,  229,    0,  242,  245,
-
-      255,  266,  264,  256,  257,  253,  267,  267,  262,    0,
-      261,    0,  277,    0,  275,  271,  300,  276,  284,  277,
-      293,  284,    0,  300,  306,    0,    0,    0,  297,  309,
-      314,  301,    0,    0,  305,  319,  309,  316,    0,  315,
-      325,  310,  312,   86,    0,    0,  327,  324,  204,    0,
-      319,  328,  327,    0,  336,  332,    0,  343,  350,    0,
-      345,  342,  350,  345,  377,    0,  350,  383,  362,  362,
-      362,  354,    0,  364,  362,    0,  362,    0,    0,    0,
-      396,    0,  382,  373,  385,  380,    0,  392,    0,  382,
-      395,  486,  396,  403,    0,  389,    0,  418,  399,    0,
-
-      394,  426,  404,    0,  433,  418,    0,  486,  461,  463,
-      469,  474,  479
+        0,   59,  176,  504,   63,   67,   71,   75,  169,  504,
+      141,  136,   52,   68,   92,   58,   68,   64,   74,   71,
+       79,   75,    0,  102,   73,  116,   85,  107,  108,   97,
+      134,  128,  125,  178,  188,  192,  139,  196,  168,  200,
+      114,   93,  504,  504,    0,   84,  158,  504,  504,  504,
+        0,  115,  136,  165,  137,  179,  177,  184,  175,  181,
+      195,  191,  198,  201,  190,    0,    0,  189,  194,  206,
+      201,  194,  193,  192,  199,    0,    0,  215,  204,  213,
+      214,  222,  238,  236,    0,  237,  230,  268,  284,  236,
+        0,   73,  238,    0,  245,  245,  246,  250,  267,  265,
+
+      264,    0,  261,  262,  269,  280,  281,  269,  272,  268,
+      283,  287,  276,    0,  278,    0,  294,    0,  291,  289,
+      325,  295,  298,  311,  317,  296,    0,  320,  325,  315,
+      307,    0,    0,    0,  319,  322,  333,  320,    0,    0,
+      325,  339,  328,  339,    0,  336,  346,  336,  337,   86,
+        0,    0,  343,  348,  215,    0,  344,  354,  351,    0,
+      354,    0,  362,  357,    0,  366,  372,    0,  365,  362,
+      377,  367,  259,    0,  372,  400,  381,  381,  381,    0,
+      372,    0,  393,  383,    0,  385,    0,    0,    0,  423,
+        0,  399,  395,  407,  396,    0,  416,    0,  404,  417,
+
+      504,  419,  424,    0,  410,    0,  261,  421,    0,  415,
+      443,  427,    0,  451,  436,    0,  504,  479,  481,  487,
+      492,  497
     } ;
 
-static yyconst flex_int16_t yy_def[214] =
+static yyconst flex_int16_t yy_def[223] =
     {   0,
-      208,    1,  208,  208,  208,  208,  208,  208,  209,  208,
-      208,  208,  208,  208,  208,  210,  210,  210,  210,  210,
-      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
-      210,  210,  210,  208,  208,  208,  208,  208,  208,  208,
-      208,  209,  208,  208,  211,  208,  208,  208,  208,  208,
-      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
-      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
-      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
-      210,  210,  210,  210,  210,  208,  208,  208,  211,  208,
-      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
-
-      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
-      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
-      208,  210,  210,  210,  210,  210,  210,  210,  210,  210,
-      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
-      210,  210,  210,  212,  210,  210,  210,  210,  208,  210,
-      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
-      210,  210,  210,  210,  212,  210,  210,  208,  210,  210,
-      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
-      208,  210,  208,  210,  210,  210,  210,  210,  210,  210,
-      208,  208,  210,  210,  210,  210,  210,  208,  210,  210,
-
-      210,  213,  210,  210,  213,  210,  210,    0,  208,  208,
-      208,  208,  208
+      217,    1,  217,  217,  217,  217,  217,  217,  218,  217,
+      217,  217,  217,  217,  217,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  217,  217,  217,  217,  217,  217,  217,
+      217,  218,  217,  217,  220,  217,  217,  217,  217,  217,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  217,  217,  217,
+      220,  217,  219,  219,  219,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  217,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  221,
+      219,  219,  219,  219,  217,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  221,  219,  219,  217,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  217,
+      219,  217,  219,  219,  219,  219,  219,  219,  219,  217,
+
+      217,  219,  219,  219,  219,  219,  217,  219,  219,  219,
+      222,  219,  219,  222,  219,  219,    0,  217,  217,  217,
+      217,  217
     } ;
 
-static yyconst flex_int16_t yy_nxt[547] =
+static yyconst flex_int16_t yy_nxt[565] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,    4,
        13,   14,   10,   15,   16,   17,   18,   19,   20,   21,
@@ -508,61 +511,63 @@ static yyconst flex_int16_t yy_nxt[547] =
        28,   29,   30,   31,   32,   23,   23,   33,   23,   23,
        34,   46,   47,   35,   36,   37,   37,   38,   39,   40,
        40,   39,   39,   40,   40,   39,   38,   37,   37,   38,
-       48,   49,   52,   57,   53,   41,   54,  144,   55,   41,
-      144,   56,   58,   63,   59,   67,   64,   61,   37,   37,
-
-       90,   65,   90,   60,   78,   52,   57,   53,   66,   41,
-       54,   55,   62,   41,   56,   58,   63,   59,   67,   64,
-       68,   61,   69,   72,   70,   65,   60,   74,   78,   91,
-       79,   66,   73,   71,   88,   62,   76,   75,   94,   77,
-       80,   46,   47,   81,   68,   43,   69,   72,   70,   84,
-       85,   74,   82,   91,   79,   73,   71,   88,   83,   76,
-       75,   94,   77,   80,   50,   45,   81,   86,   37,   37,
-       87,   44,   43,   84,   85,   92,   82,   87,   37,   37,
-       87,   83,   36,   37,   37,   38,   38,   37,   37,   38,
-       39,   93,   98,   39,   39,   40,   40,   39,   95,   92,
-
-       96,   97,   99,  100,  101,  168,  102,   41,  168,  103,
-      104,   41,  105,  106,  111,   93,   98,  107,  108,  109,
-      110,   95,  112,   96,   97,  113,   99,  100,  101,  102,
-      114,   41,  103,  104,  115,   41,  105,  106,  111,  116,
-      107,  108,  109,  110,  117,  112,  118,  127,  113,  120,
-      119,  208,  121,  114,  122,  123,  124,  115,   86,   37,
-       37,   87,  125,  116,   87,   37,   37,   87,  117,  126,
-      118,  127,  120,  128,  119,  121,  129,  122,  123,  124,
-      130,  131,  132,  208,  134,  125,  135,  136,  137,  138,
-      208,  133,  126,  139,  140,  141,  128,  142,  148,  129,
-
-      143,  144,  146,  130,  144,  131,  132,  134,  147,  135,
-      136,  149,  137,  138,  133,  150,  139,  140,  151,  141,
-      152,  142,  148,  143,  153,  146,  145,  154,  155,  208,
-      156,  147,  157,  158,  160,  149,  159,  161,  150,  162,
-      208,  163,  151,  164,  152,  166,  167,  153,  169,  145,
-      171,  154,  155,  156,  170,  157,  172,  158,  160,  159,
-      173,  161,  174,  162,  163,  175,  164,  176,  179,  166,
-      167,  169,  177,  178,  171,  180,  182,  170,  181,  172,
-      184,  181,  188,  173,  168,  174,  185,  168,  186,  175,
-      187,  176,  179,  189,  190,  177,  178,  181,  180,  182,
-
-      181,  192,  208,  193,  184,  183,  188,  194,  196,  185,
-      195,  186,  197,  187,  198,  199,  189,  190,  200,  202,
-      201,  203,  202,  191,  204,  192,  193,  202,  206,  183,
-      202,  194,  196,  195,  208,  197,  207,  208,  198,  199,
-      208,  208,  200,  201,  208,  203,  191,  204,  208,  208,
-      208,  206,  208,  208,  208,  208,  208,  208,  208,  208,
-      207,   42,   42,  208,   42,   42,   42,   51,   51,   89,
-       89,  208,  208,   89,   89,  165,  208,  208,  208,  165,
-      205,  208,  208,  208,  205,    3,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208
+       48,   49,   52,   92,   53,   41,   54,  150,   55,   41,
+      150,   56,   58,   63,   92,   60,   57,   61,   43,   65,
+
+       69,   59,   66,   74,   50,   52,   62,   53,   64,   41,
+       54,   55,   75,   41,   56,   80,   58,   63,   60,   57,
+       61,   67,   65,   69,   59,   66,   76,   74,   68,   62,
+       70,   64,   71,   93,   72,   75,   77,   78,   90,   80,
+       79,   37,   37,   73,   45,   67,   86,   87,   44,   84,
+       76,   68,   81,   94,   70,   85,   71,   93,   72,   77,
+       78,   90,   82,   79,   96,   83,   73,   46,   47,   39,
+       86,   87,   39,   84,   43,  217,   81,   94,   85,   88,
+       37,   37,   89,   95,  217,   82,   41,   96,   83,   89,
+       37,   37,   89,   36,   37,   37,   38,   38,   37,   37,
+
+       38,   39,   40,   40,   39,   97,   98,   95,   99,  100,
+       41,  101,  102,  103,  104,  105,  176,  106,   41,  176,
+      107,  108,  109,  110,  217,  111,  112,  113,   97,   98,
+      114,   99,  100,  115,  101,  116,  102,  103,  104,  105,
+      106,  117,   41,  107,  108,  118,  109,  110,  111,  112,
+      113,  119,  120,  114,  121,  122,  217,  115,  116,  123,
+      190,  124,  211,  190,  117,  211,  125,  126,  118,   88,
+       37,   37,   89,  127,  119,  128,  120,  129,  121,  122,
+      130,  131,  133,  123,  124,   89,   37,   37,   89,  125,
+      126,  132,  134,  135,  136,  137,  127,  140,  128,  138,
+
+      129,  141,  142,  130,  143,  131,  133,  145,  139,  144,
+      217,  146,  147,  148,  132,  134,  135,  136,  149,  137,
+      140,  152,  153,  138,  141,  142,  150,  156,  143,  150,
+      145,  139,  154,  144,  146,  155,  147,  148,  157,  158,
+      162,  149,  159,  160,  152,  153,  161,  163,  217,  164,
+      156,  151,  165,  166,  217,  167,  154,  168,  169,  155,
+      170,  174,  157,  158,  162,  159,  160,  171,  172,  161,
+      175,  163,  164,  177,  151,  165,  179,  166,  167,  178,
+      180,  168,  169,  181,  170,  174,  182,  183,  184,  185,
+      171,  172,  186,  187,  175,  188,  177,  189,  191,  193,
+
+      179,  176,  178,  180,  176,  194,  181,  195,  196,  182,
+      183,  197,  184,  185,  198,  186,  187,  199,  201,  188,
+      189,  191,  192,  193,  190,  202,  204,  190,  194,  203,
+      195,  196,  205,  217,  206,  197,  207,  198,  208,  209,
+      199,  210,  201,  212,  211,  213,  192,  211,  202,  204,
+      200,  215,  217,  203,  216,  217,  205,  206,  217,  217,
+      207,  217,  208,  209,  210,  217,  217,  212,  213,  217,
+      217,  217,  217,  200,  215,  217,  217,  217,  216,   42,
+       42,  217,   42,   42,   42,   51,   51,   91,   91,  217,
+      217,   91,   91,  173,  217,  217,  217,  173,  214,  217,
+
+      217,  217,  214,    3,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217
     } ;
 
-static yyconst flex_int16_t yy_chk[547] =
+static yyconst flex_int16_t yy_chk[565] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -572,58 +577,60 @@ static yyconst flex_int16_t yy_chk[547] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         2,   13,   13,    2,    5,    5,    5,    5,    6,    6,
         6,    6,    7,    7,    7,    7,    8,    8,    8,    8,
-       14,   14,   16,   19,   16,    6,   17,  144,   18,    7,
-      144,   18,   20,   22,   20,   25,   22,   21,   37,   37,
-
-       90,   24,   46,   20,   30,   16,   19,   16,   24,    6,
-       17,   18,   21,    7,   18,   20,   22,   20,   25,   22,
-       26,   21,   26,   27,   26,   24,   20,   28,   30,   52,
-       31,   24,   27,   26,   41,   21,   29,   28,   55,   29,
-       31,   47,   47,   31,   26,   42,   26,   27,   26,   33,
-       33,   28,   32,   52,   31,   27,   26,   41,   32,   29,
-       28,   55,   29,   31,   15,   12,   31,   34,   34,   34,
-       34,   11,    9,   33,   33,   53,   32,   35,   35,   35,
-       35,   32,   36,   36,   36,   36,   38,   38,   38,   38,
-       39,   54,   59,   39,   40,   40,   40,   40,   56,   53,
-
-       57,   58,   60,   61,   62,  149,   63,   39,  149,   66,
-       67,   40,   68,   69,   76,   54,   59,   70,   71,   72,
-       73,   56,   77,   57,   58,   78,   60,   61,   62,   63,
-       79,   39,   66,   67,   80,   40,   68,   69,   76,   81,
-       70,   71,   72,   73,   82,   77,   84,   97,   78,   85,
-       84,    3,   88,   79,   91,   93,   94,   80,   86,   86,
-       86,   86,   95,   81,   87,   87,   87,   87,   82,   96,
-       84,   97,   85,   99,   84,   88,  100,   91,   93,   94,
-      101,  102,  103,    0,  104,   95,  105,  106,  107,  108,
-        0,  103,   96,  109,  111,  113,   99,  115,  120,  100,
-
-      116,  117,  118,  101,  117,  102,  103,  104,  119,  105,
-      106,  121,  107,  108,  103,  122,  109,  111,  124,  113,
-      125,  115,  120,  116,  129,  118,  117,  130,  131,    0,
-      132,  119,  135,  136,  138,  121,  137,  140,  122,  141,
-        0,  142,  124,  143,  125,  147,  148,  129,  151,  117,
-      152,  130,  131,  132,  151,  135,  153,  136,  138,  137,
-      155,  140,  156,  141,  142,  158,  143,  159,  163,  147,
-      148,  151,  161,  162,  152,  164,  167,  151,  165,  153,
-      169,  165,  174,  155,  168,  156,  170,  168,  171,  158,
-      172,  159,  163,  175,  177,  161,  162,  181,  164,  167,
-
-      181,  183,    0,  184,  169,  168,  174,  185,  188,  170,
-      186,  171,  190,  172,  191,  193,  175,  177,  194,  198,
-      196,  199,  198,  181,  201,  183,  184,  202,  203,  168,
-      202,  185,  188,  186,  205,  190,  206,  205,  191,  193,
-        0,    0,  194,  196,    0,  199,  181,  201,    0,    0,
-        0,  203,    0,    0,    0,    0,    0,    0,    0,    0,
-      206,  209,  209,    0,  209,  209,  209,  210,  210,  211,
-      211,    0,    0,  211,  211,  212,    0,    0,    0,  212,
-      213,    0,    0,    0,  213,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208
+       14,   14,   16,   92,   16,    6,   17,  150,   18,    7,
+      150,   18,   19,   21,   46,   20,   18,   20,   42,   22,
+
+       25,   19,   22,   27,   15,   16,   20,   16,   21,    6,
+       17,   18,   27,    7,   18,   30,   19,   21,   20,   18,
+       20,   24,   22,   25,   19,   22,   28,   27,   24,   20,
+       26,   21,   26,   52,   26,   27,   28,   29,   41,   30,
+       29,   37,   37,   26,   12,   24,   33,   33,   11,   32,
+       28,   24,   31,   53,   26,   32,   26,   52,   26,   28,
+       29,   41,   31,   29,   55,   31,   26,   47,   47,   39,
+       33,   33,   39,   32,    9,    3,   31,   53,   32,   34,
+       34,   34,   34,   54,    0,   31,   39,   55,   31,   35,
+       35,   35,   35,   36,   36,   36,   36,   38,   38,   38,
+
+       38,   40,   40,   40,   40,   56,   57,   54,   58,   59,
+       39,   60,   61,   62,   63,   64,  155,   65,   40,  155,
+       68,   69,   70,   71,    0,   72,   73,   74,   56,   57,
+       75,   58,   59,   78,   60,   79,   61,   62,   63,   64,
+       65,   80,   40,   68,   69,   81,   70,   71,   72,   73,
+       74,   82,   83,   75,   84,   86,    0,   78,   79,   86,
+      173,   87,  207,  173,   80,  207,   90,   93,   81,   88,
+       88,   88,   88,   95,   82,   96,   83,   97,   84,   86,
+       98,   99,  101,   86,   87,   89,   89,   89,   89,   90,
+       93,  100,  103,  104,  105,  106,   95,  108,   96,  107,
+
+       97,  109,  110,   98,  111,   99,  101,  113,  107,  112,
+        0,  115,  117,  119,  100,  103,  104,  105,  120,  106,
+      108,  122,  123,  107,  109,  110,  121,  126,  111,  121,
+      113,  107,  124,  112,  115,  125,  117,  119,  128,  129,
+      136,  120,  130,  131,  122,  123,  135,  137,    0,  138,
+      126,  121,  141,  142,    0,  143,  124,  144,  146,  125,
+      147,  153,  128,  129,  136,  130,  131,  148,  149,  135,
+      154,  137,  138,  157,  121,  141,  158,  142,  143,  157,
+      159,  144,  146,  161,  147,  153,  163,  164,  166,  167,
+      148,  149,  169,  170,  154,  171,  157,  172,  175,  177,
+
+      158,  176,  157,  159,  176,  178,  161,  179,  181,  163,
+      164,  183,  166,  167,  184,  169,  170,  186,  192,  171,
+      172,  175,  176,  177,  190,  193,  195,  190,  178,  194,
+      179,  181,  197,    0,  199,  183,  200,  184,  202,  203,
+      186,  205,  192,  208,  211,  210,  176,  211,  193,  195,
+      190,  212,  214,  194,  215,  214,  197,  199,    0,    0,
+      200,    0,  202,  203,  205,    0,    0,  208,  210,    0,
+        0,    0,    0,  190,  212,    0,    0,    0,  215,  218,
+      218,    0,  218,  218,  218,  219,  219,  220,  220,    0,
+        0,  220,  220,  221,    0,    0,    0,  221,  222,    0,
+
+        0,    0,  222,  217,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -693,7 +700,7 @@ static void countnl() {
 	g_lingo->_colnumber = strlen(p);
 }
 
-#line 697 "engines/director/lingo/lingo-lex.cpp"
+#line 704 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -881,7 +888,7 @@ YY_DECL
 #line 65 "engines/director/lingo/lingo-lex.l"
 
 
-#line 885 "engines/director/lingo/lingo-lex.cpp"
+#line 892 "engines/director/lingo/lingo-lex.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -935,13 +942,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 >= 209 )
+				if ( yy_current_state >= 218 )
 					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] != 486 );
+		while ( yy_base[yy_current_state] != 504 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -1013,148 +1020,158 @@ YY_RULE_SETUP
 case 10:
 YY_RULE_SETUP
 #line 77 "engines/director/lingo/lingo-lex.l"
-{ count(); return tDOWN; }
+{ count(); return tCURSOR; }
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
 #line 78 "engines/director/lingo/lingo-lex.l"
-{ count(); return tIF; }
+{ count(); return tDELAY; }
 	YY_BREAK
 case 12:
-/* rule 12 can match eol */
 YY_RULE_SETUP
 #line 79 "engines/director/lingo/lingo-lex.l"
-{ countnl(); return tNLELSIF; }
+{ count(); return tDOWN; }
 	YY_BREAK
 case 13:
-/* rule 13 can match eol */
 YY_RULE_SETUP
 #line 80 "engines/director/lingo/lingo-lex.l"
-{ countnl(); return tNLELSE; }
+{ count(); return tIF; }
 	YY_BREAK
 case 14:
+/* rule 14 can match eol */
 YY_RULE_SETUP
 #line 81 "engines/director/lingo/lingo-lex.l"
-{ count(); return tELSE; }
+{ countnl(); return tNLELSIF; }
 	YY_BREAK
 case 15:
+/* rule 15 can match eol */
 YY_RULE_SETUP
 #line 82 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEND; }
+{ countnl(); return tNLELSE; }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
 #line 83 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFACTORY; }
+{ count(); return tELSE; }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 84 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEXIT; }
+{ count(); return tEND; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 85 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFRAME; }
+{ count(); return tFACTORY; }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 86 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGLOBAL; }
+{ count(); return tEXIT; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 87 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGO; }
+{ count(); return tFRAME; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 88 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTERSECTS; }
+{ count(); return tGLOBAL; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 89 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTO; }
+{ count(); return tGO; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 90 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLOOP; }
+{ count(); return tINTERSECTS; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 91 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMACRO; }
+{ count(); return tINTO; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 92 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMCI; }
+{ count(); return tLOOP; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 93 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMCIWAIT; }
+{ count(); return tMACRO; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 94 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMETHOD; }
+{ count(); return tMCI; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 95 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOVIE; }
+{ count(); return tMCIWAIT; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 96 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEXT; }
+{ count(); return tMETHOD; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 97 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNOT; }
+{ count(); return tMOVIE; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 98 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOF; }
+{ count(); return tNEXT; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 99 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOR; }
+{ count(); return tNOT; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 100 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPREVIOUS; }
+{ count(); return tOF; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 101 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPUT; }
+{ count(); return tOR; }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 102 "engines/director/lingo/lingo-lex.l"
-{ count(); return tREPEAT; }
+{ count(); return tPREVIOUS; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 103 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSET; }
+{ count(); return tPUT; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 104 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSTARTS; }
+{ count(); return tREPEAT; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 105 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSET; }
+	YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 106 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSTARTS; }
+	YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 107 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1196,9 +1213,9 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
-case 39:
+case 41:
 YY_RULE_SETUP
-#line 145 "engines/director/lingo/lingo-lex.l"
+#line 147 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1219,64 +1236,64 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
-case 40:
-YY_RULE_SETUP
-#line 164 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTHEN; }
-	YY_BREAK
-case 41:
-YY_RULE_SETUP
-#line 165 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTO; }
-	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 166 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSPRITE; }
+{ count(); return tTHEN; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 167 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITH; }
+{ count(); return tTO; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 168 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITHIN; }
+{ count(); return tSPRITE; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 169 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHEN; }
+{ count(); return tWITH; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 170 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHILE; }
+{ count(); return tWITHIN; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 172 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEQ; }
+#line 171 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWHEN; }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 173 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGE; }
+#line 172 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWHILE; }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
 #line 174 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLE; }
+{ count(); return tNEQ; }
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 175 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONCAT; }
+{ count(); return tGE; }
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
+#line 176 "engines/director/lingo/lingo-lex.l"
+{ count(); return tLE; }
+	YY_BREAK
+case 52:
+YY_RULE_SETUP
 #line 177 "engines/director/lingo/lingo-lex.l"
+{ count(); return tCONCAT; }
+	YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 179 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1289,43 +1306,43 @@ YY_RULE_SETUP
 		return ID;
 	}
 	YY_BREAK
-case 52:
-YY_RULE_SETUP
-#line 188 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.f = atof(yytext); return vFLOAT; }
-	YY_BREAK
-case 53:
-YY_RULE_SETUP
-#line 189 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.i = strtol(yytext, NULL, 10); return vINT; }
-	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 190 "engines/director/lingo/lingo-lex.l"
-{ count(); return *yytext; }
+{ count(); yylval.f = atof(yytext); return vFLOAT; }
 	YY_BREAK
 case 55:
-/* rule 55 can match eol */
 YY_RULE_SETUP
 #line 191 "engines/director/lingo/lingo-lex.l"
-{ return '\n'; }
+{ count(); yylval.i = strtol(yytext, NULL, 10); return vINT; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 192 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return vSTRING; }
+{ count(); return *yytext; }
 	YY_BREAK
 case 57:
+/* rule 57 can match eol */
 YY_RULE_SETUP
 #line 193 "engines/director/lingo/lingo-lex.l"
-
+{ return '\n'; }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
+#line 194 "engines/director/lingo/lingo-lex.l"
+{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return vSTRING; }
+	YY_BREAK
+case 59:
+YY_RULE_SETUP
 #line 195 "engines/director/lingo/lingo-lex.l"
+
+	YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 197 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1329 "engines/director/lingo/lingo-lex.cpp"
+#line 1346 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1618,7 +1635,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 >= 209 )
+			if ( yy_current_state >= 218 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1646,11 +1663,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 >= 209 )
+		if ( yy_current_state >= 218 )
 			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 == 208);
+	yy_is_jam = (yy_current_state == 217);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2325,7 +2342,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 195 "engines/director/lingo/lingo-lex.l"
+#line 197 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 6c317ef..f998882 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -74,6 +74,8 @@ whitespace [\t ]
 (?i:closeResFile)	{ count(); return tCLOSERESFILE; }
 (?i:closeXlib)		{ count(); return tCLOSEXLIB; }
 (?i:contains)		{ count(); return tCONTAINS; }
+(?i:cursor)			{ count(); return tCURSOR; }
+(?i:delay)			{ count(); return tDELAY; }
 (?i:down)			{ count(); return tDOWN; }
 (?i:if)				{ count(); return tIF; }
 (?i:[\n\r]+[\t ]*else[\t ]+if)	{ countnl(); return tNLELSIF; }
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index d2c5f32..e71136a 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -249,6 +249,8 @@ public:
 	static void c_beep();
 	static void c_closeResFile();
 	static void c_closeXlib();
+	static void c_cursor();
+	static void c_delay();
 
 	static void b_abs();
 	static void b_atan();
@@ -271,6 +273,7 @@ public:
 	static void b_updatestage();
 	static void b_ilk();
 	static void b_closeDA();
+	static void b_continue();
 
 	static void b_point();
 






More information about the Scummvm-git-logs mailing list