[Scummvm-git-logs] scummvm master -> 03638300cff8b091643951241fb8bbd191977ead

sev- sev at scummvm.org
Sat Jan 7 21:20:52 CET 2017


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

Summary:
03638300cf DIRECTOR: Lingo: Stubbed "sound*" built-ins


Commit: 03638300cff8b091643951241fb8bbd191977ead
    https://github.com/scummvm/scummvm/commit/03638300cff8b091643951241fb8bbd191977ead
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-01-07T21:20:26+01:00

Commit Message:
DIRECTOR: Lingo: Stubbed "sound*" built-ins

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 5715ff2..2dadf6c 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -63,6 +63,7 @@ static struct BuiltinProto {
 	{ "openDA",	 		Lingo::b_openDA, 		1, 1, false },	// D2
 	{ "openResFile",	Lingo::b_openResFile,	1, 1, false },	// D2
 	{ "openXlib",		Lingo::b_openXlib,		1, 1, false },	// D2
+	{ "setCallBack",	Lingo::b_setCallBack,	2, 2, false },	//		D3
 	{ "showResFile",	Lingo::b_showResFile,	0, 1, false },	// D2
 	{ "showXlib",		Lingo::b_showXlib,		0, 1, false },	// D2
 	// Control
@@ -118,6 +119,10 @@ static struct BuiltinProto {
 	{ "beep",	 		Lingo::b_beep,			0, 1, false },	// D2
 	{ "mci",	 		Lingo::b_mci,			1, 1, false },
 	{ "mciwait",		Lingo::b_mciwait,		1, 1, false },
+	{ "sound-fadeIn",	Lingo::b_soundFadeIn, 	1, 2, false },	//		D3
+	{ "sound-fadeOut",	Lingo::b_soundFadeOut, 	1, 2, false },	//		D3
+	{ "sound-playFile",	Lingo::b_soundPlayFile, 2, 2, false },	//		D3
+	{ "sound-stop",		Lingo::b_soundStop,	 	1, 1, false },	//		D3
 	// Constants
 	{ "backspace",		Lingo::b_backspace,		0, 0, false },	// D2
 	{ "empty",			Lingo::b_empty,			0, 0, false },	// D2
@@ -462,6 +467,10 @@ void Lingo::b_openXlib(int nargs) {
 	delete d.u.s;
 }
 
+void Lingo::b_setCallBack(int nargs) {
+	warning("STUB: b_setCallBack");
+}
+
 void Lingo::b_showResFile(int nargs) {
 	Datum d = g_lingo->pop();
 
@@ -592,7 +601,6 @@ void Lingo::b_symbolp(int nargs) {
 	g_lingo->push(d);
 }
 
-
 ///////////////////
 // Score
 ///////////////////
@@ -753,6 +761,30 @@ void Lingo::b_mciwait(int nargs) {
 	g_lingo->func_mciwait(*d.u.s);
 }
 
+void Lingo::b_soundFadeIn(int nargs) {
+	g_lingo->printStubWithArglist("b_soundFadeIn", nargs);
+
+	g_lingo->dropStack(nargs);
+}
+
+void Lingo::b_soundFadeOut(int nargs) {
+	g_lingo->printStubWithArglist("b_soundFadeOut", nargs);
+
+	g_lingo->dropStack(nargs);
+}
+
+void Lingo::b_soundPlayFile(int nargs) {
+	g_lingo->printStubWithArglist("b_soundPlayFile", nargs);
+
+	g_lingo->dropStack(nargs);
+}
+
+void Lingo::b_soundStop(int nargs) {
+	g_lingo->printStubWithArglist("b_soundStop", nargs);
+
+	g_lingo->dropStack(nargs);
+}
+
 ///////////////////
 // Constants
 ///////////////////
@@ -833,6 +865,8 @@ void Lingo::b_field(int nargs) {
 
 void Lingo::b_me(int nargs) {
 	g_lingo->printStubWithArglist("me", nargs);
+
+	g_lingo->dropStack(nargs);
 }
 
 
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 8a20ac7..8cc5f69 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -136,7 +136,8 @@
      tINTERSECTS = 325,
      tWITHIN = 326,
      tON = 327,
-     tME = 328
+     tME = 328,
+     tSOUND = 329
    };
 #endif
 /* Tokens.  */
@@ -211,6 +212,7 @@
 #define tWITHIN 326
 #define tON 327
 #define tME 328
+#define tSOUND 329
 
 
 
@@ -268,7 +270,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 193 of yacc.c.  */
-#line 272 "engines/director/lingo/lingo-gr.cpp"
+#line 274 "engines/director/lingo/lingo-gr.cpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -281,7 +283,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 285 "engines/director/lingo/lingo-gr.cpp"
+#line 287 "engines/director/lingo/lingo-gr.cpp"
 
 #ifdef short
 # undef short
@@ -494,22 +496,22 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  94
+#define YYFINAL  96
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   974
+#define YYLAST   990
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  87
+#define YYNTOKENS  88
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  38
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  132
+#define YYNRULES  133
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  279
+#define YYNSTATES  282
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   328
+#define YYMAXUTOK   329
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -518,12 +520,12 @@ union yyalloc
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      81,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      82,     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,    80,    75,     2,
-      82,    83,    78,    76,    86,    77,     2,    79,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    81,    76,     2,
+      83,    84,    79,    77,    87,    78,     2,    80,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      85,    74,    84,     2,     2,     2,     2,     2,     2,     2,
+      86,    75,    85,     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,
@@ -549,7 +551,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,    68,    69,    70,    71,    72,    73
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74
 };
 
 #if YYDEBUG
@@ -567,65 +569,65 @@ static const yytype_uint16 yyprhs[] =
      280,   284,   288,   292,   296,   300,   304,   307,   311,   315,
      319,   323,   326,   329,   333,   338,   343,   346,   348,   350,
      353,   355,   358,   361,   364,   367,   369,   372,   377,   380,
-     382,   386,   388,   392,   395,   398,   401,   404,   408,   411,
-     414,   416,   420,   423,   426,   429,   433,   436,   437,   446,
-     449,   450,   459,   460,   471,   472,   474,   478,   483,   484,
-     488,   489,   491
+     384,   386,   390,   392,   396,   399,   402,   405,   408,   412,
+     415,   418,   420,   424,   427,   430,   433,   437,   440,   441,
+     450,   453,   454,   463,   464,   475,   476,   478,   482,   487,
+     488,   492,   493,   495
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      88,     0,    -1,    88,    89,    90,    -1,    90,    -1,     1,
-      89,    -1,    81,    -1,    -1,   117,    -1,   110,    -1,   123,
-      -1,    91,    -1,    93,    -1,    40,   109,    33,    21,    -1,
-      42,    21,    74,   109,    -1,    42,    13,    74,   109,    -1,
-      42,    14,   109,    74,   109,    -1,    42,    21,    44,   109,
-      -1,    42,    13,    44,   109,    -1,    42,    14,   109,    44,
-     109,    -1,   109,    -1,   110,    -1,    92,    -1,    94,    -1,
-     101,    82,   100,    83,   107,   106,    27,    41,    -1,   102,
-      74,   109,   106,    44,   109,   106,   107,   106,    27,    41,
-      -1,   102,    74,   109,   106,    24,    44,   109,   106,   107,
-     106,    27,    41,    -1,   108,   109,   106,    -1,   103,   100,
-      43,    89,   107,   106,    27,    32,    -1,   103,   100,    43,
-      89,   107,   106,    48,   107,   106,    27,    32,    -1,   103,
-     100,    43,    89,   107,   106,   105,    96,   106,    27,    32,
-      -1,   103,   100,    43,   105,    92,   106,    -1,   103,   100,
-      43,   105,    92,   106,    48,   105,    92,   106,    -1,   103,
-     100,    43,   105,    92,   106,    97,   106,    95,   106,    -1,
-      -1,    48,   105,    92,    -1,    96,    99,    -1,    99,    -1,
-      97,    98,    -1,    98,    -1,   104,   100,    43,   105,    93,
-     106,    -1,    97,    -1,   104,   100,    43,   107,   106,    -1,
-     109,    -1,   109,    74,   109,    -1,    82,   100,    83,    -1,
+      89,     0,    -1,    89,    90,    91,    -1,    91,    -1,     1,
+      90,    -1,    82,    -1,    -1,   118,    -1,   111,    -1,   124,
+      -1,    92,    -1,    94,    -1,    40,   110,    33,    21,    -1,
+      42,    21,    75,   110,    -1,    42,    13,    75,   110,    -1,
+      42,    14,   110,    75,   110,    -1,    42,    21,    44,   110,
+      -1,    42,    13,    44,   110,    -1,    42,    14,   110,    44,
+     110,    -1,   110,    -1,   111,    -1,    93,    -1,    95,    -1,
+     102,    83,   101,    84,   108,   107,    27,    41,    -1,   103,
+      75,   110,   107,    44,   110,   107,   108,   107,    27,    41,
+      -1,   103,    75,   110,   107,    24,    44,   110,   107,   108,
+     107,    27,    41,    -1,   109,   110,   107,    -1,   104,   101,
+      43,    90,   108,   107,    27,    32,    -1,   104,   101,    43,
+      90,   108,   107,    48,   108,   107,    27,    32,    -1,   104,
+     101,    43,    90,   108,   107,   106,    97,   107,    27,    32,
+      -1,   104,   101,    43,   106,    93,   107,    -1,   104,   101,
+      43,   106,    93,   107,    48,   106,    93,   107,    -1,   104,
+     101,    43,   106,    93,   107,    98,   107,    96,   107,    -1,
+      -1,    48,   106,    93,    -1,    97,   100,    -1,   100,    -1,
+      98,    99,    -1,    99,    -1,   105,   101,    43,   106,    94,
+     107,    -1,    98,    -1,   105,   101,    43,   108,   107,    -1,
+     110,    -1,   110,    75,   110,    -1,    83,   101,    84,    -1,
       41,    47,    -1,    41,    46,    21,    -1,    32,    -1,    26,
-      -1,    -1,    -1,    -1,   107,    89,    -1,   107,    93,    -1,
+      -1,    -1,    -1,    -1,   108,    90,    -1,   108,    94,    -1,
       45,    21,    43,    -1,    12,    -1,    15,    -1,    22,    -1,
-      17,    -1,    21,    82,   124,    83,    -1,    21,    -1,    13,
-      -1,    14,   109,    -1,    91,    -1,   109,    76,   109,    -1,
-     109,    77,   109,    -1,   109,    78,   109,    -1,   109,    79,
-     109,    -1,   109,    65,   109,    -1,   109,    84,   109,    -1,
-     109,    85,   109,    -1,   109,    61,   109,    -1,   109,    56,
-     109,    -1,   109,    57,   109,    -1,   109,    62,   109,    -1,
-     109,    63,   109,    -1,    64,   109,    -1,   109,    75,   109,
-      -1,   109,    66,   109,    -1,   109,    67,   109,    -1,   109,
-      68,   109,    -1,    76,   109,    -1,    77,   109,    -1,    82,
-     109,    83,    -1,    69,   109,    70,   109,    -1,    69,   109,
-      71,   109,    -1,    40,   109,    -1,   113,    -1,   116,    -1,
-      28,    41,    -1,    28,    -1,    30,   111,    -1,    55,   112,
-      -1,    19,   109,    -1,    18,   109,    -1,    18,    -1,    20,
-     124,    -1,    51,   109,    46,   109,    -1,    51,   109,    -1,
-      21,    -1,   111,    86,    21,    -1,    21,    -1,   112,    86,
-      21,    -1,    31,    34,    -1,    31,    37,    -1,    31,    39,
-      -1,    31,   114,    -1,    31,   114,   115,    -1,    31,   115,
-      -1,    29,   109,    -1,   109,    -1,    38,    36,   109,    -1,
-      36,   109,    -1,    52,    53,    -1,    52,   114,    -1,    52,
-     114,   115,    -1,    52,   115,    -1,    -1,    35,    21,   118,
-     105,   121,    89,   122,   107,    -1,    49,    21,    -1,    -1,
-      50,    21,   119,   105,   121,    89,   122,   107,    -1,    -1,
-      72,    21,   120,   105,   121,    89,   122,   107,    27,    21,
-      -1,    -1,    21,    -1,   121,    86,    21,    -1,   121,    89,
-      86,    21,    -1,    -1,    21,   105,   124,    -1,    -1,   109,
-      -1,   124,    86,   109,    -1
+      17,    -1,    21,    83,   125,    84,    -1,    21,    -1,    13,
+      -1,    14,   110,    -1,    92,    -1,   110,    77,   110,    -1,
+     110,    78,   110,    -1,   110,    79,   110,    -1,   110,    80,
+     110,    -1,   110,    65,   110,    -1,   110,    85,   110,    -1,
+     110,    86,   110,    -1,   110,    61,   110,    -1,   110,    56,
+     110,    -1,   110,    57,   110,    -1,   110,    62,   110,    -1,
+     110,    63,   110,    -1,    64,   110,    -1,   110,    76,   110,
+      -1,   110,    66,   110,    -1,   110,    67,   110,    -1,   110,
+      68,   110,    -1,    77,   110,    -1,    78,   110,    -1,    83,
+     110,    84,    -1,    69,   110,    70,   110,    -1,    69,   110,
+      71,   110,    -1,    40,   110,    -1,   114,    -1,   117,    -1,
+      28,    41,    -1,    28,    -1,    30,   112,    -1,    55,   113,
+      -1,    19,   110,    -1,    18,   110,    -1,    18,    -1,    20,
+     125,    -1,    51,   110,    46,   110,    -1,    51,   110,    -1,
+      74,    21,   125,    -1,    21,    -1,   112,    87,    21,    -1,
+      21,    -1,   113,    87,    21,    -1,    31,    34,    -1,    31,
+      37,    -1,    31,    39,    -1,    31,   115,    -1,    31,   115,
+     116,    -1,    31,   116,    -1,    29,   110,    -1,   110,    -1,
+      38,    36,   110,    -1,    36,   110,    -1,    52,    53,    -1,
+      52,   115,    -1,    52,   115,   116,    -1,    52,   116,    -1,
+      -1,    35,    21,   119,   106,   122,    90,   123,   108,    -1,
+      49,    21,    -1,    -1,    50,    21,   120,   106,   122,    90,
+     123,   108,    -1,    -1,    72,    21,   121,   106,   122,    90,
+     123,   108,    27,    21,    -1,    -1,    21,    -1,   122,    87,
+      21,    -1,   122,    90,    87,    21,    -1,    -1,    21,   106,
+     125,    -1,    -1,   110,    -1,   125,    87,   110,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -640,11 +642,11 @@ static const yytype_uint16 yyrline[] =
      369,   373,   380,   386,   387,   388,   389,   390,   391,   392,
      393,   394,   395,   396,   397,   398,   399,   400,   401,   402,
      403,   404,   405,   406,   407,   408,   411,   412,   413,   414,
-     415,   417,   418,   419,   422,   425,   428,   429,   430,   433,
-     434,   437,   438,   449,   450,   451,   452,   455,   458,   463,
-     464,   467,   468,   471,   472,   475,   478,   508,   508,   514,
-     517,   517,   522,   522,   534,   535,   536,   537,   539,   543,
-     551,   552,   553
+     415,   417,   418,   419,   422,   425,   428,   429,   430,   431,
+     434,   435,   438,   439,   450,   451,   452,   453,   456,   459,
+     464,   465,   468,   469,   472,   473,   476,   479,   509,   509,
+     515,   518,   518,   523,   523,   535,   536,   537,   538,   540,
+     544,   552,   553,   554
 };
 #endif
 
@@ -663,15 +665,15 @@ static const char *const yytname[] =
   "tNLELSE", "tFACTORY", "tMETHOD", "tOPEN", "tPLAY", "tDONE",
   "tPLAYACCEL", "tINSTANCE", "tGE", "tLE", "tGT", "tLT", "tEQ", "tNEQ",
   "tAND", "tOR", "tNOT", "tMOD", "tCONCAT", "tCONTAINS", "tSTARTS",
-  "tSPRITE", "tINTERSECTS", "tWITHIN", "tON", "tME", "'='", "'&'", "'+'",
-  "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "'>'", "'<'", "','",
-  "$accept", "program", "nl", "programline", "asgn", "stmtoneliner",
-  "stmt", "ifstmt", "elsestmtoneliner", "elseifstmt", "elseifstmtoneliner",
-  "elseifstmtoneliner1", "elseifstmt1", "cond", "repeatwhile",
-  "repeatwith", "if", "elseif", "begin", "end", "stmtlist", "when", "expr",
-  "func", "globallist", "instancelist", "gotofunc", "gotoframe",
-  "gotomovie", "playfunc", "defn", "@1", "@2", "@3", "argdef", "argstore",
-  "macro", "arglist", 0
+  "tSPRITE", "tINTERSECTS", "tWITHIN", "tON", "tME", "tSOUND", "'='",
+  "'&'", "'+'", "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "'>'",
+  "'<'", "','", "$accept", "program", "nl", "programline", "asgn",
+  "stmtoneliner", "stmt", "ifstmt", "elsestmtoneliner", "elseifstmt",
+  "elseifstmtoneliner", "elseifstmtoneliner1", "elseifstmt1", "cond",
+  "repeatwhile", "repeatwith", "if", "elseif", "begin", "end", "stmtlist",
+  "when", "expr", "func", "globallist", "instancelist", "gotofunc",
+  "gotoframe", "gotomovie", "playfunc", "defn", "@1", "@2", "@3", "argdef",
+  "argstore", "macro", "arglist", 0
 };
 #endif
 
@@ -687,28 +689,28 @@ static const yytype_uint16 yytoknum[] =
      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,   323,   324,
-     325,   326,   327,   328,    61,    38,    43,    45,    42,    47,
-      37,    10,    40,    41,    62,    60,    44
+     325,   326,   327,   328,   329,    61,    38,    43,    45,    42,
+      47,    37,    10,    40,    41,    62,    60,    44
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    87,    88,    88,    88,    89,    90,    90,    90,    90,
-      90,    90,    91,    91,    91,    91,    91,    91,    91,    92,
-      92,    93,    93,    93,    93,    93,    93,    94,    94,    94,
-      94,    94,    94,    95,    95,    96,    96,    97,    97,    98,
-      99,    99,   100,   100,   100,   101,   102,   103,   104,   105,
-     106,   107,   107,   107,   108,   109,   109,   109,   109,   109,
-     109,   109,   109,   109,   109,   109,   109,   109,   109,   109,
-     109,   109,   109,   109,   109,   109,   109,   109,   109,   109,
-     109,   109,   109,   109,   109,   109,   110,   110,   110,   110,
-     110,   110,   110,   110,   110,   110,   110,   110,   110,   111,
-     111,   112,   112,   113,   113,   113,   113,   113,   113,   114,
-     114,   115,   115,   116,   116,   116,   116,   118,   117,   117,
-     119,   117,   120,   117,   121,   121,   121,   121,   122,   123,
-     124,   124,   124
+       0,    88,    89,    89,    89,    90,    91,    91,    91,    91,
+      91,    91,    92,    92,    92,    92,    92,    92,    92,    93,
+      93,    94,    94,    94,    94,    94,    94,    95,    95,    95,
+      95,    95,    95,    96,    96,    97,    97,    98,    98,    99,
+     100,   100,   101,   101,   101,   102,   103,   104,   105,   106,
+     107,   108,   108,   108,   109,   110,   110,   110,   110,   110,
+     110,   110,   110,   110,   110,   110,   110,   110,   110,   110,
+     110,   110,   110,   110,   110,   110,   110,   110,   110,   110,
+     110,   110,   110,   110,   110,   110,   111,   111,   111,   111,
+     111,   111,   111,   111,   111,   111,   111,   111,   111,   111,
+     112,   112,   113,   113,   114,   114,   114,   114,   114,   114,
+     115,   115,   116,   116,   117,   117,   117,   117,   119,   118,
+     118,   120,   118,   121,   118,   122,   122,   122,   122,   123,
+     124,   125,   125,   125
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -723,11 +725,11 @@ static const yytype_uint8 yyr2[] =
        1,     1,     2,     1,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     2,     3,     3,     3,
        3,     2,     2,     3,     4,     4,     2,     1,     1,     2,
-       1,     2,     2,     2,     2,     1,     2,     4,     2,     1,
-       3,     1,     3,     2,     2,     2,     2,     3,     2,     2,
-       1,     3,     2,     2,     2,     3,     2,     0,     8,     2,
-       0,     8,     0,    10,     0,     1,     3,     4,     0,     3,
-       0,     1,     3
+       1,     2,     2,     2,     2,     1,     2,     4,     2,     3,
+       1,     3,     1,     3,     2,     2,     2,     2,     3,     2,
+       2,     1,     3,     2,     2,     2,     3,     2,     0,     8,
+       2,     0,     8,     0,    10,     0,     1,     3,     4,     0,
+       3,     0,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -735,43 +737,44 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,    55,    61,     0,    56,    58,    95,     0,   130,
+       0,     0,    55,    61,     0,    56,    58,    95,     0,   131,
       49,    57,    90,     0,     0,    47,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     3,    63,    21,    11,    22,     0,     0,
-       0,     0,    19,     8,    87,    88,     7,     9,     5,     4,
-      60,     0,    63,    62,    94,    93,   131,    96,   130,   130,
-      89,    99,    91,     0,   103,     0,   104,     0,   105,   110,
-     106,   108,   117,    86,     0,    45,     0,     0,     0,     0,
-     119,   120,    98,   113,   114,   116,   101,    92,    76,     0,
-     122,    81,    82,     0,     1,     6,     0,     0,     0,     0,
-      42,    50,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     3,    63,    21,    11,    22,     0,
+       0,     0,     0,    19,     8,    87,    88,     7,     9,     5,
+       4,    60,     0,    63,    62,    94,    93,   132,    96,   131,
+     131,    89,   100,    91,     0,   104,     0,   105,     0,   106,
+     111,   107,   109,   118,    86,     0,    45,     0,     0,     0,
+       0,   120,   121,    98,   114,   115,   117,   102,    92,    76,
+       0,   123,   131,    81,    82,     0,     1,     6,     0,     0,
+       0,     0,    42,    50,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   129,     0,   109,   112,     0,   107,    49,     0,    46,
-       0,     0,     0,     0,     0,    54,    49,     0,   115,     0,
-       0,     0,    49,    83,     2,     0,    50,     0,     0,    49,
-       0,    26,    72,    73,    71,    74,    75,    68,    78,    79,
-      80,    77,    64,    65,    66,    67,    69,    70,   132,    59,
-     100,   111,   124,    12,    17,    14,     0,     0,    16,    13,
-     124,    97,   102,    84,    85,   124,    51,     0,    44,    51,
-       0,    43,   125,     0,    18,    15,     0,     0,    50,     0,
-       0,    50,    50,    20,     0,   128,   128,   128,    52,    53,
-       0,     0,    50,    49,    30,   126,     0,    51,    51,    51,
-       0,    50,    51,     0,    51,     0,    48,    49,    50,    38,
-       0,   127,   118,   121,     0,    23,    51,    50,    27,    50,
-      50,    40,    36,     0,     0,    37,    33,     0,     0,    50,
-       0,     0,    35,     0,     0,    50,    49,    50,    49,   123,
-       0,     0,     0,     0,    49,    31,     0,    32,     0,     0,
-      24,    28,    29,    50,    34,    50,    25,    41,    39
+       0,     0,     0,   130,     0,   110,   113,     0,   108,    49,
+       0,    46,     0,     0,     0,     0,     0,    54,    49,     0,
+     116,     0,     0,     0,    49,    99,    83,     2,     0,    50,
+       0,     0,    49,     0,    26,    72,    73,    71,    74,    75,
+      68,    78,    79,    80,    77,    64,    65,    66,    67,    69,
+      70,   133,    59,   101,   112,   125,    12,    17,    14,     0,
+       0,    16,    13,   125,    97,   103,    84,    85,   125,    51,
+       0,    44,    51,     0,    43,   126,     0,    18,    15,     0,
+       0,    50,     0,     0,    50,    50,    20,     0,   129,   129,
+     129,    52,    53,     0,     0,    50,    49,    30,   127,     0,
+      51,    51,    51,     0,    50,    51,     0,    51,     0,    48,
+      49,    50,    38,     0,   128,   119,   122,     0,    23,    51,
+      50,    27,    50,    50,    40,    36,     0,     0,    37,    33,
+       0,     0,    50,     0,     0,    35,     0,     0,    50,    49,
+      50,    49,   124,     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,    32,   208,    33,    52,    35,   209,    37,   257,   240,
-     241,   229,   242,    99,    38,    39,    40,   230,   268,   151,
-     198,    41,    42,   203,    62,    87,    44,    70,    71,    45,
-      46,   127,   136,   142,   193,   217,    47,    57
+      -1,    33,   211,    34,    53,    36,   212,    38,   260,   243,
+     244,   232,   245,   101,    39,    40,    41,   233,   271,   154,
+     201,    42,    43,   206,    63,    88,    45,    71,    72,    46,
+      47,   129,   138,   144,   196,   220,    48,    58
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -779,43 +782,44 @@ static const yytype_int16 yydefgoto[] =
 #define YYPACT_NINF -214
 static const yytype_int16 yypact[] =
 {
-     244,   -65,  -214,  -214,     9,  -214,  -214,     9,     9,     9,
-     889,  -214,   -23,    12,   634,  -214,    18,     9,    28,    31,
-      20,    29,    36,     9,   666,    40,     9,     9,    46,     9,
-       9,     9,     2,  -214,     3,  -214,  -214,  -214,    -5,     7,
-     710,     9,   864,  -214,  -214,  -214,  -214,  -214,  -214,  -214,
-      11,     9,  -214,   864,   864,   864,   864,    19,     9,     9,
-    -214,  -214,    33,     9,  -214,     9,  -214,    60,  -214,   864,
-      65,  -214,  -214,   705,    94,  -214,   -37,     9,   -36,    74,
-    -214,  -214,   739,  -214,    65,  -214,  -214,    42,   -30,   764,
-    -214,   -30,   -30,   814,  -214,   315,   710,     9,   710,    82,
-     839,   864,     9,     9,     9,     9,     9,     9,     9,     9,
-       9,     9,     9,     9,     9,     9,     9,     9,   705,     9,
-      26,    19,   117,   864,   864,     9,  -214,  -214,   118,  -214,
-       9,     9,   558,     9,     9,  -214,  -214,     9,  -214,   136,
-       9,     9,  -214,  -214,  -214,    77,   864,    79,   789,   -65,
-       9,  -214,    45,    45,    45,   -30,   -30,   -30,   864,    45,
-      45,   147,   225,   225,   -30,   -30,   864,   864,   864,  -214,
-    -214,   864,   142,  -214,   864,   864,     9,     9,   864,   864,
-     142,   864,  -214,   864,   864,   142,  -214,   -10,  -214,  -214,
-     576,   864,  -214,   -61,   864,   864,   -61,   -61,   452,   121,
-       9,   452,  -214,  -214,   145,    81,    81,    81,  -214,  -214,
-     141,     9,   864,    -8,   -13,  -214,   150,  -214,  -214,  -214,
-     134,   864,  -214,   151,  -214,   158,  -214,  -214,   158,  -214,
-     710,  -214,   452,   452,   381,  -214,  -214,   452,  -214,   452,
-     158,   158,  -214,   710,   576,  -214,   129,   143,   164,   452,
-     160,   161,  -214,   163,   148,  -214,  -214,  -214,  -214,  -214,
-     166,   153,   165,   167,   -17,  -214,   576,  -214,   523,   154,
-    -214,  -214,  -214,   452,  -214,  -214,  -214,  -214,  -214
+     263,   -63,  -214,  -214,    11,  -214,  -214,    11,    11,    11,
+     172,  -214,   -14,    15,   671,  -214,    31,    11,    61,    77,
+      47,    82,    84,    11,   703,    88,    11,    11,    89,    90,
+      11,    11,    11,     2,  -214,     3,  -214,  -214,  -214,    29,
+      38,   659,    11,   904,  -214,  -214,  -214,  -214,  -214,  -214,
+    -214,    32,    11,  -214,   904,   904,   904,   904,    27,    11,
+      11,  -214,  -214,    30,    11,  -214,    11,  -214,    80,  -214,
+     904,    24,  -214,  -214,   722,    98,  -214,   -38,    11,   -36,
+      78,  -214,  -214,   774,  -214,    24,  -214,  -214,    35,    -8,
+     800,  -214,    11,    -8,    -8,   852,  -214,   335,   659,    11,
+     659,    83,   878,   904,    11,    11,    11,    11,    11,    11,
+      11,    11,    11,    11,    11,    11,    11,    11,    11,    11,
+     722,    11,     9,    27,   106,   904,   904,    11,  -214,  -214,
+     110,  -214,    11,    11,   748,    11,    11,  -214,  -214,    11,
+    -214,   113,    11,    11,  -214,    27,  -214,  -214,    52,   904,
+      53,   826,   -63,    11,  -214,   244,   244,   244,    -8,    -8,
+      -8,   904,   244,   244,   316,   -45,   -45,    -8,    -8,   904,
+     904,   904,  -214,  -214,   904,   120,  -214,   904,   904,    11,
+      11,   904,   904,   120,   904,  -214,   904,   904,   120,  -214,
+      -2,  -214,  -214,   613,   904,  -214,   -37,   904,   904,   -37,
+     -37,   474,   116,    11,   474,  -214,  -214,   142,    79,    79,
+      79,  -214,  -214,   138,    11,   904,    28,   -10,  -214,   147,
+    -214,  -214,  -214,   128,   904,  -214,   139,  -214,   148,  -214,
+    -214,   148,  -214,   659,  -214,   474,   474,   402,  -214,  -214,
+     474,  -214,   474,   148,   148,  -214,   659,   613,  -214,   130,
+     137,   160,   474,   157,   159,  -214,   163,   144,  -214,  -214,
+    -214,  -214,  -214,   164,   151,   162,   165,   -17,  -214,   613,
+    -214,   546,   154,  -214,  -214,  -214,   474,  -214,  -214,  -214,
+    -214,  -214
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -214,  -214,    10,   101,     4,  -184,     0,  -214,  -214,  -214,
-     -16,  -213,   -40,   -69,  -214,  -214,  -214,  -208,    -9,   -20,
-    -130,  -214,    39,     5,  -214,  -214,  -214,   178,   -12,  -214,
-    -214,  -214,  -214,  -214,  -109,   -93,  -214,    73
+    -214,  -214,    10,    99,     4,  -186,     0,  -214,  -214,  -214,
+     -19,  -175,   -43,   -69,  -214,  -214,  -214,  -213,    -9,   -16,
+     -97,  -214,    40,     5,  -214,  -214,  -214,   177,   -12,  -214,
+    -214,  -214,  -214,  -214,  -109,  -123,  -214,   -46
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -825,206 +829,210 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -61
 static const yytype_int16 yytable[] =
 {
-      36,    59,    94,   -10,    34,    43,   202,   130,   133,   -51,
-     -51,    49,    85,   226,   199,   245,    48,   243,    60,   223,
-      48,     2,     3,     4,     5,   204,     6,   145,   245,   147,
-      50,    11,   243,    61,   200,   227,   108,   131,   134,    72,
-     224,    79,    95,    53,    76,    77,    54,    55,    56,    51,
-      80,    19,    78,    69,   116,   117,    73,    81,   126,   201,
-     255,    86,    82,    69,   -51,    88,    89,    90,    91,    92,
-      93,   196,   138,    26,    74,    75,   197,    96,    27,   100,
-     101,    97,   274,    48,   -10,    29,    30,   232,   233,   234,
-     118,    31,   237,    58,   239,    36,   125,    56,    56,    34,
-      43,    65,   123,    67,   124,   119,   249,   105,   106,   169,
-     107,   108,   119,   218,   219,   129,   132,   135,   172,   122,
-     111,   112,   113,   114,   115,   149,   187,   180,   139,   116,
-     117,   120,   121,   185,   273,   100,   146,   148,   170,   173,
-     190,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   182,   168,   189,
-     186,   247,   188,   192,   171,   211,   215,   216,   220,   174,
-     175,   231,   178,   179,   254,   235,   181,   256,   210,   183,
-     184,   213,   214,   238,   226,   259,   258,   261,   262,   191,
-     263,   264,   222,   269,   270,   276,   144,   271,   228,   272,
-     252,   236,    84,   205,   225,     0,   206,   207,   246,   105,
-     106,     0,   107,   108,     0,   194,   195,   250,   244,   251,
-     253,     0,     0,   112,   113,   114,   115,     0,     0,   260,
-       0,   116,   117,     0,     0,   265,     0,   267,     0,   212,
-       0,     0,     0,     0,    -6,     1,     0,   266,     0,     0,
-     221,     0,     0,   277,     0,   278,     2,     3,     4,     5,
-       0,     6,     7,     8,     9,    10,    11,     0,   275,   100,
-       0,     0,    12,     0,    13,    14,    15,     0,     0,    16,
-       0,     0,   100,     0,    17,    18,    19,   105,   106,    20,
-     107,   108,     0,    21,    22,    23,    24,     0,     0,    25,
-       0,     0,     0,   114,   115,     0,     0,     0,    26,   116,
-     117,     0,     0,    27,     0,     0,    28,     0,     0,     0,
-      29,    30,     0,     0,     0,    -6,    31,     2,     3,     4,
+      37,    60,    96,   -10,    35,    44,   132,   205,   135,   -51,
+     -51,    50,    86,   122,   123,   246,   229,   107,   108,    49,
+     109,   110,   202,     2,     3,     4,     5,    61,     6,   148,
+     246,   150,    51,    11,   116,   117,    62,   133,   230,   136,
+     118,   119,   203,    97,    54,    49,   145,    55,    56,    57,
+     207,    52,    73,    19,    70,   226,   248,    74,   110,   128,
+      66,   258,    68,    83,    70,   -51,    89,    90,    80,   248,
+      93,    94,    95,   140,   199,    26,   227,   118,   119,   200,
+      27,   102,   103,   277,    49,   -10,   221,   222,    30,    31,
+      77,    78,   120,   172,    32,   204,   121,    37,    79,    57,
+      57,    35,    44,    81,   125,    82,   126,    75,    76,    87,
+      91,    92,    98,    99,   121,    59,   127,   124,   134,   131,
+     175,   137,   141,   235,   236,   237,   152,   173,   240,   183,
+     242,   176,    57,   190,   185,   188,   189,   191,   102,   149,
+     151,   195,   252,   193,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     214,   171,   192,   218,   250,   223,   219,   174,   234,   238,
+     276,   241,   177,   178,   229,   181,   182,   257,   259,   184,
+     261,   262,   186,   187,   264,   213,   265,   267,   216,   217,
+     266,   272,   273,   194,   274,   279,   147,   275,   231,   225,
+     255,    85,     0,     0,     0,     0,   208,   228,   239,   209,
+     210,     0,     0,     0,     0,   249,     0,     0,     0,   197,
+     198,   247,     0,     0,   253,     0,   254,   256,   -60,   -60,
+       0,     0,     0,   -60,   -60,   -60,   263,   -60,   -60,   -60,
+     -60,     0,   268,   215,   270,     0,     0,     0,   -60,     0,
+     269,   -60,   -60,     0,   224,    59,     0,   -60,   -60,     0,
+     280,     0,   281,    -6,     1,     0,     0,     0,     0,     0,
+       0,   278,     0,   102,     0,     2,     3,     4,     5,     0,
+       6,     7,     8,     9,    10,    11,   102,     0,     0,     0,
+       0,    12,     0,    13,    14,    15,     0,     0,    16,     0,
+       0,     0,     0,    17,    18,    19,   107,   108,    20,   109,
+     110,     0,    21,    22,    23,    24,     0,     0,    25,     0,
+     113,   114,   115,   116,   117,     0,     0,    26,     0,   118,
+     119,     0,    27,     0,     0,    28,     0,    29,     0,     0,
+      30,    31,     0,     0,     0,    -6,    32,     2,     3,     4,
        5,     0,     6,     7,     8,     9,    10,    11,     0,     0,
        0,     0,     0,    12,     0,    13,    14,    15,     0,     0,
-      16,     0,     0,     0,     0,    17,    18,    19,     0,     0,
-      20,     0,     0,     0,    21,    22,    23,    24,     0,     0,
-      25,     0,     0,     0,     0,     0,     0,     0,     0,    26,
-       0,     0,     0,     0,    27,     0,     0,    28,     0,     0,
-       0,    29,    30,     2,     3,     4,     5,    31,     6,     7,
-       8,     9,    50,    11,     0,     0,     0,     0,   248,    12,
-       0,    13,    14,    15,     0,     0,     0,     0,     0,     0,
-       0,    17,    18,    19,     0,     0,    20,     0,     0,     0,
-       0,     0,    23,    24,     0,     0,    25,     0,     0,     0,
-       0,     0,     0,     0,     0,    26,     0,     0,     0,     0,
-      27,     0,     0,     0,     0,     0,     0,    29,    30,     0,
-       0,     0,    48,    31,     2,     3,     4,     5,     0,     6,
-       7,     8,     9,    50,    11,     0,     0,     0,     0,     0,
+      16,     0,     0,     0,     0,    17,    18,    19,   107,   108,
+      20,   109,   110,     0,    21,    22,    23,    24,     0,     0,
+      25,     0,     0,   114,   115,   116,   117,     0,     0,    26,
+       0,   118,   119,     0,    27,     0,     0,    28,     0,    29,
+       0,     0,    30,    31,     2,     3,     4,     5,    32,     6,
+       7,     8,     9,    51,    11,     0,     0,     0,     0,   251,
       12,     0,    13,    14,    15,     0,     0,     0,     0,     0,
        0,     0,    17,    18,    19,     0,     0,    20,     0,     0,
        0,     0,     0,    23,    24,     0,     0,    25,     0,     0,
        0,     0,     0,     0,     0,     0,    26,     0,     0,     0,
-       0,    27,     0,     0,     0,     0,     0,     0,    29,    30,
-       0,     0,     0,    48,    31,     2,     3,     4,     5,     0,
-       6,     7,     8,     9,    50,    11,     0,     0,     0,     0,
-       0,    12,     0,    13,    14,    15,     0,     0,     0,     0,
-       0,     0,     0,    17,    18,    19,     0,     0,    20,     0,
+       0,    27,     0,     0,     0,     0,    29,     0,     0,    30,
+      31,     0,     0,     0,    49,    32,     2,     3,     4,     5,
+       0,     6,     7,     8,     9,    51,    11,     0,     0,     0,
+       0,     0,    12,     0,    13,    14,    15,     0,     0,     0,
+       0,     0,     0,     0,    17,    18,    19,     0,     0,    20,
+       0,     0,     0,     0,     0,    23,    24,     0,     0,    25,
+       0,     0,     0,     0,     0,     0,     0,     0,    26,     0,
+       0,     0,     0,    27,     0,     0,     0,     0,    29,     0,
+       0,    30,    31,     0,     0,     0,    49,    32,     2,     3,
+       4,     5,     0,     6,     7,     8,     9,    51,    11,     0,
+       0,     0,     0,     0,    12,     0,    13,    14,    15,     0,
+       0,     0,     0,     0,     0,     0,    17,    18,    19,     0,
+       0,    20,     0,     0,     0,     0,     0,    23,    24,     0,
+       0,    25,     0,     0,     0,     0,     0,     0,     0,     0,
+      26,     0,     0,     0,     0,    27,     0,     0,     0,     0,
+      29,     0,     0,    30,    31,     2,     3,     4,     5,    32,
+       6,     7,     8,     9,    51,    11,     0,     0,     0,     0,
+       0,    12,     0,    13,    14,     0,     0,     0,     0,     0,
+       0,     0,     0,    17,     0,    19,     0,     0,     0,     0,
        0,     0,     0,     0,    23,    24,     0,     0,    25,     0,
-       0,     0,     0,     0,     0,     0,     0,    26,     2,     3,
-       4,     5,    27,     6,     7,     8,     9,    50,    11,    29,
-      30,     0,   176,     0,    12,    31,    13,    14,     0,     0,
-       0,     0,     0,     0,   102,   103,    17,     0,    19,   104,
-     105,   106,     0,   107,   108,   109,   110,    23,    24,     0,
-       0,    25,   177,   111,   112,   113,   114,   115,     0,     0,
-      26,     0,   116,   117,     0,    27,     2,     3,     4,     5,
-       0,     6,    29,    30,     0,    50,    11,     0,    31,     0,
-       0,     0,     0,    63,     0,     0,     0,     0,    64,     0,
-      65,    66,    67,    68,    51,     0,    19,     0,     2,     3,
-       4,     5,     0,     6,     0,     0,     0,    50,    11,     0,
-       0,     0,     0,     0,     0,    63,     0,     0,    26,     0,
-       0,     0,    65,    27,    67,     0,    51,     0,    19,     0,
-      29,    30,     0,     0,     0,     0,    31,     0,     0,    83,
-       0,     0,     2,     3,     4,     5,     0,     6,     0,     0,
-      26,    50,    11,     0,     0,    27,     0,     0,   128,     0,
-       0,     0,    29,    30,     0,     0,     0,     0,    31,     0,
-      51,     0,    19,     0,     0,     0,     0,     0,     0,     0,
-       0,   102,   103,     0,     0,     0,   104,   105,   106,     0,
-     107,   108,   109,   110,    26,     0,     0,     0,     0,    27,
-     111,   112,   113,   114,   115,   137,    29,    30,     0,   116,
-     117,     0,    98,     0,     0,   102,   103,     0,     0,     0,
-     104,   105,   106,     0,   107,   108,   109,   110,     0,     0,
-       0,     0,     0,     0,   111,   112,   113,   114,   115,     0,
-     102,   103,     0,   116,   117,   104,   105,   106,     0,   107,
-     108,   109,   110,     0,   140,   141,     0,     0,     0,   111,
-     112,   113,   114,   115,     0,   102,   103,     0,   116,   117,
-     104,   105,   106,     0,   107,   108,   109,   110,     0,     0,
-       0,     0,     0,   150,   111,   112,   113,   114,   115,     0,
-     102,   103,   143,   116,   117,   104,   105,   106,     0,   107,
-     108,   109,   110,     0,     0,     0,     0,     0,     0,   111,
-     112,   113,   114,   115,     0,   102,   103,   143,   116,   117,
-     104,   105,   106,     0,   107,   108,   109,   110,     0,     0,
-       0,     0,     0,   150,   111,   112,   113,   114,   115,     0,
-     102,   103,     0,   116,   117,   104,   105,   106,     0,   107,
-     108,   109,   110,     0,     0,     0,     0,     0,     0,   111,
-     112,   113,   114,   115,     0,   -60,   -60,     0,   116,   117,
-     -60,   -60,   -60,     0,   -60,   -60,   -60,   -60,     0,     0,
-       0,     0,     0,     0,   -60,     0,     0,   -60,   -60,     0,
-       0,    58,     0,   -60,   -60
+       0,     2,     3,     4,     5,     0,     6,    26,     0,     0,
+      51,    11,    27,     2,     3,     4,     5,    29,     6,     0,
+      30,    31,    51,    11,     0,     0,    32,     0,     0,    52,
+      64,    19,     0,     0,     0,    65,     0,    66,    67,    68,
+      69,    52,     0,    19,     0,     2,     3,     4,     5,     0,
+       6,     0,     0,    26,    51,    11,     0,     0,    27,     0,
+       0,     0,    64,     0,     0,    26,    30,    31,     0,    66,
+      27,    68,   100,    52,     0,    19,     0,     0,    30,    31,
+       0,     0,     0,     0,    32,   130,    84,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    26,     0,     0,
+       0,     0,    27,     0,     0,     0,     0,     0,   104,   105,
+      30,    31,     0,   106,   107,   108,    32,   109,   110,   111,
+     112,     0,   179,     0,     0,     0,     0,     0,   113,   114,
+     115,   116,   117,     0,   104,   105,     0,   118,   119,   106,
+     107,   108,     0,   109,   110,   111,   112,     0,     0,     0,
+     139,     0,     0,   180,   113,   114,   115,   116,   117,     0,
+     104,   105,     0,   118,   119,   106,   107,   108,     0,   109,
+     110,   111,   112,     0,     0,     0,     0,     0,     0,     0,
+     113,   114,   115,   116,   117,     0,   104,   105,     0,   118,
+     119,   106,   107,   108,     0,   109,   110,   111,   112,     0,
+     142,   143,     0,     0,     0,     0,   113,   114,   115,   116,
+     117,     0,   104,   105,     0,   118,   119,   106,   107,   108,
+       0,   109,   110,   111,   112,     0,     0,     0,     0,     0,
+       0,   153,   113,   114,   115,   116,   117,     0,   104,   105,
+     146,   118,   119,   106,   107,   108,     0,   109,   110,   111,
+     112,     0,     0,     0,     0,     0,     0,     0,   113,   114,
+     115,   116,   117,     0,   104,   105,   146,   118,   119,   106,
+     107,   108,     0,   109,   110,   111,   112,     0,     0,     0,
+       0,     0,     0,   153,   113,   114,   115,   116,   117,     0,
+     104,   105,     0,   118,   119,   106,   107,   108,     0,   109,
+     110,   111,   112,     0,     0,     0,     0,     0,     0,     0,
+     113,   114,   115,   116,   117,     0,     0,     0,     0,   118,
+     119
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    10,     0,     0,     0,     0,   190,    44,    44,    26,
-      27,     1,    24,    26,    24,   228,    81,   225,    41,    27,
-      81,    12,    13,    14,    15,    86,    17,    96,   241,    98,
-      21,    22,   240,    21,    44,    48,    66,    74,    74,    21,
-      48,    21,    32,     4,    13,    14,     7,     8,     9,    40,
-      21,    42,    21,    14,    84,    85,    17,    21,    70,   189,
-     244,    21,    23,    24,    81,    26,    27,    21,    29,    30,
-      31,   180,    84,    64,    46,    47,   185,    82,    69,    40,
-      41,    74,   266,    81,    81,    76,    77,   217,   218,   219,
-      51,    82,   222,    82,   224,    95,    36,    58,    59,    95,
-      95,    36,    63,    38,    65,    86,   236,    62,    63,    83,
-      65,    66,    86,   206,   207,    21,    77,    43,   127,    86,
-      75,    76,    77,    78,    79,    43,   146,   136,    86,    84,
-      85,    58,    59,   142,   264,    96,    97,    98,    21,    21,
-     149,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,    21,   119,   149,
-      83,   230,    83,    21,   125,    44,    21,    86,    27,   130,
-     131,    21,   133,   134,   243,    41,   137,    48,   198,   140,
-     141,   201,   202,    32,    26,    21,    43,    27,    27,   150,
-      27,    43,   212,    27,    41,    41,    95,    32,   214,    32,
-     240,   221,    24,   193,   213,    -1,   196,   197,   228,    62,
-      63,    -1,    65,    66,    -1,   176,   177,   237,   227,   239,
-     240,    -1,    -1,    76,    77,    78,    79,    -1,    -1,   249,
-      -1,    84,    85,    -1,    -1,   255,    -1,   257,    -1,   200,
-      -1,    -1,    -1,    -1,     0,     1,    -1,   256,    -1,    -1,
-     211,    -1,    -1,   273,    -1,   275,    12,    13,    14,    15,
-      -1,    17,    18,    19,    20,    21,    22,    -1,   268,   230,
-      -1,    -1,    28,    -1,    30,    31,    32,    -1,    -1,    35,
-      -1,    -1,   243,    -1,    40,    41,    42,    62,    63,    45,
-      65,    66,    -1,    49,    50,    51,    52,    -1,    -1,    55,
-      -1,    -1,    -1,    78,    79,    -1,    -1,    -1,    64,    84,
-      85,    -1,    -1,    69,    -1,    -1,    72,    -1,    -1,    -1,
-      76,    77,    -1,    -1,    -1,    81,    82,    12,    13,    14,
+       0,    10,     0,     0,     0,     0,    44,   193,    44,    26,
+      27,     1,    24,    59,    60,   228,    26,    62,    63,    82,
+      65,    66,    24,    12,    13,    14,    15,    41,    17,    98,
+     243,   100,    21,    22,    79,    80,    21,    75,    48,    75,
+      85,    86,    44,    33,     4,    82,    92,     7,     8,     9,
+      87,    40,    21,    42,    14,    27,   231,    17,    66,    71,
+      36,   247,    38,    23,    24,    82,    26,    27,    21,   244,
+      30,    31,    32,    85,   183,    64,    48,    85,    86,   188,
+      69,    41,    42,   269,    82,    82,   209,   210,    77,    78,
+      13,    14,    52,    84,    83,   192,    87,    97,    21,    59,
+      60,    97,    97,    21,    64,    21,    66,    46,    47,    21,
+      21,    21,    83,    75,    87,    83,    36,    87,    78,    21,
+     129,    43,    87,   220,   221,   222,    43,    21,   225,   138,
+     227,    21,    92,   149,    21,   144,    84,    84,    98,    99,
+     100,    21,   239,   152,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+      44,   121,   152,    21,   233,    27,    87,   127,    21,    41,
+     267,    32,   132,   133,    26,   135,   136,   246,    48,   139,
+      43,    21,   142,   143,    27,   201,    27,    43,   204,   205,
+      27,    27,    41,   153,    32,    41,    97,    32,   217,   215,
+     243,    24,    -1,    -1,    -1,    -1,   196,   216,   224,   199,
+     200,    -1,    -1,    -1,    -1,   231,    -1,    -1,    -1,   179,
+     180,   230,    -1,    -1,   240,    -1,   242,   243,    56,    57,
+      -1,    -1,    -1,    61,    62,    63,   252,    65,    66,    67,
+      68,    -1,   258,   203,   260,    -1,    -1,    -1,    76,    -1,
+     259,    79,    80,    -1,   214,    83,    -1,    85,    86,    -1,
+     276,    -1,   278,     0,     1,    -1,    -1,    -1,    -1,    -1,
+      -1,   271,    -1,   233,    -1,    12,    13,    14,    15,    -1,
+      17,    18,    19,    20,    21,    22,   246,    -1,    -1,    -1,
+      -1,    28,    -1,    30,    31,    32,    -1,    -1,    35,    -1,
+      -1,    -1,    -1,    40,    41,    42,    62,    63,    45,    65,
+      66,    -1,    49,    50,    51,    52,    -1,    -1,    55,    -1,
+      76,    77,    78,    79,    80,    -1,    -1,    64,    -1,    85,
+      86,    -1,    69,    -1,    -1,    72,    -1,    74,    -1,    -1,
+      77,    78,    -1,    -1,    -1,    82,    83,    12,    13,    14,
       15,    -1,    17,    18,    19,    20,    21,    22,    -1,    -1,
       -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,    -1,
-      35,    -1,    -1,    -1,    -1,    40,    41,    42,    -1,    -1,
-      45,    -1,    -1,    -1,    49,    50,    51,    52,    -1,    -1,
-      55,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,
-      -1,    -1,    -1,    -1,    69,    -1,    -1,    72,    -1,    -1,
-      -1,    76,    77,    12,    13,    14,    15,    82,    17,    18,
-      19,    20,    21,    22,    -1,    -1,    -1,    -1,    27,    28,
-      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    40,    41,    42,    -1,    -1,    45,    -1,    -1,    -1,
-      -1,    -1,    51,    52,    -1,    -1,    55,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,
-      69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,
-      -1,    -1,    81,    82,    12,    13,    14,    15,    -1,    17,
-      18,    19,    20,    21,    22,    -1,    -1,    -1,    -1,    -1,
+      35,    -1,    -1,    -1,    -1,    40,    41,    42,    62,    63,
+      45,    65,    66,    -1,    49,    50,    51,    52,    -1,    -1,
+      55,    -1,    -1,    77,    78,    79,    80,    -1,    -1,    64,
+      -1,    85,    86,    -1,    69,    -1,    -1,    72,    -1,    74,
+      -1,    -1,    77,    78,    12,    13,    14,    15,    83,    17,
+      18,    19,    20,    21,    22,    -1,    -1,    -1,    -1,    27,
       28,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    40,    41,    42,    -1,    -1,    45,    -1,    -1,
       -1,    -1,    -1,    51,    52,    -1,    -1,    55,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,
-      -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,
-      -1,    -1,    -1,    81,    82,    12,    13,    14,    15,    -1,
+      -1,    69,    -1,    -1,    -1,    -1,    74,    -1,    -1,    77,
+      78,    -1,    -1,    -1,    82,    83,    12,    13,    14,    15,
+      -1,    17,    18,    19,    20,    21,    22,    -1,    -1,    -1,
+      -1,    -1,    28,    -1,    30,    31,    32,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    40,    41,    42,    -1,    -1,    45,
+      -1,    -1,    -1,    -1,    -1,    51,    52,    -1,    -1,    55,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,
+      -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,    74,    -1,
+      -1,    77,    78,    -1,    -1,    -1,    82,    83,    12,    13,
+      14,    15,    -1,    17,    18,    19,    20,    21,    22,    -1,
+      -1,    -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    40,    41,    42,    -1,
+      -1,    45,    -1,    -1,    -1,    -1,    -1,    51,    52,    -1,
+      -1,    55,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      64,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,
+      74,    -1,    -1,    77,    78,    12,    13,    14,    15,    83,
       17,    18,    19,    20,    21,    22,    -1,    -1,    -1,    -1,
-      -1,    28,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    40,    41,    42,    -1,    -1,    45,    -1,
+      -1,    28,    -1,    30,    31,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    40,    -1,    42,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    51,    52,    -1,    -1,    55,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,    12,    13,
-      14,    15,    69,    17,    18,    19,    20,    21,    22,    76,
-      77,    -1,    44,    -1,    28,    82,    30,    31,    -1,    -1,
-      -1,    -1,    -1,    -1,    56,    57,    40,    -1,    42,    61,
-      62,    63,    -1,    65,    66,    67,    68,    51,    52,    -1,
-      -1,    55,    74,    75,    76,    77,    78,    79,    -1,    -1,
-      64,    -1,    84,    85,    -1,    69,    12,    13,    14,    15,
-      -1,    17,    76,    77,    -1,    21,    22,    -1,    82,    -1,
-      -1,    -1,    -1,    29,    -1,    -1,    -1,    -1,    34,    -1,
-      36,    37,    38,    39,    40,    -1,    42,    -1,    12,    13,
-      14,    15,    -1,    17,    -1,    -1,    -1,    21,    22,    -1,
-      -1,    -1,    -1,    -1,    -1,    29,    -1,    -1,    64,    -1,
-      -1,    -1,    36,    69,    38,    -1,    40,    -1,    42,    -1,
-      76,    77,    -1,    -1,    -1,    -1,    82,    -1,    -1,    53,
-      -1,    -1,    12,    13,    14,    15,    -1,    17,    -1,    -1,
-      64,    21,    22,    -1,    -1,    69,    -1,    -1,    33,    -1,
-      -1,    -1,    76,    77,    -1,    -1,    -1,    -1,    82,    -1,
-      40,    -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    56,    57,    -1,    -1,    -1,    61,    62,    63,    -1,
-      65,    66,    67,    68,    64,    -1,    -1,    -1,    -1,    69,
-      75,    76,    77,    78,    79,    46,    76,    77,    -1,    84,
-      85,    -1,    82,    -1,    -1,    56,    57,    -1,    -1,    -1,
-      61,    62,    63,    -1,    65,    66,    67,    68,    -1,    -1,
-      -1,    -1,    -1,    -1,    75,    76,    77,    78,    79,    -1,
-      56,    57,    -1,    84,    85,    61,    62,    63,    -1,    65,
-      66,    67,    68,    -1,    70,    71,    -1,    -1,    -1,    75,
-      76,    77,    78,    79,    -1,    56,    57,    -1,    84,    85,
-      61,    62,    63,    -1,    65,    66,    67,    68,    -1,    -1,
-      -1,    -1,    -1,    74,    75,    76,    77,    78,    79,    -1,
-      56,    57,    83,    84,    85,    61,    62,    63,    -1,    65,
-      66,    67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,
-      76,    77,    78,    79,    -1,    56,    57,    83,    84,    85,
-      61,    62,    63,    -1,    65,    66,    67,    68,    -1,    -1,
-      -1,    -1,    -1,    74,    75,    76,    77,    78,    79,    -1,
-      56,    57,    -1,    84,    85,    61,    62,    63,    -1,    65,
-      66,    67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,
-      76,    77,    78,    79,    -1,    56,    57,    -1,    84,    85,
-      61,    62,    63,    -1,    65,    66,    67,    68,    -1,    -1,
-      -1,    -1,    -1,    -1,    75,    -1,    -1,    78,    79,    -1,
-      -1,    82,    -1,    84,    85
+      -1,    12,    13,    14,    15,    -1,    17,    64,    -1,    -1,
+      21,    22,    69,    12,    13,    14,    15,    74,    17,    -1,
+      77,    78,    21,    22,    -1,    -1,    83,    -1,    -1,    40,
+      29,    42,    -1,    -1,    -1,    34,    -1,    36,    37,    38,
+      39,    40,    -1,    42,    -1,    12,    13,    14,    15,    -1,
+      17,    -1,    -1,    64,    21,    22,    -1,    -1,    69,    -1,
+      -1,    -1,    29,    -1,    -1,    64,    77,    78,    -1,    36,
+      69,    38,    83,    40,    -1,    42,    -1,    -1,    77,    78,
+      -1,    -1,    -1,    -1,    83,    33,    53,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,    -1,
+      -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,    56,    57,
+      77,    78,    -1,    61,    62,    63,    83,    65,    66,    67,
+      68,    -1,    44,    -1,    -1,    -1,    -1,    -1,    76,    77,
+      78,    79,    80,    -1,    56,    57,    -1,    85,    86,    61,
+      62,    63,    -1,    65,    66,    67,    68,    -1,    -1,    -1,
+      46,    -1,    -1,    75,    76,    77,    78,    79,    80,    -1,
+      56,    57,    -1,    85,    86,    61,    62,    63,    -1,    65,
+      66,    67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      76,    77,    78,    79,    80,    -1,    56,    57,    -1,    85,
+      86,    61,    62,    63,    -1,    65,    66,    67,    68,    -1,
+      70,    71,    -1,    -1,    -1,    -1,    76,    77,    78,    79,
+      80,    -1,    56,    57,    -1,    85,    86,    61,    62,    63,
+      -1,    65,    66,    67,    68,    -1,    -1,    -1,    -1,    -1,
+      -1,    75,    76,    77,    78,    79,    80,    -1,    56,    57,
+      84,    85,    86,    61,    62,    63,    -1,    65,    66,    67,
+      68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,
+      78,    79,    80,    -1,    56,    57,    84,    85,    86,    61,
+      62,    63,    -1,    65,    66,    67,    68,    -1,    -1,    -1,
+      -1,    -1,    -1,    75,    76,    77,    78,    79,    80,    -1,
+      56,    57,    -1,    85,    86,    61,    62,    63,    -1,    65,
+      66,    67,    68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      76,    77,    78,    79,    80,    -1,    -1,    -1,    -1,    85,
+      86
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1033,32 +1041,33 @@ static const yytype_uint8 yystos[] =
 {
        0,     1,    12,    13,    14,    15,    17,    18,    19,    20,
       21,    22,    28,    30,    31,    32,    35,    40,    41,    42,
-      45,    49,    50,    51,    52,    55,    64,    69,    72,    76,
-      77,    82,    88,    90,    91,    92,    93,    94,   101,   102,
-     103,   108,   109,   110,   113,   116,   117,   123,    81,    89,
-      21,    40,    91,   109,   109,   109,   109,   124,    82,   105,
-      41,    21,   111,    29,    34,    36,    37,    38,    39,   109,
-     114,   115,    21,   109,    46,    47,    13,    14,    21,    21,
-      21,    21,   109,    53,   114,   115,    21,   112,   109,   109,
-      21,   109,   109,   109,     0,    89,    82,    74,    82,   100,
-     109,   109,    56,    57,    61,    62,    63,    65,    66,    67,
-      68,    75,    76,    77,    78,    79,    84,    85,   109,    86,
-     124,   124,    86,   109,   109,    36,   115,   118,    33,    21,
-      44,    74,   109,    44,    74,    43,   119,    46,   115,    86,
-      70,    71,   120,    83,    90,   100,   109,   100,   109,    43,
-      74,   106,   109,   109,   109,   109,   109,   109,   109,   109,
-     109,   109,   109,   109,   109,   109,   109,   109,   109,    83,
-      21,   109,   105,    21,   109,   109,    44,    74,   109,   109,
-     105,   109,    21,   109,   109,   105,    83,   106,    83,    89,
-     105,   109,    21,   121,   109,   109,   121,   121,   107,    24,
-      44,   107,    92,   110,    86,    89,    89,    89,    89,    93,
-     106,    44,   109,   106,   106,    21,    86,   122,   122,   122,
-      27,   109,   106,    27,    48,   105,    26,    48,    97,    98,
-     104,    21,   107,   107,   107,    41,   106,   107,    32,   107,
-      96,    97,    99,   104,   105,    98,   106,   100,    27,   107,
-     106,   106,    99,   106,   100,    92,    48,    95,    43,    21,
-     106,    27,    27,    27,    43,   106,   105,   106,   105,    27,
-      41,    32,    32,   107,    92,    93,    41,   106,   106
+      45,    49,    50,    51,    52,    55,    64,    69,    72,    74,
+      77,    78,    83,    89,    91,    92,    93,    94,    95,   102,
+     103,   104,   109,   110,   111,   114,   117,   118,   124,    82,
+      90,    21,    40,    92,   110,   110,   110,   110,   125,    83,
+     106,    41,    21,   112,    29,    34,    36,    37,    38,    39,
+     110,   115,   116,    21,   110,    46,    47,    13,    14,    21,
+      21,    21,    21,   110,    53,   115,   116,    21,   113,   110,
+     110,    21,    21,   110,   110,   110,     0,    90,    83,    75,
+      83,   101,   110,   110,    56,    57,    61,    62,    63,    65,
+      66,    67,    68,    76,    77,    78,    79,    80,    85,    86,
+     110,    87,   125,   125,    87,   110,   110,    36,   116,   119,
+      33,    21,    44,    75,   110,    44,    75,    43,   120,    46,
+     116,    87,    70,    71,   121,   125,    84,    91,   101,   110,
+     101,   110,    43,    75,   107,   110,   110,   110,   110,   110,
+     110,   110,   110,   110,   110,   110,   110,   110,   110,   110,
+     110,   110,    84,    21,   110,   106,    21,   110,   110,    44,
+      75,   110,   110,   106,   110,    21,   110,   110,   106,    84,
+     107,    84,    90,   106,   110,    21,   122,   110,   110,   122,
+     122,   108,    24,    44,   108,    93,   111,    87,    90,    90,
+      90,    90,    94,   107,    44,   110,   107,   107,    21,    87,
+     123,   123,   123,    27,   110,   107,    27,    48,   106,    26,
+      48,    98,    99,   105,    21,   108,   108,   108,    41,   107,
+     108,    32,   108,    97,    98,   100,   105,   106,    99,   107,
+     101,    27,   108,   107,   107,   100,   107,   101,    93,    48,
+      96,    43,    21,   107,    27,    27,    27,    43,   107,   106,
+     107,   106,    27,    41,    32,    32,   108,    93,    94,    41,
+     107,   107
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2426,94 +2435,99 @@ yyreduce:
     break;
 
   case 99:
-#line 433 "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 431 "engines/director/lingo/lingo-gr.y"
+    { Common::String s("sound-"); s += *(yyvsp[(2) - (3)].s); g_lingo->codeFunc(&s, (yyvsp[(3) - (3)].narg)); ;}
     break;
 
   case 100:
 #line 434 "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); ;}
+    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 101:
-#line 437 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
+#line 435 "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 102:
 #line 438 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
+    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 103:
-#line 449 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoloop); ;}
+#line 439 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
   case 104:
 #line 450 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotonext); ;}
+    { g_lingo->code1(g_lingo->c_gotoloop); ;}
     break;
 
   case 105:
 #line 451 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+    { g_lingo->code1(g_lingo->c_gotonext); ;}
     break;
 
   case 106:
 #line 452 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+    break;
+
+  case 107:
+#line 453 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 107:
-#line 455 "engines/director/lingo/lingo-gr.y"
+  case 108:
+#line 456 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 108:
-#line 458 "engines/director/lingo/lingo-gr.y"
+  case 109:
+#line 459 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 113:
-#line 471 "engines/director/lingo/lingo-gr.y"
+  case 114:
+#line 472 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_playdone); ;}
     break;
 
-  case 114:
-#line 472 "engines/director/lingo/lingo-gr.y"
+  case 115:
+#line 473 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 115:
-#line 475 "engines/director/lingo/lingo-gr.y"
+  case 116:
+#line 476 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 116:
-#line 478 "engines/director/lingo/lingo-gr.y"
+  case 117:
+#line 479 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 117:
-#line 508 "engines/director/lingo/lingo-gr.y"
+  case 118:
+#line 509 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 118:
-#line 509 "engines/director/lingo/lingo-gr.y"
+  case 119:
+#line 510 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeConst(0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
@@ -2521,33 +2535,33 @@ yyreduce:
 			g_lingo->_indef = false; ;}
     break;
 
-  case 119:
-#line 514 "engines/director/lingo/lingo-gr.y"
+  case 120:
+#line 515 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeFactory(*(yyvsp[(2) - (2)].s));
 		;}
     break;
 
-  case 120:
-#line 517 "engines/director/lingo/lingo-gr.y"
+  case 121:
+#line 518 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; ;}
     break;
 
-  case 121:
-#line 518 "engines/director/lingo/lingo-gr.y"
+  case 122:
+#line 519 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->code1(g_lingo->c_procret);
 			g_lingo->define(*(yyvsp[(2) - (8)].s), (yyvsp[(4) - (8)].code), (yyvsp[(5) - (8)].narg) + 1, &g_lingo->_currentFactory);
 			g_lingo->_indef = false; ;}
     break;
 
-  case 122:
-#line 522 "engines/director/lingo/lingo-gr.y"
+  case 123:
+#line 523 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 123:
-#line 523 "engines/director/lingo/lingo-gr.y"
+  case 124:
+#line 524 "engines/director/lingo/lingo-gr.y"
     {
 				g_lingo->codeConst(0); // Push fake value on stack
 				g_lingo->code1(g_lingo->c_procret);
@@ -2560,33 +2574,33 @@ yyreduce:
 			;}
     break;
 
-  case 124:
-#line 534 "engines/director/lingo/lingo-gr.y"
-    { (yyval.narg) = 0; ;}
-    break;
-
   case 125:
 #line 535 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
+    { (yyval.narg) = 0; ;}
     break;
 
   case 126:
 #line 536 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
+    { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
     break;
 
   case 127:
 #line 537 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
+    { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
   case 128:
-#line 539 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeArgStore(); ;}
+#line 538 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
   case 129:
-#line 543 "engines/director/lingo/lingo-gr.y"
+#line 540 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->codeArgStore(); ;}
+    break;
+
+  case 130:
+#line 544 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_call);
 		g_lingo->codeString((yyvsp[(1) - (3)].s)->c_str());
@@ -2595,24 +2609,24 @@ yyreduce:
 		g_lingo->code1(numpar); ;}
     break;
 
-  case 130:
-#line 551 "engines/director/lingo/lingo-gr.y"
-    { (yyval.narg) = 0; ;}
-    break;
-
   case 131:
 #line 552 "engines/director/lingo/lingo-gr.y"
-    { (yyval.narg) = 1; ;}
+    { (yyval.narg) = 0; ;}
     break;
 
   case 132:
 #line 553 "engines/director/lingo/lingo-gr.y"
+    { (yyval.narg) = 1; ;}
+    break;
+
+  case 133:
+#line 554 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 2616 "engines/director/lingo/lingo-gr.cpp"
+#line 2630 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2826,6 +2840,6 @@ yyreturn:
 }
 
 
-#line 556 "engines/director/lingo/lingo-gr.y"
+#line 557 "engines/director/lingo/lingo-gr.y"
 
 
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 2ebef09..a580125 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -109,7 +109,8 @@
      tINTERSECTS = 325,
      tWITHIN = 326,
      tON = 327,
-     tME = 328
+     tME = 328,
+     tSOUND = 329
    };
 #endif
 /* Tokens.  */
@@ -184,6 +185,7 @@
 #define tWITHIN 326
 #define tON 327
 #define tME 328
+#define tSOUND 329
 
 
 
@@ -201,7 +203,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 1529 of yacc.c.  */
-#line 205 "engines/director/lingo/lingo-gr.hpp"
+#line 207 "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 5686187..3ad87e1 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -89,7 +89,7 @@ void yyerror(const char *s) {
 %token tGE tLE tGT tLT tEQ tNEQ tAND tOR tNOT tMOD
 %token tCONCAT tCONTAINS tSTARTS
 %token tSPRITE tINTERSECTS tWITHIN
-%token tON tME
+%token tON tME tSOUND
 
 %type<code> asgn begin elseif elsestmtoneliner end expr if when repeatwhile repeatwith stmtlist
 %type<narg> argdef arglist
@@ -428,6 +428,7 @@ func: tPUT expr				{ g_lingo->code1(g_lingo->c_printtop); }
 	| BLTINARGLIST arglist	{ g_lingo->codeFunc($1, $2); }
 	| tOPEN expr tWITH expr	{ g_lingo->code1(g_lingo->c_open); }
 	| tOPEN expr 			{ g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); }
+	| tSOUND ID arglist		{ Common::String s("sound-"); s += *$2; g_lingo->codeFunc(&s, $3); }
 	;
 
 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 dc48bc6..5197d00 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 61
-#define YY_END_OF_BUFFER 62
+#define YY_NUM_RULES 62
+#define YY_END_OF_BUFFER 63
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -373,31 +373,31 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[207] =
+static yyconst flex_int16_t yy_accept[211] =
     {   0,
-        0,    0,   62,   60,    3,   58,   58,   60,   60,   57,
-       57,   57,   56,   57,   57,   54,   54,   54,   54,   54,
-       54,   54,   54,   54,   54,   54,   54,   54,   54,   54,
-       54,   54,    2,    2,    3,   58,    0,    0,    0,    0,
-        0,   59,   53,    1,   55,   56,   52,   50,   51,   54,
-       54,   54,   54,   54,   54,   54,   54,   54,   54,   18,
-        8,   54,   54,   54,   24,   54,   54,   54,   30,   31,
-       54,   33,   54,   54,   54,   54,   54,   54,   54,   54,
-       44,   54,   54,    2,    2,    0,    1,   55,    4,   54,
-       54,   54,   54,   12,   54,   54,   54,   54,    0,   54,
-
-       54,   54,   54,   54,   26,   54,   54,   29,   54,   54,
-       54,   36,   54,   38,   54,   54,   54,   54,   54,   54,
-        0,   54,    6,    7,   11,   14,   54,   54,   54,    0,
-       54,   54,   21,   22,   54,   54,   54,   28,   32,   34,
-       54,   54,   54,   54,    0,   43,   48,   54,   46,   10,
-       54,   54,   15,   54,   17,   54,   54,   23,   54,   27,
-       54,   54,   54,   54,   42,   42,   49,   54,    0,   54,
-       54,   16,   54,   54,   25,   54,   37,   45,   39,    0,
-       42,   47,    0,   54,   13,   54,   54,   54,    0,   42,
-        9,    5,   19,   54,   35,    0,   42,   54,    0,    0,
-
-       20,   41,    0,    0,   40,    0
+        0,    0,   63,   61,    3,   59,   59,   61,   61,   58,
+       58,   58,   57,   58,   58,   55,   55,   55,   55,   55,
+       55,   55,   55,   55,   55,   55,   55,   55,   55,   55,
+       55,   55,    2,    2,    3,   59,    0,    0,    0,    0,
+        0,   60,   54,    1,   56,   57,   53,   51,   52,   55,
+       55,   55,   55,   55,   55,   55,   55,   55,   55,   18,
+        8,   55,   55,   55,   24,   55,   55,   55,   30,   31,
+       55,   33,   55,   55,   55,   55,   55,   55,   55,   55,
+       55,   45,   55,   55,    2,    2,    0,    1,   56,    4,
+       55,   55,   55,   55,   12,   55,   55,   55,   55,    0,
+
+       55,   55,   55,   55,   55,   26,   55,   55,   29,   55,
+       55,   55,   36,   55,   38,   55,   55,   55,   55,   55,
+       55,   55,    0,   55,    6,    7,   11,   14,   55,   55,
+       55,    0,   55,   55,   21,   22,   55,   55,   55,   28,
+       32,   34,   55,   55,   55,   55,   55,    0,   44,   49,
+       55,   47,   10,   55,   55,   15,   55,   17,   55,   55,
+       23,   55,   27,   55,   55,   39,   55,   55,   43,   43,
+       50,   55,    0,   55,   55,   16,   55,   55,   25,   55,
+       37,   46,   40,    0,   43,   48,    0,   55,   13,   55,
+       55,   55,    0,   43,    9,    5,   19,   55,   35,    0,
+
+       43,   55,    0,    0,   20,   42,    0,    0,   41,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -443,63 +443,63 @@ static yyconst flex_int32_t yy_meta[63] =
         5,    5
     } ;
 
-static yyconst flex_int16_t yy_base[212] =
+static yyconst flex_int16_t yy_base[216] =
     {   0,
-        0,   61,  155,  520,   65,   69,   73,   77,  148,  520,
-      140,  130,   54,   70,   99,   58,    0,   58,   59,   69,
-       74,   70,   70,   71,   88,  105,  107,  110,   81,  134,
-      109,  123,  170,  177,  181,  520,  190,  145,  194,   77,
-      102,  520,  520,    0,   82,  132,  520,  520,  520,    0,
-      133,  139,  173,  145,  184,  180,  187,  190,  160,   99,
-        0,  175,  182,  194,  182,  200,  179,  184,    0,    0,
-      200,    0,  205,  202,  190,  196,  193,  206,  227,  229,
-        0,  232,  220,  260,  266,  222,    0,   80,    0,  224,
-      239,  233,  247,    0,  239,  241,  249,  263,  280,  253,
-
-      273,  258,  257,  267,    0,  267,  261,    0,  268,  259,
-      265,    0,  283,    0,  280,  274,  304,  281,  291,  298,
-      303,  308,    0,    0,    0,    0,  298,  314,  319,  302,
-      320,  307,    0,    0,  311,  313,  317,    0,    0,    0,
-      319,  328,  313,  316,  351,    0,    0,  325,  328,  369,
-      329,  326,    0,  339,  520,  339,  340,    0,  357,    0,
-      350,  346,  361,  350,  382,  384,    0,  358,  389,  365,
-      355,    0,  378,  378,    0,  365,    0,    0,    0,  396,
-      408,    0,  384,  376,    0,  392,  398,  386,  399,  423,
-      520,    0,    0,  388,    0,  425,  429,  394,  441,  447,
-
-        0,  449,  413,  455,  457,  520,  499,  501,  506,  510,
-      514
+        0,   61,  205,  519,   65,   69,   73,   77,  179,  519,
+      143,  137,   54,   70,  118,   58,    0,   58,   59,   69,
+       74,   70,   70,   71,   88,  105,  107,  110,   81,  142,
+      117,  125,  151,  174,  178,  519,  185,  191,  198,   77,
+      102,  519,  519,    0,   82,  132,  519,  519,  519,    0,
+       94,  123,  170,  135,  166,  175,  187,  192,  164,   99,
+        0,  180,  186,  191,  182,  206,  182,  187,    0,    0,
+      203,    0,  210,  207,  195,  202,  201,  206,  214,  231,
+      229,    0,  234,  223,  257,  272,  231,    0,   80,    0,
+      233,  235,  240,  249,    0,  237,  239,  255,  267,  283,
+
+      253,  270,  266,  266,  262,    0,  269,  266,    0,  273,
+      263,  267,    0,  284,    0,  279,  281,  276,  310,  284,
+      293,  291,  301,  312,    0,    0,    0,    0,  304,  314,
+      319,  308,  324,  310,    0,    0,  315,  316,  327,    0,
+        0,    0,  324,  333,  331,  318,  320,  352,    0,    0,
+      336,  339,  161,  340,  335,    0,  344,  519,  343,  344,
+        0,  360,    0,  353,  349,    0,  360,  351,  384,  390,
+        0,  358,  394,  364,  359,    0,  381,  382,    0,  376,
+        0,    0,    0,  409,  414,    0,  382,  380,    0,  394,
+      401,  390,  404,  423,  519,    0,    0,  396,    0,  428,
+
+      430,  399,  445,  446,    0,  452,  419,  457,  458,  519,
+      498,  500,  505,  509,  513
     } ;
 
-static yyconst flex_int16_t yy_def[212] =
+static yyconst flex_int16_t yy_def[216] =
     {   0,
-      206,    1,  206,  206,  206,  206,  206,  206,  207,  206,
-      206,  206,  206,  206,  206,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  206,  206,  206,  206,  206,  206,  206,  206,
-      207,  206,  206,  209,  206,  206,  206,  206,  206,  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,  206,  206,  206,  209,  206,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  206,  208,
-
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      206,  208,  208,  208,  208,  208,  208,  208,  208,  206,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  210,  208,  208,  208,  208,  206,
-      208,  208,  208,  208,  206,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  210,  210,  208,  208,  206,  208,
-      208,  208,  208,  208,  208,  208,  208,  208,  208,  206,
-      210,  208,  206,  208,  208,  208,  208,  208,  206,  210,
-      206,  208,  208,  208,  208,  206,  210,  208,  211,  206,
-
-      208,  211,  206,  206,  211,    0,  206,  206,  206,  206,
-      206
+      210,    1,  210,  210,  210,  210,  210,  210,  211,  210,
+      210,  210,  210,  210,  210,  212,  212,  212,  212,  212,
+      212,  212,  212,  212,  212,  212,  212,  212,  212,  212,
+      212,  212,  210,  210,  210,  210,  210,  210,  210,  210,
+      211,  210,  210,  213,  210,  210,  210,  210,  210,  212,
+      212,  212,  212,  212,  212,  212,  212,  212,  212,  212,
+      212,  212,  212,  212,  212,  212,  212,  212,  212,  212,
+      212,  212,  212,  212,  212,  212,  212,  212,  212,  212,
+      212,  212,  212,  212,  210,  210,  210,  213,  210,  212,
+      212,  212,  212,  212,  212,  212,  212,  212,  212,  210,
+
+      212,  212,  212,  212,  212,  212,  212,  212,  212,  212,
+      212,  212,  212,  212,  212,  212,  212,  212,  212,  212,
+      212,  212,  210,  212,  212,  212,  212,  212,  212,  212,
+      212,  210,  212,  212,  212,  212,  212,  212,  212,  212,
+      212,  212,  212,  212,  212,  212,  212,  214,  212,  212,
+      212,  212,  210,  212,  212,  212,  212,  210,  212,  212,
+      212,  212,  212,  212,  212,  212,  212,  212,  214,  214,
+      212,  212,  210,  212,  212,  212,  212,  212,  212,  212,
+      212,  212,  212,  210,  214,  212,  210,  212,  212,  212,
+      212,  212,  210,  214,  210,  212,  212,  212,  212,  210,
+
+      214,  212,  215,  210,  212,  215,  210,  210,  215,    0,
+      210,  210,  210,  210,  210
     } ;
 
-static yyconst flex_int16_t yy_nxt[583] =
+static yyconst flex_int16_t yy_nxt[582] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,    4,
        13,   14,   10,   15,   16,   17,   18,   19,   20,   21,
@@ -510,64 +510,64 @@ static yyconst flex_int16_t yy_nxt[583] =
        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,
-       88,   40,   88,   54,   59,   55,   62,   60,   63,   76,
-
-       99,   86,   64,   99,   58,   56,   65,   42,   51,   52,
-       53,   49,   40,   57,   61,   66,   40,   54,   59,   55,
-       62,   60,   63,   67,   76,   86,   69,   64,   58,   56,
-       80,   65,   68,   70,   73,   71,   81,   72,   44,   66,
-       74,   45,   46,   75,   82,   83,   38,   43,   67,   38,
-       89,   69,   77,   42,  206,   80,   68,   70,   73,   71,
-       81,   72,   78,   40,   74,   90,   79,   75,  206,   82,
-       83,   84,   36,   36,   85,   89,   93,   77,   85,   36,
-       36,   85,   35,   36,   36,   37,   78,   98,   40,   90,
-       79,   37,   36,   36,   37,   38,   39,   39,   38,   91,
-
-       93,   94,   95,   96,   97,  206,  100,  101,   92,  102,
-      103,   98,   40,  206,  104,  107,  108,  105,  109,  110,
-      111,  206,  112,   91,  113,  114,   94,   95,   96,   97,
-      100,  101,   92,  102,  106,  103,  115,   40,  104,  107,
-      108,  116,  105,  109,  110,  111,  112,  117,  113,  114,
-      118,  206,  120,  121,  119,  206,  122,  123,  106,  124,
-      115,   84,   36,   36,   85,  125,  116,   85,   36,   36,
-       85,  126,  117,  127,  128,  118,  120,  121,  129,  119,
-      122,   99,  123,  124,   99,  131,  134,  135,  136,  137,
-      125,  132,  206,  138,  139,  126,  140,  127,  128,  141,
-
-      133,  142,  143,  129,  144,  145,  206,  147,  145,  131,
-      134,  135,  130,  136,  137,  148,  132,  138,  139,  149,
-      140,  150,  151,  141,  133,  152,  142,  143,  144,  155,
-      146,  147,  153,  154,  156,  160,  130,  157,  158,  148,
-      159,  161,  162,  167,  149,  163,  150,  151,  164,  152,
-      168,  170,  145,  155,  146,  145,  171,  153,  154,  156,
-      160,  157,  158,  172,  159,  173,  161,  162,  167,  163,
-      169,  174,  164,  169,  175,  168,  170,  176,  177,  178,
-      171,  179,  166,  180,  182,  180,  180,  172,  180,  173,
-      169,  184,  185,  169,  186,  174,  187,  180,  188,  175,
-
-      180,  176,  177,  191,  178,  179,  166,  192,  182,  180,
-      193,  183,  180,  181,  194,  184,  185,  195,  196,  186,
-      198,  187,  188,  189,  180,  201,  199,  180,  191,  199,
-      200,  192,  204,  200,  206,  193,  183,  181,  190,  194,
-      206,  195,  199,  196,  198,  199,  206,  189,  200,  201,
-      206,  200,  206,  206,  206,  197,  205,  204,  205,  205,
-      206,  205,  190,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  203,  206,  206,  206,  206,  197,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  203,   41,
-
-       41,  206,   41,   41,   50,   50,   87,   87,  206,   87,
-       87,  165,  206,  206,  165,  202,  206,  206,  202,    3,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206
+       89,   40,   89,   54,   59,   55,   62,   60,   63,   76,
+
+      100,   87,   64,  100,   58,   56,   65,   42,   51,   52,
+       53,   90,   40,   57,   61,   66,   40,   54,   59,   55,
+       62,   60,   63,   67,   76,   87,   69,   64,   58,   56,
+       49,   65,   68,   70,   73,   71,   90,   72,   81,   66,
+       74,   45,   46,   75,   82,   44,   83,   84,   67,   91,
+       43,   69,   85,   36,   36,   86,   68,   70,   73,   71,
+       77,   72,  173,   81,   74,  173,   94,   75,   82,   78,
+       79,   83,   84,   91,   80,   86,   36,   36,   86,   35,
+       36,   36,   37,   95,   42,   77,   37,   36,   36,   37,
+       94,   99,   38,   78,   79,   38,   92,   96,   80,   38,
+
+       39,   39,   38,   97,  210,   93,   98,  104,   95,   40,
+      210,  101,  102,  103,  105,   99,   40,  210,  108,  109,
+       92,  110,   96,  106,  111,  112,  210,  113,   97,   93,
+      114,   98,  104,  115,   40,  101,  102,  103,  105,  116,
+      107,   40,  108,  109,  117,  118,  110,  119,  106,  111,
+      112,  113,  120,  125,  114,  122,  121,  115,   85,   36,
+       36,   86,  123,  116,  107,  124,  126,  127,  117,  128,
+      118,  129,  119,   86,   36,   36,   86,  120,  125,  122,
+      130,  121,  131,  138,  100,  133,  123,  100,  134,  124,
+      126,  139,  127,  128,  136,  129,  137,  135,  140,  141,
+
+      142,  143,  144,  146,  130,  145,  147,  131,  138,  133,
+      150,  148,  152,  134,  148,  132,  139,  151,  136,  153,
+      137,  135,  140,  141,  142,  143,  154,  144,  146,  145,
+      147,  155,  156,  157,  150,  158,  149,  152,  159,  132,
+      160,  151,  161,  162,  153,  163,  164,  165,  166,  210,
+      167,  154,  168,  148,  171,  155,  148,  156,  157,  158,
+      149,  172,  174,  159,  160,  175,  161,  162,  176,  177,
+      163,  164,  165,  166,  167,  178,  168,  179,  182,  171,
+      180,  181,  183,  170,  186,  184,  172,  174,  184,  175,
+      188,  184,  176,  177,  184,  173,  189,  190,  173,  178,
+
+      191,  195,  179,  182,  180,  181,  183,  170,  186,  192,
+      184,  196,  197,  184,  188,  184,  187,  198,  184,  185,
+      189,  199,  190,  200,  184,  191,  195,  184,  202,  203,
+      205,  204,  203,  192,  204,  196,  193,  197,  208,  210,
+      210,  187,  198,  185,  194,  199,  203,  204,  200,  203,
+      204,  210,  202,  210,  205,  201,  210,  210,  209,  209,
+      193,  209,  209,  208,  210,  210,  210,  210,  194,  210,
+      210,  210,  210,  207,  210,  210,  210,  210,  210,  201,
+      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
+      210,  210,  210,  210,  210,  210,  210,  207,   41,   41,
+
+      210,   41,   41,   50,   50,   88,   88,  210,   88,   88,
+      169,  210,  210,  169,  206,  210,  210,  206,    3,  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,  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
     } ;
 
-static yyconst flex_int16_t yy_chk[583] =
+static yyconst flex_int16_t yy_chk[582] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -578,61 +578,61 @@ static yyconst flex_int16_t yy_chk[583] =
         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,
-       88,    7,   45,   20,   22,   20,   23,   22,   24,   29,
+       89,    7,   45,   20,   22,   20,   23,   22,   24,   29,
 
        60,   40,   25,   60,   21,   20,   25,   41,   16,   18,
-       19,   15,    6,   21,   23,   25,    7,   20,   22,   20,
+       19,   51,    6,   21,   23,   25,    7,   20,   22,   20,
        23,   22,   24,   26,   29,   40,   27,   25,   21,   20,
-       31,   25,   26,   27,   28,   27,   31,   27,   12,   25,
-       28,   46,   46,   28,   32,   32,   38,   11,   26,   38,
-       51,   27,   30,    9,    3,   31,   26,   27,   28,   27,
-       31,   27,   30,   38,   28,   52,   30,   28,    0,   32,
-       32,   33,   33,   33,   33,   51,   54,   30,   34,   34,
-       34,   34,   35,   35,   35,   35,   30,   59,   38,   52,
-       30,   37,   37,   37,   37,   39,   39,   39,   39,   53,
-
-       54,   55,   56,   57,   58,    0,   62,   62,   53,   63,
-       64,   59,   39,    0,   65,   67,   68,   66,   71,   73,
-       74,    0,   75,   53,   76,   77,   55,   56,   57,   58,
-       62,   62,   53,   63,   66,   64,   78,   39,   65,   67,
-       68,   79,   66,   71,   73,   74,   75,   80,   76,   77,
-       82,    0,   83,   86,   82,    0,   90,   91,   66,   92,
-       78,   84,   84,   84,   84,   93,   79,   85,   85,   85,
-       85,   95,   80,   96,   97,   82,   83,   86,   98,   82,
-       90,   99,   91,   92,   99,  100,  102,  103,  104,  106,
-       93,  101,    0,  107,  109,   95,  110,   96,   97,  111,
-
-      101,  113,  115,   98,  116,  117,    0,  118,  117,  100,
-      102,  103,   99,  104,  106,  119,  101,  107,  109,  120,
-      110,  121,  122,  111,  101,  127,  113,  115,  116,  130,
-      117,  118,  128,  129,  131,  137,   99,  132,  135,  119,
-      136,  141,  142,  148,  120,  143,  121,  122,  144,  127,
-      149,  151,  145,  130,  117,  145,  152,  128,  129,  131,
-      137,  132,  135,  154,  136,  156,  141,  142,  148,  143,
-      150,  157,  144,  150,  159,  149,  151,  161,  162,  163,
-      152,  164,  145,  165,  168,  166,  165,  154,  166,  156,
-      169,  170,  171,  169,  173,  157,  174,  180,  176,  159,
-
-      180,  161,  162,  183,  163,  164,  145,  184,  168,  181,
-      186,  169,  181,  166,  187,  170,  171,  188,  189,  173,
-      194,  174,  176,  180,  190,  198,  196,  190,  183,  196,
-      197,  184,  203,  197,    0,  186,  169,  166,  181,  187,
-        0,  188,  199,  189,  194,  199,    0,  180,  200,  198,
-      202,  200,    0,  202,    0,  190,  204,  203,  205,  204,
-        0,  205,  181,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  200,    0,    0,    0,    0,  190,
+       15,   25,   26,   27,   28,   27,   51,   27,   31,   25,
+       28,   46,   46,   28,   31,   12,   32,   32,   26,   52,
+       11,   27,   33,   33,   33,   33,   26,   27,   28,   27,
+       30,   27,  153,   31,   28,  153,   54,   28,   31,   30,
+       30,   32,   32,   52,   30,   34,   34,   34,   34,   35,
+       35,   35,   35,   55,    9,   30,   37,   37,   37,   37,
+       54,   59,   38,   30,   30,   38,   53,   56,   30,   39,
+
+       39,   39,   39,   57,    3,   53,   58,   64,   55,   38,
+        0,   62,   62,   63,   65,   59,   39,    0,   67,   68,
+       53,   71,   56,   66,   73,   74,    0,   75,   57,   53,
+       76,   58,   64,   77,   38,   62,   62,   63,   65,   78,
+       66,   39,   67,   68,   79,   80,   71,   81,   66,   73,
+       74,   75,   83,   92,   76,   84,   83,   77,   85,   85,
+       85,   85,   87,   78,   66,   91,   93,   94,   79,   96,
+       80,   97,   81,   86,   86,   86,   86,   83,   92,   84,
+       98,   83,   99,  105,  100,  101,   87,  100,  102,   91,
+       93,  107,   94,   96,  103,   97,  104,  102,  108,  110,
+
+      111,  112,  114,  117,   98,  116,  118,   99,  105,  101,
+      120,  119,  122,  102,  119,  100,  107,  121,  103,  123,
+      104,  102,  108,  110,  111,  112,  124,  114,  117,  116,
+      118,  129,  130,  131,  120,  132,  119,  122,  133,  100,
+      134,  121,  137,  138,  123,  139,  143,  144,  145,    0,
+      146,  124,  147,  148,  151,  129,  148,  130,  131,  132,
+      119,  152,  154,  133,  134,  155,  137,  138,  157,  159,
+      139,  143,  144,  145,  146,  160,  147,  162,  167,  151,
+      164,  165,  168,  148,  172,  169,  152,  154,  169,  155,
+      174,  170,  157,  159,  170,  173,  175,  177,  173,  160,
+
+      178,  187,  162,  167,  164,  165,  168,  148,  172,  180,
+      184,  188,  190,  184,  174,  185,  173,  191,  185,  170,
+      175,  192,  177,  193,  194,  178,  187,  194,  198,  200,
+      202,  201,  200,  180,  201,  188,  184,  190,  207,    0,
+        0,  173,  191,  170,  185,  192,  203,  204,  193,  203,
+      204,    0,  198,  206,  202,  194,  206,    0,  208,  209,
+      184,  208,  209,  207,    0,    0,    0,    0,  185,    0,
+        0,    0,    0,  204,    0,    0,    0,    0,    0,  194,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  200,  207,
-
-      207,    0,  207,  207,  208,  208,  209,  209,    0,  209,
-      209,  210,    0,    0,  210,  211,    0,    0,  211,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
-      206,  206
+        0,    0,    0,    0,    0,    0,    0,  204,  211,  211,
+
+        0,  211,  211,  212,  212,  213,  213,    0,  213,  213,
+      214,    0,    0,  214,  215,    0,    0,  215,  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,  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
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -948,13 +948,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 >= 207 )
+				if ( yy_current_state >= 211 )
 					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] != 520 );
+		while ( yy_base[yy_current_state] != 519 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -1173,11 +1173,16 @@ YY_RULE_SETUP
 case 39:
 YY_RULE_SETUP
 #line 110 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSTARTS; }
+{ count(); return tSOUND; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 111 "engines/director/lingo/lingo-lex.l"
+{ count(); return tSTARTS; }
+	YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 112 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1187,9 +1192,9 @@ YY_RULE_SETUP
 		return THEENTITYWITHID;
 	}
 	YY_BREAK
-case 41:
+case 42:
 YY_RULE_SETUP
-#line 119 "engines/director/lingo/lingo-lex.l"
+#line 120 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1231,9 +1236,9 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
-case 42:
+case 43:
 YY_RULE_SETUP
-#line 159 "engines/director/lingo/lingo-lex.l"
+#line 160 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1254,64 +1259,64 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
-case 43:
-YY_RULE_SETUP
-#line 178 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTHEN; }
-	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 179 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTO; }
+{ count(); return tTHEN; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 180 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSPRITE; }
+{ count(); return tTO; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 181 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITH; }
+{ count(); return tSPRITE; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 182 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITHIN; }
+{ count(); return tWITH; }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 183 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHEN; }
+{ count(); return tWITHIN; }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
 #line 184 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHILE; }
+{ count(); return tWHEN; }
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 186 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEQ; }
+#line 185 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWHILE; }
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 187 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGE; }
+{ count(); return tNEQ; }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 188 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLE; }
+{ count(); return tGE; }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 189 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONCAT; }
+{ count(); return tLE; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 191 "engines/director/lingo/lingo-lex.l"
+#line 190 "engines/director/lingo/lingo-lex.l"
+{ count(); return tCONCAT; }
+	YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 192 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1339,43 +1344,43 @@ YY_RULE_SETUP
 		return ID;
 	}
 	YY_BREAK
-case 55:
-YY_RULE_SETUP
-#line 217 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.f = atof(yytext); return FLOAT; }
-	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 218 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
+{ count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 219 "engines/director/lingo/lingo-lex.l"
-{ count(); return *yytext; }
+{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 58:
-/* rule 58 can match eol */
 YY_RULE_SETUP
 #line 220 "engines/director/lingo/lingo-lex.l"
-{ return '\n'; }
+{ count(); return *yytext; }
 	YY_BREAK
 case 59:
+/* rule 59 can match eol */
 YY_RULE_SETUP
 #line 221 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
+{ return '\n'; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 222 "engines/director/lingo/lingo-lex.l"
-
+{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 224 "engines/director/lingo/lingo-lex.l"
+#line 223 "engines/director/lingo/lingo-lex.l"
+
+	YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 225 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1379 "engines/director/lingo/lingo-lex.cpp"
+#line 1384 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1668,7 +1673,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 >= 207 )
+			if ( yy_current_state >= 211 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1696,11 +1701,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 >= 207 )
+		if ( yy_current_state >= 211 )
 			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 == 206);
+	yy_is_jam = (yy_current_state == 210);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2375,7 +2380,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 224 "engines/director/lingo/lingo-lex.l"
+#line 225 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index d0a93ca..882e06d 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -107,6 +107,7 @@ whitespace [\t ]
 (?i:put)			{ count(); return tPUT; }
 (?i:repeat)			{ count(); return tREPEAT; }
 (?i:set)			{ count(); return tSET; }
+(?i:sound)			{ count(); return tSOUND; }
 (?i:starts)			{ count(); return tSTARTS; }
 (?i:the[ \t]+sqrt[\t ]+of[\t ]+)	{
 		count();
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 074947e..cbc8011 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -366,6 +366,7 @@ public:
 	static void b_openDA(int nargs);
 	static void b_openResFile(int nargs);
 	static void b_openXlib(int nargs);
+	static void b_setCallBack(int nargs);
 	static void b_showResFile(int nargs);
 	static void b_showXlib(int nargs);
 
@@ -374,6 +375,10 @@ public:
 	static void b_beep(int nargs);
 	static void b_mci(int nargs);
 	static void b_mciwait(int nargs);
+	static void b_soundFadeIn(int nargs);
+	static void b_soundFadeOut(int nargs);
+	static void b_soundPlayFile(int nargs);
+	static void b_soundStop(int nargs);
 
 	static void b_backspace(int nargs);
 	static void b_empty(int nargs);
diff --git a/engines/director/lingo/tests/mci.lingo b/engines/director/lingo/tests/mci.lingo
index 04130bf..c4d696e 100644
--- a/engines/director/lingo/tests/mci.lingo
+++ b/engines/director/lingo/tests/mci.lingo
@@ -1,2 +1,9 @@
 mci "open MM\T005045a.wav type WaveAudio alias T005045a"
 mci "play T005045a from 22710 to 32872"
+
+sound playFile 1, "Jet Blast"
+sound fadeOut 1
+sound fadeOut 1, 20
+sound fadeIn 1
+sound fadeIn 1, 15
+sound stop 1





More information about the Scummvm-git-logs mailing list