--- /dev/null
+/* A Bison parser, made from gram.y, by GNU bison 1.75. */
+
+/* Skeleton parser for Yacc-like parsing with Bison,
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* As a special exception, when this file is copied by Bison into a
+ Bison output file, you may use that output file without restriction.
+ This special exception was added by the Free Software Foundation
+ in version 1.24 of Bison. */
+
+/* Written by Richard Stallman by simplifying the original so called
+ ``semantic'' parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Using locations. */
+#define YYLSP_NEEDED 0
+
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ T_SCORE = 258,
+ T_STAFF = 259,
+ T_VOICE = 260,
+ T_GRIDS = 261,
+ T_BLOCKHEAD = 262,
+ T_NUMBER = 263,
+ T_EQUAL = 264,
+ T_SEMICOLON = 265,
+ T_NEWLINE = 266,
+ T_COLON = 267,
+ T_COMMA = 268,
+ T_LBRACKET = 269,
+ T_RBRACKET = 270,
+ T_LBRACE = 271,
+ T_RBRACE = 272,
+ T_VARIABLE = 273,
+ T_DASH = 274,
+ T_PLUS = 275,
+ T_PLACE = 276,
+ T_ALL = 277,
+ T_WITH = 278,
+ T_CUE = 279,
+ T_GRACE = 280,
+ T_XNOTE = 281,
+ T_DIAM = 282,
+ T_DOT = 283,
+ T_MULTIWHOLE = 284,
+ T_LET_M = 285,
+ T_LET_R = 286,
+ T_LET_S = 287,
+ T_LET_U = 288,
+ T_PITCH = 289,
+ T_SHARP = 290,
+ T_AMPERSAND = 291,
+ T_LET_N = 292,
+ T_LET_X = 293,
+ T_DBLFLAT = 294,
+ T_LETTER = 295,
+ T_LYRICS = 296,
+ T_PAD = 297,
+ T_LPAREN = 298,
+ T_RPAREN = 299,
+ T_LVAR = 300,
+ T_MUSIC = 301,
+ T_HEADSHAPES = 302,
+ T_HS = 303,
+ T_SWINGUNIT = 304,
+ T_POSTSCRIPT = 305,
+ T_SCOREFEED = 306,
+ T_BARTYPE = 307,
+ T_HAT = 308,
+ T_TILDE = 309,
+ T_QUESTION = 310,
+ T_LINETYPE = 311,
+ T_LINE = 312,
+ T_TO = 313,
+ T_STAR = 314,
+ T_BULGE = 315,
+ T_CURVE = 316,
+ T_TIE = 317,
+ T_PRINTTYPE = 318,
+ T_NL = 319,
+ T_STAFFLINES = 320,
+ T_FFAMILY = 321,
+ T_PARAGRAPH = 322,
+ T_PARATYPE = 323,
+ T_NUMVAR = 324,
+ T_FNUMVAR = 325,
+ T_2FNUMVAR = 326,
+ T_RATNUMLISTVAR = 327,
+ T_RANGELISTVAR = 328,
+ T_TIMEUNIT = 329,
+ T_FONTVAR = 330,
+ T_STRVAR = 331,
+ T_CLEFVAR = 332,
+ T_VVAR = 333,
+ T_BARSTLISTVAR = 334,
+ T_SCORESEP = 335,
+ T_FONT = 336,
+ T_SLASH = 337,
+ T_KEY = 338,
+ T_TIME = 339,
+ T_CUT = 340,
+ T_COMMON = 341,
+ T_CLEF = 342,
+ T_MULTIREST = 343,
+ T_YESNOVAR = 344,
+ T_BM = 345,
+ T_ESBM = 346,
+ T_EBM = 347,
+ T_INVISBAR = 348,
+ T_OCTAVE = 349,
+ T_ROLL = 350,
+ T_VISVAR = 351,
+ T_WHEREUSED = 352,
+ T_UNSET = 353,
+ T_VCOMBINE = 354,
+ T_VCOMBVAL = 355,
+ T_SCOREPAD = 356,
+ T_WORD = 357,
+ T_UP = 358,
+ T_DOWN = 359,
+ T_ENDING = 360,
+ T_ENDENDING = 361,
+ T_FAMILY = 362,
+ T_ENDSTYLE = 363,
+ T_ENDTYPE = 364,
+ T_SLASHMARK = 365,
+ T_ALT = 366,
+ T_TITLE = 367,
+ T_REHEARSAL = 368,
+ T_NUM = 369,
+ T_LET = 370,
+ T_MNUM = 371,
+ T_TRANSPOSE = 372,
+ T_XPOS_INT = 373,
+ T_PEDAL = 374,
+ T_PHRASE = 375,
+ T_MUSSYM = 376,
+ T_L_ANGLE = 377,
+ T_MODIFIER = 378,
+ T_R_ANGLE = 379,
+ T_TIL = 380,
+ T_MIDI = 381,
+ T_PEDSTYLE = 382,
+ T_PEDSTAR = 383,
+ T_HIDECHANGES = 384,
+ T_SLUR = 385,
+ T_UNITS = 386,
+ T_CENTIMETERS = 387,
+ T_UNITTYPE = 388,
+ T_TAB = 389,
+ T_TICKS = 390,
+ T_NOWHERE_SLIDE = 391,
+ T_LEN = 392,
+ T_EXCLAM = 393,
+ T_OTHERTEXT = 394,
+ T_ORDER = 395,
+ T_GRIDPLACE = 396,
+ T_GRPLVALUE = 397,
+ T_DRUM = 398,
+ T_RPT = 399,
+ T_STRING = 400,
+ T_HO = 401,
+ T_REH_STYLE = 402,
+ T_REHTYPE = 403,
+ T_L_DBLANGLE = 404,
+ T_R_DBLANGLE = 405,
+ T_SLOPE = 406,
+ T_PSVAR = 407,
+ T_PAGESIZE = 408,
+ T_ORIENTATION = 409
+ };
+#endif
+#define T_SCORE 258
+#define T_STAFF 259
+#define T_VOICE 260
+#define T_GRIDS 261
+#define T_BLOCKHEAD 262
+#define T_NUMBER 263
+#define T_EQUAL 264
+#define T_SEMICOLON 265
+#define T_NEWLINE 266
+#define T_COLON 267
+#define T_COMMA 268
+#define T_LBRACKET 269
+#define T_RBRACKET 270
+#define T_LBRACE 271
+#define T_RBRACE 272
+#define T_VARIABLE 273
+#define T_DASH 274
+#define T_PLUS 275
+#define T_PLACE 276
+#define T_ALL 277
+#define T_WITH 278
+#define T_CUE 279
+#define T_GRACE 280
+#define T_XNOTE 281
+#define T_DIAM 282
+#define T_DOT 283
+#define T_MULTIWHOLE 284
+#define T_LET_M 285
+#define T_LET_R 286
+#define T_LET_S 287
+#define T_LET_U 288
+#define T_PITCH 289
+#define T_SHARP 290
+#define T_AMPERSAND 291
+#define T_LET_N 292
+#define T_LET_X 293
+#define T_DBLFLAT 294
+#define T_LETTER 295
+#define T_LYRICS 296
+#define T_PAD 297
+#define T_LPAREN 298
+#define T_RPAREN 299
+#define T_LVAR 300
+#define T_MUSIC 301
+#define T_HEADSHAPES 302
+#define T_HS 303
+#define T_SWINGUNIT 304
+#define T_POSTSCRIPT 305
+#define T_SCOREFEED 306
+#define T_BARTYPE 307
+#define T_HAT 308
+#define T_TILDE 309
+#define T_QUESTION 310
+#define T_LINETYPE 311
+#define T_LINE 312
+#define T_TO 313
+#define T_STAR 314
+#define T_BULGE 315
+#define T_CURVE 316
+#define T_TIE 317
+#define T_PRINTTYPE 318
+#define T_NL 319
+#define T_STAFFLINES 320
+#define T_FFAMILY 321
+#define T_PARAGRAPH 322
+#define T_PARATYPE 323
+#define T_NUMVAR 324
+#define T_FNUMVAR 325
+#define T_2FNUMVAR 326
+#define T_RATNUMLISTVAR 327
+#define T_RANGELISTVAR 328
+#define T_TIMEUNIT 329
+#define T_FONTVAR 330
+#define T_STRVAR 331
+#define T_CLEFVAR 332
+#define T_VVAR 333
+#define T_BARSTLISTVAR 334
+#define T_SCORESEP 335
+#define T_FONT 336
+#define T_SLASH 337
+#define T_KEY 338
+#define T_TIME 339
+#define T_CUT 340
+#define T_COMMON 341
+#define T_CLEF 342
+#define T_MULTIREST 343
+#define T_YESNOVAR 344
+#define T_BM 345
+#define T_ESBM 346
+#define T_EBM 347
+#define T_INVISBAR 348
+#define T_OCTAVE 349
+#define T_ROLL 350
+#define T_VISVAR 351
+#define T_WHEREUSED 352
+#define T_UNSET 353
+#define T_VCOMBINE 354
+#define T_VCOMBVAL 355
+#define T_SCOREPAD 356
+#define T_WORD 357
+#define T_UP 358
+#define T_DOWN 359
+#define T_ENDING 360
+#define T_ENDENDING 361
+#define T_FAMILY 362
+#define T_ENDSTYLE 363
+#define T_ENDTYPE 364
+#define T_SLASHMARK 365
+#define T_ALT 366
+#define T_TITLE 367
+#define T_REHEARSAL 368
+#define T_NUM 369
+#define T_LET 370
+#define T_MNUM 371
+#define T_TRANSPOSE 372
+#define T_XPOS_INT 373
+#define T_PEDAL 374
+#define T_PHRASE 375
+#define T_MUSSYM 376
+#define T_L_ANGLE 377
+#define T_MODIFIER 378
+#define T_R_ANGLE 379
+#define T_TIL 380
+#define T_MIDI 381
+#define T_PEDSTYLE 382
+#define T_PEDSTAR 383
+#define T_HIDECHANGES 384
+#define T_SLUR 385
+#define T_UNITS 386
+#define T_CENTIMETERS 387
+#define T_UNITTYPE 388
+#define T_TAB 389
+#define T_TICKS 390
+#define T_NOWHERE_SLIDE 391
+#define T_LEN 392
+#define T_EXCLAM 393
+#define T_OTHERTEXT 394
+#define T_ORDER 395
+#define T_GRIDPLACE 396
+#define T_GRPLVALUE 397
+#define T_DRUM 398
+#define T_RPT 399
+#define T_STRING 400
+#define T_HO 401
+#define T_REH_STYLE 402
+#define T_REHTYPE 403
+#define T_L_DBLANGLE 404
+#define T_R_DBLANGLE 405
+#define T_SLOPE 406
+#define T_PSVAR 407
+#define T_PAGESIZE 408
+#define T_ORIENTATION 409
+
+
+
+
+/* Copy the first part of user declarations. */
+#line 2 "gram.y"
+
+
+/* Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ * 2005, 2006 by Arkkra Enterprises */
+/* All rights reserved */
+
+/* parser for music publication program. Uses lex to get tokens. */
+
+
+#include "rational.h"
+#include "globals.h"
+#include "defines.h"
+#include "structs.h"
+
+#define YYDEBUG 1
+
+
+/* how many items to allocate at a time for
+ * "with" list, and location lists, etc */
+#define ITEMS (4)
+
+
+static struct MAINLL *Currstruct_p; /* main list struct being filled in */
+static struct BLOCKHEAD *Currblock_p; /* current block, if non-zero */
+
+static struct INPCOORD *Curr_loc_info_p; /* location info being collected */
+
+
+static short Gotheader, Gotfooter; /* boolean: to make sure each is defined only once */
+static short Gothead2, Gotfoot2;
+static short Getting_tup_dur; /* YES if currently collection tuplet
+ * duration rather than GRPSYL dur */
+
+static struct GRPSYL *Curr_grpsyl_p; /* current GRPSYL struct being filled in */
+static struct GRPSYL *Last_grpsyl_p; /* previous GRPSYL struct filled in (contains
+ * defaults for the current one */
+static struct TIMELIST *Extra_time_p; /* If user enters times to be added
+ * together, like 2.+16 this points to
+ * a linked list of the extra times */
+static struct TIMELIST *Curr_timelist_p;/* current additive time, used to know
+ * where to link items to the list */
+static struct TIMELIST *Last_alloced_timelist_p; /* Most recently allocated
+ * list. Keeping track of this lets us
+ * avoid trying to free the list
+ * when Extra_time_p is pointing
+ * to a list from an SSV. */
+static struct GRPSYL *Prev_grpsyl_p; /* Like Last_grpsyl_p except in the
+ * case of additive times,
+ * in which case it points to the
+ * first group. This is needed in case
+ * the following group is to get its
+ * time value by defaulting to that
+ * of its previous group. */
+static int Extra_basictime; /* for saving basictime, when doing
+ * additive times */
+static int Doing_timeunit = NO; /* YES if gathering timeunit param */
+static struct GRPSYL *Lyrics_p; /* pointer to current list of lyrics */
+static char **Curr_marklist; /* current "with" list */
+static struct PRINTDATA **Next_print_link_p_p; /* points to where to attach next
+ * print command that we get */
+static int Item_count; /* items in current list */
+static int Max_items; /* current amount of space in lists
+ * "with" list, curve locations, etc) */
+
+static int Plus_minus; /* if 1 add, if -1 subtract offset */
+static int Defining_multiple = NO; /* if defining multiple voices at once */
+static int Chord_at_a_time = NO; /* YES for chord-at-a-time,
+ * NO for voice-at-a-time */
+static short Endingloc; /* if current bar starts or ends an
+ * ending, etc (STARTITEM, ENDITEM, etc) */
+static short Got_ending; /* YES if got ending on this bar */
+
+static int Til_bars; /* number of bars in "til" clause */
+static int Dist; /* dist for a specific STUFF */
+static int Dist_usage; /* meaning of Dist field */
+static short User_meas_time; /* YES if user specified a time for
+ * an 'm' item. Only valid on mr */
+static int Order_place; /* PL_* for markorder in SSV */
+static int Order_prio; /* value in markorder in SSV */
+static int Gracebackup; /* how many grace notes to back up
+ * before starting a "stuff" */
+static float Til_offset; /* beat count in "til" clause */
+static int Slurstyle; /* L_DOTTED, L_DASHED, or L_NORMAL */
+
+static char *String1, *String2; /* to temporarily keep track
+ * of labels and other temporary
+ * strings */
+static char Tmpbuff[20]; /* temporary buffer for converting
+ * float numbers */
+static char Stringbuff[100]; /* temporary string storage */
+static int Titlefont, Titlesize; /* font/size for title command */
+static double Extra; /* extra vertical space for prints */
+static short Good_till_canceled = NO; /* if [] things should be continued
+ * until turned off */
+static short Curr_paratype = J_JUSTPARA; /* current paragraph type */
+static struct TIMEDSSV *Curr_tssv_p; /* current mid-measure param change */
+static char Timerep[MAXTSLEN]; /* Internal representation of time
+ * signature being collected */
+static int Tsig_offset; /* Current place in Timerep while
+ * collecting a time signature */
+static char *Alt_timesig_list; /* If user specified alternating
+ * time signatures, this points to
+ * the beginning of the list, for
+ * when we need to wrap around */
+static char *Next_alt_timesig; /* If user specified alternating
+ * time signatures, this points to
+ * the one for the next measure */
+static short Tsig_visibility; /* If EACHMEAS, alternating
+ * time signatures will be done
+ * by explicitly printing
+ * the appropriate time signature at
+ * the beginning of every measure,
+ * rather than printing them all just
+ * once at the beginning of the run
+ * of measures that alternate. */
+
+/* Row index values must match the PS_* value definitions in defines.h.
+ * Column [0] is height in portrait mode, and column [1] is height. */
+double pagesztbl[7][2] = {
+ { 8.5, 11.0 }, /* PS_LETTER */
+ { 8.5, 14.0 }, /* PS_LEGAL */
+ { 8.5, 13.0 }, /* PS_FLSA */
+ { 5.5, 8.5 }, /* PS_HALFLETTER */
+ { 8.26, 11.69 }, /* PS_A4 */
+ { 5.84, 8.26 }, /* PS_A5 */
+ { 4.12, 5.84 } /* PS_A6 */
+};
+
+
+
+/* static functions */
+static char *stripquotes P((char *string)); /* rmv double quotes
+ * from string */
+static void chkdup_headfoot P((int flag, char *which));
+static void end_prev_context P((void));
+static void var_valid P((void)); /* check if okay to set location var */
+static void proc_printcmd P((int justifytype, struct INPCOORD *inpc_p,
+ char *str, int font, int size, int got_nl,
+ int isPostScript, double extra));
+static double extra_needed P((int font, int size, char *string));
+static void keyword_notes P((char *str));
+static void free_extra_time P((void));
+static void tsig_item P((int item));
+
+
+
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+#ifndef YYSTYPE
+#line 152 "gram.y"
+typedef union {
+int intval; /* for tokens/nonterminals that return int values */
+char *stringval; /* for tokens/nonterminals that return strings */
+float floatval; /* for nonterminals that return floats */
+RATIONAL ratval; /* for nonterminals that return rational numbers */
+struct INPCOORD *inpcoord_p; /* for nonterminals that return coord info */
+} yystype;
+/* Line 193 of /usr/share/bison/yacc.c. */
+#line 536 "y.tab.c"
+# define YYSTYPE yystype
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+#ifndef YYLTYPE
+typedef struct yyltype
+{
+ int first_line;
+ int first_column;
+ int last_line;
+ int last_column;
+} yyltype;
+# define YYLTYPE yyltype
+# define YYLTYPE_IS_TRIVIAL 1
+#endif
+
+/* Copy the second part of user declarations. */
+
+
+/* Line 213 of /usr/share/bison/yacc.c. */
+#line 557 "y.tab.c"
+
+#if ! defined (yyoverflow) || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# if YYSTACK_USE_ALLOCA
+# define YYSTACK_ALLOC alloca
+# else
+# ifndef YYSTACK_USE_ALLOCA
+# if defined (alloca) || defined (_ALLOCA_H)
+# define YYSTACK_ALLOC alloca
+# else
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# else
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# endif
+# define YYSTACK_ALLOC malloc
+# define YYSTACK_FREE free
+# endif
+#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
+
+
+#if (! defined (yyoverflow) \
+ && (! defined (__cplusplus) \
+ || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ short yyss;
+ YYSTYPE yyvs;
+ };
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAX)
+
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ register YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (0)
+# endif
+# endif
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack, Stack, yysize); \
+ Stack = &yyptr->Stack; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (0)
+
+#endif
+
+#if defined (__STDC__) || defined (__cplusplus)
+ typedef signed char yysigned_char;
+#else
+ typedef short yysigned_char;
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 167
+#define YYLAST 1149
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 155
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 273
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 618
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 914
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 409
+
+#define YYTRANSLATE(X) \
+ ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const unsigned char yytranslate[] =
+{
+ 0, 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, 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, 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, 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, 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, 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, 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, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
+ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
+ 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
+ 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const unsigned short yyprhs[] =
+{
+ 0, 0, 3, 5, 8, 10, 12, 14, 16, 19,
+ 22, 24, 28, 30, 33, 35, 37, 39, 41, 44,
+ 47, 51, 56, 58, 59, 61, 63, 65, 69, 71,
+ 73, 75, 77, 80, 82, 84, 89, 92, 96, 102,
+ 107, 108, 113, 118, 123, 129, 134, 139, 143, 147,
+ 151, 155, 159, 163, 167, 171, 175, 178, 179, 184,
+ 188, 193, 198, 202, 206, 210, 216, 220, 224, 226,
+ 228, 230, 231, 233, 235, 236, 237, 239, 241, 243,
+ 247, 251, 252, 257, 262, 264, 265, 267, 268, 271,
+ 274, 276, 278, 279, 280, 282, 286, 290, 291, 294,
+ 295, 300, 301, 304, 306, 307, 308, 310, 314, 317,
+ 319, 321, 325, 329, 331, 333, 335, 337, 339, 341,
+ 343, 345, 347, 350, 352, 353, 357, 359, 360, 365,
+ 367, 369, 373, 377, 379, 381, 385, 387, 388, 390,
+ 391, 393, 397, 401, 404, 407, 409, 414, 416, 419,
+ 424, 425, 427, 428, 430, 432, 434, 436, 437, 440,
+ 443, 444, 448, 450, 453, 454, 456, 457, 460, 461,
+ 463, 465, 467, 469, 471, 472, 474, 476, 479, 481,
+ 483, 490, 493, 494, 496, 497, 499, 500, 504, 506,
+ 509, 513, 521, 522, 524, 526, 528, 530, 532, 534,
+ 536, 538, 540, 542, 544, 546, 548, 550, 552, 554,
+ 556, 558, 560, 562, 564, 566, 568, 570, 572, 574,
+ 576, 578, 580, 582, 586, 591, 595, 597, 598, 600,
+ 602, 604, 607, 611, 613, 615, 617, 621, 623, 627,
+ 629, 631, 634, 636, 638, 642, 645, 646, 649, 652,
+ 657, 658, 661, 663, 666, 668, 674, 675, 677, 679,
+ 682, 687, 689, 691, 693, 695, 699, 703, 707, 710,
+ 712, 717, 724, 725, 729, 730, 735, 736, 737, 739,
+ 741, 745, 749, 751, 753, 755, 757, 761, 764, 767,
+ 770, 773, 775, 777, 780, 781, 783, 784, 786, 788,
+ 792, 794, 798, 801, 804, 807, 808, 809, 811, 813,
+ 817, 819, 821, 823, 825, 827, 829, 831, 833, 835,
+ 837, 839, 841, 843, 846, 848, 850, 851, 853, 854,
+ 858, 860, 862, 863, 866, 871, 872, 873, 875, 876,
+ 879, 881, 885, 886, 888, 890, 892, 895, 898, 899,
+ 901, 904, 907, 911, 914, 917, 919, 920, 923, 926,
+ 927, 931, 933, 934, 938, 940, 942, 944, 947, 949,
+ 951, 953, 955, 957, 959, 961, 965, 968, 974, 980,
+ 984, 990, 998, 1003, 1008, 1015, 1020, 1026, 1031, 1032,
+ 1034, 1036, 1037, 1039, 1040, 1042, 1044, 1046, 1048, 1050,
+ 1052, 1054, 1056, 1058, 1060, 1063, 1065, 1068, 1073, 1075,
+ 1076, 1078, 1080, 1082, 1085, 1088, 1091, 1093, 1095, 1097,
+ 1099, 1101, 1103, 1105, 1107, 1109, 1118, 1119, 1121, 1123,
+ 1125, 1127, 1129, 1130, 1132, 1133, 1136, 1141, 1145, 1147,
+ 1148, 1150, 1152, 1154, 1158, 1161, 1162, 1165, 1168, 1169,
+ 1170, 1176, 1178, 1180, 1182, 1186, 1189, 1190, 1193, 1194,
+ 1197, 1198, 1200, 1202, 1205, 1208, 1212, 1214, 1220, 1221,
+ 1223, 1225, 1228, 1231, 1237, 1240, 1242, 1244, 1245, 1249,
+ 1251, 1252, 1255, 1259, 1260, 1262, 1263, 1265, 1267, 1269,
+ 1273, 1274, 1278, 1279, 1282, 1284, 1287, 1289, 1291, 1295,
+ 1299, 1303, 1311, 1314, 1316, 1317, 1319, 1321, 1323, 1325,
+ 1332, 1333, 1336, 1338, 1342, 1344, 1346, 1348, 1350, 1351,
+ 1354, 1357, 1359, 1361, 1363, 1366, 1369, 1371, 1375, 1377,
+ 1379, 1381, 1382, 1385, 1388, 1390, 1392, 1396, 1399, 1400,
+ 1402, 1404, 1406, 1414, 1415, 1416, 1418, 1419, 1424, 1432,
+ 1433, 1436, 1439, 1441, 1445, 1447, 1451, 1454, 1456, 1460,
+ 1467, 1474, 1477, 1479, 1481, 1483, 1485, 1488, 1490, 1492,
+ 1494, 1496, 1498, 1499, 1503, 1504, 1506, 1507, 1510, 1513,
+ 1517, 1518, 1520, 1522, 1525, 1531, 1534, 1535, 1540, 1541,
+ 1546, 1547, 1549, 1551, 1552, 1555, 1558, 1559, 1562, 1563,
+ 1566, 1572, 1573, 1575, 1577, 1580, 1582, 1585, 1586, 1589,
+ 1593, 1596, 1600, 1604, 1608, 1610, 1612, 1613, 1615
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const short yyrhs[] =
+{
+ 156, 0, -1, 157, -1, 156, 157, -1, 158, -1,
+ 170, -1, 229, -1, 235, -1, 239, 11, -1, 359,
+ 11, -1, 165, -1, 353, 358, 11, -1, 11, -1,
+ 1, 11, -1, 159, -1, 162, -1, 164, -1, 166,
+ -1, 163, 161, -1, 3, 160, -1, 4, 167, 160,
+ -1, 5, 167, 168, 160, -1, 161, -1, -1, 7,
+ -1, 46, -1, 6, -1, 238, 238, 11, -1, 47,
+ -1, 169, -1, 169, -1, 8, -1, 172, 171, -1,
+ 10, -1, 11, -1, 69, 9, 296, 169, -1, 69,
+ 9, -1, 70, 9, 382, -1, 71, 9, 382, 13,
+ 382, -1, 152, 9, 220, 221, -1, -1, 99, 9,
+ 173, 222, -1, 42, 9, 296, 382, -1, 78, 9,
+ 169, 176, -1, 72, 9, 177, 178, 184, -1, 73,
+ 9, 185, 186, -1, 79, 9, 192, 193, -1, 195,
+ 9, 196, -1, 83, 9, 209, -1, 84, 9, 199,
+ -1, 65, 9, 210, -1, 75, 9, 81, -1, 107,
+ 9, 66, -1, 77, 9, 87, -1, 89, 9, 215,
+ -1, 96, 9, 175, -1, 98, 237, -1, -1, 74,
+ 9, 174, 182, -1, 49, 9, 183, -1, 80, 9,
+ 216, 217, -1, 101, 9, 218, 219, -1, 108, 9,
+ 224, -1, 147, 9, 148, -1, 127, 9, 227, -1,
+ 117, 9, 225, 228, 169, -1, 131, 9, 133, -1,
+ 76, 9, 238, -1, 97, -1, 40, -1, 37, -1,
+ -1, 34, -1, 40, -1, -1, -1, 179, -1, 182,
+ -1, 180, -1, 179, 13, 182, -1, 179, 13, 180,
+ -1, -1, 43, 181, 179, 44, -1, 288, 293, 289,
+ 292, -1, 30, -1, -1, 182, -1, -1, 31, 32,
+ -1, 32, 31, -1, 32, -1, 31, -1, -1, -1,
+ 187, -1, 186, 13, 187, -1, 169, 188, 189, -1,
+ -1, 19, 169, -1, -1, 43, 191, 190, 44, -1,
+ -1, 13, 191, -1, 238, -1, -1, -1, 194, -1,
+ 193, 13, 194, -1, 169, 188, -1, 140, -1, 197,
+ -1, 196, 13, 197, -1, 196, 36, 197, -1, 198,
+ -1, 121, -1, 94, -1, 139, -1, 123, -1, 41,
+ -1, 105, -1, 113, -1, 119, -1, 200, 207, -1,
+ 202, -1, -1, 200, 201, 202, -1, 204, -1, -1,
+ 202, 20, 203, 204, -1, 85, -1, 86, -1, 205,
+ 82, 169, -1, 205, 20, 29, -1, 29, -1, 206,
+ -1, 205, 20, 206, -1, 169, -1, -1, 215, -1,
+ -1, 37, -1, 169, 313, 226, -1, 310, 311, 226,
+ -1, 169, 208, -1, 169, 143, -1, 134, -1, 134,
+ 43, 211, 44, -1, 212, -1, 211, 212, -1, 310,
+ 213, 214, 312, -1, -1, 313, -1, -1, 135, -1,
+ 40, -1, 37, -1, 169, -1, -1, 13, 169, -1,
+ 296, 169, -1, -1, 13, 296, 169, -1, 153, -1,
+ 310, 169, -1, -1, 154, -1, -1, 254, 223, -1,
+ -1, 100, -1, 109, -1, 7, -1, 103, -1, 104,
+ -1, -1, 118, -1, 57, -1, 111, 128, -1, 128,
+ -1, 118, -1, 112, 230, 233, 234, 358, 11, -1,
+ 232, 231, -1, -1, 81, -1, -1, 66, -1, -1,
+ 43, 169, 44, -1, 238, -1, 238, 238, -1, 238,
+ 238, 238, -1, 236, 67, 230, 233, 238, 358, 11,
+ -1, -1, 68, -1, 69, -1, 89, -1, 80, -1,
+ 65, -1, 74, -1, 49, -1, 42, -1, 79, -1,
+ 70, -1, 71, -1, 131, -1, 108, -1, 147, -1,
+ 127, -1, 78, -1, 99, -1, 101, -1, 73, -1,
+ 140, -1, 83, -1, 84, -1, 117, -1, 72, -1,
+ 96, -1, 76, -1, 75, -1, 107, -1, 77, -1,
+ 145, -1, 238, 20, 145, -1, 240, 241, 250, 256,
+ -1, 88, 169, 358, -1, 330, -1, -1, 247, -1,
+ 242, -1, 243, -1, 242, 243, -1, 244, 246, 245,
+ -1, 14, -1, 15, -1, 247, -1, 246, 10, 247,
+ -1, 249, -1, 247, 248, 249, -1, 36, -1, 251,
+ -1, 251, 254, -1, 12, -1, 252, -1, 251, 13,
+ 252, -1, 167, 253, -1, -1, 19, 167, -1, 168,
+ 255, -1, 168, 19, 168, 255, -1, -1, 13, 254,
+ -1, 257, -1, 256, 257, -1, 324, -1, 258, 264,
+ 297, 274, 10, -1, -1, 259, -1, 260, -1, 259,
+ 260, -1, 149, 261, 262, 150, -1, 3, -1, 4,
+ -1, 5, -1, 263, -1, 262, 10, 263, -1, 77,
+ 9, 87, -1, 69, 9, 169, -1, 265, 286, -1,
+ 268, -1, 14, 19, 15, 268, -1, 14, 268, 269,
+ 15, 266, 267, -1, -1, 28, 28, 28, -1, -1,
+ 267, 14, 269, 15, -1, -1, -1, 270, -1, 271,
+ -1, 269, 10, 271, -1, 23, 277, 279, -1, 322,
+ -1, 283, -1, 294, -1, 284, -1, 69, 296, 169,
+ -1, 146, 272, -1, 48, 238, -1, 137, 382, -1,
+ 110, 169, -1, 20, -1, 19, -1, 273, 382, -1,
+ -1, 374, -1, -1, 275, -1, 276, -1, 275, 13,
+ 276, -1, 285, -1, 151, 296, 382, -1, 111, 169,
+ -1, 130, 278, -1, 62, 278, -1, -1, -1, 284,
+ -1, 280, -1, 279, 13, 280, -1, 281, -1, 282,
+ -1, 238, -1, 28, -1, 19, -1, 124, -1, 53,
+ -1, 24, -1, 25, -1, 27, -1, 26, -1, 103,
+ -1, 104, -1, 90, 287, -1, 91, -1, 92, -1,
+ -1, 182, -1, -1, 23, 4, 21, -1, 29, -1,
+ 169, -1, -1, 289, 290, -1, 374, 291, 288, 293,
+ -1, -1, -1, 30, -1, -1, 293, 28, -1, 295,
+ -1, 42, 296, 382, -1, -1, 19, -1, 303, -1,
+ 298, -1, 299, 302, -1, 300, 301, -1, -1, 55,
+ -1, 54, 278, -1, 9, 323, -1, 53, 310, 312,
+ -1, 53, 82, -1, 48, 238, -1, 317, -1, -1,
+ 302, 301, -1, 306, 304, -1, -1, 305, 306, 21,
+ -1, 23, -1, -1, 306, 307, 302, -1, 308, -1,
+ 31, -1, 32, -1, 33, 32, -1, 144, -1, 52,
+ -1, 25, -1, 109, -1, 68, -1, 73, -1, 87,
+ -1, 43, 308, 44, -1, 310, 309, -1, 310, 43,
+ 313, 44, 312, -1, 310, 43, 314, 44, 309, -1,
+ 310, 43, 310, -1, 310, 313, 214, 312, 309, -1,
+ 310, 313, 214, 43, 314, 44, 309, -1, 310, 313,
+ 43, 310, -1, 310, 135, 312, 309, -1, 310, 135,
+ 43, 314, 44, 309, -1, 310, 314, 311, 309, -1,
+ 310, 314, 43, 313, 44, -1, 310, 314, 43, 310,
+ -1, -1, 238, -1, 34, -1, -1, 313, -1, -1,
+ 314, -1, 35, -1, 36, -1, 37, -1, 38, -1,
+ 39, -1, 169, -1, 315, -1, 316, -1, 19, -1,
+ 315, 19, -1, 20, -1, 316, 20, -1, 318, 319,
+ 124, 278, -1, 122, -1, -1, 136, -1, 320, -1,
+ 321, -1, 320, 321, -1, 310, 312, -1, 9, 323,
+ -1, 40, -1, 34, -1, 30, -1, 31, -1, 32,
+ -1, 33, -1, 37, -1, 38, -1, 45, -1, 326,
+ 256, 327, 328, 169, 325, 329, 10, -1, -1, 37,
+ -1, 114, -1, 40, -1, 16, -1, 17, -1, -1,
+ 21, -1, -1, 13, 182, -1, 41, 331, 12, 344,
+ -1, 332, 334, 337, -1, 333, -1, -1, 21, -1,
+ 335, -1, 22, -1, 334, 13, 335, -1, 169, 336,
+ -1, -1, 19, 169, -1, 36, 169, -1, -1, -1,
+ 337, 10, 21, 338, 334, -1, 340, -1, 34, -1,
+ 341, -1, 340, 13, 341, -1, 169, 342, -1, -1,
+ 19, 169, -1, -1, 345, 351, -1, -1, 346, -1,
+ 347, -1, 346, 347, -1, 348, 10, -1, 343, 286,
+ 350, -1, 349, -1, 326, 346, 327, 169, 329, -1,
+ -1, 32, -1, 352, -1, 351, 352, -1, 238, 10,
+ -1, 14, 339, 15, 238, 10, -1, 360, 362, -1,
+ 386, -1, 390, -1, -1, 51, 354, 355, -1, 424,
+ -1, -1, 355, 356, -1, 70, 357, 382, -1, -1,
+ 9, -1, -1, 10, -1, 397, -1, 418, -1, 388,
+ 361, 52, -1, -1, 43, 52, 44, -1, -1, 362,
+ 363, -1, 295, -1, 9, 323, -1, 364, -1, 129,
+ -1, 116, 9, 169, -1, 115, 9, 238, -1, 114,
+ 9, 169, -1, 113, 365, 232, 231, 403, 366, 405,
+ -1, 105, 238, -1, 106, -1, -1, 238, -1, 116,
+ -1, 114, -1, 115, -1, 43, 368, 369, 13, 376,
+ 44, -1, -1, 370, 372, -1, 375, -1, 385, 28,
+ 371, -1, 373, -1, 40, -1, 38, -1, 34, -1,
+ -1, 372, 373, -1, 374, 375, -1, 20, -1, 19,
+ -1, 382, -1, 84, 382, -1, 377, 379, -1, 381,
+ -1, 385, 28, 378, -1, 37, -1, 32, -1, 40,
+ -1, -1, 379, 380, -1, 374, 381, -1, 382, -1,
+ 169, -1, 169, 28, 383, -1, 28, 384, -1, -1,
+ 384, -1, 8, -1, 323, -1, 388, 57, 387, 367,
+ 58, 367, 389, -1, -1, -1, 56, -1, -1, 23,
+ 230, 233, 238, -1, 388, 61, 391, 396, 58, 396,
+ 392, -1, -1, 58, 393, -1, 60, 394, -1, 396,
+ -1, 393, 58, 396, -1, 395, -1, 394, 13, 395,
+ -1, 296, 382, -1, 367, -1, 398, 12, 408, -1,
+ 401, 403, 404, 333, 334, 405, -1, 388, 120, 403,
+ 333, 334, 405, -1, 399, 400, -1, 126, -1, 247,
+ -1, 22, -1, 402, -1, 232, 81, -1, 122, -1,
+ 124, -1, 119, -1, 121, -1, 94, -1, -1, 43,
+ 169, 44, -1, -1, 123, -1, -1, 69, 406, -1,
+ 169, 407, -1, 19, 169, 407, -1, -1, 138, -1,
+ 409, -1, 408, 409, -1, 410, 412, 413, 414, 10,
+ -1, 382, 411, -1, -1, 43, 19, 169, 44, -1,
+ -1, 14, 374, 382, 15, -1, -1, 59, -1, 238,
+ -1, -1, 125, 415, -1, 382, 416, -1, -1, 30,
+ 417, -1, -1, 20, 382, -1, 95, 419, 420, 12,
+ 423, -1, -1, 103, -1, 104, -1, 421, 422, -1,
+ 167, -1, 167, 168, -1, -1, 58, 167, -1, 58,
+ 167, 168, -1, 382, 10, -1, 423, 382, 10, -1,
+ 426, 427, 238, -1, 425, 427, 238, -1, 50, -1,
+ 63, -1, -1, 64, -1, 367, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const unsigned short yyrline[] =
+{
+ 0, 245, 245, 247, 251, 253, 256, 259, 262, 275,
+ 278, 281, 284, 290, 302, 308, 314, 318, 322, 338,
+ 343, 351, 361, 367, 374, 533, 538, 545, 560, 569,
+ 572, 578, 583, 586, 588, 592, 610, 625, 631, 637,
+ 647, 646, 650, 657, 663, 673, 679, 685, 693, 696,
+ 702, 707, 713, 719, 734, 740, 743, 773, 772, 785,
+ 795, 800, 805, 815, 826, 836, 867, 873, 879, 889,
+ 903, 912, 918, 931, 944, 950, 953, 957, 963, 966,
+ 972, 977, 976, 982, 1037, 1054, 1060, 1064, 1070, 1076,
+ 1082, 1088, 1094, 1101, 1104, 1107, 1111, 1119, 1125, 1137,
+ 1143, 1150, 1156, 1163, 1166, 1172, 1175, 1178, 1182, 1190,
+ 1209, 1217, 1225, 1233, 1244, 1250, 1256, 1262, 1281, 1287,
+ 1293, 1299, 1305, 1327, 1331, 1330, 1336, 1342, 1341, 1347,
+ 1353, 1359, 1382, 1394, 1402, 1405, 1409, 1426, 1432, 1438,
+ 1443, 1452, 1462, 1501, 1507, 1513, 1523, 1530, 1536, 1543,
+ 1551, 1556, 1564, 1570, 1582, 1591, 1597, 1609, 1627, 1638,
+ 1651, 1669, 1681, 1684, 1709, 1715, 1722, 1728, 1736, 1742,
+ 1749, 1755, 1765, 1770, 1776, 1781, 1798, 1803, 1809, 1815,
+ 1818, 1822, 1841, 1846, 1852, 1857, 1862, 1867, 1873, 1881,
+ 1901, 1920, 2010, 2018, 2025, 2028, 2031, 2034, 2037, 2040,
+ 2043, 2046, 2049, 2052, 2055, 2058, 2061, 2064, 2067, 2070,
+ 2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100,
+ 2103, 2106, 2110, 2120, 2134, 2152, 2187, 2193, 2198, 2203,
+ 2210, 2212, 2216, 2219, 2224, 2229, 2234, 2241, 2247, 2251,
+ 2258, 2265, 2274, 2282, 2284, 2291, 2299, 2305, 2315, 2328,
+ 2350, 2353, 2359, 2361, 2365, 2368, 2412, 2415, 2419, 2422,
+ 2426, 2435, 2441, 2447, 2454, 2457, 2461, 2471, 2488, 2491,
+ 2506, 2512, 2517, 2522, 2528, 2532, 2540, 2547, 2554, 2558,
+ 2560, 2564, 2570, 2573, 2576, 2579, 2595, 2611, 2622, 2649,
+ 2660, 2683, 2689, 2695, 2709, 2715, 2721, 2723, 2727, 2730,
+ 2734, 2737, 2750, 2771, 2786, 2799, 2809, 2814, 2821, 2823,
+ 2827, 2841, 2849, 2853, 2860, 2867, 2874, 2881, 2891, 2904,
+ 2914, 2925, 2931, 2937, 2965, 2971, 3001, 3010, 3021, 3026,
+ 3043, 3069, 3108, 3114, 3118, 3132, 3154, 3159, 3172, 3177,
+ 3184, 3204, 3209, 3215, 3222, 3234, 3239, 3243, 3247, 3266,
+ 3282, 3300, 3332, 3350, 3363, 3382, 3386, 3388, 3392, 3398,
+ 3404, 3429, 3435, 3443, 3450, 3452, 3459, 3471, 3483, 3498,
+ 3518, 3525, 3537, 3548, 3560, 3572, 3578, 3588, 3597, 3606,
+ 3622, 3628, 3637, 3653, 3659, 3665, 3674, 3680, 3694, 3699,
+ 3717, 3723, 3729, 3734, 3740, 3745, 3751, 3757, 3764, 3771,
+ 3777, 3783, 3795, 3806, 3811, 3818, 3823, 3830, 3837, 3844,
+ 3853, 3860, 3864, 3867, 3871, 3883, 3893, 3898, 3906, 3913,
+ 3920, 3927, 3934, 3941, 3948, 3954, 3960, 3966, 3973, 3980,
+ 3992, 3998, 4003, 4008, 4017, 4024, 4030, 4034, 4039, 4043,
+ 4050, 4056, 4058, 4068, 4072, 4079, 4086, 4096, 4103, 4107,
+ 4106, 4110, 4115, 4126, 4131, 4136, 4144, 4150, 4156, 4166,
+ 4177, 4183, 4187, 4189, 4193, 4196, 4217, 4222, 4228, 4234,
+ 4241, 4243, 4247, 4258, 4264, 4356, 4359, 4364, 4362, 4436,
+ 4440, 4443, 4447, 4474, 4476, 4480, 4482, 4486, 4489, 4493,
+ 4545, 4551, 4561, 4563, 4567, 4575, 4586, 4618, 4629, 4636,
+ 4642, 4647, 4657, 4665, 4677, 4687, 4694, 4703, 4712, 4721,
+ 4726, 4736, 4742, 4744, 4756, 4761, 4769, 4775, 4785, 4787,
+ 4790, 4793, 4798, 4804, 4809, 4824, 4827, 4829, 4842, 4847,
+ 4853, 4863, 4865, 4869, 4873, 4880, 4885, 4891, 4897, 4903,
+ 4907, 4912, 4915, 4936, 4943, 4948, 4952, 4958, 4964, 4975,
+ 4988, 4991, 4995, 4997, 5001, 5004, 5008, 5025, 5062, 5069,
+ 5076, 5090, 5099, 5106, 5109, 5116, 5125, 5149, 5161, 5167,
+ 5173, 5179, 5186, 5192, 5198, 5203, 5209, 5215, 5228, 5234,
+ 5247, 5252, 5258, 5261, 5265, 5272, 5280, 5285, 5291, 5296,
+ 5302, 5307, 5319, 5325, 5329, 5334, 5352, 5357, 5363, 5368,
+ 5374, 5377, 5382, 5389, 5396, 5400, 5407, 5414, 5416, 5423,
+ 5430, 5436, 5442, 5452, 5463, 5469, 5472, 5479, 5486
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE
+/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "T_SCORE", "T_STAFF", "T_VOICE", "T_GRIDS",
+ "T_BLOCKHEAD", "T_NUMBER", "T_EQUAL", "T_SEMICOLON", "T_NEWLINE",
+ "T_COLON", "T_COMMA", "T_LBRACKET", "T_RBRACKET", "T_LBRACE",
+ "T_RBRACE", "T_VARIABLE", "T_DASH", "T_PLUS", "T_PLACE", "T_ALL",
+ "T_WITH", "T_CUE", "T_GRACE", "T_XNOTE", "T_DIAM", "T_DOT",
+ "T_MULTIWHOLE", "T_LET_M", "T_LET_R", "T_LET_S", "T_LET_U", "T_PITCH",
+ "T_SHARP", "T_AMPERSAND", "T_LET_N", "T_LET_X", "T_DBLFLAT", "T_LETTER",
+ "T_LYRICS", "T_PAD", "T_LPAREN", "T_RPAREN", "T_LVAR", "T_MUSIC",
+ "T_HEADSHAPES", "T_HS", "T_SWINGUNIT", "T_POSTSCRIPT", "T_SCOREFEED",
+ "T_BARTYPE", "T_HAT", "T_TILDE", "T_QUESTION", "T_LINETYPE", "T_LINE",
+ "T_TO", "T_STAR", "T_BULGE", "T_CURVE", "T_TIE", "T_PRINTTYPE", "T_NL",
+ "T_STAFFLINES", "T_FFAMILY", "T_PARAGRAPH", "T_PARATYPE", "T_NUMVAR",
+ "T_FNUMVAR", "T_2FNUMVAR", "T_RATNUMLISTVAR", "T_RANGELISTVAR",
+ "T_TIMEUNIT", "T_FONTVAR", "T_STRVAR", "T_CLEFVAR", "T_VVAR",
+ "T_BARSTLISTVAR", "T_SCORESEP", "T_FONT", "T_SLASH", "T_KEY", "T_TIME",
+ "T_CUT", "T_COMMON", "T_CLEF", "T_MULTIREST", "T_YESNOVAR", "T_BM",
+ "T_ESBM", "T_EBM", "T_INVISBAR", "T_OCTAVE", "T_ROLL", "T_VISVAR",
+ "T_WHEREUSED", "T_UNSET", "T_VCOMBINE", "T_VCOMBVAL", "T_SCOREPAD",
+ "T_WORD", "T_UP", "T_DOWN", "T_ENDING", "T_ENDENDING", "T_FAMILY",
+ "T_ENDSTYLE", "T_ENDTYPE", "T_SLASHMARK", "T_ALT", "T_TITLE",
+ "T_REHEARSAL", "T_NUM", "T_LET", "T_MNUM", "T_TRANSPOSE", "T_XPOS_INT",
+ "T_PEDAL", "T_PHRASE", "T_MUSSYM", "T_L_ANGLE", "T_MODIFIER",
+ "T_R_ANGLE", "T_TIL", "T_MIDI", "T_PEDSTYLE", "T_PEDSTAR",
+ "T_HIDECHANGES", "T_SLUR", "T_UNITS", "T_CENTIMETERS", "T_UNITTYPE",
+ "T_TAB", "T_TICKS", "T_NOWHERE_SLIDE", "T_LEN", "T_EXCLAM",
+ "T_OTHERTEXT", "T_ORDER", "T_GRIDPLACE", "T_GRPLVALUE", "T_DRUM",
+ "T_RPT", "T_STRING", "T_HO", "T_REH_STYLE", "T_REHTYPE", "T_L_DBLANGLE",
+ "T_R_DBLANGLE", "T_SLOPE", "T_PSVAR", "T_PAGESIZE", "T_ORIENTATION",
+ "$accept", "song", "item", "context", "ssv_context", "alloc_ssv",
+ "new_context", "blockhead_context", "music_context", "grid_context",
+ "stringpair", "headshape_context", "staffnum", "voicenum", "num",
+ "assignment", "terminator", "assign", "@1", "@2", "visval",
+ "vschemetype", "allocbeamlist", "ratnumlist", "nonempty_ratnumlist",
+ "subbeam", "@3", "time_item", "swing_time", "opt_rs", "alloc_rangelist",
+ "rangelist", "rangeitem", "rangetail", "grplabel", "optlabel2",
+ "glabel", "alloc_barstlist", "barstlist", "barst_item", "mark_order",
+ "orderlist", "orderitem", "marktype", "timesig", "tsiglist", "@4",
+ "meas_tsig", "@5", "fraction", "numerator", "numerator_value",
+ "opt_ts_visibility", "opt_n", "keyspec", "stafflinedef",
+ "tab_string_list", "tab_item", "opt_str_acc", "opt_ticks", "flagval",
+ "minscsep", "maxscsep", "minscpad", "maxscpad", "pagesize",
+ "orientation", "vcombine_value", "opt_vcombine_qualifier", "end_type",
+ "updown", "majmin", "pedstyle", "transpose_interval", "title", "tfont",
+ "title_font", "font_family", "title_size", "titleA", "paragraph",
+ "opt_paratype", "paramname", "string", "noteinfo", "init_staff",
+ "sv_spec", "sv_map_list", "sv_map_entry", "map_start", "map_finish",
+ "sv_map_item_list", "voice_id", "sv_and", "sv_item", "notecolon",
+ "grp_stafflist", "grp_staff_item", "grp_staff_range", "voice_spec",
+ "voice_tail", "groupinfo", "groupdata", "mid_meas_param",
+ "mid_meas_list", "mid_meas_item", "mm_context", "mm_params",
+ "mm_param_item", "grp_attributes", "styleinfo", "gtc",
+ "extra_styleinfo", "alloc_grpsyl", "marklist", "marklistA", "markitem",
+ "hor_offset", "opt_plus_or_minus", "other_attr", "attr_list",
+ "attr_item", "alloc_marklist", "opt_dir", "marks", "mark", "mark_item",
+ "shorthand_mark", "notetype", "dir", "beammark", "time_val",
+ "crossbeam", "basic_time_val", "opt_more_time", "more_time_item",
+ "alloc_timelist", "opt_m", "dots", "padding", "padspec", "opt_minus",
+ "group", "special_group", "extra_attr", "spec_grp_alloc", "extra_item",
+ "note_opts", "notelist", "opt_other_staff", "css_with", "some_notes",
+ "notedata", "notedata1", "opt_bend", "pitch", "opt_accidental",
+ "opt_octave", "acc_symbol", "octave", "minuslist", "pluslist",
+ "slur_item", "start_slur", "slurlist", "fullslurlist", "slurnote",
+ "grp_locsave", "loc_variable", "ntuplet", "printtup", "start_tuplet",
+ "rbrace", "opt_side", "opt_time", "lyricinfo", "lyric_id",
+ "lyr_opt_place", "opt_place", "staff_list", "staff_item", "staff_range",
+ "more_lyric_ids", "@6", "verse_spec", "verselist", "verse_item",
+ "verse_range", "alloc_lyr_grpsyl", "lyricdata", "lyr_tlist",
+ "lyrics_timelist", "lyr_time_item", "lyr_tm", "lyrtuplet", "opt_space",
+ "lyr_verse", "verse_string", "os_directive", "@7", "opt_temp_margin",
+ "temp_margin", "opt_equals", "opt_semi", "directive", "barinfo",
+ "precbartype", "bar_items", "bar_opt", "ending_info", "chk_dup_reh",
+ "rehearsal_mark", "location", "alloc_loc", "xcoord", "xterm",
+ "east_or_west", "xoffsetlist", "xoffset", "plus_or_minus", "xoffsetval",
+ "ycoord", "yterm", "north_or_south", "yoffsetlist", "yoffset",
+ "yoffsetval", "floatnum", "opt_decimal_part", "numstr", "variable",
+ "line", "line_alloc", "linetype", "opt_line_str", "curve",
+ "curve_alloc", "curve_tail", "loc_list", "bulgelist", "bulge_value",
+ "curve_loc", "stuff_info", "stuff_header", "midi", "midi_staff",
+ "stuff_id", "stuff_type", "opt_size", "opt_modifier", "opt_dist",
+ "stuff_dist", "opt_exclam", "stufflist", "stuff_item", "beat_offset",
+ "gracebackup", "steps_offset", "opt_string", "til_clause", "til_val",
+ "til_suffix", "til_offset", "roll_cmd", "opt_roll_dir", "roll_extent",
+ "roll_start", "roll_end", "roll_offsetlist", "printcmd", "postscript",
+ "printtype", "opt_loc", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const unsigned short yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
+ 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
+ 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
+ 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
+ 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
+ 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
+ 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
+ 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
+ 395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
+ 405, 406, 407, 408, 409
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const unsigned short yyr1[] =
+{
+ 0, 155, 156, 156, 157, 157, 157, 157, 157, 157,
+ 157, 157, 157, 157, 158, 158, 158, 158, 158, 159,
+ 159, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 171, 172, 172, 172, 172, 172,
+ 173, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 174, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 175, 175,
+ 175, 176, 176, 176, 177, 178, 178, 179, 179, 179,
+ 179, 181, 180, 182, 182, 183, 183, 184, 184, 184,
+ 184, 184, 185, 186, 186, 186, 187, 188, 188, 189,
+ 189, 190, 190, 191, 192, 193, 193, 193, 194, 195,
+ 196, 196, 196, 197, 198, 198, 198, 198, 198, 198,
+ 198, 198, 199, 200, 201, 200, 202, 203, 202, 204,
+ 204, 204, 204, 204, 205, 205, 206, 207, 207, 208,
+ 208, 209, 209, 210, 210, 210, 210, 211, 211, 212,
+ 213, 213, 214, 214, 215, 215, 216, 217, 217, 218,
+ 219, 219, 220, 220, 221, 221, 222, 222, 223, 223,
+ 224, 224, 225, 225, 226, 226, 227, 227, 227, 228,
+ 229, 230, 231, 231, 232, 232, 233, 233, 234, 234,
+ 234, 235, 236, 236, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
+ 237, 237, 238, 238, 239, 239, 239, 240, 241, 241,
+ 242, 242, 243, 244, 245, 246, 246, 247, 247, 248,
+ 249, 249, 250, 251, 251, 252, 253, 253, 254, 254,
+ 255, 255, 256, 256, 257, 257, 258, 258, 259, 259,
+ 260, 261, 261, 261, 262, 262, 263, 263, 264, 265,
+ 265, 265, 266, 266, 267, 267, 268, 269, 269, 270,
+ 270, 271, 271, 271, 271, 271, 271, 271, 271, 271,
+ 271, 272, 272, 272, 273, 273, 274, 274, 275, 275,
+ 276, 276, 276, 276, 276, 277, 278, 278, 279, 279,
+ 280, 281, 281, 282, 282, 282, 282, 283, 283, 283,
+ 283, 284, 284, 285, 285, 285, 286, 286, 287, 287,
+ 288, 288, 289, 289, 290, 291, 292, 292, 293, 293,
+ 294, 295, 296, 296, 297, 297, 298, 299, 300, 301,
+ 301, 301, 301, 301, 301, 301, 302, 302, 303, 304,
+ 304, 305, 306, 306, 307, 307, 307, 307, 307, 307,
+ 307, 307, 307, 307, 307, 307, 308, 308, 308, 308,
+ 308, 308, 308, 308, 308, 308, 308, 308, 309, 309,
+ 310, 311, 311, 312, 312, 313, 313, 313, 313, 313,
+ 314, 314, 314, 315, 315, 316, 316, 317, 318, 319,
+ 319, 319, 320, 320, 321, 322, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 324, 325, 325, 325, 325,
+ 326, 327, 328, 328, 329, 329, 330, 331, 332, 333,
+ 333, 334, 334, 334, 335, 336, 336, 336, 337, 338,
+ 337, 339, 339, 340, 340, 341, 342, 342, 343, 344,
+ 345, 345, 346, 346, 347, 348, 348, 349, 350, 350,
+ 351, 351, 352, 352, 353, 353, 353, 354, 353, 353,
+ 355, 355, 356, 357, 357, 358, 358, 359, 359, 360,
+ 361, 361, 362, 362, 363, 363, 363, 363, 363, 363,
+ 363, 363, 364, 364, 365, 366, 366, 366, 366, 367,
+ 368, 369, 370, 370, 370, 371, 371, 371, 372, 372,
+ 373, 374, 374, 375, 375, 376, 377, 377, 378, 378,
+ 378, 379, 379, 380, 381, 382, 382, 382, 383, 383,
+ 384, 385, 386, 387, 388, 388, 389, 389, 390, 391,
+ 392, 392, 393, 393, 394, 394, 395, 396, 397, 398,
+ 398, 398, 399, 400, 400, 401, 402, 402, 402, 402,
+ 402, 402, 403, 403, 404, 404, 405, 405, 406, 406,
+ 407, 407, 408, 408, 409, 410, 411, 411, 412, 412,
+ 413, 413, 413, 414, 414, 415, 416, 416, 417, 417,
+ 418, 419, 419, 419, 420, 421, 421, 422, 422, 422,
+ 423, 423, 424, 424, 425, 426, 427, 427, 427
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const unsigned char yyr2[] =
+{
+ 0, 2, 1, 2, 1, 1, 1, 1, 2, 2,
+ 1, 3, 1, 2, 1, 1, 1, 1, 2, 2,
+ 3, 4, 1, 0, 1, 1, 1, 3, 1, 1,
+ 1, 1, 2, 1, 1, 4, 2, 3, 5, 4,
+ 0, 4, 4, 4, 5, 4, 4, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 2, 0, 4, 3,
+ 4, 4, 3, 3, 3, 5, 3, 3, 1, 1,
+ 1, 0, 1, 1, 0, 0, 1, 1, 1, 3,
+ 3, 0, 4, 4, 1, 0, 1, 0, 2, 2,
+ 1, 1, 0, 0, 1, 3, 3, 0, 2, 0,
+ 4, 0, 2, 1, 0, 0, 1, 3, 2, 1,
+ 1, 3, 3, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 1, 0, 3, 1, 0, 4, 1,
+ 1, 3, 3, 1, 1, 3, 1, 0, 1, 0,
+ 1, 3, 3, 2, 2, 1, 4, 1, 2, 4,
+ 0, 1, 0, 1, 1, 1, 1, 0, 2, 2,
+ 0, 3, 1, 2, 0, 1, 0, 2, 0, 1,
+ 1, 1, 1, 1, 0, 1, 1, 2, 1, 1,
+ 6, 2, 0, 1, 0, 1, 0, 3, 1, 2,
+ 3, 7, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 3, 4, 3, 1, 0, 1, 1,
+ 1, 2, 3, 1, 1, 1, 3, 1, 3, 1,
+ 1, 2, 1, 1, 3, 2, 0, 2, 2, 4,
+ 0, 2, 1, 2, 1, 5, 0, 1, 1, 2,
+ 4, 1, 1, 1, 1, 3, 3, 3, 2, 1,
+ 4, 6, 0, 3, 0, 4, 0, 0, 1, 1,
+ 3, 3, 1, 1, 1, 1, 3, 2, 2, 2,
+ 2, 1, 1, 2, 0, 1, 0, 1, 1, 3,
+ 1, 3, 2, 2, 2, 0, 0, 1, 1, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 1, 1, 0, 1, 0, 3,
+ 1, 1, 0, 2, 4, 0, 0, 1, 0, 2,
+ 1, 3, 0, 1, 1, 1, 2, 2, 0, 1,
+ 2, 2, 3, 2, 2, 1, 0, 2, 2, 0,
+ 3, 1, 0, 3, 1, 1, 1, 2, 1, 1,
+ 1, 1, 1, 1, 1, 3, 2, 5, 5, 3,
+ 5, 7, 4, 4, 6, 4, 5, 4, 0, 1,
+ 1, 0, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 2, 1, 2, 4, 1, 0,
+ 1, 1, 1, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 8, 0, 1, 1, 1,
+ 1, 1, 0, 1, 0, 2, 4, 3, 1, 0,
+ 1, 1, 1, 3, 2, 0, 2, 2, 0, 0,
+ 5, 1, 1, 1, 3, 2, 0, 2, 0, 2,
+ 0, 1, 1, 2, 2, 3, 1, 5, 0, 1,
+ 1, 2, 2, 5, 2, 1, 1, 0, 3, 1,
+ 0, 2, 3, 0, 1, 0, 1, 1, 1, 3,
+ 0, 3, 0, 2, 1, 2, 1, 1, 3, 3,
+ 3, 7, 2, 1, 0, 1, 1, 1, 1, 6,
+ 0, 2, 1, 3, 1, 1, 1, 1, 0, 2,
+ 2, 1, 1, 1, 2, 2, 1, 3, 1, 1,
+ 1, 0, 2, 2, 1, 1, 3, 2, 0, 1,
+ 1, 1, 7, 0, 0, 1, 0, 4, 7, 0,
+ 2, 2, 1, 3, 1, 3, 2, 1, 3, 6,
+ 6, 2, 1, 1, 1, 1, 2, 1, 1, 1,
+ 1, 1, 0, 3, 0, 1, 0, 2, 2, 3,
+ 0, 1, 1, 2, 5, 2, 0, 4, 0, 4,
+ 0, 1, 1, 0, 2, 2, 0, 2, 0, 2,
+ 5, 0, 1, 1, 2, 1, 2, 0, 2, 3,
+ 2, 3, 3, 3, 1, 1, 0, 1, 1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+ STATE-NUM when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const unsigned short yydefact[] =
+{
+ 0, 0, 23, 0, 0, 26, 24, 12, 439, 0,
+ 25, 28, 0, 614, 477, 545, 615, 0, 185, 193,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 571, 601, 0, 0,
+ 0, 0, 0, 0, 184, 0, 569, 570, 567, 568,
+ 562, 0, 0, 109, 222, 0, 0, 0, 2, 4,
+ 14, 15, 23, 16, 10, 17, 5, 0, 0, 6,
+ 0, 7, 0, 0, 0, 0, 226, 485, 0, 492,
+ 475, 490, 476, 487, 0, 0, 572, 565, 488, 479,
+ 616, 616, 13, 19, 22, 31, 23, 29, 0, 440,
+ 0, 0, 438, 342, 85, 480, 0, 36, 0, 0,
+ 74, 92, 57, 0, 0, 0, 0, 104, 0, 0,
+ 0, 485, 0, 602, 603, 0, 0, 200, 199, 197,
+ 194, 202, 203, 216, 211, 198, 219, 218, 221, 208,
+ 201, 196, 213, 214, 195, 217, 209, 210, 220, 205,
+ 215, 207, 204, 212, 206, 56, 40, 342, 0, 0,
+ 186, 182, 0, 0, 0, 0, 0, 1, 3, 18,
+ 33, 34, 32, 0, 566, 184, 0, 0, 8, 233,
+ 246, 0, 229, 230, 0, 228, 237, 240, 243, 486,
+ 0, 9, 474, 0, 543, 549, 572, 0, 0, 564,
+ 563, 561, 0, 574, 510, 617, 618, 0, 0, 20,
+ 23, 30, 458, 442, 445, 448, 441, 343, 0, 330,
+ 84, 331, 86, 59, 338, 478, 145, 139, 50, 0,
+ 0, 535, 37, 0, 75, 93, 0, 51, 67, 53,
+ 71, 105, 156, 157, 390, 0, 48, 391, 133, 129,
+ 130, 136, 49, 124, 123, 126, 0, 134, 225, 155,
+ 154, 54, 605, 0, 607, 70, 69, 68, 55, 166,
+ 160, 0, 52, 171, 170, 62, 0, 0, 183, 181,
+ 172, 173, 0, 176, 0, 178, 64, 66, 63, 162,
+ 164, 0, 118, 115, 119, 120, 121, 114, 117, 116,
+ 47, 110, 113, 186, 223, 27, 0, 245, 242, 256,
+ 231, 0, 235, 239, 0, 0, 250, 241, 11, 0,
+ 342, 0, 503, 504, 0, 0, 0, 497, 494, 493,
+ 496, 0, 0, 0, 439, 489, 586, 558, 582, 588,
+ 0, 575, 439, 0, 613, 612, 21, 430, 458, 326,
+ 436, 0, 458, 462, 0, 466, 0, 0, 444, 0,
+ 437, 42, 332, 483, 481, 0, 140, 144, 143, 35,
+ 540, 537, 538, 0, 81, 87, 76, 78, 77, 97,
+ 45, 94, 58, 72, 73, 43, 97, 46, 106, 0,
+ 60, 395, 396, 397, 398, 399, 174, 174, 392, 0,
+ 122, 138, 127, 0, 0, 606, 0, 0, 604, 41,
+ 168, 342, 61, 159, 0, 485, 188, 179, 0, 177,
+ 165, 39, 163, 0, 0, 0, 247, 0, 256, 252,
+ 276, 257, 258, 254, 256, 0, 234, 232, 238, 244,
+ 0, 0, 248, 418, 419, 420, 421, 417, 422, 423,
+ 416, 424, 495, 0, 502, 184, 0, 0, 0, 491,
+ 0, 557, 0, 0, 0, 585, 583, 0, 590, 573,
+ 0, 522, 521, 0, 541, 0, 518, 514, 0, 512,
+ 523, 0, 458, 327, 468, 0, 0, 459, 470, 463,
+ 464, 446, 447, 443, 0, 339, 336, 484, 0, 0,
+ 147, 150, 536, 539, 38, 0, 91, 90, 44, 0,
+ 0, 99, 0, 108, 0, 158, 175, 141, 142, 125,
+ 0, 132, 135, 131, 0, 600, 608, 169, 167, 0,
+ 187, 0, 189, 65, 111, 112, 485, 261, 262, 263,
+ 0, 253, 276, 362, 326, 269, 259, 256, 236, 251,
+ 250, 341, 182, 500, 499, 498, 0, 0, 576, 0,
+ 0, 591, 592, 593, 576, 524, 0, 511, 520, 0,
+ 431, 0, 469, 465, 452, 456, 0, 451, 453, 472,
+ 471, 449, 337, 333, 83, 335, 482, 146, 148, 152,
+ 151, 0, 88, 89, 80, 79, 98, 0, 96, 95,
+ 107, 128, 610, 0, 609, 161, 180, 190, 0, 0,
+ 0, 0, 264, 0, 277, 296, 345, 356, 0, 344,
+ 359, 268, 432, 249, 572, 546, 0, 0, 560, 0,
+ 0, 0, 0, 559, 0, 531, 526, 534, 0, 519,
+ 517, 516, 515, 513, 434, 0, 455, 0, 0, 0,
+ 0, 153, 393, 82, 101, 103, 611, 191, 0, 0,
+ 0, 260, 276, 0, 305, 317, 318, 320, 319, 0,
+ 342, 321, 322, 0, 0, 294, 0, 278, 279, 283,
+ 285, 284, 340, 282, 306, 328, 324, 325, 0, 306,
+ 342, 0, 297, 298, 300, 346, 0, 0, 0, 306,
+ 349, 408, 347, 355, 409, 361, 370, 365, 366, 0,
+ 0, 369, 372, 373, 374, 371, 368, 358, 362, 356,
+ 364, 388, 433, 0, 0, 184, 542, 0, 342, 548,
+ 0, 580, 577, 587, 589, 596, 594, 584, 509, 525,
+ 0, 0, 467, 457, 0, 454, 450, 338, 403, 405,
+ 400, 149, 394, 401, 402, 0, 0, 267, 266, 265,
+ 270, 415, 0, 288, 0, 290, 289, 292, 291, 287,
+ 0, 295, 0, 272, 304, 307, 0, 323, 302, 303,
+ 0, 255, 0, 357, 351, 354, 353, 393, 350, 410,
+ 393, 0, 411, 412, 367, 0, 0, 363, 0, 393,
+ 389, 376, 152, 391, 426, 507, 508, 506, 505, 576,
+ 186, 550, 552, 0, 551, 554, 580, 581, 578, 598,
+ 595, 0, 532, 529, 528, 530, 527, 435, 473, 334,
+ 404, 406, 102, 100, 314, 313, 316, 315, 312, 281,
+ 308, 310, 311, 286, 293, 280, 0, 274, 0, 301,
+ 299, 352, 414, 306, 413, 375, 360, 379, 0, 0,
+ 0, 388, 0, 393, 0, 388, 427, 429, 428, 434,
+ 501, 0, 0, 556, 342, 579, 0, 597, 533, 0,
+ 0, 271, 329, 407, 393, 388, 0, 383, 382, 0,
+ 388, 387, 0, 385, 0, 547, 553, 555, 599, 309,
+ 273, 277, 377, 378, 388, 0, 380, 386, 425, 0,
+ 384, 388, 275, 381
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const short yydefgoto[] =
+{
+ -1, 57, 58, 59, 60, 93, 94, 61, 62, 63,
+ 64, 65, 180, 316, 231, 66, 172, 67, 269, 236,
+ 268, 385, 234, 375, 376, 377, 505, 378, 223, 508,
+ 235, 380, 381, 511, 598, 756, 654, 241, 387, 388,
+ 68, 300, 301, 302, 252, 253, 399, 254, 520, 255,
+ 256, 257, 400, 368, 246, 228, 499, 500, 589, 652,
+ 261, 243, 390, 270, 412, 290, 421, 409, 528, 275,
+ 282, 517, 286, 418, 69, 160, 279, 161, 277, 415,
+ 71, 72, 155, 800, 74, 75, 181, 182, 183, 184,
+ 437, 311, 185, 314, 186, 309, 187, 188, 307, 317,
+ 442, 428, 429, 430, 431, 432, 540, 611, 612, 543,
+ 544, 847, 881, 545, 676, 677, 678, 769, 770, 691,
+ 692, 693, 762, 774, 839, 840, 841, 842, 679, 775,
+ 694, 484, 777, 224, 496, 583, 650, 584, 362, 681,
+ 682, 813, 615, 616, 617, 618, 783, 695, 619, 717,
+ 718, 620, 719, 720, 801, 721, 397, 751, 398, 752,
+ 753, 754, 703, 704, 791, 792, 793, 683, 474, 433,
+ 869, 348, 571, 723, 742, 76, 100, 101, 102, 215,
+ 216, 358, 360, 649, 576, 577, 578, 646, 349, 350,
+ 351, 352, 353, 354, 355, 573, 487, 488, 77, 105,
+ 225, 364, 498, 190, 78, 79, 197, 192, 329, 330,
+ 455, 809, 461, 343, 475, 476, 643, 567, 477, 478,
+ 479, 634, 635, 826, 739, 822, 636, 336, 502, 371,
+ 481, 80, 332, 81, 726, 82, 333, 729, 811, 814,
+ 815, 462, 83, 84, 85, 201, 86, 87, 203, 342,
+ 628, 732, 818, 337, 338, 339, 465, 468, 563, 632,
+ 736, 820, 877, 88, 125, 263, 264, 408, 525, 89,
+ 90, 91, 207
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -693
+static const short yypact[] =
+{
+ 997, 49, -693, 101, 101, -693, -693, -693, 43, 116,
+ -693, -693, 143, -693, -693, -693, -693, 158, -693, -693,
+ 199, 215, 254, 284, 296, 315, 372, 401, 410, 419,
+ 421, 422, 424, 426, 101, 427, -693, 244, 431, 732,
+ 432, 433, 435, 436, 236, 438, -693, -693, -693, -693,
+ -693, 439, 440, -693, -693, 441, 443, 847, -693, -693,
+ -693, -693, -693, -693, -693, -693, -693, 378, 445, -693,
+ 123, -693, 324, 26, 384, 309, -693, 446, 447, -693,
+ -693, 69, -693, -693, 451, 245, 414, -693, -693, -693,
+ 32, 32, -693, -693, -693, -693, -693, -693, 101, -693,
+ 454, 278, -693, 449, 210, -693, 41, 190, 182, 182,
+ -693, -693, -693, 381, 314, 383, 101, -693, 101, 70,
+ 51, 446, 225, -693, -693, 101, 57, -693, -693, -693,
+ -693, -693, -693, -693, -693, -693, -693, -693, -693, -693,
+ -693, -693, -693, -693, -693, -693, -693, -693, -693, -693,
+ -693, -693, -693, -693, -693, -693, -693, 449, 405, 44,
+ 430, 393, 295, 94, 344, 333, 29, -693, -693, -693,
+ -693, -693, -693, 371, -693, 236, 335, 68, -693, -693,
+ 464, 489, 490, -693, 101, 467, -693, 353, -693, -693,
+ 494, -693, 114, 456, -693, -693, 414, 462, 182, -693,
+ 467, -693, 101, 390, -693, -693, -693, 314, 314, -693,
+ -693, -693, 28, -693, 124, 502, -693, -693, 182, -693,
+ -693, -693, -693, -693, -693, 448, 473, 15, -693, 101,
+ 511, 493, -693, 507, 207, 101, 210, -693, 504, -693,
+ 293, 101, -693, 512, -693, 492, -693, 492, -693, -693,
+ -693, -693, -693, 332, 515, -693, 50, -693, -693, -693,
+ -693, -693, 101, 520, 479, -693, -693, -693, -693, 101,
+ 525, 101, -693, -693, -693, -693, 101, 314, -693, -693,
+ -693, -693, 425, -693, 411, -693, -693, -693, -693, -693,
+ 395, 101, -693, -693, -693, -693, -693, -693, -693, -693,
+ 56, -693, -693, 430, -693, -693, 101, -693, -693, 21,
+ -693, 358, 467, -693, 101, 101, 338, -693, -693, 575,
+ 449, 314, -693, -693, 544, 549, 551, -693, -693, -693,
+ -693, 519, 521, 521, 43, -693, 522, 182, -693, 552,
+ 526, -693, 43, 514, 504, 504, -693, -693, 553, 210,
+ -693, 24, 31, -693, 561, -693, 101, 101, -693, 101,
+ 562, -693, 545, 565, -693, 550, -693, -693, -693, -693,
+ -693, -693, 511, 182, -693, 377, 572, -693, -693, 567,
+ 581, -693, -693, -693, -693, -693, 567, 587, -693, 101,
+ -693, -693, -693, -693, -693, -693, 484, 484, -693, 51,
+ -693, -693, -693, 85, 101, -693, 182, 101, -693, -693,
+ 503, 449, -693, -693, 566, 446, 26, -693, 101, -693,
+ -693, -693, -693, 371, 371, 314, -693, 374, 25, -693,
+ 597, 465, -693, -693, 21, 101, -693, -693, -693, -693,
+ 101, 101, -693, -693, -693, -693, -693, -693, -693, -693,
+ -693, -693, -693, 182, 504, 236, 101, 314, 101, -693,
+ 558, -693, 560, 278, 598, -693, -693, 386, -5, -693,
+ 278, -693, -693, 182, -693, 606, -693, -693, 103, -693,
+ -693, 594, 397, -693, 591, 73, 234, 24, -693, -693,
+ -693, -693, -693, -693, 604, -693, 289, -693, 182, 253,
+ -693, 492, -693, -693, -693, 207, 595, 599, -693, 207,
+ 101, 583, 101, -693, 101, -693, -693, -693, -693, 515,
+ 51, -693, -693, -693, 618, 182, 101, -693, -693, 101,
+ -693, 620, 26, -693, -693, -693, 286, -693, -693, -693,
+ 33, -693, 610, 80, 210, -693, -693, 17, 467, -693,
+ 619, -693, 393, -693, 504, -693, 521, 521, 52, 101,
+ 182, -693, 504, 508, 52, -693, 559, 386, -693, 336,
+ -693, 101, -693, -693, -693, 615, 621, 622, -693, -693,
+ -693, -693, -693, -693, -693, -693, -693, -693, -693, 505,
+ -693, 61, -693, -693, -693, -693, -693, 314, -693, -693,
+ -693, -693, -693, 627, -693, -693, -693, 504, 628, 629,
+ 632, 22, -693, 633, 138, 273, -693, -693, 91, -693,
+ 307, -693, 623, -693, 414, 630, 276, 198, -693, 608,
+ 635, 182, 644, -693, 612, -693, -693, -693, 631, -693,
+ -693, -693, -693, -693, 645, 101, -693, 314, 101, 278,
+ 100, -693, 227, -693, 647, 504, -693, -693, 101, 570,
+ 33, -693, -693, 575, -693, -693, -693, -693, -693, 314,
+ 449, -693, -693, 101, 182, 398, 375, -693, -693, -693,
+ -693, -693, -693, -693, 318, 638, -693, -693, 101, 318,
+ 449, 652, 650, -693, -693, 91, 575, 314, 37, 318,
+ -693, -693, -693, -693, 19, -693, -693, -693, -693, 634,
+ 550, -693, -693, -693, -693, -693, -693, -693, -693, -693,
+ -693, 48, -693, 101, 162, 236, -693, 521, 449, -693,
+ 101, 527, -693, -693, -693, 637, -693, -693, -693, 386,
+ 312, 210, -693, -693, 308, -693, 502, -693, -693, -693,
+ -693, -693, -693, 649, 651, 314, 625, -693, -693, -693,
+ -693, -693, 71, 504, 101, -693, -693, 193, 195, -693,
+ 182, -693, 138, 636, -693, -693, 668, -693, -693, -693,
+ 182, -693, 273, -693, -693, 504, -693, 227, -693, -693,
+ 227, 554, 550, -693, -693, 639, 258, 91, 542, 237,
+ 504, -693, 14, 450, 36, -693, -693, -693, 504, 605,
+ 430, 617, -693, 182, 664, -693, 527, -693, -693, 660,
+ -693, 182, -693, -693, -693, -693, -693, -693, -693, 545,
+ -693, -693, -693, -693, -693, -693, -693, -693, 504, 671,
+ -693, -693, -693, -693, -693, -693, 653, -693, 665, -693,
+ -693, -693, -693, 318, -693, -693, -693, -693, 643, 646,
+ 227, 314, 550, 252, 461, 314, -693, -693, -693, 645,
+ -693, 314, 521, -693, 449, -693, 182, -693, -693, 71,
+ 663, 674, -693, -693, 227, 314, 648, -693, -693, 227,
+ 314, -693, 654, -693, 683, 504, -693, -693, -693, -693,
+ -693, 138, -693, -693, 314, 655, -693, -693, -693, 382,
+ -693, 314, -693, -693
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const short yypgoto[] =
+{
+ -693, -693, 640, -693, -693, -53, 641, -693, -693, -693,
+ -693, -693, 16, -83, -3, -693, -693, -693, -693, -693,
+ -693, -693, -693, -693, 189, 186, -693, -98, -693, -693,
+ -693, -693, 184, 316, -693, -693, -55, -693, -693, 191,
+ -693, -693, 3, -693, -693, -693, -693, 305, -693, 187,
+ -693, 303, -693, -693, -693, -693, -693, 209, -693, -93,
+ 457, -693, -693, -693, -693, -693, -693, -693, -693, -693,
+ -693, 317, -693, -693, -693, -168, 159, 9, -298, -693,
+ -693, -693, -693, 4, -693, -693, -693, -693, 530, -693,
+ -693, -693, -64, -693, 399, -693, -693, 400, -693, -244,
+ 166, 283, -370, -693, -693, 288, -693, -693, 63, -693,
+ -693, -693, -693, -503, -180, -693, -48, -693, -693, -693,
+ -693, -57, -693, -659, -693, -153, -693, -693, -693, -587,
+ -693, 185, -693, 81, -693, -693, -693, -693, -15, -693,
+ 541, -95, -693, -693, -693, -693, 117, 18, -693, -693,
+ -693, 23, -693, 30, -591, -116, -69, -599, -243, -692,
+ -693, -693, -693, -693, -693, -693, -56, -693, -303, -693,
+ -693, -286, 192, -693, -127, -693, -693, -693, -13, -435,
+ 385, -693, -693, -693, -693, -693, 95, -693, -693, -693,
+ -693, 402, -304, -693, -693, -693, -693, 260, -693, -693,
+ -693, -693, -693, -111, -693, -693, -693, -693, -693, -693,
+ -693, -693, -77, -693, -693, -693, -693, -693, 178, -441,
+ 271, -693, -693, -693, -693, -693, -70, -91, -693, 380,
+ 188, -693, -693, -693, -693, -693, -693, -693, -693, -693,
+ -121, -535, -693, -693, -693, -693, -693, -693, -185, -693,
+ -540, -693, -61, -693, 420, -693, -693, -693, -693, -693,
+ -693, -693, -693, -693, -693, -693, -693, -693, -693, -693,
+ -693, -693, 667
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If zero, do what YYDEFACT says.
+ If YYTABLE_NINF, parse error. */
+#define YYTABLE_NINF -545
+static const short yytable[] =
+{
+ 97, 97, 396, 247, 73, 425, 222, 303, 218, 70,
+ 258, 334, 229, 206, 206, 210, 452, 232, 233, 96,
+ 98, 200, 626, 434, 633, 410, 560, 680, 558, 803,
+ 779, 121, 660, 347, 570, 564, -224, 347, 485, 614,
+ 788, 347, -460, 209, 347, -461, 176, 347, 489, 95,
+ 291, 273, 366, 244, 561, 585, 95, 862, 541, 95,
+ 92, 73, 271, 244, 99, 359, 70, 748, 749, 423,
+ 403, 244, 97, 866, 509, 204, 867, 177, 95, 305,
+ 248, 95, 97, 391, 392, 393, 394, 395, 176, -348,
+ 834, 798, 424, 95, 265, 211, 205, 266, 214, 835,
+ 696, 221, 609, 227, 244, 653, 859, 574, 95, 95,
+ 610, 95, 193, 240, 521, 242, 245, 251, 238, 786,
+ 312, 627, 97, 319, 836, 103, 194, 361, -348, 219,
+ 195, 230, 404, -348, -348, -348, 249, 250, 382, 697,
+ 54, 262, 434, 356, 698, 699, 700, 663, 434, 651,
+ 868, 283, 104, 274, 267, 789, 320, 346, 367, 760,
+ 357, 664, 665, 666, 667, 668, 427, 106, 886, 54,
+ 427, 54, 661, -460, 427, 226, -461, 541, 489, 405,
+ 320, 97, 289, 799, 211, 680, 669, 473, 851, 196,
+ 95, 852, 812, 54, 883, 837, 549, 905, -342, 340,
+ 861, -522, -348, -521, 174, 284, 95, 670, 107, 217,
+ 230, 344, 345, 701, 746, 95, 54, 730, 95, 321,
+ 322, -522, 285, -521, 108, 453, 369, 323, 324, 325,
+ 326, 221, 379, 221, 771, 95, 219, 220, 386, 219,
+ 220, 671, 672, 327, 579, 95, 748, 749, 673, 501,
+ 374, 483, 480, 95, 176, 460, 748, 749, 590, 211,
+ 95, 434, 259, 109, 890, 260, 211, 199, 413, 870,
+ 887, 748, 749, 414, 893, 674, 805, 806, 807, 856,
+ 860, 416, 504, 706, 675, 902, 95, 244, 422, 707,
+ 708, 709, 244, 110, 903, 889, 189, 587, 821, 906,
+ 213, 710, 18, 97, 531, 111, 176, 54, 471, 472,
+ 711, 97, 97, 910, 680, 524, 529, 95, 828, 582,
+ 913, 463, 426, 179, 112, 454, 712, 383, 176, 470,
+ 705, 713, 706, 384, 727, 684, 728, 896, 707, 708,
+ 709, 244, -137, -137, 823, 714, 221, 123, 124, 824,
+ 710, 440, 825, 491, 492, 486, 214, 441, 550, 711,
+ 761, 95, 551, 685, 686, 687, 315, 715, 435, 259,
+ 640, 548, 260, 436, 641, 712, 642, 537, 538, 539,
+ 713, 113, 565, 501, 688, 772, 515, 480, 170, 171,
+ 773, 175, 772, 784, 714, 178, 251, 912, 280, 281,
+ 251, 523, 716, 689, 97, 471, 472, 586, 506, 507,
+ 114, 595, 292, 347, 570, 533, 715, 767, 768, 115,
+ 532, 671, 672, 526, 690, 608, 534, 535, 116, 536,
+ 117, 118, 97, 119, 603, 120, 122, 211, 211, 724,
+ 126, 156, 157, 604, 158, 159, 483, 162, 163, 164,
+ 165, 716, 166, 553, 173, 555, 189, 202, 191, 54,
+ 214, 554, 237, 198, 552, 293, 212, 214, 217, 630,
+ 239, 272, 562, 276, 278, 637, 294, 287, 802, 625,
+ 304, 288, 575, 306, 295, 391, 392, 393, 394, 395,
+ 296, 486, 297, 864, 298, 244, 391, 392, 393, 394,
+ 395, 308, 221, 313, 179, 318, 221, 596, 331, 379,
+ 299, 386, 871, 341, 335, 359, 365, 251, 363, 370,
+ 373, 372, 95, 211, 176, 389, 605, 391, 392, 393,
+ 394, 395, 406, 471, 472, 402, 607, 407, 411, 419,
+ 735, 221, 230, 417, 443, 444, 445, 446, 447, 420,
+ 95, 448, 449, 456, 450, 858, 629, 810, 457, 451,
+ 458, 748, 749, 459, 204, 464, 467, 95, 644, 347,
+ 469, 490, 494, 495, 497, 764, 244, 391, 392, 393,
+ 394, 395, 787, 766, 244, 509, 510, 230, 790, 443,
+ 444, 445, 446, 447, 512, 780, 448, 449, 473, 450,
+ 514, 655, 516, 527, 451, 443, 444, 445, 446, 447,
+ 530, 542, 448, 449, 427, 450, 556, 559, 557, 566,
+ 451, 892, 569, 572, 731, 581, 597, 592, 602, 613,
+ 593, 606, 440, 631, 645, 648, 647, 656, 658, 657,
+ 651, 659, 743, 827, 722, 575, 214, 221, 662, 750,
+ 734, 744, 733, 725, 737, 757, 738, 758, 741, 740,
+ 755, 776, 781, 782, 846, 817, 794, 819, 830, 833,
+ 765, 831, 848, 763, 627, 872, 790, 874, 853, 844,
+ 876, 880, 857, 855, 879, 778, 882, 884, 901, 849,
+ 885, 900, 904, 908, 591, 594, 599, 168, 907, 911,
+ 832, 785, 513, 169, 519, 600, 522, 601, 588, 863,
+ 401, 624, 310, 438, 518, 439, 623, 547, 750, 546,
+ 804, 909, 873, 759, 845, 850, 899, 816, 808, 621,
+ 637, 747, 829, 328, 865, 702, 854, 797, 221, 622,
+ 795, 796, 894, 745, 493, 639, 888, 580, 891, 568,
+ 482, 878, 503, 897, 638, 875, 0, 466, 208, 655,
+ 0, 843, 0, 0, 0, 0, 838, 0, 0, 0,
+ 0, 0, 0, 0, 127, 0, 0, 0, 0, 0,
+ 0, 128, 0, 0, 750, 898, 0, 750, 0, 0,
+ 0, 0, 0, 0, 0, 750, 750, 129, 0, 0,
+ 0, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+ 139, 140, 141, 0, 0, 142, 143, 0, 0, 0,
+ 0, 144, 0, 0, 0, 0, 0, 0, 145, 0,
+ 0, 146, 0, 147, 0, 0, 0, 0, 0, 148,
+ 149, 0, 0, 0, 0, 0, 0, 167, 1, 150,
+ 2, 3, 4, 5, 6, -227, 0, 750, 7, 151,
+ 750, -227, 0, 152, 0, 0, 0, 0, 0, 0,
+ 0, 0, 153, 0, 0, 895, 0, 0, 0, 154,
+ 0, 750, 0, 838, 0, 0, 750, 0, 8, 9,
+ -544, 0, 0, 10, 11, 0, 12, 13, 14, -544,
+ 0, 0, 0, 15, -544, 0, 0, 0, -544, 0,
+ 16, 0, 17, 18, -192, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, -184, 0,
+ 32, 33, 0, 0, 0, 34, 35, 0, 0, 0,
+ 0, 36, 37, 38, 0, 39, 40, 0, 41, 0,
+ 0, 0, 0, 0, 42, 43, 0, 0, 0, 44,
+ 0, 0, 0, 0, 45, 0, 46, -544, 47, 48,
+ 0, 49, 0, 50, 51, 0, 0, 0, 52, 0,
+ 0, 0, 0, 0, 0, 0, 0, 53, 0, 0,
+ 0, 0, 54, 0, 55, 0, 0, 0, 1, 56,
+ 2, 3, 4, 5, 6, -227, 0, 0, 7, 0,
+ 0, -227, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 9,
+ -544, 0, 0, 10, 11, 0, 12, 13, 14, -544,
+ 0, 0, 0, 15, -544, 0, 0, 0, -544, 0,
+ 16, 0, 17, 18, -192, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, -184, 0,
+ 32, 33, 0, 0, 0, 34, 35, 0, 0, 0,
+ 0, 36, 37, 38, 0, 39, 40, 0, 41, 0,
+ 0, 0, 0, 0, 42, 43, 0, 0, 0, 44,
+ 0, 0, 0, 0, 45, 0, 46, -544, 47, 48,
+ 0, 49, 0, 50, 51, 0, 0, 0, 52, 0,
+ 0, 0, 0, 0, 0, 0, 0, 53, 0, 0,
+ 0, 0, 54, 0, 55, 0, 0, 0, 0, 56
+};
+
+static const short yycheck[] =
+{
+ 3, 4, 245, 119, 0, 303, 104, 175, 103, 0,
+ 121, 196, 107, 90, 91, 98, 319, 108, 109, 3,
+ 4, 85, 557, 309, 564, 269, 467, 614, 463, 721,
+ 689, 34, 10, 16, 17, 470, 11, 16, 14, 542,
+ 699, 16, 14, 96, 16, 14, 20, 16, 352, 8,
+ 166, 7, 37, 34, 59, 496, 8, 43, 428, 8,
+ 11, 57, 157, 34, 21, 13, 57, 19, 20, 13,
+ 20, 34, 75, 37, 13, 43, 40, 73, 8, 11,
+ 29, 8, 85, 35, 36, 37, 38, 39, 20, 9,
+ 19, 43, 36, 8, 37, 98, 64, 40, 101, 28,
+ 9, 104, 69, 106, 34, 44, 798, 34, 8, 8,
+ 77, 8, 43, 116, 29, 118, 119, 120, 114, 82,
+ 184, 69, 125, 9, 53, 9, 57, 218, 48, 29,
+ 61, 28, 82, 53, 54, 55, 85, 86, 236, 48,
+ 145, 125, 428, 19, 53, 54, 55, 9, 434, 135,
+ 114, 57, 9, 109, 97, 136, 42, 210, 143, 662,
+ 36, 23, 24, 25, 26, 27, 149, 9, 860, 145,
+ 149, 145, 150, 145, 149, 134, 145, 547, 482, 262,
+ 42, 184, 153, 135, 187, 772, 48, 84, 787, 120,
+ 8, 790, 727, 145, 853, 124, 440, 889, 8, 202,
+ 799, 8, 122, 8, 81, 111, 8, 69, 9, 19,
+ 28, 207, 208, 122, 649, 8, 145, 19, 8, 105,
+ 106, 28, 128, 28, 9, 320, 229, 113, 114, 115,
+ 116, 234, 235, 236, 675, 8, 29, 30, 241, 29,
+ 30, 103, 104, 129, 10, 8, 19, 20, 110, 365,
+ 43, 349, 343, 8, 20, 332, 19, 20, 501, 262,
+ 8, 547, 37, 9, 863, 40, 269, 22, 271, 809,
+ 861, 19, 20, 276, 865, 137, 114, 115, 116, 21,
+ 43, 277, 373, 25, 146, 884, 8, 34, 291, 31,
+ 32, 33, 34, 9, 885, 43, 10, 44, 739, 890,
+ 22, 43, 66, 306, 415, 9, 20, 145, 19, 20,
+ 52, 314, 315, 904, 901, 406, 411, 8, 10, 30,
+ 911, 334, 306, 14, 9, 321, 68, 34, 20, 342,
+ 23, 73, 25, 40, 58, 62, 60, 872, 31, 32,
+ 33, 34, 10, 11, 32, 87, 349, 103, 104, 37,
+ 43, 13, 40, 356, 357, 351, 359, 19, 441, 52,
+ 663, 8, 453, 90, 91, 92, 13, 109, 10, 37,
+ 34, 435, 40, 15, 38, 68, 40, 3, 4, 5,
+ 73, 9, 473, 499, 111, 10, 389, 478, 10, 11,
+ 15, 67, 10, 696, 87, 11, 399, 15, 103, 104,
+ 403, 404, 144, 130, 407, 19, 20, 498, 31, 32,
+ 9, 509, 41, 16, 17, 418, 109, 19, 20, 9,
+ 416, 103, 104, 407, 151, 536, 423, 424, 9, 425,
+ 9, 9, 435, 9, 525, 9, 9, 440, 441, 624,
+ 9, 9, 9, 526, 9, 9, 544, 9, 9, 9,
+ 9, 144, 9, 456, 9, 458, 10, 43, 11, 145,
+ 463, 457, 81, 12, 455, 94, 12, 470, 19, 560,
+ 87, 66, 468, 43, 81, 566, 105, 133, 721, 556,
+ 145, 148, 485, 19, 113, 35, 36, 37, 38, 39,
+ 119, 487, 121, 43, 123, 34, 35, 36, 37, 38,
+ 39, 12, 505, 36, 14, 11, 509, 510, 52, 512,
+ 139, 514, 810, 123, 52, 13, 43, 520, 70, 8,
+ 13, 28, 8, 526, 20, 13, 529, 35, 36, 37,
+ 38, 39, 12, 19, 20, 20, 532, 58, 13, 128,
+ 631, 544, 28, 118, 30, 31, 32, 33, 34, 154,
+ 8, 37, 38, 9, 40, 798, 559, 725, 9, 45,
+ 9, 19, 20, 44, 43, 43, 14, 8, 571, 16,
+ 44, 10, 10, 28, 9, 670, 34, 35, 36, 37,
+ 38, 39, 698, 674, 34, 13, 19, 28, 704, 30,
+ 31, 32, 33, 34, 13, 690, 37, 38, 84, 40,
+ 13, 597, 118, 100, 45, 30, 31, 32, 33, 34,
+ 44, 14, 37, 38, 149, 40, 58, 19, 58, 13,
+ 45, 864, 28, 32, 627, 21, 43, 32, 10, 19,
+ 31, 11, 13, 125, 19, 13, 15, 10, 9, 11,
+ 135, 9, 645, 741, 21, 648, 649, 650, 15, 652,
+ 15, 647, 44, 23, 10, 658, 44, 87, 13, 28,
+ 13, 23, 10, 13, 28, 138, 32, 30, 19, 44,
+ 673, 20, 4, 669, 69, 58, 792, 13, 124, 770,
+ 20, 28, 798, 44, 13, 688, 21, 44, 14, 780,
+ 44, 28, 44, 10, 505, 509, 512, 57, 44, 44,
+ 755, 697, 386, 62, 399, 514, 403, 520, 499, 802,
+ 253, 552, 182, 314, 397, 315, 550, 434, 721, 431,
+ 723, 901, 813, 660, 772, 782, 879, 730, 724, 544,
+ 821, 650, 747, 192, 803, 618, 792, 719, 741, 547,
+ 710, 718, 869, 648, 359, 567, 862, 487, 864, 478,
+ 348, 821, 372, 874, 566, 816, -1, 337, 91, 755,
+ -1, 764, -1, -1, -1, -1, 762, -1, -1, -1,
+ -1, -1, -1, -1, 42, -1, -1, -1, -1, -1,
+ -1, 49, -1, -1, 787, 876, -1, 790, -1, -1,
+ -1, -1, -1, -1, -1, 798, 799, 65, -1, -1,
+ -1, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 80, -1, -1, 83, 84, -1, -1, -1,
+ -1, 89, -1, -1, -1, -1, -1, -1, 96, -1,
+ -1, 99, -1, 101, -1, -1, -1, -1, -1, 107,
+ 108, -1, -1, -1, -1, -1, -1, 0, 1, 117,
+ 3, 4, 5, 6, 7, 8, -1, 860, 11, 127,
+ 863, 14, -1, 131, -1, -1, -1, -1, -1, -1,
+ -1, -1, 140, -1, -1, 871, -1, -1, -1, 147,
+ -1, 884, -1, 879, -1, -1, 889, -1, 41, 42,
+ 43, -1, -1, 46, 47, -1, 49, 50, 51, 52,
+ -1, -1, -1, 56, 57, -1, -1, -1, 61, -1,
+ 63, -1, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, -1,
+ 83, 84, -1, -1, -1, 88, 89, -1, -1, -1,
+ -1, 94, 95, 96, -1, 98, 99, -1, 101, -1,
+ -1, -1, -1, -1, 107, 108, -1, -1, -1, 112,
+ -1, -1, -1, -1, 117, -1, 119, 120, 121, 122,
+ -1, 124, -1, 126, 127, -1, -1, -1, 131, -1,
+ -1, -1, -1, -1, -1, -1, -1, 140, -1, -1,
+ -1, -1, 145, -1, 147, -1, -1, -1, 1, 152,
+ 3, 4, 5, 6, 7, 8, -1, -1, 11, -1,
+ -1, 14, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 41, 42,
+ 43, -1, -1, 46, 47, -1, 49, 50, 51, 52,
+ -1, -1, -1, 56, 57, -1, -1, -1, 61, -1,
+ 63, -1, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, -1,
+ 83, 84, -1, -1, -1, 88, 89, -1, -1, -1,
+ -1, 94, 95, 96, -1, 98, 99, -1, 101, -1,
+ -1, -1, -1, -1, 107, 108, -1, -1, -1, 112,
+ -1, -1, -1, -1, 117, -1, 119, 120, 121, 122,
+ -1, 124, -1, 126, 127, -1, -1, -1, 131, -1,
+ -1, -1, -1, -1, -1, -1, -1, 140, -1, -1,
+ -1, -1, 145, -1, 147, -1, -1, -1, -1, 152
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const unsigned short yystos[] =
+{
+ 0, 1, 3, 4, 5, 6, 7, 11, 41, 42,
+ 46, 47, 49, 50, 51, 56, 63, 65, 66, 68,
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 83, 84, 88, 89, 94, 95, 96, 98,
+ 99, 101, 107, 108, 112, 117, 119, 121, 122, 124,
+ 126, 127, 131, 140, 145, 147, 152, 156, 157, 158,
+ 159, 162, 163, 164, 165, 166, 170, 172, 195, 229,
+ 232, 235, 236, 238, 239, 240, 330, 353, 359, 360,
+ 386, 388, 390, 397, 398, 399, 401, 402, 418, 424,
+ 425, 426, 11, 160, 161, 8, 167, 169, 167, 21,
+ 331, 332, 333, 9, 9, 354, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 169, 9, 103, 104, 419, 9, 42, 49, 65,
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+ 79, 80, 83, 84, 89, 96, 99, 101, 107, 108,
+ 117, 127, 131, 140, 147, 237, 9, 9, 9, 9,
+ 230, 232, 9, 9, 9, 9, 9, 0, 157, 161,
+ 10, 11, 171, 9, 81, 67, 20, 238, 11, 14,
+ 167, 241, 242, 243, 244, 247, 249, 251, 252, 10,
+ 358, 11, 362, 43, 57, 61, 120, 361, 12, 22,
+ 247, 400, 43, 403, 43, 64, 367, 427, 427, 160,
+ 168, 169, 12, 22, 169, 334, 335, 19, 296, 29,
+ 30, 169, 182, 183, 288, 355, 134, 169, 210, 296,
+ 28, 169, 382, 382, 177, 185, 174, 81, 238, 87,
+ 169, 192, 169, 216, 34, 169, 209, 310, 29, 85,
+ 86, 169, 199, 200, 202, 204, 205, 206, 358, 37,
+ 40, 215, 167, 420, 421, 37, 40, 97, 175, 173,
+ 218, 296, 66, 7, 109, 224, 43, 233, 81, 231,
+ 103, 104, 225, 57, 111, 128, 227, 133, 148, 153,
+ 220, 310, 41, 94, 105, 113, 119, 121, 123, 139,
+ 196, 197, 198, 230, 145, 11, 19, 253, 12, 250,
+ 243, 246, 247, 36, 248, 13, 168, 254, 11, 9,
+ 42, 105, 106, 113, 114, 115, 116, 129, 295, 363,
+ 364, 52, 387, 391, 403, 52, 382, 408, 409, 410,
+ 169, 123, 404, 368, 238, 238, 160, 16, 326, 343,
+ 344, 345, 346, 347, 348, 349, 19, 36, 336, 13,
+ 337, 382, 293, 70, 356, 43, 37, 143, 208, 169,
+ 8, 384, 28, 13, 43, 178, 179, 180, 182, 169,
+ 186, 187, 182, 34, 40, 176, 169, 193, 194, 13,
+ 217, 35, 36, 37, 38, 39, 313, 311, 313, 201,
+ 207, 215, 20, 20, 82, 168, 12, 58, 422, 222,
+ 254, 13, 219, 169, 169, 234, 238, 118, 228, 128,
+ 154, 221, 169, 13, 36, 233, 167, 149, 256, 257,
+ 258, 259, 260, 324, 326, 10, 15, 245, 249, 252,
+ 13, 19, 255, 30, 31, 32, 33, 34, 37, 38,
+ 40, 45, 323, 296, 238, 365, 9, 9, 9, 44,
+ 367, 367, 396, 333, 43, 411, 409, 14, 412, 44,
+ 333, 19, 20, 84, 323, 369, 370, 373, 374, 375,
+ 382, 385, 346, 182, 286, 14, 238, 351, 352, 347,
+ 10, 169, 169, 335, 10, 28, 289, 9, 357, 211,
+ 212, 310, 383, 384, 382, 181, 31, 32, 184, 13,
+ 19, 188, 13, 188, 13, 169, 118, 226, 226, 202,
+ 203, 29, 206, 169, 382, 423, 167, 100, 223, 296,
+ 44, 358, 238, 169, 197, 197, 238, 3, 4, 5,
+ 261, 257, 14, 264, 265, 268, 260, 256, 247, 254,
+ 168, 382, 232, 169, 238, 169, 58, 58, 334, 19,
+ 374, 59, 238, 413, 334, 382, 13, 372, 375, 28,
+ 17, 327, 32, 350, 34, 169, 339, 340, 341, 10,
+ 352, 21, 30, 290, 292, 374, 382, 44, 212, 213,
+ 313, 179, 32, 31, 180, 182, 169, 43, 189, 187,
+ 194, 204, 10, 382, 168, 169, 11, 238, 358, 69,
+ 77, 262, 263, 19, 268, 297, 298, 299, 300, 303,
+ 306, 286, 327, 255, 231, 367, 396, 69, 405, 169,
+ 382, 125, 414, 405, 376, 377, 381, 382, 385, 373,
+ 34, 38, 40, 371, 169, 19, 342, 15, 13, 338,
+ 291, 135, 214, 44, 191, 238, 10, 11, 9, 9,
+ 10, 150, 15, 9, 23, 24, 25, 26, 27, 48,
+ 69, 103, 104, 110, 137, 146, 269, 270, 271, 283,
+ 284, 294, 295, 322, 62, 90, 91, 92, 111, 130,
+ 151, 274, 275, 276, 285, 302, 9, 48, 53, 54,
+ 55, 122, 301, 317, 318, 23, 25, 31, 32, 33,
+ 43, 52, 68, 73, 87, 109, 144, 304, 305, 307,
+ 308, 310, 21, 328, 403, 23, 389, 58, 60, 392,
+ 19, 169, 406, 44, 15, 382, 415, 10, 44, 379,
+ 28, 13, 329, 169, 238, 341, 334, 288, 19, 20,
+ 169, 312, 314, 315, 316, 13, 190, 169, 87, 263,
+ 268, 323, 277, 238, 296, 169, 382, 19, 20, 272,
+ 273, 374, 10, 15, 278, 284, 23, 287, 169, 278,
+ 296, 10, 13, 301, 323, 238, 82, 310, 278, 136,
+ 310, 319, 320, 321, 32, 308, 306, 302, 43, 135,
+ 238, 309, 313, 314, 169, 114, 115, 116, 238, 366,
+ 230, 393, 396, 296, 394, 395, 169, 138, 407, 30,
+ 416, 374, 380, 32, 37, 40, 378, 182, 10, 293,
+ 19, 20, 191, 44, 19, 28, 53, 124, 238, 279,
+ 280, 281, 282, 169, 382, 271, 28, 266, 4, 382,
+ 276, 312, 312, 124, 321, 44, 21, 310, 313, 314,
+ 43, 312, 43, 214, 43, 311, 37, 40, 114, 325,
+ 405, 233, 58, 382, 13, 407, 20, 417, 381, 13,
+ 28, 267, 21, 278, 44, 44, 314, 309, 310, 43,
+ 312, 310, 313, 309, 329, 238, 396, 395, 382, 280,
+ 28, 14, 312, 309, 44, 314, 309, 44, 10, 269,
+ 309, 44, 15, 309
+};
+
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# endif
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY -2
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrlab1
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. */
+
+#define YYFAIL goto yyerrlab
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ yychar1 = YYTRANSLATE (yychar); \
+ YYPOPSTACK; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror ("syntax error: cannot back up"); \
+ YYERROR; \
+ } \
+while (0)
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+ are run). */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ Current.first_line = Rhs[1].first_line; \
+ Current.first_column = Rhs[1].first_column; \
+ Current.last_line = Rhs[N].last_line; \
+ Current.last_column = Rhs[N].last_column;
+#endif
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#define YYLEX yylex ()
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (0)
+# define YYDSYMPRINT(Args) \
+do { \
+ if (yydebug) \
+ yysymprint Args; \
+} while (0)
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YYDSYMPRINT(Args)
+#endif /* !YYDEBUG */
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#if YYMAXDEPTH == 0
+# undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+\f
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined (__GLIBC__) && defined (_STRING_H)
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+static YYSIZE_T
+# if defined (__STDC__) || defined (__cplusplus)
+yystrlen (const char *yystr)
+# else
+yystrlen (yystr)
+ const char *yystr;
+# endif
+{
+ register const char *yys = yystr;
+
+ while (*yys++ != '\0')
+ continue;
+
+ return yys - yystr - 1;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+static char *
+# if defined (__STDC__) || defined (__cplusplus)
+yystpcpy (char *yydest, const char *yysrc)
+# else
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+# endif
+{
+ register char *yyd = yydest;
+ register const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+#endif /* !YYERROR_VERBOSE */
+
+\f
+
+#if YYDEBUG
+/*-----------------------------.
+| Print this symbol on YYOUT. |
+`-----------------------------*/
+
+static void
+#if defined (__STDC__) || defined (__cplusplus)
+yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
+#else
+yysymprint (yyout, yytype, yyvalue)
+ FILE* yyout;
+ int yytype;
+ YYSTYPE yyvalue;
+#endif
+{
+ /* Pacify ``unused variable'' warnings. */
+ (void) yyvalue;
+
+ if (yytype < YYNTOKENS)
+ {
+ YYFPRINTF (yyout, "token %s (", yytname[yytype]);
+# ifdef YYPRINT
+ YYPRINT (yyout, yytoknum[yytype], yyvalue);
+# endif
+ }
+ else
+ YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
+
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+ YYFPRINTF (yyout, ")");
+}
+#endif /* YYDEBUG. */
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+static void
+#if defined (__STDC__) || defined (__cplusplus)
+yydestruct (int yytype, YYSTYPE yyvalue)
+#else
+yydestruct (yytype, yyvalue)
+ int yytype;
+ YYSTYPE yyvalue;
+#endif
+{
+ /* Pacify ``unused variable'' warnings. */
+ (void) yyvalue;
+
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+\f
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+ into yyparse. The argument should have type void *.
+ It should actually point to an object.
+ Grammar actions can access the variable by casting it
+ to the proper pointer type. */
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+# define YYPARSE_PARAM_DECL
+# else
+# define YYPARSE_PARAM_ARG YYPARSE_PARAM
+# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+# endif
+#else /* !YYPARSE_PARAM */
+# define YYPARSE_PARAM_ARG
+# define YYPARSE_PARAM_DECL
+#endif /* !YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes. */
+#ifdef __GNUC__
+# ifdef YYPARSE_PARAM
+int yyparse (void *);
+# else
+int yyparse (void);
+# endif
+#endif
+
+
+/* The lookahead symbol. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+
+/* Number of parse errors so far. */
+int yynerrs;
+
+
+int
+yyparse (YYPARSE_PARAM_ARG)
+ YYPARSE_PARAM_DECL
+{
+
+ register int yystate;
+ register int yyn;
+ int yyresult;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+ /* Lookahead token as an internal (translated) token number. */
+ int yychar1 = 0;
+
+ /* Three stacks and their tools:
+ `yyss': related to states,
+ `yyvs': related to semantic values,
+ `yyls': related to locations.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ short yyssa[YYINITDEPTH];
+ short *yyss = yyssa;
+ register short *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ register YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK (yyvsp--, yyssp--)
+
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+
+ /* When reducing, the number of symbols on the RHS of the reduced
+ rule. */
+ int yylen;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. so pushing a state here evens the stacks.
+ */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyssp >= yyss + yystacksize - 1)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ short *yyss1 = yyss;
+
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow ("parser stack overflow",
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyoverflowlab;
+# else
+ /* Extend the stack our own way. */
+ if (yystacksize >= YYMAXDEPTH)
+ goto yyoverflowlab;
+ yystacksize *= 2;
+ if (yystacksize > YYMAXDEPTH)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ short *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyoverflowlab;
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyssp >= yyss + yystacksize - 1)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+/* Do appropriate processing given the current state. */
+/* Read a lookahead token if we need one and don't already have one. */
+/* yyresume: */
+
+ /* First try to decide what to do without reference to lookahead token. */
+
+ yyn = yypact[yystate];
+ if (yyn == YYPACT_NINF)
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* yychar is either YYEMPTY or YYEOF
+ or a valid token in external form. */
+
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ /* Convert token to internal form (in yychar1) for indexing tables with. */
+
+ if (yychar <= 0) /* This means end of input. */
+ {
+ yychar1 = 0;
+ yychar = YYEOF; /* Don't call YYLEX any more. */
+
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yychar1 = YYTRANSLATE (yychar);
+
+ /* We have to keep this `#if YYDEBUG', since we use variables
+ which are defined only if `YYDEBUG' is set. */
+ YYDPRINTF ((stderr, "Next token is "));
+ YYDSYMPRINT ((stderr, yychar1, yylval));
+ YYDPRINTF ((stderr, "\n"));
+ }
+
+ /* If the proper action on seeing token YYCHAR1 is to reduce or to
+ detect an error, take that action. */
+ yyn += yychar1;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yyn == 0 || yyn == YYTABLE_NINF)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ /* Shift the lookahead token. */
+ YYDPRINTF ((stderr, "Shifting token %d (%s), ",
+ yychar, yytname[yychar1]));
+
+ /* Discard the token being shifted unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
+
+ *++yyvsp = yylval;
+
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+
+#if YYDEBUG
+ /* We have to keep this `#if YYDEBUG', since we use variables which
+ are defined only if `YYDEBUG' is set. */
+ if (yydebug)
+ {
+ int yyi;
+
+ YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
+ yyn - 1, yyrline[yyn]);
+
+ /* Print the symbols being reduced, and their result. */
+ for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
+ YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+ YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+ }
+#endif
+ switch (yyn)
+ {
+ case 8:
+#line 264 "gram.y"
+ {
+ (void) contextcheck(C_MUSIC, "music information");
+ tssv_line();
+ /* reset flags for next voice */
+ Defining_multiple = NO;
+ Curr_grpsyl_p = (struct GRPSYL *) 0;
+ Good_till_canceled = NO;
+ free_extra_time();
+ Prev_grpsyl_p = 0;
+ }
+ break;
+
+ case 12:
+#line 286 "gram.y"
+ {
+ /* for blank lines -- nothing to do */
+ }
+ break;
+
+ case 13:
+#line 292 "gram.y"
+ {
+ /* to keep going after stumbling on an input error */
+ Getting_tup_dur = NO;
+ Good_till_canceled = NO;
+ Defining_multiple = NO;
+ Curr_grpsyl_p = (struct GRPSYL *) 0;
+ Last_grpsyl_p = (struct GRPSYL *) 0;
+ Prev_grpsyl_p = (struct GRPSYL *) 0;
+ }
+ break;
+
+ case 14:
+#line 303 "gram.y"
+ {
+ /* fill in context field of the SSV struct */
+ Currstruct_p->u.ssv_p->context = (short) Context;
+ }
+ break;
+
+ case 15:
+#line 310 "gram.y"
+ {
+ Curr_family = Score.fontfamily;
+ }
+ break;
+
+ case 16:
+#line 316 "gram.y"
+ {}
+ break;
+
+ case 17:
+#line 320 "gram.y"
+ {}
+ break;
+
+ case 18:
+#line 324 "gram.y"
+ {
+ /* have lots of separate structs in music context, so
+ * mark that we have no current struct */
+ Currstruct_p = (struct MAINLL *) 0;
+
+ /* make sure at least 1 staff is visible. Not good to
+ * check when user sets visible, because it would be
+ * nice to first set everything invisible and later
+ * turn one on. So if we wait till now to check,
+ * user doesn't have to switch back and forth from
+ * score to staff to get 1 voice visible. */
+ check_at_least1visible();
+ }
+ break;
+
+ case 19:
+#line 339 "gram.y"
+ {
+ Context = C_SCORE;
+ }
+ break;
+
+ case 20:
+#line 345 "gram.y"
+ {
+ (void) rangecheck(yyvsp[-1].intval, MINSTAFFS, Score.staffs, "staff number");
+ Context = C_STAFF;
+ Currstruct_p->u.ssv_p->staffno = yyvsp[-1].intval;
+ }
+ break;
+
+ case 21:
+#line 353 "gram.y"
+ {
+ (void) rangecheck(yyvsp[-2].intval, MINSTAFFS, Score.staffs, "staff number");
+ (void) rangecheck(yyvsp[-1].intval, MINVOICES, MAXVOICES, "voice number");
+ Context = C_VOICE;
+ Currstruct_p->u.ssv_p->staffno = yyvsp[-2].intval;
+ Currstruct_p->u.ssv_p->voiceno = yyvsp[-1].intval;
+ }
+ break;
+
+ case 22:
+#line 362 "gram.y"
+ {
+ /* allocate an SSV struct */
+ Currstruct_p = newMAINLLstruct(S_SSV, yylineno);
+ }
+ break;
+
+ case 23:
+#line 368 "gram.y"
+ {
+ /* entering new context, if we have a current struct,
+ * we were in a different context, so add its info to the list */
+ end_prev_context();
+ }
+ break;
+
+ case 24:
+#line 375 "gram.y"
+ {
+ struct FEED *feed_p; /* where to attach blocks */
+ int calloced; /* YES if dynamically alloced */
+
+ end_prev_context();
+ Currstruct_p = (struct MAINLL *) 0;
+ Context = yyvsp[0].intval;
+ calloced = NO;
+
+ switch (yyvsp[0].intval) {
+ case C_HEADER:
+ /* We only allow one of these */
+ chkdup_headfoot(Gotheader++, "header");
+ Currblock_p = &Header;
+ break;
+ case C_HEAD2:
+ chkdup_headfoot(Gothead2++, "header2");
+ Currblock_p = &Header2;
+ break;
+ case C_FOOTER:
+ chkdup_headfoot(Gotfooter++, "footer");
+ Currblock_p = &Footer;
+ break;
+ case C_FOOT2:
+ chkdup_headfoot(Gotfoot2++, "foot2");
+ Currblock_p = &Footer2;
+ break;
+ break;
+ case C_TOP:
+ case C_TOP2:
+ case C_BOT:
+ case C_BOT2:
+ case C_BLOCK:
+ CALLOC(BLOCKHEAD, Currblock_p, 1);
+ calloced = YES;
+ break;
+ default:
+ pfatal("Unknown block-type context");
+ /*NOTREACHED*/
+ break;
+ }
+ set_win_coord(Currblock_p->c);
+ /* Remember where to start attaching "print" commands */
+ Next_print_link_p_p = &(Currblock_p->printdata_p);
+
+ /* The dynamically allocated blocks
+ * (not the static head/foot blocks)
+ * need extra processing to populate
+ * the main list properly with FEEDs.
+ */
+ if (calloced == YES) {
+ if (Mainlltc_p == 0 || Mainlltc_p->str != S_FEED) {
+ /* User had not specified a feed
+ * right before this block, so we need
+ * to add one for them implicitly.
+ * Create a new FEED and add it
+ * to the end of the main list.
+ */
+ insertMAINLL(newMAINLLstruct(S_FEED, yylineno),
+ Mainlltc_p);
+ }
+ feed_p = Mainlltc_p->u.feed_p;
+
+ /* Normally, top/top2/bot/bot2 result in a pagefeed.
+ * But we have a special case for backward
+ * compatiblity and for flexibility.
+ * User can get a separate
+ * "title" page if they really want to,
+ * by using an explicit newpage at the beginning.
+ * But in the normal case, they'd want to declare
+ * top/bot that will go on the first page without
+ * that causing a newpage. So if there hasn't been
+ * any music or block yet, we won't set newpage=YES
+ * for top/top2/bot/bot2, but otherwise we will.
+ */
+ if (Context & (C_TOP|C_TOP2|C_BOT|C_BOT2)) {
+ struct MAINLL *m_p;
+ for (m_p = Mainlltc_p->prev; m_p != 0;
+ m_p = m_p->prev) {
+ if (m_p->str == S_BAR ||
+ m_p->str == S_BLOCKHEAD) {
+ /* There was music or block,
+ * so this is not
+ * at very beginning,
+ * so no special case:
+ * there will be new page.
+ */
+ feed_p->pagefeed = YES;
+ break;
+ }
+ }
+ }
+
+ /* Now check for redefined blocks and
+ * attach the BLOCKHEAD onto the FEED or the
+ * main list, as appropriate.
+ */
+ switch (Context) {
+ case C_TOP:
+ if (feed_p->top_p != 0) {
+ warning("top redefined before being used");
+ }
+ feed_p->top_p = Currblock_p;
+ break;
+ case C_TOP2:
+ if (feed_p->top2_p != 0) {
+ warning("top2 redefined before being used");
+ }
+ feed_p->top2_p = Currblock_p;
+ break;
+ case C_BOT:
+ if (feed_p->bot_p != 0) {
+ warning("bot redefined before being used");
+ }
+ feed_p->bot_p = Currblock_p;
+ break;
+ case C_BOT2:
+ if (feed_p->bot2_p != 0) {
+ warning("bot2 redefined before being used");
+ }
+ feed_p->bot2_p = Currblock_p;
+ break;
+ case C_BLOCK:
+ insertMAINLL(newMAINLLstruct(S_BLOCKHEAD, yylineno),
+ Mainlltc_p);
+ Mainlltc_p->u.blockhead_p = Currblock_p;
+ /* These blocks count like "music" for purposes
+ * of things that can only be set
+ * before any "music"
+ */
+ Got_some_data = YES;
+ break;
+ case C_HEADER:
+ case C_HEAD2:
+ case C_FOOTER:
+ case C_FOOT2:
+ /* These are static, not in main list,
+ * so nothing needs to be done with them.
+ */
+ break;
+ default:
+ pfatal("unexpected context (0x%x) for block", Context);
+ /*NOTREACHED*/
+ break;
+ }
+
+ /* We need a feed after a block.
+ * Use -1 as lineno to mark it as internally generated.
+ * That way if user puts their own explicit feed
+ * next in the input, we can know we can
+ * discard this internally generated one.
+ */
+ if (Context & C_BLOCK) {
+ insertMAINLL(newMAINLLstruct(S_FEED, -1), Mainlltc_p);
+ }
+ }
+ }
+ break;
+
+ case 25:
+#line 534 "gram.y"
+ {
+ Context = C_MUSIC;
+ }
+ break;
+
+ case 26:
+#line 539 "gram.y"
+ {
+ end_prev_context();
+ Currstruct_p = (struct MAINLL *) 0;
+ Context = C_GRIDS;
+ }
+ break;
+
+ case 27:
+#line 547 "gram.y"
+ {
+ if (Context == C_GRIDS) {
+ add_grid(yyvsp[-2].stringval, yyvsp[-1].stringval);
+ }
+ else if (Context == C_HEADSHAPES) {
+ /* skip past the font/size bytes */
+ add_shape(yyvsp[-2].stringval + 2, yyvsp[-1].stringval + 2);
+ }
+ else {
+ yyerror("unexpected strings");
+ }
+ }
+ break;
+
+ case 28:
+#line 562 "gram.y"
+ {
+ end_prev_context();
+ Currstruct_p = (struct MAINLL *) 0;
+ Context = C_HEADSHAPES;
+ }
+ break;
+
+ case 30:
+#line 573 "gram.y"
+ {
+ yyval.intval = yyvsp[0].intval;
+ /* later on we check for being within current range */
+ }
+ break;
+
+ case 31:
+#line 579 "gram.y"
+ {
+ yyval.intval = atoi(yytext);
+ }
+ break;
+
+ case 35:
+#line 593 "gram.y"
+ {
+ /* Only a few things are allowed to have a negative number.
+ * Other code assumes that that restriction is enforced here,
+ * so we only honor the minus if it is legal. */
+ if (yyvsp[-1].intval == -1) {
+ if (yyvsp[-3].intval != STAFFPAD && yyvsp[-3].intval != SYLPOSITION) {
+ yyerror("negative value not allowed");
+ }
+ else {
+ assign_int(yyvsp[-3].intval, -(yyvsp[0].intval), Currstruct_p);
+ }
+ }
+ else {
+ assign_int(yyvsp[-3].intval, yyvsp[0].intval, Currstruct_p);
+ }
+ }
+ break;
+
+ case 36:
+#line 612 "gram.y"
+ {
+ /* only restcombine and gridfret can be set to empty */
+ if (yyvsp[-1].intval == RESTCOMBINE) {
+ assign_int(yyvsp[-1].intval, NORESTCOMBINE, Currstruct_p);
+ }
+ else if (yyvsp[-1].intval == GRIDFRET) {
+ assign_int(yyvsp[-1].intval, NOGRIDFRET, Currstruct_p);
+ }
+ else {
+ yyerror("parameter value required");
+ }
+ }
+ break;
+
+ case 37:
+#line 627 "gram.y"
+ {
+ assign_float(yyvsp[-2].intval, yyvsp[0].floatval, Currstruct_p);
+ }
+ break;
+
+ case 38:
+#line 633 "gram.y"
+ {
+ assign_2floats(yyvsp[-4].intval, yyvsp[-2].floatval, yyvsp[0].floatval, Currstruct_p);
+ }
+ break;
+
+ case 39:
+#line 639 "gram.y"
+ {
+ double multiplier;
+ multiplier = (Score.units == INCHES ? 1.0 : CMPERINCH);
+ assign_float(PAGEWIDTH, pagesztbl[yyvsp[-1].intval][yyvsp[0].intval] * multiplier, Currstruct_p);
+ assign_float(PAGEHEIGHT, pagesztbl[yyvsp[-1].intval][yyvsp[0].intval ^ 1] * multiplier, Currstruct_p);
+ }
+ break;
+
+ case 40:
+#line 647 "gram.y"
+ { begin_range(PL_UNKNOWN); }
+ break;
+
+ case 41:
+#line 648 "gram.y"
+ { }
+ break;
+
+ case 42:
+#line 652 "gram.y"
+ {
+ /* specified in stepsizes, stored in inches */
+ assign_float(PAD, yyvsp[-1].intval * yyvsp[0].floatval * STEPSIZE, Currstruct_p);
+ }
+ break;
+
+ case 43:
+#line 659 "gram.y"
+ {
+ assign_vscheme (yyvsp[-1].intval, yyvsp[0].intval, Currstruct_p);
+ }
+ break;
+
+ case 44:
+#line 665 "gram.y"
+ {
+ set_beamlist(Currstruct_p);
+ if (Currstruct_p != 0 && Currstruct_p->u.ssv_p != 0) {
+ Currstruct_p->u.ssv_p->beamrests = (yyvsp[0].intval & 0x1);
+ Currstruct_p->u.ssv_p->beamspaces = ((yyvsp[0].intval >> 1) & 0x1);
+ }
+ }
+ break;
+
+ case 45:
+#line 675 "gram.y"
+ {
+ set_staffset(yyvsp[-3].intval, Currstruct_p);
+ }
+ break;
+
+ case 46:
+#line 681 "gram.y"
+ {
+ set_barstlist(Currstruct_p);
+ }
+ break;
+
+ case 47:
+#line 687 "gram.y"
+ {
+ if (Currstruct_p != 0) {
+ chk_order(Currstruct_p->u.ssv_p, Order_place);
+ }
+ }
+ break;
+
+ case 49:
+#line 698 "gram.y"
+ {
+ /* all the work for this is done in timesig */
+ }
+ break;
+
+ case 50:
+#line 704 "gram.y"
+ {
+ }
+ break;
+
+ case 51:
+#line 709 "gram.y"
+ {
+ set_font(yyvsp[-2].intval, yyvsp[0].intval, Currstruct_p);
+ }
+ break;
+
+ case 52:
+#line 715 "gram.y"
+ {
+ set_font(yyvsp[-2].intval, yyvsp[0].intval, Currstruct_p);
+ }
+ break;
+
+ case 53:
+#line 721 "gram.y"
+ {
+ if (contextcheck(C_SCORE|C_STAFF,"clef parameter") == YES) {
+ used_check(Currstruct_p, CLEF, "clef");
+ if (Context == C_STAFF &&
+ is_tab_staff(Currstruct_p->u.ssv_p->staffno)) {
+ yyerror("can't set clef on tab staff");
+ }
+ Currstruct_p->u.ssv_p->clef = yyvsp[0].intval;
+ Currstruct_p->u.ssv_p->used[CLEF] = YES;
+ asgnssv(Currstruct_p->u.ssv_p);
+ }
+ }
+ break;
+
+ case 54:
+#line 736 "gram.y"
+ {
+ assign_int(yyvsp[-2].intval, yyvsp[0].intval, Currstruct_p);
+ }
+ break;
+
+ case 56:
+#line 745 "gram.y"
+ {
+ if (contextcheck(C_STAFF|C_VOICE, "unset") == YES) {
+ if (yyvsp[0].intval < 0 || yyvsp[0].intval >= NUMFLDS) {
+ pfatal("invalid parameter index %d", yyvsp[0].intval);
+ }
+ if (Currstruct_p->u.ssv_p->used[yyvsp[0].intval] == YES) {
+ warning("unsetting parameter overrides previous setting");
+ }
+ /* Note that if user tries to unset something that
+ * can't be set in the current context, we silently
+ * ignore that. We figure that since it's already unset,
+ * it doesn't hurt anything to unset it again,
+ * and it's easier to not bother to check.
+ */
+
+ Currstruct_p->u.ssv_p->used[yyvsp[0].intval] = UNSET;
+
+ /* special case: scoresep controls two fields */
+ if (yyvsp[0].intval == MINSCSEP) {
+ Currstruct_p->u.ssv_p->used[MAXSCSEP] = UNSET;
+ }
+
+ /* Assign, just in case there are new interactions */
+ asgnssv(Currstruct_p->u.ssv_p);
+ }
+ }
+ break;
+
+ case 57:
+#line 773 "gram.y"
+ { Doing_timeunit = YES; }
+ break;
+
+ case 58:
+#line 774 "gram.y"
+ {
+ if ( contextcheck(C_SSV, "timeunit parameter") == YES ) {
+ used_check(Currstruct_p, TIMEUNIT, "timeunit");
+ Currstruct_p->u.ssv_p->timeunit = yyvsp[0].ratval;
+ Currstruct_p->u.ssv_p->timelist_p = Extra_time_p;
+ Extra_time_p = 0;
+ Doing_timeunit = NO;
+ Currstruct_p->u.ssv_p->used[TIMEUNIT] = YES;
+ }
+ }
+ break;
+
+ case 59:
+#line 787 "gram.y"
+ {
+ if ( contextcheck(C_SSV, "swingunit parameter") == YES ) {
+ used_check(Currstruct_p, SWINGUNIT, "swingunit");
+ Currstruct_p->u.ssv_p->swingunit = yyvsp[0].ratval;
+ Currstruct_p->u.ssv_p->used[SWINGUNIT] = YES;
+ }
+ }
+ break;
+
+ case 60:
+#line 797 "gram.y"
+ {
+ }
+ break;
+
+ case 61:
+#line 802 "gram.y"
+ {
+ }
+ break;
+
+ case 62:
+#line 807 "gram.y"
+ {
+ if ( contextcheck(C_SCORE, "endingstyle parameter") == YES ) {
+ used_check(Currstruct_p, ENDINGSTYLE, "endingstyle");
+ Currstruct_p->u.ssv_p->endingstyle = yyvsp[0].intval;
+ Currstruct_p->u.ssv_p->used[ENDINGSTYLE] = YES;
+ }
+ }
+ break;
+
+ case 63:
+#line 817 "gram.y"
+ {
+ if (contextcheck(C_SCORE | C_STAFF, "rehstyle parameter") == YES ) {
+ used_check(Currstruct_p, REHSTYLE, "rehstyle");
+ Currstruct_p->u.ssv_p->rehstyle = yyvsp[0].intval;
+ Currstruct_p->u.ssv_p->used[REHSTYLE] = YES;
+ }
+
+ }
+ break;
+
+ case 64:
+#line 828 "gram.y"
+ {
+ if ( contextcheck(C_SCORE | C_STAFF, "pedstyle parameter") == YES ) {
+ used_check(Currstruct_p, PEDSTYLE, "pedstyle");
+ Currstruct_p->u.ssv_p->pedstyle = yyvsp[0].intval;
+ Currstruct_p->u.ssv_p->used[PEDSTYLE] = YES;
+ }
+ }
+ break;
+
+ case 65:
+#line 838 "gram.y"
+ {
+ char *trans_name;
+ trans_name = (yyvsp[-4].intval == TRANSPOSITION ?
+ "transpose" : "addtranspose");
+ if (contextcheck(C_SCORE|C_STAFF, trans_name) == YES) {
+ used_check(Currstruct_p, yyvsp[-4].intval, trans_name);
+ chk_interval(yyvsp[-1].intval, yyvsp[0].intval);
+ if (yyvsp[-4].intval == TRANSPOSITION) {
+ Currstruct_p->u.ssv_p->inttype = yyvsp[-1].intval;
+ Currstruct_p->u.ssv_p->intnum = yyvsp[-2].intval * yyvsp[0].intval;
+ }
+ else {
+ Currstruct_p->u.ssv_p->addinttype = yyvsp[-1].intval;
+ Currstruct_p->u.ssv_p->addintnum = yyvsp[-2].intval * yyvsp[0].intval;
+ }
+ Currstruct_p->u.ssv_p->used[yyvsp[-4].intval] = YES;
+ if (Context == C_STAFF &&
+ is_tab_staff(Currstruct_p->u.ssv_p->staffno)
+ == YES) {
+ l_yyerror(Curr_filename, yylineno,
+ "%s not allowed on tablature staff",
+ trans_name);
+ }
+ else {
+ asgnssv(Currstruct_p->u.ssv_p);
+ }
+ }
+ }
+ break;
+
+ case 66:
+#line 869 "gram.y"
+ {
+ assign_unit(yyvsp[0].intval, Currstruct_p);
+ }
+ break;
+
+ case 67:
+#line 875 "gram.y"
+ {
+ assign_string(yyvsp[-2].intval, yyvsp[0].stringval, Currstruct_p);
+ }
+ break;
+
+ case 68:
+#line 881 "gram.y"
+ {
+ /* whereused is not allowed on voice, just score and staff */
+ if (contextcheck(C_SCORE|C_STAFF, "visible=whereused") == YES) {
+ assign_int(VISIBLE, YES, Currstruct_p);
+ Currstruct_p->u.ssv_p->hidesilent = YES;
+ }
+ }
+ break;
+
+ case 69:
+#line 891 "gram.y"
+ {
+ /* only valid letter is y */
+ if (*yytext != 'y') {
+ yyerror("visible value must be y, n, or whereused");
+ }
+ else if (contextcheck(C_SSV, "visible parameter")
+ == YES) {
+ assign_int(VISIBLE, YES, Currstruct_p);
+ Currstruct_p->u.ssv_p->hidesilent = NO;
+ }
+ }
+ break;
+
+ case 70:
+#line 905 "gram.y"
+ {
+ if (contextcheck(C_SSV, "visible parameter") == YES) {
+ assign_int(VISIBLE, NO, Currstruct_p);
+ Currstruct_p->u.ssv_p->hidesilent = NO;
+ }
+ }
+ break;
+
+ case 71:
+#line 913 "gram.y"
+ {
+ /* none specified */
+ yyval.intval = V_1;
+ }
+ break;
+
+ case 72:
+#line 920 "gram.y"
+ {
+ /* only valid value here is 'f' */
+ if (*yytext == 'f') {
+ yyval.intval = V_2FREESTEM;
+ }
+ else {
+ yyerror("invalid voice qualifier: must be f or o");
+ yyval.intval = V_1;
+ }
+ }
+ break;
+
+ case 73:
+#line 933 "gram.y"
+ {
+ /* only valid value here is 'o' */
+ if (*yytext == 'o') {
+ yyval.intval = V_2OPSTEM;
+ }
+ else {
+ yyerror("invalid voice qualifier: must be f or o");
+ yyval.intval = (int) V_1;
+ }
+ }
+ break;
+
+ case 74:
+#line 945 "gram.y"
+ {
+ /* NULL token for allocating a new beamlist */
+ new_beamlist();
+ }
+ break;
+
+ case 77:
+#line 959 "gram.y"
+ {
+ add_beamlist(yyvsp[0].ratval);
+ }
+ break;
+
+ case 79:
+#line 968 "gram.y"
+ {
+ add_beamlist(yyvsp[0].ratval);
+ }
+ break;
+
+ case 81:
+#line 977 "gram.y"
+ { begin_subbeam(); }
+ break;
+
+ case 82:
+#line 978 "gram.y"
+ {
+ end_subbeam();
+ }
+ break;
+
+ case 83:
+#line 983 "gram.y"
+ {
+ yyval.ratval = calcfulltime(yyvsp[-3].ratval, yyvsp[-2].intval);
+
+ /* if filling in a GRPSYL struct, need to fill in dots.
+ * Could also be here due to beamstyle
+ * or timeunit or location time offset,
+ * in which case the Curr_grpsyl_p will be NULL,
+ * or while getting tuplet duration. */
+ if (Curr_grpsyl_p != (struct GRPSYL *) 0
+ && Getting_tup_dur == NO) {
+ Curr_grpsyl_p->dots = yyvsp[-2].intval;
+ }
+ else {
+ struct TIMELIST *timelist_p; /* walk thru list */
+ struct TIMELIST *next_p;/* save next to delete curr */
+ RATIONAL totaltime; /* sum of extra times */
+
+ /* Start with first time value (which was calculated
+ * above and is now in $$), then add on the added
+ * times, if any. */
+ totaltime = yyval.ratval;
+ for (timelist_p = Extra_time_p; timelist_p != 0;
+ timelist_p = next_p) {
+ next_p = timelist_p->next;
+ totaltime = radd(totaltime, timelist_p->fulltime);
+ if (Doing_timeunit == NO) {
+ /* For things like swingunit
+ * or tuplet time, we just need the
+ * resulting time, not the individual
+ * time units and arithmetic. */
+ FREE(timelist_p);
+ }
+ }
+ if (Extra_time_p != 0 && LE(totaltime, Zero)) {
+ yyerror("Time values must add up to more than zero");
+ }
+ /* Current timelist is finished; can't append any
+ * more items to it. */
+ Curr_timelist_p = 0;
+ if (Doing_timeunit == YES) {
+ /* For timeunit, we return the initial
+ * timeunit, but also preserve
+ * Extra_time_p for putting in SSV.
+ */
+ yyval.ratval = calcfulltime(yyvsp[-3].ratval, yyvsp[-2].intval);
+ }
+ else {
+ /* the list has been freed above */
+ Extra_time_p = 0;
+ yyval.ratval = totaltime;
+ }
+ }
+ }
+ break;
+
+ case 84:
+#line 1039 "gram.y"
+ {
+ yyval.ratval.n = (svpath(1, TIME))->time.n;
+ yyval.ratval.d = (svpath(1, TIME))->time.d;
+ if (Curr_grpsyl_p != (struct GRPSYL *) 0
+ && Getting_tup_dur == NO) {
+ /* use whole note symbol as default */
+ Curr_grpsyl_p->basictime = 1;
+ Curr_grpsyl_p->is_meas = YES;
+ User_meas_time = NO;
+ }
+ else {
+ yyerror("'m' is not valid here");
+ }
+ }
+ break;
+
+ case 85:
+#line 1056 "gram.y"
+ {
+ yyval.ratval = Zero;
+ }
+ break;
+
+ case 87:
+#line 1066 "gram.y"
+ {
+ yyval.intval = NO;
+ }
+ break;
+
+ case 88:
+#line 1072 "gram.y"
+ {
+ yyval.intval = (YES | (YES << 1));
+ }
+ break;
+
+ case 89:
+#line 1078 "gram.y"
+ {
+ yyval.intval = ((YES << 1) | YES);
+ }
+ break;
+
+ case 90:
+#line 1084 "gram.y"
+ {
+ yyval.intval = (YES << 1);
+ }
+ break;
+
+ case 91:
+#line 1090 "gram.y"
+ {
+ yyval.intval = YES;
+ }
+ break;
+
+ case 92:
+#line 1095 "gram.y"
+ {
+ /* null token for the purpose of allocating a new rangelist
+ * to be filled in with user data */
+ new_staffset();
+ }
+ break;
+
+ case 96:
+#line 1112 "gram.y"
+ {
+ /* save information about this range in the list */
+ /* if only a single number, not a range, rangetail will be
+ * 0, so use num as both beginning and end of range */
+ add_staffset( yyvsp[-2].intval, (yyvsp[-1].intval > 0 ? yyvsp[-1].intval : yyvsp[-2].intval), String1, String2);
+ }
+ break;
+
+ case 97:
+#line 1120 "gram.y"
+ {
+ /* no end of range, so return 0 as flag that there was only 1 number */
+ yyval.intval = 0;
+ }
+ break;
+
+ case 98:
+#line 1127 "gram.y"
+ {
+ /* make sure isn't 0, because that it illegal and would be used
+ * later as though there were no range. Other error checking
+ * on this number will be done later. */
+ if (yyvsp[0].intval == 0) {
+ yyerror("second number of range may not be zero");
+ }
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 99:
+#line 1138 "gram.y"
+ {
+ /* no labels */
+ String1 = String2 = (char *) 0;
+ }
+ break;
+
+ case 100:
+#line 1145 "gram.y"
+ {
+ /* save label */
+ String1 = yyvsp[-2].stringval;
+ }
+ break;
+
+ case 101:
+#line 1151 "gram.y"
+ {
+ /* no second label */
+ String2 = (char *) 0;
+ }
+ break;
+
+ case 102:
+#line 1158 "gram.y"
+ {
+ /* save label2 for later use */
+ String2 = yyvsp[0].stringval;
+ }
+ break;
+
+ case 104:
+#line 1167 "gram.y"
+ {
+ /* NULL token for allocating space for a bar style list */
+ new_barstlist();
+ }
+ break;
+
+ case 108:
+#line 1184 "gram.y"
+ {
+ /* if only 1 number, not range, rangetail will be 0, so use
+ * same number for beginning and end */
+ add_barst(yyvsp[-1].intval, (yyvsp[0].intval == 0 ? yyvsp[-1].intval : yyvsp[0].intval) );
+ }
+ break;
+
+ case 109:
+#line 1191 "gram.y"
+ {
+ Order_place = yyvsp[0].intval;
+ Order_prio = 1;
+ if (Currstruct_p != 0) {
+ switch (yyvsp[0].intval) {
+ case PL_ABOVE:
+ Currstruct_p->u.ssv_p->used[ABOVEORDER] = YES;
+ break;
+ case PL_BELOW:
+ Currstruct_p->u.ssv_p->used[BELOWORDER] = YES;
+ break;
+ case PL_BETWEEN:
+ Currstruct_p->u.ssv_p->used[BETWEENORDER] = YES;
+ break;
+ }
+ }
+ }
+ break;
+
+ case 110:
+#line 1211 "gram.y"
+ {
+ if (Currstruct_p != 0) {
+ Currstruct_p->u.ssv_p->markorder[Order_place][yyvsp[0].intval] = Order_prio;
+ }
+ }
+ break;
+
+ case 111:
+#line 1219 "gram.y"
+ {
+ if (Currstruct_p != 0) {
+ Currstruct_p->u.ssv_p->markorder[Order_place][yyvsp[0].intval] = ++Order_prio;
+ }
+ }
+ break;
+
+ case 112:
+#line 1227 "gram.y"
+ {
+ if (Currstruct_p != 0) {
+ Currstruct_p->u.ssv_p->markorder[Order_place][yyvsp[0].intval] = Order_prio;
+ }
+ }
+ break;
+
+ case 113:
+#line 1234 "gram.y"
+ {
+ if (Currstruct_p != 0) {
+ if (Currstruct_p->u.ssv_p->markorder[Order_place][yyvsp[0].intval] != 0) {
+ l_yyerror(Curr_filename, yylineno,
+ "order item %s specified more than once", yyvsp[0].intval);
+ }
+ }
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 114:
+#line 1246 "gram.y"
+ {
+ yyval.intval = MK_MUSSYM;
+ }
+ break;
+
+ case 115:
+#line 1252 "gram.y"
+ {
+ yyval.intval = MK_OCTAVE;
+ }
+ break;
+
+ case 116:
+#line 1258 "gram.y"
+ {
+ yyval.intval = MK_OTHERTEXT;
+ }
+ break;
+
+ case 117:
+#line 1264 "gram.y"
+ {
+ switch (yyvsp[0].intval) {
+ case TM_CHORD:
+ yyval.intval = MK_CHORD;
+ break;
+ case TM_DYN:
+ yyval.intval = MK_DYN;
+ break;
+ default:
+ yyerror("invalid text modifier in order list");
+ /* set to something valid, since $$ will be used
+ * as an array subscript. */
+ yyval.intval = MK_CHORD;
+ break;
+ }
+ }
+ break;
+
+ case 118:
+#line 1283 "gram.y"
+ {
+ yyval.intval = MK_LYRICS;
+ }
+ break;
+
+ case 119:
+#line 1289 "gram.y"
+ {
+ yyval.intval = MK_ENDING;
+ }
+ break;
+
+ case 120:
+#line 1295 "gram.y"
+ {
+ yyval.intval = MK_REHEARSAL;
+ }
+ break;
+
+ case 121:
+#line 1301 "gram.y"
+ {
+ yyval.intval = MK_PEDAL;
+ }
+ break;
+
+ case 122:
+#line 1307 "gram.y"
+ {
+ tsig_item(TSR_END);
+ if (Currstruct_p != 0 && Currstruct_p->u.ssv_p != 0) {
+ MALLOCA(char, Currstruct_p->u.ssv_p->timerep, Tsig_offset);
+ strcpy(Currstruct_p->u.ssv_p->timerep, Timerep);
+ assign_timesig(Currstruct_p, yyvsp[0].intval, &Next_alt_timesig);
+ Tsig_visibility = yyvsp[0].intval;
+ /* If there are alternating time signatures,
+ * need to save pointer to this list */
+ if (Next_alt_timesig != 0) {
+ Alt_timesig_list = Timerep;
+ }
+ else {
+ Alt_timesig_list = 0;
+ }
+ }
+ /* Reset for next time signature usage, if any */
+ Tsig_offset = 0;
+ }
+ break;
+
+ case 124:
+#line 1331 "gram.y"
+ { tsig_item(TSR_ALTERNATING); }
+ break;
+
+ case 125:
+#line 1332 "gram.y"
+ {
+ /* this is for alternating time signature */
+ }
+ break;
+
+ case 126:
+#line 1338 "gram.y"
+ {
+ }
+ break;
+
+ case 127:
+#line 1342 "gram.y"
+ { tsig_item(TSR_ADD); }
+ break;
+
+ case 128:
+#line 1343 "gram.y"
+ {
+ /* This would be for things like 2/4 + 3/8 */
+ }
+ break;
+
+ case 129:
+#line 1349 "gram.y"
+ {
+ tsig_item(TSR_CUT);
+ }
+ break;
+
+ case 130:
+#line 1355 "gram.y"
+ {
+ tsig_item(TSR_COMMON);
+ }
+ break;
+
+ case 131:
+#line 1361 "gram.y"
+ {
+ tsig_item(TSR_SLASH);
+ if (yyvsp[0].intval < MINDENOMINATOR) {
+ l_yyerror(Curr_filename, yylineno,
+ "time signature denominator cannot be less than %d",
+ MINDENOMINATOR);
+ yyvsp[0].intval = MINDENOMINATOR;
+ }
+ else if (yyvsp[0].intval > MAXDENOMINATOR) {
+ l_yyerror(Curr_filename, yylineno,
+ "time signature denominator cannot be greater than %d",
+ MAXDENOMINATOR);
+ yyvsp[0].intval = MAXDENOMINATOR;
+ }
+ else if (power_of2check(yyvsp[0].intval, "time signature denominator") == NO) {
+ yyvsp[0].intval = 1 << drmo(yyvsp[0].intval);
+ }
+
+ tsig_item(yyvsp[0].intval);
+ }
+ break;
+
+ case 132:
+#line 1384 "gram.y"
+ {
+ /* this is something like 3+1/4 where the 1/4 get interpreted
+ * by lexer as quadwhole, but it's really 1 for numerator
+ * and 4 for denominator.
+ */
+ tsig_item(1);
+ tsig_item(TSR_SLASH);
+ tsig_item(yyvsp[0].intval);
+ }
+ break;
+
+ case 133:
+#line 1396 "gram.y"
+ {
+ tsig_item(1);
+ tsig_item(TSR_SLASH);
+ tsig_item(yyvsp[0].intval);
+ }
+ break;
+
+ case 136:
+#line 1410 "gram.y"
+ {
+ if (yyvsp[0].intval < MINNUMERATOR) {
+ l_yyerror(Curr_filename, yylineno,
+ "time signature numerator cannot be less than %d",
+ MINNUMERATOR);
+ yyvsp[0].intval = MINNUMERATOR;
+ }
+ else if (yyvsp[0].intval > MAXNUMERATOR) {
+ l_yyerror(Curr_filename, yylineno,
+ "time signature numerator cannot be greater than %d",
+ MAXNUMERATOR);
+ yyvsp[0].intval = MAXNUMERATOR;
+ }
+ tsig_item(yyvsp[0].intval);
+ }
+ break;
+
+ case 137:
+#line 1428 "gram.y"
+ {
+ yyval.intval = PTS_ONCE;
+ }
+ break;
+
+ case 138:
+#line 1434 "gram.y"
+ {
+ yyval.intval = (yyvsp[0].intval == YES ? PTS_ALWAYS : PTS_NEVER);
+ }
+ break;
+
+ case 139:
+#line 1439 "gram.y"
+ {
+ yyval.intval = NO;
+ }
+ break;
+
+ case 140:
+#line 1445 "gram.y"
+ {
+ /* 'n' is used in various places to mean do NOT
+ * print something that would normally be printed,
+ * so YES means we do want to inhibit the normal printing. */
+ yyval.intval = YES;
+ }
+ break;
+
+ case 141:
+#line 1453 "gram.y"
+ {
+ if ( (yyvsp[-1].intval != '#') && (yyvsp[-1].intval != '&') ) {
+ yyerror("key signature must include # or &");
+ }
+ else {
+ assign_key(yyvsp[-2].intval, yyvsp[-1].intval, yyvsp[0].intval, Currstruct_p);
+ }
+ }
+ break;
+
+ case 142:
+#line 1464 "gram.y"
+ {
+ int sharps;
+
+ /* Get number of sharps for the pitch letter */
+ sharps = strchr(Circle, yyvsp[-2].intval) - Circle - 1;
+
+ /* adjust for sharp/flat */
+ if (yyvsp[-1].intval == '#') {
+ sharps += 7;
+ }
+ else if (yyvsp[-1].intval == '&') {
+ sharps -= 7;
+ }
+ else if (yyvsp[-1].intval != 0) {
+ yyerror("key letter can only be followed by # or &");
+ /* set to some ridiculous value, so will fail below */
+ sharps = 999;
+ }
+
+ /* Adjust if needed for minor */
+ if (yyvsp[0].intval == YES) {
+ sharps -= 3;
+ }
+
+ /* disallow illegal keys, like f& */
+ if (abs(sharps) > 7) {
+ /* print error unless already printed one above */
+ if (sharps < 100) {
+ yyerror("invalid key--too many sharps or flats");
+ }
+ }
+ else {
+ assign_key(abs(sharps), (sharps >= 0 ? '#' : '&'),
+ yyvsp[0].intval, Currstruct_p);
+ }
+ }
+ break;
+
+ case 143:
+#line 1503 "gram.y"
+ {
+ asgn_stafflines(yyvsp[-1].intval, yyvsp[0].intval == YES ? SS_NOTHING : SS_NORMAL, Currstruct_p);
+ }
+ break;
+
+ case 144:
+#line 1509 "gram.y"
+ {
+ asgn_stafflines(yyvsp[-1].intval, SS_DRUM, Currstruct_p);
+ }
+ break;
+
+ case 145:
+#line 1515 "gram.y"
+ {
+ /* use default tablature */
+ if (Currstruct_p != 0) {
+ Currstruct_p->u.ssv_p->strinfo = Guitar;
+ asgn_stafflines(DEFTABLINES, NO, Currstruct_p);
+ }
+ }
+ break;
+
+ case 146:
+#line 1525 "gram.y"
+ {
+ /* user-specified tablature */
+ asgn_stafflines(yyvsp[-1].intval, NO, Currstruct_p);
+ }
+ break;
+
+ case 147:
+#line 1532 "gram.y"
+ {
+ yyval.intval = 1;
+ }
+ break;
+
+ case 148:
+#line 1538 "gram.y"
+ {
+ /* count up the number of strings */
+ yyval.intval = yyvsp[-1].intval + 1;
+ }
+ break;
+
+ case 149:
+#line 1544 "gram.y"
+ {
+ /* save info about this tablature string */
+ if (Currstruct_p != 0) {
+ add_tab_string_info(yyvsp[-3].intval, yyvsp[-2].intval, yyvsp[-1].intval, yyvsp[0].intval, Currstruct_p->u.ssv_p);
+ }
+ }
+ break;
+
+ case 150:
+#line 1552 "gram.y"
+ {
+ yyval.intval = 0;
+ }
+ break;
+
+ case 151:
+#line 1558 "gram.y"
+ {
+ if (yyvsp[0].intval != '&' && yyvsp[0].intval != '#') {
+ yyerror("accidental on string can only be & or #");
+ }
+ }
+ break;
+
+ case 152:
+#line 1565 "gram.y"
+ {
+ /* no ticks */
+ yyval.intval = 0;
+ }
+ break;
+
+ case 153:
+#line 1572 "gram.y"
+ {
+ /* limit number of ticks. Has to match the number of bits
+ * used by TMP_NTICKS in grpsyl.c */
+ if (yyvsp[0].intval > MAXTICKS) {
+ l_yyerror(Curr_filename, yylineno,
+ "too many ' marks (%d max)", MAXTICKS);
+ yyvsp[0].intval = MAXTICKS;
+ }
+ }
+ break;
+
+ case 154:
+#line 1583 "gram.y"
+ {
+ /* only valid letter is y */
+ if (*yytext != 'y') {
+ yyerror("flag value must be y or n");
+ }
+ yyval.intval = YES;
+ }
+ break;
+
+ case 155:
+#line 1593 "gram.y"
+ {
+ yyval.intval = NO;
+ }
+ break;
+
+ case 156:
+#line 1598 "gram.y"
+ {
+ if (Currstruct_p == 0) {
+ yyerror("wrong context for setting scoresep");
+ }
+ else {
+ /* Assign the value of minimum vertical space
+ * between scores. */
+ assign_int(MINSCSEP, yyvsp[0].intval, Currstruct_p);
+ }
+ }
+ break;
+
+ case 157:
+#line 1610 "gram.y"
+ {
+ if (Currstruct_p != 0) {
+ /* if user set minimum greater than default maximum,
+ * adjust maximum to equal the minimum
+ * they specified. */
+ if (Currstruct_p->u.ssv_p->minscsep
+ > Currstruct_p->u.ssv_p->maxscsep) {
+ Currstruct_p->u.ssv_p->maxscsep
+ = Currstruct_p->u.ssv_p->minscsep;
+ }
+ else {
+ /* fill in default */
+ assign_int(MAXSCSEP, DEFMAXSCSEP, Currstruct_p);
+ }
+ }
+ }
+ break;
+
+ case 158:
+#line 1629 "gram.y"
+ {
+ if (Currstruct_p != 0) {
+ if (Currstruct_p->u.ssv_p->minscsep > yyvsp[0].intval) {
+ yyerror("scoresep maximum smaller than minimum");
+ }
+ assign_int(MAXSCSEP, yyvsp[0].intval, Currstruct_p);
+ }
+ }
+ break;
+
+ case 159:
+#line 1639 "gram.y"
+ {
+ if (Currstruct_p == 0) {
+ yyerror("wrong context for setting scorepad");
+ }
+ else {
+ /* Assign the value of minimum vertical space
+ * between scores. */
+ assign_int(MINSCPAD, yyvsp[-1].intval * yyvsp[0].intval, Currstruct_p);
+ }
+ }
+ break;
+
+ case 160:
+#line 1652 "gram.y"
+ {
+ if (Currstruct_p != 0) {
+ /* If user set minimum greater than default maximum,
+ * adjust maximum to equal the minimum
+ * they specified. */
+ if (Currstruct_p->u.ssv_p->minscpad
+ > Currstruct_p->u.ssv_p->maxscpad) {
+ Currstruct_p->u.ssv_p->maxscpad
+ = Currstruct_p->u.ssv_p->minscpad;
+ }
+ else {
+ /* fill in default */
+ assign_int(MAXSCPAD, DEFMAXSCPAD, Currstruct_p);
+ }
+ }
+ }
+ break;
+
+ case 161:
+#line 1671 "gram.y"
+ {
+ if (Currstruct_p != 0) {
+ if (Currstruct_p->u.ssv_p->minscpad > yyvsp[-1].intval * yyvsp[0].intval) {
+ yyerror("scorepad maximum smaller than minimum");
+ }
+ assign_int(MAXSCPAD, yyvsp[-1].intval * yyvsp[0].intval, Currstruct_p);
+ }
+ }
+ break;
+
+ case 163:
+#line 1686 "gram.y"
+ {
+ if (yyvsp[-1].intval == (int) 'a' && yyvsp[0].intval >= 4 && yyvsp[0].intval <= 6) {
+ switch (yyvsp[0].intval) {
+ case 4:
+ yyval.intval = PS_A4;
+ break;
+ case 5:
+ yyval.intval = PS_A5;
+ break;
+ case 6:
+ yyval.intval = PS_A6;
+ break;
+ default:
+ pfatal("impossible pagesize");
+ break;
+ }
+ }
+ else {
+ yyerror("unsupported pagesize");
+ }
+ }
+ break;
+
+ case 164:
+#line 1711 "gram.y"
+ {
+ yyval.intval = 0;
+ }
+ break;
+
+ case 165:
+#line 1717 "gram.y"
+ {
+ yyval.intval = (yyvsp[0].intval == O_PORTRAIT ? 0 : 1);
+ }
+ break;
+
+ case 166:
+#line 1724 "gram.y"
+ {
+ assign_vcombine(VC_NOOVERLAP, Currstruct_p);
+ }
+ break;
+
+ case 167:
+#line 1730 "gram.y"
+ {
+ assign_vcombine(yyvsp[0].intval, Currstruct_p);
+ Defining_multiple = NO;
+ }
+ break;
+
+ case 168:
+#line 1738 "gram.y"
+ {
+ yyval.intval = VC_NOOVERLAP;
+ }
+ break;
+
+ case 169:
+#line 1744 "gram.y"
+ {
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 170:
+#line 1751 "gram.y"
+ {
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 171:
+#line 1757 "gram.y"
+ {
+ if (yyvsp[0].intval != C_TOP) {
+ l_yyerror(Curr_filename, yylineno,
+ "%s not valid here", yytext);
+ }
+ yyval.intval = ENDING_TOP;
+ }
+ break;
+
+ case 172:
+#line 1766 "gram.y"
+ {
+ yyval.intval = 1;
+ }
+ break;
+
+ case 173:
+#line 1772 "gram.y"
+ {
+ yyval.intval = -1;
+ }
+ break;
+
+ case 174:
+#line 1777 "gram.y"
+ {
+ yyval.intval = NO;
+ }
+ break;
+
+ case 175:
+#line 1783 "gram.y"
+ {
+ switch (yyvsp[0].intval) {
+ case MINOR:
+ yyval.intval = YES;
+ break;
+ case MAJOR:
+ yyval.intval = NO;
+ break;
+ default:
+ yyval.intval = NO;
+ yyerror("must be major or minor");
+ break;
+ }
+ }
+ break;
+
+ case 176:
+#line 1799 "gram.y"
+ {
+ yyval.intval = P_LINE;
+ }
+ break;
+
+ case 177:
+#line 1805 "gram.y"
+ {
+ yyval.intval = P_ALTPEDSTAR;
+ }
+ break;
+
+ case 178:
+#line 1811 "gram.y"
+ {
+ yyval.intval = P_PEDSTAR;
+ }
+ break;
+
+ case 180:
+#line 1819 "gram.y"
+ {
+ }
+ break;
+
+ case 181:
+#line 1823 "gram.y"
+ {
+ if (yyvsp[0].intval == FONT_UNKNOWN) {
+ yyvsp[0].intval = Curr_font;
+ }
+ if (yyvsp[-1].intval == FAMILY_DFLT) {
+ /* user didn't specify a family. Use the current
+ * family, unless we don't have one yet, in which
+ * case look it up */
+ if (Curr_family == FAMILY_DFLT) {
+ Curr_family = Score.fontfamily;
+ }
+ Titlefont = Curr_family + yyvsp[0].intval;
+ }
+ else {
+ Titlefont = yyvsp[-1].intval + yyvsp[0].intval;
+ }
+ }
+ break;
+
+ case 182:
+#line 1842 "gram.y"
+ {
+ yyval.intval = FONT_UNKNOWN;
+ }
+ break;
+
+ case 183:
+#line 1848 "gram.y"
+ {
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 184:
+#line 1853 "gram.y"
+ {
+ yyval.intval = FAMILY_DFLT;
+ }
+ break;
+
+ case 185:
+#line 1858 "gram.y"
+ {
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 186:
+#line 1863 "gram.y"
+ {
+ Titlesize = Curr_size;
+ }
+ break;
+
+ case 187:
+#line 1869 "gram.y"
+ {
+ Titlesize = yyvsp[-1].intval;
+ }
+ break;
+
+ case 188:
+#line 1875 "gram.y"
+ {
+ Extra = extra_needed(Titlefont, Titlesize, yyvsp[0].stringval);
+ proc_printcmd(J_CENTER, (struct INPCOORD *) 0, yyvsp[0].stringval,
+ Titlefont, Titlesize, YES, NO, Extra);
+ }
+ break;
+
+ case 189:
+#line 1883 "gram.y"
+ {
+ double tmp_extra;
+
+ /* if one is taller than the default for the font/size,
+ * figure out how much more to add on */
+ /* can't use MAX passing extra_needed() as arguments because
+ * it would get executed multiple times, which is a problem */
+ Extra = extra_needed(Titlefont, Titlesize, yyvsp[-1].stringval);
+ tmp_extra = extra_needed(Titlefont, Titlesize, yyvsp[0].stringval);
+ Extra = MAX(Extra, tmp_extra);
+
+
+ proc_printcmd(J_LEFT, (struct INPCOORD *) 0, yyvsp[-1].stringval,
+ Titlefont, Titlesize, YES, NO, Extra);
+ proc_printcmd(J_RIGHT, (struct INPCOORD *) 0, yyvsp[0].stringval,
+ Titlefont, Titlesize, NO, NO, (double) 0.0);
+ }
+ break;
+
+ case 190:
+#line 1903 "gram.y"
+ {
+ double tmp_extra;
+
+ Extra = extra_needed(Titlefont, Titlesize, yyvsp[-2].stringval);
+ tmp_extra = extra_needed(Titlefont, Titlesize, yyvsp[-1].stringval);
+ Extra = MAX(Extra, tmp_extra);
+ tmp_extra = extra_needed(Titlefont, Titlesize, yyvsp[0].stringval);
+ Extra = MAX(Extra, tmp_extra);
+
+ proc_printcmd(J_LEFT, (struct INPCOORD *) 0, yyvsp[-2].stringval,
+ Titlefont, Titlesize, YES, NO, Extra);
+ proc_printcmd(J_CENTER, (struct INPCOORD *) 0, yyvsp[-1].stringval,
+ Titlefont, Titlesize, NO, NO, (double) 0.0);
+ proc_printcmd(J_RIGHT, (struct INPCOORD *) 0, yyvsp[0].stringval,
+ Titlefont, Titlesize, NO, NO, (double) 0.0);
+ }
+ break;
+
+ case 191:
+#line 1921 "gram.y"
+ {
+ char *p; /* pointer through the string */
+ int backslash_count; /* how many backslashes in a row */
+ int font, size; /* at end of \n-delimited segment */
+ char *string_start; /* where current segment begins */
+
+ /* Convert unescaped input newlines to spaces.
+ * The +2 in the 'for' initialization is to skip font/size.
+ */
+ backslash_count = 0;
+ string_start = yyvsp[-2].stringval;
+ /* If we are running on a file using \r or \r\n for
+ * line separator, normalize to \n instead */
+ for (p = string_start + 2; *p != 0; p++) {
+ if (*p == '\r') {
+ if ( *(p+1) != '\n') {
+ /* \r by itself. Use \n instead */
+ *p = '\n';
+ }
+ else {
+ /* delete the \r */
+ char *src, *dest;
+ for (src = p + 1, dest = p; ; src++, dest++) {
+ *dest = *src;
+ if (*src == '\0') {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ font = Titlefont;
+ size = Titlesize;
+ for (p = string_start + 2; *p != 0; p++) {
+ /* Real newlines not preceeded by an odd number
+ * of backslashes are converted to spaces. */
+ if (*p == '\n' && (backslash_count & 0x1) == 0) {
+ *p = ' ';
+ }
+
+ /* Count up number of consecutive backslashes.
+ * Also, if user explicitly uses \n, split into
+ * a new paragraph
+ */
+ if (*p == '\\') {
+ backslash_count++;
+ if (((backslash_count & 0x1) == 1)
+ && ( *(p+1) == 'n') ) {
+ /* Need to split.
+ * Terminate the current string
+ * where we are in it, and process it,
+ * then arrange to continue processing
+ * on the rest of the string.
+ */
+ *p = '\0';
+ (void) fix_string(string_start,
+ font, size,
+ Curr_filename, yylineno);
+ proc_printcmd(yyvsp[-6].intval, (struct INPCOORD*) 0,
+ string_start, font, size,
+ YES, NO, 0.0);
+
+ /* The user could change font/size
+ * in mid-string with \f() and/or \s().
+ * so we have to determine what they
+ * are at the end of the current segment
+ * and use that for making the copy
+ * of the remainder of the string.
+ * The original copy of the remainder
+ * of the string gets "memory leaked,"
+ * but this is a rare case, so not
+ * worth worrying about.
+ */
+ end_fontsize(string_start, &font, &size);
+ string_start = copy_string(p+2, font, size);
+ p = string_start + 2;
+ }
+ }
+ else {
+ backslash_count = 0;
+ }
+ }
+ (void) fix_string(string_start, font, size,
+ Curr_filename, yylineno);
+ proc_printcmd(yyvsp[-6].intval, (struct INPCOORD*) 0, string_start,
+ font, size, YES, NO, 0.0);
+ }
+ break;
+
+ case 192:
+#line 2012 "gram.y"
+ {
+ /* Use same paragraph time as last time (or default if
+ * this is the first paragraph ever in this song.) */
+ yyval.intval = Curr_paratype;
+ }
+ break;
+
+ case 193:
+#line 2020 "gram.y"
+ {
+ Curr_paratype = yyvsp[0].intval;
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 222:
+#line 2111 "gram.y"
+ {
+ /* strip the quotes from the string and make a copy for later use */
+ if (Curr_family == FAMILY_DFLT) {
+ Curr_family = Score.fontfamily;
+ }
+ yyval.stringval = copy_string(stripquotes(yytext), Curr_family + Curr_font,
+ Curr_size);
+ }
+ break;
+
+ case 223:
+#line 2122 "gram.y"
+ {
+ char *old_string;
+
+ /* append new string part to existing part */
+ old_string = yyvsp[-2].stringval;
+ /* new string part has quotes, so subtract 2 from needed length,
+ * but need space for null, so overall need 1 less. */
+ MALLOCA(char, yyval.stringval, strlen(old_string) + strlen(yytext) - 1);
+ sprintf(yyval.stringval, "%s%s", old_string, stripquotes(yytext));
+ FREE(old_string);
+ }
+ break;
+
+ case 224:
+#line 2135 "gram.y"
+ {
+ /* Here's the deal: the staff/voice specification
+ * could be lists of staff ranges and/or voices.
+ * We need a separate copy of the groupinfo
+ * for each staff/voice. So as we parse the sv_spec,
+ * we remember which staffs and voices are specified,
+ * and keep a pointer to the first STAFF in the measure.
+ * Then after collecting the groupinfo,
+ * we make copies of the group info for each staff/voice given.
+ * It has to be copies rather than just a pointer to the
+ * same stuff, because the coordinates will be different
+ * for each staff/voice. */
+
+ /* attach the groupinfo to each of the STAFF structs */
+ link_groups();
+ }
+ break;
+
+ case 225:
+#line 2154 "gram.y"
+ {
+ add_multirest(yyvsp[-1].intval);
+ /* If there are alternating time signatures, figure out
+ * which one should be in effect at the end of the multirest */
+ if (Alt_timesig_list != 0) {
+ int m;
+
+ /* The Next_alt_timesig is already pointing to
+ * the value for after the first measure in the
+ * multirest, so have to subtract 1 here */
+ for (m = 0; m < yyvsp[-1].intval - 1; m++) {
+ if (Next_alt_timesig == 0) {
+ /* Shouldn't really ever get here,
+ * since other code should do the
+ * wrap-around, but just in case... */
+ Next_alt_timesig = Alt_timesig_list;
+ continue;
+ }
+ do {
+ Next_alt_timesig++;
+ if (*Next_alt_timesig == TSR_END) {
+ Next_alt_timesig = Alt_timesig_list;
+ break;
+ }
+ } while (*Next_alt_timesig != TSR_ALTERNATING);
+ }
+ if (*Next_alt_timesig == TSR_ALTERNATING) {
+ Next_alt_timesig++;
+ }
+ }
+ Currstruct_p = (struct MAINLL *) 0;
+ }
+ break;
+
+ case 226:
+#line 2189 "gram.y"
+ {
+ free_staffrange();
+ }
+ break;
+
+ case 227:
+#line 2194 "gram.y"
+ {
+ begin_range(PL_UNKNOWN);
+ }
+ break;
+
+ case 228:
+#line 2199 "gram.y"
+ {
+ Chord_at_a_time = NO;
+ }
+ break;
+
+ case 229:
+#line 2205 "gram.y"
+ {
+ Chord_at_a_time = YES;
+ }
+ break;
+
+ case 233:
+#line 2220 "gram.y"
+ {
+ begin_map();
+ }
+ break;
+
+ case 234:
+#line 2225 "gram.y"
+ {
+ end_map();
+ }
+ break;
+
+ case 235:
+#line 2230 "gram.y"
+ {
+ map_item();
+ }
+ break;
+
+ case 236:
+#line 2236 "gram.y"
+ {
+ map_item();
+ Defining_multiple = YES;
+ }
+ break;
+
+ case 237:
+#line 2242 "gram.y"
+ {
+ /* initialize grpsyl info */
+ Curr_grpsyl_p = Last_grpsyl_p = (struct GRPSYL *) 0;
+ }
+ break;
+
+ case 239:
+#line 2252 "gram.y"
+ {
+ /* prepare for a new set of ranges */
+ begin_range(Place);
+ Defining_multiple = YES;
+ }
+ break;
+
+ case 240:
+#line 2259 "gram.y"
+ {
+ /* data is for staff with only one voice */
+ save_vno_range(1, 1);
+ add_to_sv_list();
+ }
+ break;
+
+ case 241:
+#line 2267 "gram.y"
+ {
+ if (yyvsp[0].intval == YES) {
+ add_to_sv_list();
+ }
+ }
+ break;
+
+ case 242:
+#line 2276 "gram.y"
+ {
+ /* set flag as to whether we are processing tab staff
+ * information or normal staff info */
+ Doing_tab_staff = is_tab_range();
+ }
+ break;
+
+ case 244:
+#line 2286 "gram.y"
+ {
+ /* several staffs have the same note data */
+ Defining_multiple = YES;
+ }
+ break;
+
+ case 245:
+#line 2292 "gram.y"
+ {
+ /* remember which staffs we are currently getting data for */
+ /* if only a single number, not a range, staff_range will be
+ * 0, so use staffnum as high and low of range */
+ save_staff_range(yyvsp[-1].intval, (yyvsp[0].intval == 0 ? yyvsp[-1].intval : yyvsp[0].intval));
+ }
+ break;
+
+ case 246:
+#line 2300 "gram.y"
+ {
+ /* empty - no range, just a single number */
+ yyval.intval = 0;
+ }
+ break;
+
+ case 247:
+#line 2307 "gram.y"
+ {
+ Defining_multiple = YES;
+ yyval.intval = yyvsp[0].intval;
+ if (yyvsp[0].intval == 0) {
+ yyerror("staff of 0 is illegal");
+ }
+ }
+ break;
+
+ case 248:
+#line 2317 "gram.y"
+ {
+ /* note data applies to a single voice */
+ if (rangecheck(yyvsp[-1].intval, MINVOICES, MAXVOICES, "voice") == YES) {
+ save_vno_range(yyvsp[-1].intval, yyvsp[-1].intval);
+ yyval.intval = YES;
+ }
+ else {
+ yyval.intval = NO;
+ }
+ }
+ break;
+
+ case 249:
+#line 2330 "gram.y"
+ {
+ /* note data applies to range of voices */
+ if (rangecheck(yyvsp[-3].intval, MINVOICES, MAXVOICES, "voice") == YES &&
+ rangecheck(yyvsp[-1].intval, MINVOICES, MAXVOICES, "voice") == YES) {
+ if (yyvsp[-1].intval < yyvsp[-3].intval) {
+ l_yyerror(Curr_filename, yylineno,
+ "end of voice range is smaller than beginning");
+ yyval.intval = NO;
+ }
+ else {
+ save_vno_range(yyvsp[-3].intval, yyvsp[-1].intval);
+ Defining_multiple = YES;
+ yyval.intval = YES;
+ }
+ }
+ else {
+ yyval.intval = NO;
+ }
+ }
+ break;
+
+ case 251:
+#line 2355 "gram.y"
+ {
+ Defining_multiple = YES;
+ }
+ break;
+
+ case 255:
+#line 2370 "gram.y"
+ {
+ /* Associate any TIMEDSSVs with this group */
+ if (Curr_tssv_p != 0) {
+ tssv_setgrpsyl(Curr_grpsyl_p);
+ Curr_tssv_p = 0;
+ }
+
+ /* if no custom beaming indicated, fill in based on previous. */
+ if ( Curr_grpsyl_p->beamloc == NOITEM) {
+ setbeamloc(Curr_grpsyl_p, Last_grpsyl_p);
+ }
+
+ /* later we check that if there is an 'm', it is
+ * the only thing in the measure */
+
+ link_notegroup(Curr_grpsyl_p, Last_grpsyl_p);
+ Curr_marklist = 0;
+ /* Save pointer to this group, in case there are additive
+ * times, and the next group gets its time value from this
+ * group. In that case, we need this group, not the last one
+ * of the added groups. */
+ Prev_grpsyl_p = Curr_grpsyl_p;
+ /* Add groups if there were additive time values. */
+ if (Extra_time_p != 0) {
+ Curr_grpsyl_p = expandgrp(Curr_grpsyl_p, Extra_time_p);
+ /* If there was a custom beam ebm on something with
+ * additive time, we need make sure ENDITEM is on only
+ * the last of the expanded groups. */
+ if (Curr_grpsyl_p != Prev_grpsyl_p
+ && Prev_grpsyl_p->beamloc == ENDITEM) {
+ struct GRPSYL *g_p;
+ for (g_p = Prev_grpsyl_p; g_p != Curr_grpsyl_p;
+ g_p = g_p->next) {
+ g_p->beamloc = INITEM;
+ }
+ Curr_grpsyl_p->beamloc = ENDITEM;
+ }
+ Last_grpsyl_p = Curr_grpsyl_p->prev;
+ }
+ Curr_timelist_p = 0;
+ }
+ break;
+
+ case 260:
+#line 2428 "gram.y"
+ {
+ if (Chord_at_a_time == YES) {
+ yyerror("mid-measure changes not allowed on chord-at-a-time input");
+ }
+ }
+ break;
+
+ case 261:
+#line 2437 "gram.y"
+ {
+ Curr_tssv_p = tssv_create(C_SCORE);
+ }
+ break;
+
+ case 262:
+#line 2443 "gram.y"
+ {
+ Curr_tssv_p = tssv_create(C_STAFF);
+ }
+ break;
+
+ case 263:
+#line 2449 "gram.y"
+ {
+ Curr_tssv_p = tssv_create(C_VOICE);
+ }
+ break;
+
+ case 266:
+#line 2463 "gram.y"
+ {
+ if (Curr_grpsyl_p != 0 && Curr_grpsyl_p->grpsyl == GS_GROUP
+ && Curr_grpsyl_p->grpvalue == GV_ZERO) {
+ yyerror("mid-measure clef change not allowed after grace note\n");
+ }
+ tssv_update(Curr_tssv_p, yyvsp[-2].intval, yyvsp[0].intval);
+ }
+ break;
+
+ case 267:
+#line 2473 "gram.y"
+ {
+ switch (yyvsp[-2].intval) {
+
+ case DEFOCT:
+ case RELEASE:
+ tssv_update(Curr_tssv_p, yyvsp[-2].intval, yyvsp[0].intval);
+ break;
+
+ default:
+ yyerror("parameter type cannot be changed mid-measure");
+ break;
+ }
+ }
+ break;
+
+ case 269:
+#line 2493 "gram.y"
+ {
+ if (Good_till_canceled == NO) {
+ /* use default attributes */
+ Curr_grpsyl_p->grpvalue = GV_NORMAL;
+ Curr_grpsyl_p->grpsize = GS_NORMAL;
+ Curr_grpsyl_p->headshape = HS_UNKNOWN;
+ }
+ else {
+ /* re-use previous style */
+ copy_attributes(Curr_grpsyl_p, Last_grpsyl_p);
+ }
+ }
+ break;
+
+ case 270:
+#line 2508 "gram.y"
+ {
+ Good_till_canceled = NO;
+ }
+ break;
+
+ case 271:
+#line 2514 "gram.y"
+ {
+ }
+ break;
+
+ case 272:
+#line 2518 "gram.y"
+ {
+ Good_till_canceled = NO;
+ }
+ break;
+
+ case 273:
+#line 2524 "gram.y"
+ {
+ Good_till_canceled = YES;
+ }
+ break;
+
+ case 274:
+#line 2529 "gram.y"
+ {
+ }
+ break;
+
+ case 275:
+#line 2534 "gram.y"
+ {
+ if (Good_till_canceled == YES) {
+ yyerror("can't use ... and more than one [] on same chord");
+ }
+ }
+ break;
+
+ case 276:
+#line 2541 "gram.y"
+ {
+ /* NULL token to cause allocation of a GRPSYL struct */
+ Last_grpsyl_p = Curr_grpsyl_p;
+ Curr_grpsyl_p = newGRPSYL(GS_GROUP);
+ }
+ break;
+
+ case 277:
+#line 2548 "gram.y"
+ {
+ /* an empty marklist means we should use
+ * the same attributes as the last time */
+ copy_attributes(Curr_grpsyl_p, Last_grpsyl_p);
+ }
+ break;
+
+ case 281:
+#line 2565 "gram.y"
+ {
+ Curr_grpsyl_p->nwith = (short) Item_count;
+ Curr_grpsyl_p->withlist = Curr_marklist;
+ }
+ break;
+
+ case 285:
+#line 2581 "gram.y"
+ {
+ if (Curr_grpsyl_p->stemdir != UNKNOWN &&
+ Curr_grpsyl_p->stemdir != yyvsp[0].intval) {
+ l_warning(Curr_filename, yylineno,
+ "both stem directions specified; using last instance");
+ }
+ if (Doing_tab_staff == YES) {
+ yyerror("stem direction specification not allowed on tab staff");
+ }
+ else {
+ Curr_grpsyl_p->stemdir = yyvsp[0].intval;
+ }
+ }
+ break;
+
+ case 286:
+#line 2597 "gram.y"
+ {
+ if (yyvsp[-2].intval != DIST) {
+ yyerror("unexpected parameter name");
+ }
+ else {
+ if (Curr_grpsyl_p->restdist != NORESTDIST &&
+ Curr_grpsyl_p->restdist != yyvsp[-1].intval * yyvsp[0].intval) {
+ l_warning(Curr_filename, yylineno,
+ "more than one dist value specified; using last instance");
+ }
+ Curr_grpsyl_p->restdist = yyvsp[-1].intval * yyvsp[0].intval;
+ }
+ }
+ break;
+
+ case 287:
+#line 2613 "gram.y"
+ {
+ if (Curr_grpsyl_p->ho_usage != HO_NONE &&
+ Curr_grpsyl_p->ho_usage != yyvsp[0].intval) {
+ l_warning(Curr_filename, yylineno,
+ "More than one ho type specified; last instance used");
+ }
+ Curr_grpsyl_p->ho_usage = yyvsp[0].intval;
+ }
+ break;
+
+ case 288:
+#line 2624 "gram.y"
+ {
+ if (Curr_grpsyl_p != 0) {
+ if (Curr_grpsyl_p->headshape != HS_UNKNOWN) {
+ l_warning(Curr_filename, yylineno,
+ "multiple head shapes specified, using last");
+ }
+ /* +2 to skip past extraneous font/size */
+ if (Doing_tab_staff == YES && strcmp(yyvsp[0].stringval + 2, "allx") != 0) {
+ yyerror("allx is the only headshape allowed on tab staffs");
+ }
+ if ((Curr_grpsyl_p->headshape = get_shape_num(yyvsp[0].stringval + 2))
+ == HS_UNKNOWN) {
+ l_yyerror(Curr_filename, yylineno,
+ "'%s' is not a valid head shape name",
+ ascii_str(yyvsp[0].stringval, YES, NO, TM_NONE));
+ }
+ }
+ else {
+ pfatal("Curr_grpsyl_p was null for setting hs");
+ }
+ /* We don't need the name anymore; we have its corresponding
+ * number that we use internally. */
+ FREE(yyvsp[0].stringval);
+ }
+ break;
+
+ case 289:
+#line 2651 "gram.y"
+ {
+ if (Curr_grpsyl_p->stemlen != STEMLEN_UNKNOWN &&
+ fabs(Curr_grpsyl_p->stemlen - yyvsp[0].floatval * STEPSIZE) > 0.0001) {
+ l_warning(Curr_filename, yylineno,
+ "more than one len specified; using last instance");
+ }
+ Curr_grpsyl_p->stemlen = yyvsp[0].floatval * STEPSIZE;
+ }
+ break;
+
+ case 290:
+#line 2662 "gram.y"
+ {
+ if (yyvsp[0].intval <= 0) {
+ yyerror("slash number must be > 0");
+ }
+ else if (yyvsp[0].intval > 8) {
+ /* we decided 8 slashes would be at least 256th note
+ * or shorter, and 256th is the shortest note we
+ * support, 8 slashes is plenty */
+ yyerror("slash number must be <= 8");
+ }
+ if (Curr_grpsyl_p->slash_alt > 0 &&
+ Curr_grpsyl_p->slash_alt != yyvsp[0].intval) {
+ l_warning(Curr_filename, yylineno,
+ "more than one slash value specified; using last instance");
+ }
+ if (Curr_grpsyl_p->slash_alt < 0) {
+ yyerror("only one slash/alt allowed per group");
+ }
+ Curr_grpsyl_p->slash_alt = yyvsp[0].intval;
+ }
+ break;
+
+ case 291:
+#line 2685 "gram.y"
+ {
+ yyval.intval = HO_RIGHT;
+ }
+ break;
+
+ case 292:
+#line 2691 "gram.y"
+ {
+ yyval.intval = HO_LEFT;
+ }
+ break;
+
+ case 293:
+#line 2697 "gram.y"
+ {
+ /* We want to silently accept identical values specified
+ * more than once, so use fuzzy compare to deal with roundoff */
+ if (Curr_grpsyl_p->ho_usage == HO_VALUE &&
+ fabs(Curr_grpsyl_p->ho_value - yyvsp[-1].intval * yyvsp[0].floatval) > 0.0001) {
+ l_warning(Curr_filename, yylineno,
+ "More than one ho value specified; last instance used");
+ }
+ Curr_grpsyl_p->ho_value = yyvsp[-1].intval * yyvsp[0].floatval;
+ yyval.intval = HO_VALUE;
+ }
+ break;
+
+ case 294:
+#line 2711 "gram.y"
+ {
+ yyval.intval = 1;
+ }
+ break;
+
+ case 295:
+#line 2717 "gram.y"
+ {
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 301:
+#line 2739 "gram.y"
+ {
+ yyvsp[0].floatval *= yyvsp[-1].intval;
+ if (fabs(Curr_grpsyl_p->beamslope - NOBEAMANGLE) > 0.01) {
+ l_warning(Curr_filename, yylineno,
+ "multiple slope values specified; using last one");
+ }
+ if (frangecheck(yyvsp[0].floatval, MINBEAMANGLE, MAXBEAMANGLE, "slope") == YES) {
+ Curr_grpsyl_p->beamslope = yyvsp[0].floatval;
+ }
+ }
+ break;
+
+ case 302:
+#line 2752 "gram.y"
+ {
+ if (yyvsp[0].intval <= 0) {
+ yyerror("alt number must be > 0");
+ }
+ if (Curr_grpsyl_p->slash_alt != 0) {
+ yyerror("only one slash/alt allowed per group");
+ }
+ if (Doing_tab_staff == YES) {
+ yyerror("alt not allowed on tablature staff");
+ }
+ /* Keep small enough that 1 shifted left by this still
+ * fits in a 16-bit int. Should be more than enough! */
+ if (yyvsp[0].intval > 15) {
+ warning("alt value too large");
+ yyvsp[0].intval = 15;
+ }
+ Curr_grpsyl_p->slash_alt = -yyvsp[0].intval;
+ }
+ break;
+
+ case 303:
+#line 2773 "gram.y"
+ {
+ int n;
+
+ /* add a slur to each note in the chord. Don't know
+ * which pitch to slur to yet, just that it will be to
+ * the "matching" note in the next chord, so use
+ * special magic pitch of 'M' to convey this */
+ for (n = 0; n < Curr_grpsyl_p->nnotes; n++) {
+ add_slurto(Curr_grpsyl_p, 'M', USE_DFLT_OCTAVE, n, yyvsp[-1].intval);
+ set_slurdir(Curr_grpsyl_p, -1, yyvsp[0].intval);
+ }
+ }
+ break;
+
+ case 304:
+#line 2788 "gram.y"
+ {
+ int n;
+
+ Curr_grpsyl_p->tie = YES;
+ for (n = 0; n < Curr_grpsyl_p->nnotes; n++) {
+ Curr_grpsyl_p->notelist[n].tie = YES;
+ Curr_grpsyl_p->notelist[n].tiestyle = yyvsp[-1].intval;
+ Curr_grpsyl_p->notelist[n].tiedir = yyvsp[0].intval;
+ }
+ }
+ break;
+
+ case 305:
+#line 2800 "gram.y"
+ {
+ if (Curr_marklist == 0) {
+ /* allocate space for a list of marks */
+ MALLOCA(char *, Curr_marklist, ITEMS);
+ Item_count = 0;
+ Max_items = ITEMS;
+ }
+ }
+ break;
+
+ case 306:
+#line 2810 "gram.y"
+ {
+ yyval.intval = UNKNOWN;
+ }
+ break;
+
+ case 307:
+#line 2816 "gram.y"
+ {
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 310:
+#line 2828 "gram.y"
+ {
+ /* if too many items, get some more space */
+ if (Item_count >= Max_items) {
+ Max_items += ITEMS;
+ if ((Curr_marklist = (char **) realloc(Curr_marklist,
+ Max_items * sizeof(char **)))
+ == (char **) 0) {
+ l_no_mem(__FILE__, __LINE__);
+ }
+ }
+ Curr_marklist[Item_count++] = yyvsp[0].stringval;
+ }
+ break;
+
+ case 311:
+#line 2842 "gram.y"
+ {
+ MALLOCA(char, yyval.stringval, strlen(yyvsp[0].stringval) + 3);
+ yyval.stringval[0] = FONT_TR;
+ yyval.stringval[1] = DFLT_SIZE;
+ sprintf(yyval.stringval + 2, yyvsp[0].stringval);
+ }
+ break;
+
+ case 313:
+#line 2855 "gram.y"
+ {
+ yyval.stringval = (Curr_grpsyl_p->grpsize == GS_NORMAL
+ ? "\\(dot)" : "\\(smdot)");
+ }
+ break;
+
+ case 314:
+#line 2862 "gram.y"
+ {
+ yyval.stringval = (Curr_grpsyl_p->grpsize == GS_NORMAL
+ ? "\\(leg)" : "\\(smleg)");
+ }
+ break;
+
+ case 315:
+#line 2869 "gram.y"
+ {
+ yyval.stringval = (Curr_grpsyl_p->grpsize == GS_NORMAL
+ ? "\\(acc_gt)" : "\\(smacc_gt)");
+ }
+ break;
+
+ case 316:
+#line 2876 "gram.y"
+ {
+ yyval.stringval = (Curr_grpsyl_p->grpsize == GS_NORMAL
+ ? "\\(acc_hat)" : "\\(smacc_hat)");
+ }
+ break;
+
+ case 317:
+#line 2882 "gram.y"
+ {
+ if (Curr_grpsyl_p->grpvalue == GV_ZERO) {
+ l_warning(Curr_filename, yylineno,
+ "both grace and cue specified; using last instance");
+ }
+ Curr_grpsyl_p->grpvalue = GV_NORMAL;
+ Curr_grpsyl_p->grpsize = GS_SMALL;
+ }
+ break;
+
+ case 318:
+#line 2893 "gram.y"
+ {
+ if (Curr_grpsyl_p->grpsize == GS_SMALL
+ && Curr_grpsyl_p->grpvalue != GV_ZERO) {
+ l_warning(Curr_filename, yylineno,
+ "both cue and grace specified; using last instance");
+ }
+
+ Curr_grpsyl_p->grpsize = GS_SMALL;
+ Curr_grpsyl_p->grpvalue = GV_ZERO;
+ }
+ break;
+
+ case 319:
+#line 2906 "gram.y"
+ {
+ if (Curr_grpsyl_p->headshape != HS_UNKNOWN) {
+ l_warning(Curr_filename, yylineno,
+ "diam is overriding previous headshapes specification");
+ }
+ Curr_grpsyl_p->headshape = get_shape_num("diam");
+ }
+ break;
+
+ case 320:
+#line 2916 "gram.y"
+ {
+ if (Curr_grpsyl_p->headshape != HS_UNKNOWN) {
+ l_warning(Curr_filename, yylineno,
+ "xnote is overriding previous headshapes specification");
+ }
+ Curr_grpsyl_p->headshape = get_shape_num(
+ Doing_tab_staff == YES ? "allx" : "x");
+ }
+ break;
+
+ case 321:
+#line 2927 "gram.y"
+ {
+ yyval.intval = UP;
+ }
+ break;
+
+ case 322:
+#line 2933 "gram.y"
+ {
+ yyval.intval = DOWN;
+ }
+ break;
+
+ case 323:
+#line 2939 "gram.y"
+ {
+ /* custom beaming cannot be nested */
+ struct GRPSYL *prev_like_gs_p;
+ /* Find previous group with same grace-ness. Can't use
+ * prevsimilar() here, since it looks at grpcont too. */
+ for (prev_like_gs_p = Last_grpsyl_p; prev_like_gs_p != 0 &&
+ prev_like_gs_p->grpvalue != Curr_grpsyl_p->grpvalue;
+ prev_like_gs_p = prev_like_gs_p->prev) {
+ ;
+ }
+ if (prev_like_gs_p != 0 &&
+ ((prev_like_gs_p->beamloc == STARTITEM)
+ || (prev_like_gs_p->beamloc == INITEM)) ) {
+ yyerror("custom beaming may not be nested");
+ }
+ /* Non-custom beaming, if any, is done later, in do_bar() */
+ else {
+ /* begin custom beaming */
+ Curr_grpsyl_p->beamloc = STARTITEM;
+ if (Curr_grpsyl_p->basictime < 8 && yyvsp[0].intval == CS_SAME) {
+ yyerror("beamed notes must be 8th or shorter");
+ }
+ }
+ Curr_grpsyl_p->beamto = yyvsp[0].intval;
+ }
+ break;
+
+ case 324:
+#line 2967 "gram.y"
+ {
+ Curr_grpsyl_p->breakbeam = YES;
+ }
+ break;
+
+ case 325:
+#line 2973 "gram.y"
+ {
+ struct GRPSYL *last_nongrace_p;
+
+ /* find the previous group, skipping grace groups */
+ for (last_nongrace_p = Last_grpsyl_p;
+ last_nongrace_p != (struct GRPSYL *) 0
+ && last_nongrace_p->grpvalue == GV_ZERO;
+ last_nongrace_p = last_nongrace_p->prev) {
+ ;
+ }
+
+ /* check that a custom beam is in progress */
+ if ((last_nongrace_p == (struct GRPSYL *) 0)
+ || ((last_nongrace_p != (struct GRPSYL *) 0)
+ && (last_nongrace_p->beamloc != STARTITEM)
+ && (last_nongrace_p->beamloc != INITEM) )) {
+ yyerror("'ebm' unexpected: no custom beaming in progress");
+ }
+ else {
+ Curr_grpsyl_p->beamloc = ENDITEM;
+ Curr_grpsyl_p->beamto = last_nongrace_p->beamto;
+ if (Curr_grpsyl_p->basictime < 8
+ && Last_grpsyl_p->beamto == CS_SAME) {
+ yyerror("beamed notes must be 8th or shorter");
+ }
+ }
+ }
+ break;
+
+ case 326:
+#line 3002 "gram.y"
+ {
+ /* Use the same as last time or default timeunit.
+ * If that involves additive time values,
+ * save pointer to that info in Extra_time_p for later use. */
+ Extra_time_p = copy_timeunit(Curr_grpsyl_p, Prev_grpsyl_p,
+ Extra_time_p);
+ }
+ break;
+
+ case 327:
+#line 3012 "gram.y"
+ {
+ if (Curr_grpsyl_p->is_meas == YES) {
+ Curr_grpsyl_p->fulltime = Score.time;
+ }
+ else {
+ Curr_grpsyl_p->fulltime = yyvsp[0].ratval;
+ }
+ }
+ break;
+
+ case 328:
+#line 3022 "gram.y"
+ {
+ yyval.intval = CS_SAME;
+ }
+ break;
+
+ case 329:
+#line 3028 "gram.y"
+ {
+ CSBused = YES;
+ switch (yyvsp[0].intval) {
+ case PL_ABOVE:
+ yyval.intval = CS_ABOVE;
+ break;
+ case PL_BELOW:
+ yyval.intval = CS_BELOW;
+ break;
+ default:
+ yyerror("bm with staff must be 'above' or 'below'");
+ yyval.intval = CS_SAME;
+ }
+ }
+ break;
+
+ case 330:
+#line 3044 "gram.y"
+ {
+ yyval.ratval.n = yyvsp[0].intval;
+ yyval.ratval.d = 1;
+
+ /* if filling in a GRPSYL struct, need to fill in basic time,
+ * could also be here due to beamstyle, in which case the
+ * Curr_grpsyl_p will be NULL, or when getting tuplet duration,
+ * in which case flag will be set */
+ if (Curr_grpsyl_p != (struct GRPSYL *) 0
+ && Getting_tup_dur == NO) {
+ /* If we are gathering basictime as part of a list
+ * of additive times, we will save the value a few
+ * lines down from here. But in the normal case,
+ * we set basictime in the current GRPSYL. */
+ if (Extra_time_p == 0) {
+ /* 1/2 is 0 internally. 1/4 is -1 internally */
+ Curr_grpsyl_p->basictime = (yyvsp[0].intval == 2 ? 0 : -1);
+ }
+ }
+ /* If doing additive times, need to save value. */
+ if (Extra_time_p != 0) {
+ Extra_basictime = (yyvsp[0].intval == 2 ? 0 : -1);
+ }
+ }
+ break;
+
+ case 331:
+#line 3071 "gram.y"
+ {
+ /* check that a power of two from 1 to MAXBASICTIME */
+ if (power_of2check(yyvsp[0].intval, "note basic time value") == NO) {
+ /* force to a power to two, so that other code
+ * (like in expandgrp) that expect a sane value
+ * to not blow up. This may lead to a somewhat
+ * misleading "time does not add up to time * signature message, but we don't know what
+ * time they really meant, and this is better
+ * than pfataling. */
+ yyvsp[0].intval = 2;
+ }
+ /* can't use rangecheck here because the error message would
+ * say 0 and -1 are valid times, which is only true internally--
+ * the user has to use 1/2, 1/4 or m. */
+ if (yyvsp[0].intval < MINBASICTIME || yyvsp[0].intval > MAXBASICTIME) {
+ l_yyerror(Curr_filename, yylineno,
+ "time value must be between 1 and %d, or 1/2 or 1/4 or m",
+ MAXBASICTIME);
+ }
+ yyval.ratval.n = 1;
+ /* avoid division by zero */
+ if (yyvsp[0].intval == 0) {
+ yyvsp[0].intval = 1;
+ }
+ yyval.ratval.d = yyvsp[0].intval;
+ if (Curr_grpsyl_p != (struct GRPSYL *) 0
+ && Getting_tup_dur == NO) {
+ if (Curr_timelist_p == 0) {
+ Curr_grpsyl_p->basictime = yyvsp[0].intval;
+ }
+ }
+ /* If doing additive times, need to save value */
+ if (Extra_time_p != 0) {
+ Extra_basictime = yyvsp[0].intval;
+ }
+ }
+ break;
+
+ case 332:
+#line 3110 "gram.y"
+ {
+ free_extra_time();
+ }
+ break;
+
+ case 334:
+#line 3120 "gram.y"
+ {
+ /* Set basictime to what we saved in basic_time_val rule,
+ * then calculate fulltime from that and number of dots. */
+ Curr_timelist_p->basictime = Extra_basictime;
+ Curr_timelist_p->fulltime = calcfulltime(yyvsp[-1].ratval, yyvsp[0].intval);
+ /* handle subtracted times by negating the fulltime */
+ if (yyvsp[-3].intval == -1) {
+ Curr_timelist_p->fulltime = rneg(Curr_timelist_p->fulltime);
+ }
+ }
+ break;
+
+ case 335:
+#line 3134 "gram.y"
+ {
+ struct TIMELIST *timelist_p;
+
+ MALLOC(TIMELIST, timelist_p, 1);
+ /* Add to end of linked list */
+ timelist_p->next = 0;
+ /* Init fulltime to something to avoid garbage if there
+ * in a user input error */
+ timelist_p->fulltime = Zero;
+ if (Extra_time_p == 0) {
+ Last_alloced_timelist_p = Extra_time_p = timelist_p;
+ }
+ else {
+ Curr_timelist_p->next = timelist_p;
+ }
+ /* Keep track of where to append next item to list, if any */
+ Curr_timelist_p = timelist_p;
+ }
+ break;
+
+ case 336:
+#line 3155 "gram.y"
+ {
+ User_meas_time = NO;
+ }
+ break;
+
+ case 337:
+#line 3161 "gram.y"
+ {
+ if (Curr_grpsyl_p != (struct GRPSYL *) 0
+ && Getting_tup_dur == NO) {
+ Curr_grpsyl_p->is_meas = YES;
+ User_meas_time = YES;
+ }
+ else {
+ yyerror("'m' is not valid here");
+ }
+ }
+ break;
+
+ case 338:
+#line 3173 "gram.y"
+ {
+ yyval.intval = 0;
+ }
+ break;
+
+ case 339:
+#line 3179 "gram.y"
+ {
+ /* count up the number of dots */
+ yyval.intval = yyvsp[-1].intval + 1;
+ }
+ break;
+
+ case 340:
+#line 3185 "gram.y"
+ {
+ /* We can't distinguish between the default 0.0 and
+ * if user explicitly sets to 0.0, so if they set to 0.0
+ * then to something else, we won't catch that as setting
+ * twice, but that shouldn't be common. Besides, if they
+ * expect them to be additive, adding to zero will work
+ * as they expect... Because of roundoff, we can't do
+ * exact compare for specifying the same value more than once,
+ * so treat as identical if pretty close. */
+ if (Curr_grpsyl_p->padding != 0.0 &&
+ fabs(Curr_grpsyl_p->padding - (yyvsp[0].floatval * STEPSIZE))
+ > 0.0001) {
+ l_warning(Curr_filename, yylineno,
+ "padding specified more than once; using last instance");
+ }
+ Curr_grpsyl_p->padding = yyvsp[0].floatval * STEPSIZE;
+ }
+ break;
+
+ case 341:
+#line 3205 "gram.y"
+ {
+ yyval.floatval = (float) yyvsp[-1].intval * yyvsp[0].floatval;
+ }
+ break;
+
+ case 342:
+#line 3210 "gram.y"
+ {
+ /* no sign--must be a positive number */
+ yyval.intval = 1;
+ }
+ break;
+
+ case 343:
+#line 3217 "gram.y"
+ {
+ /* user wants a negative number */
+ yyval.intval = -1;
+ }
+ break;
+
+ case 344:
+#line 3223 "gram.y"
+ {
+ Curr_grpsyl_p->grpcont = GC_NOTES;
+ if (yyvsp[0].intval == 0) {
+ /* no notes listed, use same as previous group */
+ copy_notes(Curr_grpsyl_p, Last_grpsyl_p);
+ }
+ else {
+ resize_notelist(Curr_grpsyl_p);
+ }
+ }
+ break;
+
+ case 348:
+#line 3248 "gram.y"
+ {
+ /* allocate GRPSYL for the case where everything is defaulted
+ * from the previous group, with just an extra attribute
+ * like ? or ~ specified. */
+ if (Curr_grpsyl_p == (struct GRPSYL *) 0) {
+ /* shouldn't ever happen, but just in case... */
+ Curr_grpsyl_p = newGRPSYL(GS_GROUP);
+ }
+ if (Last_grpsyl_p != (struct GRPSYL *) 0 &&
+ Last_grpsyl_p->nnotes >= 1) {
+ copy_notes(Curr_grpsyl_p, Last_grpsyl_p);
+ }
+ else if (Last_grpsyl_p != (struct GRPSYL *) 0 &&
+ Last_grpsyl_p->grpcont == GC_REST) {
+ Curr_grpsyl_p->grpcont = GC_REST;
+ }
+ }
+ break;
+
+ case 349:
+#line 3268 "gram.y"
+ {
+ if (Curr_grpsyl_p->grpcont == GC_NOTES &&
+ Curr_grpsyl_p->nnotes > 0) {
+ Curr_grpsyl_p->notelist[Curr_grpsyl_p->nnotes - 1]
+ .notesize = GS_SMALL;
+ }
+ else if (Curr_grpsyl_p->grpcont == GC_REST) {
+ Curr_grpsyl_p->grpsize = GS_SMALL;
+ }
+ else {
+ yyerror("no note specified for '?'");
+ }
+ }
+ break;
+
+ case 350:
+#line 3284 "gram.y"
+ {
+ if (Curr_grpsyl_p->grpcont != GC_NOTES) {
+ yyerror("can't tie a rest or space");
+ }
+ else if (Curr_grpsyl_p->nnotes > 0) {
+ struct NOTE *n_p;
+ n_p = &(Curr_grpsyl_p->notelist[Curr_grpsyl_p->nnotes - 1]);
+ n_p->tie = YES;
+ n_p->tiestyle = yyvsp[-1].intval;
+ n_p->tiedir = yyvsp[0].intval;
+ }
+ else {
+ yyerror("no note specified for '~'");
+ }
+ }
+ break;
+
+ case 351:
+#line 3302 "gram.y"
+ {
+ if (Curr_grpsyl_p->nnotes > 0) {
+ switch (Curr_grpsyl_p->notelist
+ [Curr_grpsyl_p->nnotes - 1].letter) {
+ case PP_REST:
+ case PP_SPACE:
+ case PP_RPT:
+ case PP_NO_PITCH: /* this one not really possible */
+ addsym(yyvsp[0].stringval, Curr_grpsyl_p->c, CT_GRPSYL);
+ break;
+ default:
+ addsym(yyvsp[0].stringval, Curr_grpsyl_p->notelist
+ [Curr_grpsyl_p->nnotes - 1].c, CT_NOTE);
+ break;
+ }
+ var_valid();
+ }
+ else if (Curr_grpsyl_p->grpcont == GC_REST) {
+ /* This should really never be hit anymore since
+ * chord-at-a-time code was added, but shouldn't
+ * hurt to leave it, just in case. */
+ addsym(yyvsp[0].stringval, Curr_grpsyl_p->c, CT_GRPSYL);
+ var_valid();
+ }
+ else {
+ l_yyerror(Curr_filename, yylineno,
+ "no note specified for location tag '%s'", yyvsp[0].stringval);
+ }
+ }
+ break;
+
+ case 352:
+#line 3334 "gram.y"
+ {
+ /* this is for bend on a non-tablature staff */
+ if (Doing_tab_staff == YES) {
+ yyerror("^ bend not allowed on tablature staff; use quoted bend string");
+ }
+ else {
+ add_slurto(Curr_grpsyl_p, yyvsp[-1].intval, yyvsp[0].intval,
+ Curr_grpsyl_p->nnotes - 1, L_NORMAL);
+ if (Curr_grpsyl_p->nnotes > 0) {
+ Curr_grpsyl_p->notelist
+ [Curr_grpsyl_p->nnotes - 1]
+ .is_bend = YES;
+ }
+ }
+ }
+ break;
+
+ case 353:
+#line 3352 "gram.y"
+ {
+ /* this is for a small bend (1/4 step) on a non-tab staff */
+ if (Doing_tab_staff == YES) {
+ yyerror("^/ not allowed on tablature staff; use quoted bend string");
+ }
+ else if (Curr_grpsyl_p != 0 && Curr_grpsyl_p->nnotes > 0) {
+ Curr_grpsyl_p->notelist[Curr_grpsyl_p->nnotes - 1]
+ .smallbend = YES;
+ }
+ }
+ break;
+
+ case 354:
+#line 3365 "gram.y"
+ {
+ if (Curr_grpsyl_p->grpcont == GC_NOTES &&
+ Curr_grpsyl_p->nnotes > 0) {
+ if ((Curr_grpsyl_p->notelist[Curr_grpsyl_p->nnotes - 1]
+ .headshape = get_shape_num(yyvsp[0].stringval + 2))
+ == HS_UNKNOWN) {
+ l_yyerror(Curr_filename, yylineno,
+ "'%s' is not a valid head shape name",
+ ascii_str(yyvsp[0].stringval, YES, NO, TM_NONE));
+ }
+ }
+ else {
+ yyerror("no note specified for headshape");
+ }
+ FREE(yyvsp[0].stringval);
+ }
+ break;
+
+ case 358:
+#line 3394 "gram.y"
+ {
+ yyval.intval = yyvsp[-1].intval + yyvsp[0].intval; /* total number of notes */
+ }
+ break;
+
+ case 359:
+#line 3400 "gram.y"
+ {
+ yyval.intval = 0;
+ }
+ break;
+
+ case 360:
+#line 3406 "gram.y"
+ {
+ switch (yyvsp[0].intval) {
+ case PL_ABOVE:
+ Curr_grpsyl_p->stemto = CS_ABOVE;
+ break;
+ case PL_BELOW:
+ Curr_grpsyl_p->stemto = CS_BELOW;
+ break;
+ default:
+ yyerror("cross staff stem must be with 'above' or 'below'");
+ Curr_grpsyl_p->stemto = CS_SAME;
+ }
+ if (yyvsp[-1].intval == 0) {
+ /* Maybe this wouldn't really hurt to allow,
+ * but it's rather silly--why would user bother to go
+ * to the trouble of saying there are cross staff stem
+ * notes, but then not list any?
+ */
+ yyerror("cross-staff stem note list is empty");
+ }
+ yyval.intval = yyvsp[-1].intval;
+ }
+ break;
+
+ case 361:
+#line 3430 "gram.y"
+ {
+ CSSused = YES;
+ Curr_grpsyl_p->stemto_idx = Curr_grpsyl_p->nnotes;
+ }
+ break;
+
+ case 362:
+#line 3436 "gram.y"
+ {
+ /* No notes. If this is for the list of "normal" staff notes,
+ * and there are no "other" staff notes (for cross-staff stems),
+ * this means use the same notes as the last group. */
+ yyval.intval = 0;
+ }
+ break;
+
+ case 363:
+#line 3445 "gram.y"
+ {
+ /* return number of notes in notelist */
+ yyval.intval = yyvsp[-2].intval + 1;
+ }
+ break;
+
+ case 365:
+#line 3454 "gram.y"
+ {
+ add_note(Curr_grpsyl_p, (int) PP_REST, 0, USE_DFLT_OCTAVE,
+ 0, NO, (char *) 0);
+ }
+ break;
+
+ case 366:
+#line 3461 "gram.y"
+ {
+ /* temporarily stash uncompressibility (NO in this case)
+ * in the octave field */
+ add_note(Curr_grpsyl_p, (int) PP_SPACE, 0, NO,
+ 0, NO, (char *) 0);
+ if (Curr_grpsyl_p->is_meas == YES && User_meas_time == YES) {
+ yyerror("cannot specify time value on measure space");
+ }
+ }
+ break;
+
+ case 367:
+#line 3473 "gram.y"
+ {
+ /* temporarily stash uncompressibility (YES in this case)
+ * in the octave field */
+ add_note(Curr_grpsyl_p, (int) PP_SPACE, 0, YES,
+ 0, NO, (char *) 0);
+ if (Curr_grpsyl_p->is_meas == YES && User_meas_time == YES) {
+ yyerror("cannot specify time value on measure uncompressible space");
+ }
+ }
+ break;
+
+ case 368:
+#line 3485 "gram.y"
+ {
+ if (Curr_grpsyl_p->is_meas == YES) {
+ if (User_meas_time == YES) {
+ yyerror("cannot specify time value on m rpt");
+ }
+ }
+ else {
+ yyerror("rpt can only be used with m");
+ }
+ add_note(Curr_grpsyl_p, (int) PP_RPT, 0, USE_DFLT_OCTAVE,
+ 0, NO, (char *) 0);
+ }
+ break;
+
+ case 369:
+#line 3500 "gram.y"
+ {
+ if (yyvsp[0].intval == SINGLEBAR) {
+ /* lexer thinks this is 'bar'
+ * but is really 'b' 'a' 'r' */
+ keyword_notes(yytext);
+ }
+ else if (yyvsp[0].intval == ENDBAR) {
+ /* lexer thinks this is 'endbar'
+ * but is really 'en' 'd' 'b' 'a' 'r' */
+ add_note(Curr_grpsyl_p, (int) 'e', 'n',
+ USE_DFLT_OCTAVE, 0, NO, (char *) 0);
+ keyword_notes(yytext + 2);
+ }
+ else {
+ yyerror("bar type not valid here");
+ }
+ }
+ break;
+
+ case 370:
+#line 3520 "gram.y"
+ {
+ /* lexer thinks this is 'grace' but really 'g' 'r' 'a' 'c' 'e' */
+ keyword_notes(yytext);
+ }
+ break;
+
+ case 371:
+#line 3527 "gram.y"
+ {
+ if (yyvsp[0].intval == ENDING_BARRED) {
+ keyword_notes(yytext);
+ }
+ else {
+ l_yyerror(Curr_filename, yylineno,
+ "%s not valid here", yytext);
+ }
+ }
+ break;
+
+ case 372:
+#line 3538 "gram.y"
+ {
+ if (yyvsp[0].intval == J_RAGPARA) {
+ keyword_notes(yytext);
+ }
+ else {
+ l_yyerror(Curr_filename, yylineno,
+ "%s not valid here", yytext);
+ }
+ }
+ break;
+
+ case 373:
+#line 3550 "gram.y"
+ {
+ if (yyvsp[0].intval == BRACELIST) {
+ keyword_notes(yytext);
+ }
+ else {
+ l_yyerror(Curr_filename, yylineno,
+ "%s not valid here", yytext);
+ }
+ }
+ break;
+
+ case 374:
+#line 3562 "gram.y"
+ {
+ if (yyvsp[0].intval == BASS) {
+ keyword_notes(yytext);
+ }
+ else {
+ l_yyerror(Curr_filename, yylineno,
+ "%s not valid here", yytext);
+ }
+ }
+ break;
+
+ case 375:
+#line 3574 "gram.y"
+ {
+ Curr_grpsyl_p->notelist[Curr_grpsyl_p->nnotes - 1].note_has_paren = YES;
+ }
+ break;
+
+ case 376:
+#line 3579 "gram.y"
+ {
+ if (Doing_tab_staff == YES) {
+ add_note(Curr_grpsyl_p, yyvsp[-1].intval, 0, NOFRET, 0, NO, yyvsp[0].stringval);
+ }
+ else {
+ add_note(Curr_grpsyl_p, yyvsp[-1].intval, 0, USE_DFLT_OCTAVE, 0, NO, yyvsp[0].stringval);
+ }
+ }
+ break;
+
+ case 377:
+#line 3590 "gram.y"
+ {
+ if (Doing_tab_staff == YES) {
+ yyerror("extraneous parentheses around accidental");
+ }
+ add_note(Curr_grpsyl_p, yyvsp[-4].intval, yyvsp[-2].intval, yyvsp[0].intval, 0, YES, (char *) 0);
+ }
+ break;
+
+ case 378:
+#line 3599 "gram.y"
+ {
+ if (Doing_tab_staff == NO) {
+ yyerror("extraneous parentheses around octave");
+ }
+ add_note(Curr_grpsyl_p, yyvsp[-4].intval, 0, yyvsp[-2].intval, 0, YES, yyvsp[0].stringval);
+ }
+ break;
+
+ case 379:
+#line 3608 "gram.y"
+ {
+ /* Whoops! The left paren was really for a new note,
+ * which happens to be parenthesized. But beause yacc only
+ * looks ahead one token, it finds out too late. So we
+ * catch it here, push the parenthesis and pitch back into
+ * the input and return back to the parent grammar rule,
+ * since we now have complete note. */
+ pushback(yytext[0]);
+ pushback('(');
+ add_note(Curr_grpsyl_p, yyvsp[-2].intval, 0,
+ (Doing_tab_staff ? NOFRET : USE_DFLT_OCTAVE),
+ 0, NO, (char *) 0);
+ }
+ break;
+
+ case 380:
+#line 3624 "gram.y"
+ {
+ add_note(Curr_grpsyl_p, yyvsp[-4].intval, yyvsp[-3].intval, yyvsp[-1].intval, yyvsp[-2].intval, NO, yyvsp[0].stringval);
+ }
+ break;
+
+ case 381:
+#line 3630 "gram.y"
+ {
+ if (Doing_tab_staff == NO) {
+ yyerror("extraneous parentheses around octave");
+ }
+ add_note(Curr_grpsyl_p, yyvsp[-6].intval, yyvsp[-5].intval, yyvsp[-2].intval, yyvsp[-4].intval, YES, yyvsp[0].stringval);
+ }
+ break;
+
+ case 382:
+#line 3639 "gram.y"
+ {
+ /* Whoops! The left paren was really for a new note,
+ * which happens to be parenthesized. But beause yacc only
+ * looks ahead one token, it finds out too late. So we
+ * catch it here, push the parenthesis and pitch back into
+ * the input and return back to the parent grammar rule,
+ * since we now have complete note. */
+ pushback(yytext[0]);
+ pushback('(');
+ add_note(Curr_grpsyl_p, yyvsp[-3].intval, yyvsp[-2].intval,
+ (Doing_tab_staff ? NOFRET : USE_DFLT_OCTAVE),
+ 0, NO, (char *) 0);
+ }
+ break;
+
+ case 383:
+#line 3655 "gram.y"
+ {
+ add_note(Curr_grpsyl_p, yyvsp[-3].intval, 0, yyvsp[-1].intval, yyvsp[-2].intval, NO, yyvsp[0].stringval);
+ }
+ break;
+
+ case 384:
+#line 3661 "gram.y"
+ {
+ add_note(Curr_grpsyl_p, yyvsp[-5].intval, 0, yyvsp[-2].intval, yyvsp[-4].intval, YES, yyvsp[0].stringval);
+ }
+ break;
+
+ case 385:
+#line 3667 "gram.y"
+ {
+ if (Doing_tab_staff == YES && yyvsp[-1].intval != '\0') {
+ yyerror("accidental must be before fret number");
+ }
+ add_note(Curr_grpsyl_p, yyvsp[-3].intval, yyvsp[-1].intval, yyvsp[-2].intval, 0, NO, yyvsp[0].stringval);
+ }
+ break;
+
+ case 386:
+#line 3676 "gram.y"
+ {
+ add_note(Curr_grpsyl_p, yyvsp[-4].intval, yyvsp[-1].intval, yyvsp[-3].intval, 0, YES, (char *) 0);
+ }
+ break;
+
+ case 387:
+#line 3682 "gram.y"
+ {
+ /* Whoops! The left paren was really for a new note,
+ * which happens to be parenthesized. But beause yacc only
+ * looks ahead one token, it finds out too late. So we
+ * catch it here, push the parenthesis and pitch back into
+ * the input and return back to the parent grammar rule,
+ * since we now have complete note. */
+ pushback(yytext[0]);
+ pushback('(');
+ add_note(Curr_grpsyl_p, yyvsp[-3].intval, 0, yyvsp[-2].intval, 0, NO, (char *) 0);
+ }
+ break;
+
+ case 388:
+#line 3695 "gram.y"
+ {
+ yyval.stringval = (char *) 0;
+ }
+ break;
+
+ case 389:
+#line 3701 "gram.y"
+ {
+ if (Doing_tab_staff == NO) {
+ /* try to give helpful error message */
+ if (get_shape_num(yyvsp[0].stringval + 2) != HS_UNKNOWN) {
+ yyerror("missing 'hs' before headshape string");
+ }
+ else if (strcmp(yyvsp[0].stringval + 2, "full") == 0 || isdigit(yyvsp[0].stringval[2])) {
+ yyerror("bend string not allowed on non-tablature staff; use ^");
+ }
+ else {
+ yyerror("unexpected string");
+ }
+ yyval.stringval = (char *) 0;
+ }
+ }
+ break;
+
+ case 390:
+#line 3718 "gram.y"
+ {
+ /* return 'a' to 'g' value */
+ yyval.intval = (int) *yytext;
+ }
+ break;
+
+ case 391:
+#line 3724 "gram.y"
+ {
+ /* no accidental */
+ yyval.intval = 0;
+ }
+ break;
+
+ case 392:
+#line 3731 "gram.y"
+ {
+ }
+ break;
+
+ case 393:
+#line 3735 "gram.y"
+ {
+ /* no octave or fret designation */
+ yyval.intval = (Doing_tab_staff ? NOFRET : USE_DFLT_OCTAVE);
+ }
+ break;
+
+ case 394:
+#line 3742 "gram.y"
+ {
+ }
+ break;
+
+ case 395:
+#line 3747 "gram.y"
+ {
+ yyval.intval = '#';
+ }
+ break;
+
+ case 396:
+#line 3753 "gram.y"
+ {
+ yyval.intval = '&';
+ }
+ break;
+
+ case 397:
+#line 3759 "gram.y"
+ {
+ /* natural */
+ yyval.intval = 'n';
+ }
+ break;
+
+ case 398:
+#line 3766 "gram.y"
+ {
+ /* double sharp */
+ yyval.intval = 'x';
+ }
+ break;
+
+ case 399:
+#line 3773 "gram.y"
+ {
+ yyval.intval = 'B';
+ }
+ break;
+
+ case 400:
+#line 3779 "gram.y"
+ {
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 401:
+#line 3785 "gram.y"
+ {
+ /* we can't really fill in the actual octave yet, because
+ * it may be different on different staffs or voices, so
+ * we store the relative octave and fill in actual value
+ * later.
+ */
+ /* this will be a negative number */
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 402:
+#line 3797 "gram.y"
+ {
+ /* we can't really fill in the actual octave yet, because
+ * it may be different on different staffs or voices, so
+ * we store the relative octave and fill in actual value
+ * later.
+ */
+ yyval.intval = USE_DFLT_OCTAVE + yyvsp[0].intval;
+ }
+ break;
+
+ case 403:
+#line 3807 "gram.y"
+ {
+ yyval.intval = -1;
+ }
+ break;
+
+ case 404:
+#line 3813 "gram.y"
+ {
+ /* count up the number of minus signs */
+ yyval.intval = yyvsp[-1].intval - 1;
+ }
+ break;
+
+ case 405:
+#line 3819 "gram.y"
+ {
+ yyval.intval = 1;
+ }
+ break;
+
+ case 406:
+#line 3825 "gram.y"
+ {
+ /* count up the number of plus signs */
+ yyval.intval = yyvsp[-1].intval + 1;
+ }
+ break;
+
+ case 407:
+#line 3832 "gram.y"
+ {
+ set_slurdir(Curr_grpsyl_p, Curr_grpsyl_p->nnotes - 1, yyvsp[0].intval);
+ }
+ break;
+
+ case 408:
+#line 3839 "gram.y"
+ {
+ Slurstyle = yyvsp[0].intval;
+ begin_slur(Curr_grpsyl_p, Curr_grpsyl_p->nnotes - 1);
+ }
+ break;
+
+ case 409:
+#line 3845 "gram.y"
+ {
+ /* empty list. Only allowed if only one note in following
+ * group. However, we don't know that yet, so marked pitch
+ * as 'U' for unknown */
+ add_slurto(Curr_grpsyl_p, 'U', USE_DFLT_OCTAVE,
+ Curr_grpsyl_p->nnotes - 1, Slurstyle);
+ }
+ break;
+
+ case 410:
+#line 3855 "gram.y"
+ {
+ add_slurto(Curr_grpsyl_p, 0, yyvsp[0].intval, Curr_grpsyl_p->nnotes - 1,
+ Slurstyle);
+ }
+ break;
+
+ case 414:
+#line 3873 "gram.y"
+ {
+ if (Doing_tab_staff == YES) {
+ yyerror("cannot specify string inside <> on tab staffs");
+ }
+ else {
+ add_slurto(Curr_grpsyl_p, yyvsp[-1].intval, yyvsp[0].intval,
+ Curr_grpsyl_p->nnotes - 1, Slurstyle);
+ }
+ }
+ break;
+
+ case 415:
+#line 3885 "gram.y"
+ {
+ /* save address associated with entire group */
+ if ( yyvsp[0].stringval != (char *) 0) {
+ addsym(yyvsp[0].stringval, Curr_grpsyl_p->c, CT_GRPSYL);
+ var_valid();
+ }
+ }
+ break;
+
+ case 416:
+#line 3894 "gram.y"
+ {
+ yyval.stringval = strcpy(Stringbuff, yytext);
+ }
+ break;
+
+ case 417:
+#line 3900 "gram.y"
+ {
+ /* a-g are usually pitches, but in this context, they
+ * are 1-character variable names. */
+ yyval.stringval = strcpy(Stringbuff, yytext);
+ }
+ break;
+
+ case 418:
+#line 3908 "gram.y"
+ {
+ /* usually m means measure, but here it is the variable m */
+ yyval.stringval = strcpy(Stringbuff, yytext);
+ }
+ break;
+
+ case 419:
+#line 3915 "gram.y"
+ {
+ /* usually rest, here variable r */
+ yyval.stringval = strcpy(Stringbuff, yytext);
+ }
+ break;
+
+ case 420:
+#line 3922 "gram.y"
+ {
+ /* usually space, here variable s */
+ yyval.stringval = strcpy(Stringbuff, yytext);
+ }
+ break;
+
+ case 421:
+#line 3929 "gram.y"
+ {
+ /* usually uncompressible, here variable u */
+ yyval.stringval = strcpy(Stringbuff, yytext);
+ }
+ break;
+
+ case 422:
+#line 3936 "gram.y"
+ {
+ /* usually natural, here variable n */
+ yyval.stringval = strcpy(Stringbuff, yytext);
+ }
+ break;
+
+ case 423:
+#line 3943 "gram.y"
+ {
+ /* usually double sharp, here variable x */
+ yyval.stringval = strcpy(Stringbuff, yytext);
+ }
+ break;
+
+ case 424:
+#line 3949 "gram.y"
+ {
+ /* longer variable -- one with more than one character name */
+ yyval.stringval = strcpy(Stringbuff, yytext);
+ }
+ break;
+
+ case 425:
+#line 3955 "gram.y"
+ {
+ end_tuplet(yyvsp[-3].intval, yyvsp[-1].ratval, yyvsp[-2].intval, yyvsp[-4].intval);
+ Getting_tup_dur = NO;
+ }
+ break;
+
+ case 426:
+#line 3961 "gram.y"
+ {
+ /* nothing -- use default of when to print tuplet number/bracket */
+ yyval.intval = PT_DEFAULT;
+ }
+ break;
+
+ case 427:
+#line 3968 "gram.y"
+ {
+ /* don't print tuplet or bracket */
+ yyval.intval = PT_NEITHER;
+ }
+ break;
+
+ case 428:
+#line 3975 "gram.y"
+ {
+ /* print number only */
+ yyval.intval = PT_NUMBER;
+ }
+ break;
+
+ case 429:
+#line 3982 "gram.y"
+ {
+ if (*yytext == 'y') {
+ yyval.intval = PT_BOTH;
+ }
+ else {
+ yyerror("tuplet number/bracket qualifier must be y or n or num");
+ }
+ }
+ break;
+
+ case 430:
+#line 3994 "gram.y"
+ {
+ begin_tuplet();
+ }
+ break;
+
+ case 431:
+#line 3999 "gram.y"
+ {
+ Getting_tup_dur = YES;
+ }
+ break;
+
+ case 432:
+#line 4004 "gram.y"
+ {
+ yyval.intval = PL_UNKNOWN;
+ }
+ break;
+
+ case 433:
+#line 4010 "gram.y"
+ {
+ if (yylval.intval == PL_BETWEEN) {
+ yyerror("between not allowed for tuplet side");
+ yyval.intval = PL_UNKNOWN;
+ }
+ }
+ break;
+
+ case 434:
+#line 4018 "gram.y"
+ {
+ /* optional time value is missing */
+ yyval.ratval.n = 0;
+ yyval.ratval.d = 1;
+ }
+ break;
+
+ case 435:
+#line 4026 "gram.y"
+ {
+ yyval.ratval = yyvsp[0].ratval;
+ }
+ break;
+
+ case 436:
+#line 4031 "gram.y"
+ {
+ }
+ break;
+
+ case 437:
+#line 4035 "gram.y"
+ {
+ Last_grpsyl_p = Curr_grpsyl_p = (struct GRPSYL *) 0;
+ }
+ break;
+
+ case 438:
+#line 4040 "gram.y"
+ {
+ }
+ break;
+
+ case 439:
+#line 4044 "gram.y"
+ {
+ /* empty, use default */
+ begin_range(PL_UNKNOWN);
+ yyval.intval = PL_UNKNOWN;
+ }
+ break;
+
+ case 440:
+#line 4052 "gram.y"
+ {
+ begin_range(yyvsp[0].intval);
+ }
+ break;
+
+ case 442:
+#line 4060 "gram.y"
+ {
+ /* means goes above or below all the staffs, regardless if
+ * some happen to be invisible at the moment, so find top
+ * or bottom visible staff as appropriate,and save that
+ * away as the staff range */
+ all();
+ }
+ break;
+
+ case 444:
+#line 4073 "gram.y"
+ {
+ /* if staff_range == 0, then only one staff specified, so
+ * use first staff number for both beginning and end of range */
+ save_staff_range(yyvsp[-1].intval, (yyvsp[0].intval == 0 ? yyvsp[-1].intval : yyvsp[0].intval) );
+ }
+ break;
+
+ case 445:
+#line 4080 "gram.y"
+ {
+ /* empty */
+ chk_range_type(NO);
+ yyval.intval = 0;
+ }
+ break;
+
+ case 446:
+#line 4088 "gram.y"
+ {
+ chk_range_type(NO);
+ yyval.intval = yyvsp[0].intval;
+ if (yyvsp[0].intval == 0) {
+ yyerror("staff of 0 is illegal");
+ }
+ }
+ break;
+
+ case 447:
+#line 4098 "gram.y"
+ {
+ chk_range_type(YES);
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 449:
+#line 4107 "gram.y"
+ { Place = yyvsp[0].intval; }
+ break;
+
+ case 451:
+#line 4112 "gram.y"
+ {
+ }
+ break;
+
+ case 452:
+#line 4117 "gram.y"
+ {
+ if (*yytext != 'c') {
+ yyerror("verse must be 'c' or number(s)");
+ }
+ else {
+ save_vno_range(0, 0);
+ }
+ }
+ break;
+
+ case 453:
+#line 4128 "gram.y"
+ {
+ }
+ break;
+
+ case 454:
+#line 4133 "gram.y"
+ {
+ }
+ break;
+
+ case 455:
+#line 4138 "gram.y"
+ {
+ /* if end of range is 0, not really a range, use first number
+ * for both beginning and end */
+ lyr_verse(yyvsp[-1].intval, (yyvsp[0].intval == 0 ? yyvsp[-1].intval : yyvsp[0].intval));
+ }
+ break;
+
+ case 456:
+#line 4145 "gram.y"
+ {
+ /* empty */
+ yyval.intval = 0;
+ }
+ break;
+
+ case 457:
+#line 4152 "gram.y"
+ {
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 458:
+#line 4157 "gram.y"
+ {
+ /* null token to allocate a GRPSYL for a lyric */
+ Last_grpsyl_p = Curr_grpsyl_p;
+ Curr_grpsyl_p = newGRPSYL(GS_SYLLABLE);
+ if (Last_grpsyl_p == (struct GRPSYL *) 0) {
+ Lyrics_p = Curr_grpsyl_p;
+ }
+ }
+ break;
+
+ case 459:
+#line 4167 "gram.y"
+ {
+ /* If user didn't specify a place, fix that. */
+ if (Place == PL_UNKNOWN) {
+ Place = PL_BELOW;
+ }
+ /* copies of the lyrics info has been made for all staffs/verses
+ * at this point, so get rid of master copy */
+ free_grpsyls(Lyrics_p);
+ }
+ break;
+
+ case 460:
+#line 4178 "gram.y"
+ {
+ /* empty -- need to derive times from music */
+ Lyrics_p = derive_lyrtime();
+ }
+ break;
+
+ case 465:
+#line 4197 "gram.y"
+ {
+ link_notegroup(Curr_grpsyl_p, Last_grpsyl_p);
+ /* Save pointer to current GRPSYL in case the next
+ * group gets its time value based on this one,
+ * and there are additive times on this one. */
+ Prev_grpsyl_p = Curr_grpsyl_p;
+ /* If there are additive times, add those in.
+ * We don't need to make extra groups for lyrics, because we
+ * don't need to tie groups together--the lyrics time
+ * can hold any legal RATIONAL, even those that aren't
+ * specifiable with a single time value. */
+ if (Extra_time_p != 0) {
+ struct TIMELIST *timelist_p;
+ for (timelist_p = Extra_time_p; timelist_p != 0;
+ timelist_p = timelist_p->next) {
+ Curr_grpsyl_p->fulltime = radd(Curr_grpsyl_p->fulltime, timelist_p->fulltime);
+ }
+ }
+ }
+ break;
+
+ case 466:
+#line 4219 "gram.y"
+ {
+ }
+ break;
+
+ case 467:
+#line 4223 "gram.y"
+ {
+ end_tuplet(yyvsp[-1].intval, yyvsp[0].ratval, NO, PL_UNKNOWN);
+ Getting_tup_dur = NO;
+ }
+ break;
+
+ case 468:
+#line 4229 "gram.y"
+ {
+ /* empty, will fill in an actual syllable later */
+ Curr_grpsyl_p->syl = (char *) 0;
+ }
+ break;
+
+ case 469:
+#line 4236 "gram.y"
+ {
+ /* space, not a lyric, so mark for later use */
+ Curr_grpsyl_p->grpcont = GC_SPACE;
+ }
+ break;
+
+ case 472:
+#line 4249 "gram.y"
+ {
+ /* If no [verseno] is specified, use -1 as special flag
+ * to be resolved later to "one more than previous",
+ * or if there wasn't a previous, to verse 1.
+ */
+ lyr_verse(-1, -1);
+ proc_lyrics(Lyrics_p, yyvsp[-1].stringval);
+ }
+ break;
+
+ case 473:
+#line 4260 "gram.y"
+ {
+ proc_lyrics(Lyrics_p, yyvsp[-1].stringval);
+ }
+ break;
+
+ case 474:
+#line 4265 "gram.y"
+ {
+ Currstruct_p = (struct MAINLL *) 0;
+ /* If there are alternating time signature,
+ * add an implicit time signature SSV for the
+ * next time signature in the list.
+ */
+ if (Alt_timesig_list != 0) {
+ end_prev_context();
+ Context = C_SCORE;
+ Currstruct_p = newMAINLLstruct(S_SSV, -1);
+ Currstruct_p->u.ssv_p->context = Context;
+ if (Tsig_visibility == PTS_ALWAYS &&
+ Next_alt_timesig != Alt_timesig_list) {
+ /* If user wants alternating time signatures
+ * printed on every measure, if there is
+ * a multirest, we will print multiple
+ * time signatures there, and might have to
+ * wrap around to the beginning of the list.
+ * So make a copy of the entire list,
+ * starting from wherever we are now,
+ * wrapping around to the beginning,
+ * and ending just before where we are now.
+ * Most of the time,
+ * there probably won't be a multirest,
+ * so this will be a waste, but unfortunately,
+ * we don't know yet whether there will be
+ * one or not, so need to do the whole list
+ * just in case.
+ *
+ * Calculate length of the two pieces:
+ * from where we are to end, and from
+ * beginning to where we are.
+ */
+ int remlength;
+ int wraplength;
+ remlength = strlen(Next_alt_timesig);
+ wraplength = strlen(Alt_timesig_list)
+ - remlength;
+ /* need one more for terminator. */
+ MALLOCA(char, Currstruct_p->u.ssv_p->timerep,
+ remlength + wraplength + 1);
+
+ /* copy remainder into beginning */
+ strcpy(Currstruct_p->u.ssv_p->timerep,
+ Next_alt_timesig);
+ /* copy the wrap-around part of list,
+ * but move the TSR_ALTERNATING from the
+ * end of that part to between the two parts */
+ Currstruct_p->u.ssv_p->timerep[remlength]
+ = TSR_ALTERNATING;
+ strncpy(Currstruct_p->u.ssv_p->timerep +
+ remlength + 1, Alt_timesig_list,
+ wraplength - 1);
+ /* Add the terminator */
+ Currstruct_p->u.ssv_p->timerep
+ [remlength + wraplength]
+ = TSR_END;
+
+ assign_timesig(Currstruct_p, PTS_ALWAYS,
+ &Next_alt_timesig);
+
+
+ /* Make this new copy the new
+ * head of the list */
+ Alt_timesig_list =
+ Currstruct_p->u.ssv_p->timerep;
+ }
+ else {
+ /* make a copy of the remaining alternating
+ * signatures and assign that */
+ MALLOCA(char, Currstruct_p->u.ssv_p->timerep,
+ strlen(Next_alt_timesig) + 1);
+ strcpy(Currstruct_p->u.ssv_p->timerep,
+ Next_alt_timesig);
+ assign_timesig(Currstruct_p,
+ (Tsig_visibility == PTS_ALWAYS ?
+ PTS_ALWAYS : PTS_NEVER),
+ &Next_alt_timesig);
+
+ /* If we reached end of list, start over */
+ if (Next_alt_timesig == 0) {
+ Next_alt_timesig = Alt_timesig_list;
+ }
+ }
+
+ asgnssv(Currstruct_p->u.ssv_p);
+ end_prev_context();
+ Context = C_MUSIC;
+ }
+ }
+ break;
+
+ case 477:
+#line 4364 "gram.y"
+ {
+ struct MAINLL * mll_p;
+ char *name;
+
+
+ name = (yylval.intval == YES ? "newpage" : "newscore");
+
+ (void) contextcheck(C_MUSIC | C_BLOCK, name);
+ Currstruct_p = newMAINLLstruct(S_FEED, yylineno);
+ Currstruct_p->u.feed_p->pagefeed = yyvsp[0].intval;
+
+ /* make sure we're not in the middle of a measure. Go
+ * backwards in main list. If we hit STAFF before a BAR,
+ * then there is a problem.
+ */
+ for (mll_p = Mainlltc_p; mll_p != (struct MAINLL *) 0;
+ mll_p = mll_p->prev) {
+
+ if (mll_p->str == S_BAR) {
+ break;
+ }
+ else if (mll_p->str == S_STAFF) {
+ l_yyerror(Curr_filename, yylineno,
+ "%s not allowed in middle of measure",
+ name);
+ break;
+ }
+ else if (mll_p->str == S_FEED) {
+ if (mll_p->prev != 0 &&
+ mll_p->prev->str == S_BLOCKHEAD) {
+ /* This is a feed following a block.
+ * If it was an implicit feed,
+ * we can get rid of it, because
+ * user now put an explicit one.
+ */
+ if (mll_p->inputlineno == -1) {
+ unlinkMAINLL(mll_p);
+ FREE(mll_p);
+ }
+ /* We must be in block context,
+ * so no need to check farther back.
+ */
+ break;
+ }
+ else {
+ l_yyerror(Curr_filename, yylineno,
+ "consecutive newscore/newpage not allowed");
+ }
+ break;
+ }
+ }
+ insertMAINLL(Currstruct_p, Mainlltc_p);
+
+ /* If this is inside a block, we need to create a new block
+ * and feed after it.
+ */
+ if (Context == C_BLOCK) {
+ CALLOC(BLOCKHEAD, Currblock_p, 1);
+ set_win_coord(Currblock_p->c);
+ Next_print_link_p_p = &(Currblock_p->printdata_p);
+ insertMAINLL(newMAINLLstruct(S_BLOCKHEAD, yylineno),
+ Mainlltc_p);
+ Mainlltc_p->u.blockhead_p = Currblock_p;
+ insertMAINLL(newMAINLLstruct(S_FEED, -1), Mainlltc_p);
+ }
+
+ }
+ break;
+
+ case 478:
+#line 4432 "gram.y"
+ {
+ Currstruct_p = (struct MAINLL *) 0;
+ }
+ break;
+
+ case 482:
+#line 4448 "gram.y"
+ {
+ yyvsp[0].floatval = adjust2inches(yyvsp[0].floatval); /* in case we are in centimeter mode */
+ if (yyvsp[-2].intval == RIGHTMARGIN) {
+ if (Currstruct_p->u.feed_p->rightmargin >= 0) {
+ l_warning(Curr_filename, yylineno,
+ "rightmargin specified more than once, using last instance");
+ /* fall through to override the previous */
+ }
+ Currstruct_p->u.feed_p->rightmargin = yyvsp[0].floatval;
+ }
+ else if (yyvsp[-2].intval == LEFTMARGIN) {
+ if (Currstruct_p->u.feed_p->leftmargin >= 0) {
+ l_warning(Curr_filename, yylineno,
+ "leftmargin specified more than once, using last instance");
+ /* fall through to override the previous */
+ }
+ Currstruct_p->u.feed_p->leftmargin = yyvsp[0].floatval;
+ }
+ else {
+ yyerror("unexpected parameter; only 'leftmargin' or 'rightmargin' allowed here");
+ }
+ chkmargin(Score.topmargin, Score.botmargin,
+ Currstruct_p->u.feed_p->leftmargin,
+ Currstruct_p->u.feed_p->rightmargin);
+ }
+ break;
+
+ case 489:
+#line 4494 "gram.y"
+ {
+
+ /* build a BAR struct and add it to the main list */
+ if (contextcheck(C_MUSIC, "bar") == YES) {
+
+ Currstruct_p = newMAINLLstruct(S_BAR, yylineno);
+ Currstruct_p->u.bar_p->bartype = (short) yylval.intval;
+ Currstruct_p->u.bar_p->endingloc = Endingloc;
+ if (yyvsp[-2].intval != L_NORMAL) {
+ if (yyvsp[-2].intval != L_DASHED && yyvsp[-2].intval != L_DOTTED) {
+ yyerror("bar modifier can only be 'dashed' or 'dotted'");
+ }
+ else if (yyvsp[0].intval != SINGLEBAR && yyvsp[0].intval != DOUBLEBAR) {
+ yyerror("only 'bar' or 'dblbar' can be dashed or dotted");
+ }
+ }
+ Currstruct_p->u.bar_p->linetype = yyvsp[-2].intval;
+ insertMAINLL(Currstruct_p, Mainlltc_p);
+ Currstruct_p->u.bar_p->timedssv_p = tssv_sort();
+
+ /* re-order things in the bar,
+ * make sure they are all consistent, etc */
+ do_bar(yyvsp[0].intval);
+
+ Got_ending = NO;
+ }
+ if (yyvsp[0].intval == RESTART && Endingloc != NOITEM) {
+ yyerror("restart cannot be used inside an ending");
+ }
+
+ /* User can specify bar type to use on preceeding staff when
+ * a repeatstart gets moved to the next scores's pseudo-bar */
+ if (yyvsp[-1].intval != -1) {
+ if (yyvsp[0].intval != REPEATSTART) {
+ yyerror("bar type for preceeding score only allowed on repeatstart");
+ }
+ if (Currstruct_p != 0 && Currstruct_p->u.bar_p != 0) {
+ Currstruct_p->u.bar_p->precbartype = yyvsp[-1].intval;
+ }
+ }
+ else {
+ /* Default is single bar. It could be argued that in
+ * the case of a key change on this bar, it really
+ * should be a dblbar, but user can force that
+ * if they want it. */
+ if (Currstruct_p != 0 && Currstruct_p->u.bar_p != 0) {
+ Currstruct_p->u.bar_p->precbartype = SINGLEBAR;
+ }
+ }
+ }
+ break;
+
+ case 490:
+#line 4547 "gram.y"
+ {
+ yyval.intval = -1; /* special value to mean "none specified" */
+ }
+ break;
+
+ case 491:
+#line 4553 "gram.y"
+ {
+ /* Parens wouldn't be strictly necessary to be able to parse,
+ * but seem useful semantically to make it clear this is
+ * optional, only applying when repeatstart is moved to
+ * next score's pseudo bar. */
+ yyval.intval = yyvsp[-1].intval;
+ }
+ break;
+
+ case 494:
+#line 4569 "gram.y"
+ {
+ if (Currstruct_p != (struct MAINLL *) 0) {
+ Currstruct_p->u.bar_p->padding += yyvsp[0].floatval * STEPSIZE;
+ }
+ }
+ break;
+
+ case 495:
+#line 4577 "gram.y"
+ {
+ if (Currstruct_p != (struct MAINLL *) 0) {
+ /* fill in location info */
+ if (yyvsp[0].stringval != (char *) 0) {
+ addsym(yyvsp[0].stringval, Currstruct_p->u.bar_p->c, CT_BAR);
+ }
+ }
+ }
+ break;
+
+ case 496:
+#line 4588 "gram.y"
+ {
+ if (Got_ending == YES) {
+ yyerror("Only one ending allowed per bar");
+ }
+ Got_ending = YES;
+
+ if (Currstruct_p != (struct MAINLL *) 0) {
+ if (Currstruct_p->u.bar_p->bartype == RESTART) {
+ yyerror("ending not allowed on restart");
+ }
+ /* fill in ending label if any */
+ Currstruct_p->u.bar_p->endinglabel = yyvsp[0].stringval;
+ Currstruct_p->u.bar_p->endingloc = Endingloc;
+ ped_endings(Endingloc);
+
+ /* for next time around, figure out what endingloc will
+ * be if user doesn't specify something different */
+ switch (Endingloc) {
+ case STARTITEM:
+ Endingloc = INITEM;
+ break;
+ case ENDITEM:
+ Endingloc = NOITEM;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ break;
+
+ case 497:
+#line 4620 "gram.y"
+ {
+ if (Currstruct_p != 0) {
+ if (Currstruct_p->u.bar_p->bartype == RESTART) {
+ yyerror("hidechanges not allowed on restart");
+ }
+ Currstruct_p->u.bar_p->hidechanges = YES;
+ }
+ }
+ break;
+
+ case 498:
+#line 4630 "gram.y"
+ {
+ if (Currstruct_p != 0) {
+ set_mnum(Currstruct_p->u.bar_p, yyvsp[0].intval);
+ }
+ }
+ break;
+
+ case 499:
+#line 4637 "gram.y"
+ {
+ /* +2 to skip font/size */
+ init_reh(-1, yyvsp[0].stringval + 2, Currstruct_p);
+ }
+ break;
+
+ case 500:
+#line 4643 "gram.y"
+ {
+ init_reh(yyvsp[0].intval, (char *)0, Currstruct_p);
+ }
+ break;
+
+ case 501:
+#line 4649 "gram.y"
+ {
+ if (Currstruct_p != (struct MAINLL *) 0) {
+ set_reh_string(Currstruct_p->u.bar_p, yyvsp[-4].intval, yyvsp[-3].intval, yyvsp[-2].intval, yyvsp[-1].stringval);
+ Currstruct_p->u.bar_p->dist = Dist;
+ Currstruct_p->u.bar_p->dist_usage = Dist_usage;
+ }
+ }
+ break;
+
+ case 502:
+#line 4659 "gram.y"
+ {
+ yyval.stringval = yyvsp[0].stringval;
+ (void) fix_string(yyvsp[0].stringval, FONT_TR, DFLT_SIZE, Curr_filename, yylineno);
+ Endingloc = STARTITEM;
+ }
+ break;
+
+ case 503:
+#line 4667 "gram.y"
+ {
+ if (Endingloc == NOITEM) {
+ yyerror("no ending in progress");
+ }
+ else {
+ Endingloc = ENDITEM;
+ }
+ yyval.stringval = (char *) 0;
+ }
+ break;
+
+ case 504:
+#line 4678 "gram.y"
+ {
+ /* null token to check for more than one rehearsal mark
+ * on one BAR */
+ if (Currstruct_p != (struct MAINLL *) 0 &&
+ Currstruct_p->u.bar_p->reh_type != REH_NONE) {
+ yyerror("only one rehearsal mark allowed per bar");
+ }
+ }
+ break;
+
+ case 505:
+#line 4688 "gram.y"
+ {
+ if (Currstruct_p != (struct MAINLL *) 0) {
+ Currstruct_p->u.bar_p->reh_type = REH_STRING;
+ }
+ }
+ break;
+
+ case 506:
+#line 4696 "gram.y"
+ {
+ if (Currstruct_p != (struct MAINLL *) 0) {
+ Currstruct_p->u.bar_p->reh_type = REH_MNUM;
+ }
+ yyval.stringval = (char *) 0;
+ }
+ break;
+
+ case 507:
+#line 4705 "gram.y"
+ {
+ if (Currstruct_p != (struct MAINLL *) 0) {
+ Currstruct_p->u.bar_p->reh_type = REH_NUM;
+ }
+ yyval.stringval = (char *) 0;
+ }
+ break;
+
+ case 508:
+#line 4714 "gram.y"
+ {
+ if (Currstruct_p != (struct MAINLL *) 0) {
+ Currstruct_p->u.bar_p->reh_type = REH_LET;
+ }
+ yyval.stringval = (char *) 0;
+ }
+ break;
+
+ case 509:
+#line 4722 "gram.y"
+ {
+ yyval.inpcoord_p = yyvsp[-4].inpcoord_p;
+ }
+ break;
+
+ case 510:
+#line 4727 "gram.y"
+ {
+ /* null token to allocate an INPCOORD */
+ CALLOC(INPCOORD, Curr_loc_info_p, 1);
+ yyval.inpcoord_p = Curr_loc_info_p;
+ /* set to positive in case input starts with an absolute
+ * x coordinate */
+ Plus_minus = 1;
+ }
+ break;
+
+ case 511:
+#line 4737 "gram.y"
+ {
+ /* reset sign to positive in case y coordinate is absolute */
+ Plus_minus = 1;
+ }
+ break;
+
+ case 513:
+#line 4746 "gram.y"
+ {
+ /* only 1 of these allowed per location */
+ if (Curr_loc_info_p->hor_p != (float *) 0) {
+ pfatal("only one horizontal location variable allowed per coordinate");
+ }
+ /* fill in the coord address and type */
+ Curr_loc_info_p->hor_p = symval(yyvsp[-2].stringval, &(Curr_loc_info_p->hor_p));
+ Curr_loc_info_p->htype = yyvsp[0].intval;
+ }
+ break;
+
+ case 515:
+#line 4762 "gram.y"
+ {
+ /* only valid letters is w */
+ if (*yytext != 'w') {
+ yyerror("invalid direction: must be x, w, or e");
+ }
+ yyval.intval = AW;
+ }
+ break;
+
+ case 516:
+#line 4771 "gram.y"
+ {
+ yyval.intval = AX;
+ }
+ break;
+
+ case 517:
+#line 4777 "gram.y"
+ {
+ /* only valid value is e */
+ if (*yytext != 'e') {
+ yyerror("invalid direction: must be x, w, or e");
+ }
+ yyval.intval = AE;
+ }
+ break;
+
+ case 521:
+#line 4794 "gram.y"
+ {
+ yyval.intval = Plus_minus = 1;
+ }
+ break;
+
+ case 522:
+#line 4800 "gram.y"
+ {
+ yyval.intval = Plus_minus = -1;
+ }
+ break;
+
+ case 523:
+#line 4805 "gram.y"
+ {
+ Curr_loc_info_p->hsteps += yyvsp[0].floatval * (float) Plus_minus;
+ }
+ break;
+
+ case 524:
+#line 4811 "gram.y"
+ {
+ if (Curr_loc_info_p->hor_p == (float *) 0) {
+ yyerror("must specify location before giving time offset");
+ }
+ /* add or subtract time value from horizontal */
+ if (Plus_minus == 1) {
+ Curr_loc_info_p->counts += yyvsp[0].floatval;
+ }
+ else {
+ Curr_loc_info_p->counts -= yyvsp[0].floatval;
+ }
+ }
+ break;
+
+ case 527:
+#line 4831 "gram.y"
+ {
+ /* only one of these allowed per location */
+ if (Curr_loc_info_p->vert_p != (float *) 0) {
+ pfatal("only one vertical location variable allowed per coordinate");
+ }
+ /* fill in the coord address and type */
+ Curr_loc_info_p->vert_p = symval(yyvsp[-2].stringval, &(Curr_loc_info_p->vert_p));
+ Curr_loc_info_p->vtype = yyvsp[0].intval;
+
+ }
+ break;
+
+ case 528:
+#line 4843 "gram.y"
+ {
+ yyval.intval = AN;
+ }
+ break;
+
+ case 529:
+#line 4849 "gram.y"
+ {
+ yyval.intval = AS;
+ }
+ break;
+
+ case 530:
+#line 4855 "gram.y"
+ {
+ /* only valid value here is y */
+ if (*yytext != 'y') {
+ yyerror("invalid direction: must be y, n, or s");
+ }
+ yyval.intval = AY;
+ }
+ break;
+
+ case 533:
+#line 4870 "gram.y"
+ {
+ }
+ break;
+
+ case 534:
+#line 4875 "gram.y"
+ {
+ /* this is number of steps up (or down if negative) */
+ Curr_loc_info_p->vsteps += yyvsp[0].floatval * (float) Plus_minus;
+ }
+ break;
+
+ case 535:
+#line 4881 "gram.y"
+ {
+ yyval.floatval = (float) yyvsp[0].intval;
+ }
+ break;
+
+ case 536:
+#line 4886 "gram.y"
+ {
+ sprintf(Tmpbuff,"%d.%s", yyvsp[-2].intval, yyvsp[0].stringval);
+ yyval.floatval = (float) atof(Tmpbuff);
+ }
+ break;
+
+ case 537:
+#line 4892 "gram.y"
+ {
+ sprintf(Tmpbuff,"0.%s", yyvsp[0].stringval);
+ yyval.floatval = (float) atof(Tmpbuff);
+ }
+ break;
+
+ case 538:
+#line 4898 "gram.y"
+ {
+ /* no decimal fraction part of float number */
+ yyval.stringval = "";
+ }
+ break;
+
+ case 540:
+#line 4908 "gram.y"
+ {
+ yyval.stringval = yytext;
+ }
+ break;
+
+ case 542:
+#line 4916 "gram.y"
+ {
+ Currstruct_p->u.line_p->linetype = yyvsp[-6].intval;
+ Currstruct_p->u.line_p->start = *(yyvsp[-3].inpcoord_p);
+ Currstruct_p->u.line_p->end = *(yyvsp[-1].inpcoord_p);
+ rep_inpcoord(yyvsp[-3].inpcoord_p, &(Currstruct_p->u.line_p->start));
+ rep_inpcoord(yyvsp[-1].inpcoord_p, &(Currstruct_p->u.line_p->end));
+ Currstruct_p->u.line_p->string = yyvsp[0].stringval;
+
+ /* copies of the location info went into the LINE struct,
+ * so we can free the original copy of the information */
+ if (yyvsp[-3].inpcoord_p) {
+ FREE(yyvsp[-3].inpcoord_p);
+ }
+ if (yyvsp[-1].inpcoord_p) {
+ FREE(yyvsp[-1].inpcoord_p);
+ }
+ insertMAINLL(Currstruct_p, Mainlltc_p);
+ Currstruct_p = (struct MAINLL *) 0;
+ }
+ break;
+
+ case 543:
+#line 4937 "gram.y"
+ {
+ /* null token to cause allocation of LINE struct */
+ (void) contextcheck(C_MUSIC, "line");
+ Currstruct_p = newMAINLLstruct(S_LINE, yylineno);
+ }
+ break;
+
+ case 544:
+#line 4944 "gram.y"
+ {
+ yyval.intval = L_NORMAL;
+ }
+ break;
+
+ case 546:
+#line 4954 "gram.y"
+ {
+ yyval.stringval = 0;
+ }
+ break;
+
+ case 547:
+#line 4959 "gram.y"
+ {
+ yyval.stringval = fix_string(yyvsp[0].stringval, Titlefont, Titlesize, Curr_filename, yylineno);
+ }
+ break;
+
+ case 548:
+#line 4965 "gram.y"
+ {
+ if (yyvsp[-6].intval == L_WAVY) {
+ l_yyerror(Curr_filename, yylineno,
+ "wavy curve not allowed");
+ }
+ Currstruct_p->u.curve_p->curvetype = yyvsp[-6].intval;
+ insertMAINLL(Currstruct_p, Mainlltc_p);
+ Currstruct_p = (struct MAINLL *) 0;
+ }
+ break;
+
+ case 549:
+#line 4976 "gram.y"
+ {
+ (void) contextcheck(C_MUSIC, "curve");
+ Currstruct_p = newMAINLLstruct(S_CURVE, yylineno);
+
+ /* get space for a list of locations and mark it as empty */
+ Item_count = 0;
+ Currstruct_p->u.curve_p->ncoord = (short) Item_count;
+ Currstruct_p->u.curve_p->nbulge = (short) Item_count;
+ MALLOC(INPCOORD, Currstruct_p->u.curve_p->coordlist, ITEMS);
+ Max_items = ITEMS;
+ }
+ break;
+
+ case 556:
+#line 5010 "gram.y"
+ {
+ /* get enough space to store some values if don't have enough */
+ if (Currstruct_p->u.curve_p->nbulge == 0) {
+ MALLOCA(float, Currstruct_p->u.curve_p->bulgelist, ITEMS);
+ }
+ else if ( (Currstruct_p->u.curve_p->nbulge % ITEMS) == 0) {
+ REALLOCA(float, Currstruct_p->u.curve_p->bulgelist,
+ Currstruct_p->u.curve_p->nbulge + ITEMS);
+ }
+
+ /* fill in the value and increment the count of how many */
+ Currstruct_p->u.curve_p->bulgelist[Currstruct_p->u.curve_p->nbulge] = yyvsp[-1].intval * yyvsp[0].floatval;
+ (Currstruct_p->u.curve_p->nbulge)++;
+ }
+ break;
+
+ case 557:
+#line 5026 "gram.y"
+ {
+ struct INPCOORD *curve_inpcoord_p;
+
+ /* If ran off end of list, make list bigger.
+ * We cannot use REALLOC here, since we need to update
+ * the tag reference information on each individual array
+ * element, so we alloc all new space, copy the existing data,
+ * and update the tag references, then free the old space,
+ * and redirect the pointer to the new space. */
+ if (Currstruct_p->u.curve_p->ncoord >= Max_items) {
+ struct INPCOORD *newlist_p;
+ int n;
+ Max_items += ITEMS;
+ MALLOC(INPCOORD, newlist_p, Max_items);
+ for (n = 0; n < Currstruct_p->u.curve_p->ncoord; n++) {
+ newlist_p[n] = Currstruct_p->u.curve_p->coordlist[n];
+ rep_inpcoord(
+ &(Currstruct_p->u.curve_p->coordlist[n]),
+ &(newlist_p[n]));
+ }
+ FREE(Currstruct_p->u.curve_p->coordlist);
+ Currstruct_p->u.curve_p->coordlist = newlist_p;
+ }
+
+ /* Add this entry to the end of the list, update the
+ * tag reference to point to this permanent copy rather
+ * the temporary one we will be deleting, and update the
+ * count of how many elements in the list. */
+ curve_inpcoord_p = &(Currstruct_p->u.curve_p->coordlist
+ [Currstruct_p->u.curve_p->ncoord]);
+ *curve_inpcoord_p = *(yyvsp[0].inpcoord_p);
+ rep_inpcoord(yyvsp[0].inpcoord_p, curve_inpcoord_p);
+ (Currstruct_p->u.curve_p->ncoord)++;
+ FREE(yyvsp[0].inpcoord_p);
+ }
+ break;
+
+ case 558:
+#line 5063 "gram.y"
+ {
+ attach_stuff();
+ /* so reset flag */
+ Defining_multiple = NO;
+ }
+ break;
+
+ case 559:
+#line 5071 "gram.y"
+ {
+ chk_stuff_header(yyvsp[-4].intval, yyvsp[-3].intval, yyvsp[-2].intval, Dist_usage);
+ add_to_sv_list();
+ }
+ break;
+
+ case 560:
+#line 5078 "gram.y"
+ {
+ /* Separate rule for phrase because it has the linetype
+ * modifier in front, unlike any other STUFF. The size,
+ * and dist are not really allowed, but we match them
+ * if they are there in order to give more clear error
+ * message than just "syntax error," since there was
+ * already code elsewhere to check for these errors.
+ */
+ set_stuff_type(ST_PHRASE);
+ chk_stuff_header(yyvsp[-3].intval, yyvsp[-5].intval, yyvsp[-2].intval, Dist_usage);
+ add_to_sv_list();
+ }
+ break;
+
+ case 561:
+#line 5092 "gram.y"
+ {
+ /* need a separate rule for midi, because it can include
+ * a voice as well as staff. It also cannot have the chord,
+ * size or place, although those are checked elsewhere anyway */
+ chk_stuff_header(-1, NO, PL_UNKNOWN, SD_NONE);
+ }
+ break;
+
+ case 562:
+#line 5101 "gram.y"
+ {
+ set_stuff_type(ST_MIDI);
+ begin_range(PL_UNKNOWN);
+ }
+ break;
+
+ case 564:
+#line 5111 "gram.y"
+ {
+ all();
+ add_to_sv_list();
+ }
+ break;
+
+ case 565:
+#line 5118 "gram.y"
+ {
+ /* dummy token for sole purpose of saving away current
+ * stuff type. We have to do this in order to have it in
+ * time to figure out the default place for "all" */
+ set_stuff_type(yyvsp[0].intval);
+ }
+ break;
+
+ case 566:
+#line 5127 "gram.y"
+ {
+ Curr_family = yyvsp[-1].intval;
+
+ switch (yyvsp[0].intval) {
+ case FONT_TR:
+ yyval.intval = ST_ROM;
+ break;
+ case FONT_TI:
+ yyval.intval = ST_ITAL;
+ break;
+ case FONT_TB:
+ yyval.intval = ST_BOLD;
+ break;
+ case FONT_TX:
+ yyval.intval = ST_BOLDITAL;
+ break;
+ default:
+ pfatal("unknown font");
+ break;
+ }
+ }
+ break;
+
+ case 567:
+#line 5151 "gram.y"
+ {
+ if (yyvsp[0].intval != L_NORMAL) {
+ /* user used 'dotted' or 'dashed' which applies only
+ * to use of T_L_ANGLE for slurs. Use generic error
+ * message so looks like any other similar error. */
+ yyerror("syntax error");
+ }
+ yyval.intval = ST_CRESC;
+ }
+ break;
+
+ case 568:
+#line 5163 "gram.y"
+ {
+ yyval.intval = ST_DECRESC;
+ }
+ break;
+
+ case 569:
+#line 5169 "gram.y"
+ {
+ yyval.intval = ST_PEDAL;
+ }
+ break;
+
+ case 570:
+#line 5175 "gram.y"
+ {
+ yyval.intval = ST_MUSSYM;
+ }
+ break;
+
+ case 571:
+#line 5181 "gram.y"
+ {
+ yyval.intval = ST_OCTAVE;
+ }
+ break;
+
+ case 572:
+#line 5187 "gram.y"
+ {
+ /* use -1 to indicate user didn't specify so must use default */
+ yyval.intval = -1;
+ }
+ break;
+
+ case 573:
+#line 5194 "gram.y"
+ {
+ yyval.intval = yyvsp[-1].intval;
+ }
+ break;
+
+ case 574:
+#line 5199 "gram.y"
+ {
+ yyval.intval = TM_NONE;
+ }
+ break;
+
+ case 575:
+#line 5205 "gram.y"
+ {
+ yyval.intval = yyvsp[0].intval;
+ }
+ break;
+
+ case 576:
+#line 5210 "gram.y"
+ {
+ Dist = 0;
+ Dist_usage = SD_NONE;
+ }
+ break;
+
+ case 577:
+#line 5217 "gram.y"
+ {
+ if (yyvsp[-1].intval != DIST) {
+ yyerror("unexpected parameter name instead of 'dist'");
+ }
+ else {
+ if (rangecheck(yyvsp[0].intval, -MAXDIST, MAXDIST, "dist") == YES) {
+ Dist = yyvsp[0].intval;
+ }
+ }
+ }
+ break;
+
+ case 578:
+#line 5230 "gram.y"
+ {
+ yyval.intval = yyvsp[-1].intval;
+ }
+ break;
+
+ case 579:
+#line 5236 "gram.y"
+ {
+ if (Dist_usage != SD_FORCE) {
+ l_warning(Curr_filename, yylineno,
+ "negative dist requires !, setting to 0");
+ yyval.intval = 0;
+ }
+ else {
+ yyval.intval = - yyvsp[-1].intval;
+ }
+ }
+ break;
+
+ case 580:
+#line 5248 "gram.y"
+ {
+ Dist_usage = SD_MIN;
+ }
+ break;
+
+ case 581:
+#line 5254 "gram.y"
+ {
+ Dist_usage = SD_FORCE;
+ }
+ break;
+
+ case 584:
+#line 5267 "gram.y"
+ {
+ add_stuff_item(yyvsp[-4].floatval, yyvsp[-3].floatval, Gracebackup, yyvsp[-2].stringval, Til_bars, Til_offset,
+ Dist, Dist_usage);
+ }
+ break;
+
+ case 585:
+#line 5274 "gram.y"
+ {
+ Til_bars = 0;
+ Til_offset = 0.0;
+ yyval.floatval = yyvsp[-1].floatval;
+ }
+ break;
+
+ case 586:
+#line 5281 "gram.y"
+ {
+ Gracebackup = 0;
+ }
+ break;
+
+ case 587:
+#line 5287 "gram.y"
+ {
+ Gracebackup = yyvsp[-1].intval;
+ }
+ break;
+
+ case 588:
+#line 5292 "gram.y"
+ {
+ yyval.floatval = 0.0;
+ }
+ break;
+
+ case 589:
+#line 5298 "gram.y"
+ {
+ yyval.floatval = yyvsp[-1].floatval * (float) yyvsp[-2].intval;
+ }
+ break;
+
+ case 590:
+#line 5303 "gram.y"
+ {
+ yyval.stringval = (char *) 0;
+ }
+ break;
+
+ case 591:
+#line 5309 "gram.y"
+ {
+ if (get_stuff_type() != ST_PEDAL) {
+ yyerror("'*' only valid with pedal");
+ }
+ MALLOCA(char, yyval.stringval, 12);
+ yyval.stringval[0] = FONT_MUSIC;
+ yyval.stringval[1] = DFLT_SIZE;
+ sprintf(yyval.stringval + 2, "\\(endped)");
+ }
+ break;
+
+ case 592:
+#line 5321 "gram.y"
+ {
+ yyval.stringval = yyvsp[0].stringval;
+ }
+ break;
+
+ case 593:
+#line 5326 "gram.y"
+ {
+ }
+ break;
+
+ case 594:
+#line 5331 "gram.y"
+ {
+ }
+ break;
+
+ case 595:
+#line 5336 "gram.y"
+ {
+ /** if there is a non-empty til_suffix, the floatnum better
+ ** have been an integer, and is really the number
+ * of bars. **/
+ if (yyvsp[0].intval == YES) {
+ Til_bars = (int) yyvsp[-1].floatval;
+ if (yyvsp[-1].floatval - Til_bars != 0.0) {
+ yyerror("number of measures in til clause must be a whole number");
+ }
+ }
+ else {
+ /* only a number, that means it was really a beat offset */
+ Til_offset = yyvsp[-1].floatval;
+ }
+ }
+ break;
+
+ case 596:
+#line 5353 "gram.y"
+ {
+ yyval.intval = NO;
+ }
+ break;
+
+ case 597:
+#line 5359 "gram.y"
+ {
+ yyval.intval = YES;
+ }
+ break;
+
+ case 598:
+#line 5364 "gram.y"
+ {
+ Til_offset = 0.0;
+ }
+ break;
+
+ case 599:
+#line 5370 "gram.y"
+ {
+ Til_offset = yyvsp[0].floatval;
+ }
+ break;
+
+ case 601:
+#line 5378 "gram.y"
+ {
+ newROLLINFO();
+ }
+ break;
+
+ case 602:
+#line 5384 "gram.y"
+ {
+ newROLLINFO();
+ setrolldir(UP);
+ }
+ break;
+
+ case 603:
+#line 5391 "gram.y"
+ {
+ newROLLINFO();
+ setrolldir(DOWN);
+ }
+ break;
+
+ case 605:
+#line 5402 "gram.y"
+ {
+ /* save staffnum and voice 1 for start of roll */
+ rollparam(yyvsp[0].intval, 1, -1, -1);
+ }
+ break;
+
+ case 606:
+#line 5409 "gram.y"
+ {
+ /* save staff and voice for start of roll */
+ rollparam(yyvsp[-1].intval, yyvsp[0].intval, -1, -1);
+ }
+ break;
+
+ case 608:
+#line 5418 "gram.y"
+ {
+ /* save staffnum, voice 1 for end of roll */
+ rollparam(-1, -1, yyvsp[0].intval, 1);
+ }
+ break;
+
+ case 609:
+#line 5425 "gram.y"
+ {
+ /* save staffnum and voice for end of roll */
+ rollparam(-1, -1, yyvsp[-1].intval, yyvsp[0].intval);
+ }
+ break;
+
+ case 610:
+#line 5432 "gram.y"
+ {
+ rolloffset( (double) yyvsp[-1].floatval);
+ }
+ break;
+
+ case 611:
+#line 5438 "gram.y"
+ {
+ rolloffset( (double) yyvsp[-1].floatval);
+ }
+ break;
+
+ case 612:
+#line 5443 "gram.y"
+ {
+ if (Curr_family == FAMILY_DFLT) {
+ Curr_family = Score.fontfamily;
+ }
+ Extra = extra_needed(Curr_family + Curr_font, Curr_size, yyvsp[0].stringval);
+ proc_printcmd(yyvsp[-2].intval, Curr_loc_info_p, yyvsp[0].stringval, Curr_family + Curr_font,
+ Curr_size, yyvsp[-1].intval, NO, (yyvsp[-1].intval == YES ? Extra : (double) 0.0));
+ }
+ break;
+
+ case 613:
+#line 5454 "gram.y"
+ {
+ if (yyvsp[-1].intval == YES) {
+ warning("nl ignored for postscript");
+ }
+ proc_printcmd(J_NONE, Curr_loc_info_p, yyvsp[0].stringval, FONT_UNKNOWN,
+ DFLT_SIZE, NO, YES, (double) 0.0);
+ end_raw();
+ }
+ break;
+
+ case 614:
+#line 5465 "gram.y"
+ {
+ begin_raw();
+ }
+ break;
+
+ case 616:
+#line 5473 "gram.y"
+ {
+ /* this means print at default location */
+ Curr_loc_info_p = (struct INPCOORD *) 0;
+ yyval.intval = NO;
+ }
+ break;
+
+ case 617:
+#line 5481 "gram.y"
+ {
+ Curr_loc_info_p = (struct INPCOORD *) 0;
+ yyval.intval = YES;
+ }
+ break;
+
+ case 618:
+#line 5488 "gram.y"
+ {
+ yyval.intval = NO;
+ }
+ break;
+
+
+ }
+
+/* Line 1016 of /usr/share/bison/yacc.c. */
+#line 7824 "y.tab.c"
+\f
+ yyvsp -= yylen;
+ yyssp -= yylen;
+
+
+#if YYDEBUG
+ if (yydebug)
+ {
+ short *yyssp1 = yyss - 1;
+ YYFPRINTF (stderr, "state stack now");
+ while (yyssp1 != yyssp)
+ YYFPRINTF (stderr, " %d", *++yyssp1);
+ YYFPRINTF (stderr, "\n");
+ }
+#endif
+
+ *++yyvsp = yyval;
+
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if YYERROR_VERBOSE
+ yyn = yypact[yystate];
+
+ if (YYPACT_NINF < yyn && yyn < YYLAST)
+ {
+ YYSIZE_T yysize = 0;
+ int yytype = YYTRANSLATE (yychar);
+ char *yymsg;
+ int yyx, yycount;
+
+ yycount = 0;
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ for (yyx = yyn < 0 ? -yyn : 0;
+ yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+ yysize += yystrlen ("parse error, unexpected ") + 1;
+ yysize += yystrlen (yytname[yytype]);
+ yymsg = (char *) YYSTACK_ALLOC (yysize);
+ if (yymsg != 0)
+ {
+ char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
+ yyp = yystpcpy (yyp, yytname[yytype]);
+
+ if (yycount < 5)
+ {
+ yycount = 0;
+ for (yyx = yyn < 0 ? -yyn : 0;
+ yyx < (int) (sizeof (yytname) / sizeof (char *));
+ yyx++)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ {
+ const char *yyq = ! yycount ? ", expecting " : " or ";
+ yyp = yystpcpy (yyp, yyq);
+ yyp = yystpcpy (yyp, yytname[yyx]);
+ yycount++;
+ }
+ }
+ yyerror (yymsg);
+ YYSTACK_FREE (yymsg);
+ }
+ else
+ yyerror ("parse error; also virtual memory exhausted");
+ }
+ else
+#endif /* YYERROR_VERBOSE */
+ yyerror ("parse error");
+ }
+ goto yyerrlab1;
+
+
+/*----------------------------------------------------.
+| yyerrlab1 -- error raised explicitly by an action. |
+`----------------------------------------------------*/
+yyerrlab1:
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ {
+ /* Pop the error token. */
+ YYPOPSTACK;
+ /* Pop the rest of the stack. */
+ while (yyssp > yyss)
+ {
+ YYDPRINTF ((stderr, "Error: popping "));
+ YYDSYMPRINT ((stderr,
+ yystos[*yyssp],
+ *yyvsp));
+ YYDPRINTF ((stderr, "\n"));
+ yydestruct (yystos[*yyssp], *yyvsp);
+ YYPOPSTACK;
+ }
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
+ yychar, yytname[yychar1]));
+ yydestruct (yychar1, yylval);
+ yychar = YYEMPTY;
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (yyn != YYPACT_NINF)
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+ YYDPRINTF ((stderr, "Error: popping "));
+ YYDSYMPRINT ((stderr,
+ yystos[*yyssp], *yyvsp));
+ YYDPRINTF ((stderr, "\n"));
+
+ yydestruct (yystos[yystate], *yyvsp);
+ yyvsp--;
+ yystate = *--yyssp;
+
+
+#if YYDEBUG
+ if (yydebug)
+ {
+ short *yyssp1 = yyss - 1;
+ YYFPRINTF (stderr, "Error: state stack now");
+ while (yyssp1 != yyssp)
+ YYFPRINTF (stderr, " %d", *++yyssp1);
+ YYFPRINTF (stderr, "\n");
+ }
+#endif
+ }
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ YYDPRINTF ((stderr, "Shifting error token, "));
+
+ *++yyvsp = yylval;
+
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#ifndef yyoverflow
+/*----------------------------------------------.
+| yyoverflowlab -- parser overflow comes here. |
+`----------------------------------------------*/
+yyoverflowlab:
+ yyerror ("parser stack overflow");
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+ return yyresult;
+}
+
+
+#line 5493 "gram.y"
+
+
+#include <stdio.h>
+
+
+/* print error message along with current filename and line number */
+
+int
+yyerror(msg)
+
+char *msg;
+
+{
+ if (strncmp(msg, "syntax error", 12) == 0 ||
+ strncmp(msg, "parse error", 11) == 0) {
+ /* beef up yacc's default syntax error message */
+ if (*yytext == '\n') {
+ l_yyerror(Curr_filename, yylineno,
+ "error detected at end of line (maybe missing semicolon or other required element?)");
+ }
+ else {
+ l_yyerror(Curr_filename, yylineno,
+ "error detected at '%s'", yytext);
+ }
+ }
+ else {
+ l_yyerror(Curr_filename, yylineno, "%s", msg);
+ }
+
+ /* return something to keep lint happy */
+ return(0);
+}
+\f
+
+/* if argument is surrounded by double quotes, remove them and return the
+ * unquoted string. Actually just NULL out the end quote and return a
+ * pointer to beyond the leading quote */
+
+static char *
+stripquotes(string)
+
+char *string;
+
+{
+ char *p;
+
+ p = string + strlen(string) - 1;
+ if (*p == '"') {
+ *p = '\0';
+ }
+ return( *string == '"' ? string + 1 : string);
+}
+
+
+/* make sure each header/footer type specified only once */
+
+static void
+chkdup_headfoot(flag, which)
+
+int flag; /* if non-zero, had gotten this head/foot before */
+char *which; /* header, footer, header2 or footer2 */
+
+{
+ if (flag != 0) {
+ l_yyerror(Curr_filename, yylineno,
+ "%s context specified more than once", which);
+ }
+}
+\f
+
+/* when entering new context, need to save away everything about current one */
+
+static void
+end_prev_context()
+
+{
+ struct MAINLL *place_p; /* where to insert SSV in main list */
+
+
+ /* assume we will place at the end of main list. Later we'll set
+ * the right value if that assumption is wrong */
+ place_p = Mainlltc_p;
+
+ /* If current main list item hasn't been added to list yet,
+ * do that now. */
+ if (Currstruct_p != (struct MAINLL *) 0 && Currstruct_p != place_p) {
+
+ if (Currstruct_p->str == S_SSV) {
+
+ if (List_of_staffs_p != (struct MAINLL *) 0) {
+ yyerror("can't change context inside a measure");
+ Currstruct_p = (struct MAINLL *) 0;
+ return;
+ }
+
+ /* if is an SSV struct, we also need to set the
+ * correct values at this point, because the
+ * parser needs to know current values of some
+ * things (like font and point size) */
+ asgnssv(Currstruct_p->u.ssv_p);
+
+ /* if this SSV is after a FEED, we have to move it
+ * before the FEED in order to follow the rules of
+ * what comes when on the main list */
+ for ( ; place_p != (struct MAINLL *) 0 &&
+ place_p->str == S_FEED;
+ place_p = place_p->prev) {
+ }
+ }
+
+ insertMAINLL(Currstruct_p, place_p);
+ }
+
+ if (Currstruct_p != 0 && Currstruct_p->str == S_SSV) {
+ /* memorize or recall beamstyle and timeunit if appropriate */
+ remember_tsig_params(Currstruct_p);
+ }
+
+ Curr_grpsyl_p = (struct GRPSYL *) 0;
+ Currblock_p = (struct BLOCKHEAD *) 0;
+ set_win_coord(0);
+}
+\f
+
+/* if defining more than one voice at the moment, not valid to set
+ * a location variable. Print message and reset flag so we don't
+ * give any more of the same message this measure */
+
+static void
+var_valid()
+
+{
+ if (Defining_multiple == YES) {
+ yyerror("location tag is only allowed when defining a single voice");
+ Defining_multiple = NO;
+ }
+ else if (Chord_at_a_time == YES) {
+ yyerror("location tag not allowed with chord-at-a-time input");
+ }
+}
+\f
+
+/* do a print command like left, right, or center. Allocate a PRINTDATA
+ * struct and fill in all the information about what to print and where
+ * to print it. */
+
+static void
+proc_printcmd(justifytype, inpc_p, str, font, size, got_nl, isPostScript, extra)
+
+int justifytype; /* J_LEFT, etc */
+struct INPCOORD *inpc_p; /* where to print */
+char *str; /* the string to print */
+int font;
+int size;
+int got_nl; /* YES if should go to next line before printing */
+int isPostScript; /* YES if is raw PostScript rather than normal print */
+double extra; /* how much extra vetical padding to add */
+
+{
+ struct PRINTDATA *curr_print_p;
+
+
+ (void) contextcheck(C_MUSIC | C_BLOCKHEAD, "print");
+
+ /* save all the info in a PRINTDATA struct */
+ MALLOC(PRINTDATA, curr_print_p, 1);
+
+ if (inpc_p == (struct INPCOORD *) 0) {
+
+ /* print at default location */
+ curr_print_p->location.vert_p = symval("_cur", (float **) 0);
+
+ switch (justifytype) {
+ case J_LEFT:
+ case J_RAGPARA:
+ case J_JUSTPARA:
+ /* default x is relative to _win.w */
+ curr_print_p->location.hor_p = symval("_win", (float **) 0);
+ curr_print_p->location.htype = AW;
+ break;
+ case J_RIGHT:
+ /* default x is relative to _win.e */
+ curr_print_p->location.hor_p = symval("_win", (float **) 0);
+ curr_print_p->location.htype = AE;
+ break;
+ case J_CENTER:
+ /* default x is relative to _win.x */
+ curr_print_p->location.hor_p = symval("_win", (float **) 0);
+ curr_print_p->location.htype = AX;
+ break;
+ case J_NONE:
+ default:
+ /* default is at current location */
+ curr_print_p->location.hor_p = symval("_cur", (float **) 0);
+ curr_print_p->location.htype = AX;
+ break;
+ }
+
+ curr_print_p->location.hsteps = 0.0;
+ curr_print_p->location.counts = 0.0;
+ curr_print_p->location.vtype = AY;
+ curr_print_p->location.vsteps = -extra;
+
+ /* If this is the first print command in a block,
+ * we implicitly go down by the font ascent. */
+ if (isPostScript == NO && Currblock_p != 0
+ && Next_print_link_p_p
+ == &(Currblock_p->printdata_p) ) {
+ curr_print_p->location.vsteps -= fontascent(font, size)
+ / STEPSIZE;
+ got_nl = NO;
+ }
+
+ }
+ else {
+ curr_print_p->location = *(inpc_p);
+ rep_inpcoord(inpc_p, &(curr_print_p->location) );
+ FREE(inpc_p);
+ }
+
+ curr_print_p->isPostScript = isPostScript;
+ if (isPostScript == YES) {
+ curr_print_p->width = 0.0;
+ }
+ else {
+ curr_print_p->width = strwidth(str);
+ }
+ curr_print_p->justifytype = (short) justifytype;
+ curr_print_p->string = str;
+ curr_print_p->inputfile = Curr_filename;
+ curr_print_p->inputlineno = (short) yylineno;
+
+ /* special case of user asking that this be printed
+ * on the next line. In this case we go down by the
+ * current point size */
+ if (got_nl) {
+ curr_print_p->location.vsteps -=
+ fontheight(font, size) / STEPSIZE;
+ }
+
+ /* Now link onto proper list -- could be in BLOCKHEAD
+ * context or doing a PRHEAD. If we are in BLOCKHEAD context, we
+ * definitely have something in the main list to attach to.
+ * If in C_MUSIC, we may or may not depending on whether
+ * this is the first in a series of print commands. */
+ if ( ((Context & C_BLOCKHEAD) != 0)
+ || ((Currstruct_p != (struct MAINLL *) 0) &&
+ (Currstruct_p->str == S_PRHEAD) ) ) {
+ if (Next_print_link_p_p == (struct PRINTDATA **) 0) {
+ pfatal("Next_print_link_p_p is null");
+ }
+ /* this means the value of Next_print_link_p_p
+ * is valid and will tell us where to link */
+ *Next_print_link_p_p = curr_print_p;
+ }
+ else {
+ /* We must be in music context, but the last
+ * thing we saw wasn't a print command, so
+ * we have to allocate a PRHEAD and put it
+ * in the main list and attach to that. */
+ /* allocate a new struct, put on main list and attach
+ * the print command to it */
+ Currstruct_p = newMAINLLstruct(S_PRHEAD, yylineno);
+ insertMAINLL(Currstruct_p, Mainlltc_p);
+ Currstruct_p->u.prhead_p->printdata_p = curr_print_p;
+ Currstruct_p = (struct MAINLL *) 0;
+ }
+
+ /* in any case, if we get another print command right away, it
+ * should be linked onto this one, so remember where we are */
+ Next_print_link_p_p = &(curr_print_p->next);
+ curr_print_p->next = (struct PRINTDATA *) 0;
+}
+\f
+
+/* if the given string has a higher ascent than the given font/size, return
+ * the amount is it higher, in stepsizes */
+
+static double
+extra_needed(font, size, string)
+
+int font; /* default font for this string */
+int size; /* default size for this string */
+char *string; /* string, which might contain \s(xx) to make it bigger
+ * than normal */
+
+{
+ double usual_ascent;
+ double this_string_ascent;
+
+
+ /* get expected ascent for this font/size and actual for string */
+ usual_ascent = fontascent(font, size);
+ (void) fix_string(string, font, size, Curr_filename, yylineno);
+ this_string_ascent = strascent(string);
+
+ /* if this string is too tall, return by how much it is too tall */
+ if (this_string_ascent > usual_ascent) {
+ return (this_string_ascent - usual_ascent) / STEPSIZE;
+ }
+ else {
+ return(0.0);
+ }
+}
+\f
+
+/* Sometimes lexer will recognize something as a keyword, but it's
+ * really a bunch of note letters, due to context. This function turns
+ * the mistaken keyword into notes. It handles a through g and r and s, but
+ * not n and u which would also be troublesome.
+ */
+
+static void
+keyword_notes(str)
+
+char *str;
+
+{
+ for ( ; *str != '\0'; str++) {
+ /* On the last letter, if it's a true pitch, have to
+ * push it back into input, because it could be followed
+ * by an accidental or octave mark or tick or something. */
+ if (*(str+1) == '\0' && *str >= 'a' && *str <= 'g') {
+ pushback(*str);
+ }
+ else {
+ add_note(Curr_grpsyl_p, (int) *str, 0, USE_DFLT_OCTAVE,
+ 0, NO, (char *) 0);
+ }
+ }
+}
+\f
+
+/* Free up the current additive time list, if any */
+
+static void
+free_extra_time()
+{
+ struct TIMELIST *tl_p;
+
+ /* If this was the most recently allocated list, we can free it.
+ * We can't free otherwise, since Extra_time_p might be
+ * pointing to one from an SSV, which must be kept around. */
+ if (Extra_time_p == Last_alloced_timelist_p) {
+ while (Extra_time_p != 0) {
+ tl_p = Extra_time_p->next;
+ FREE(Extra_time_p);
+ Extra_time_p = tl_p;
+ }
+ }
+ Extra_time_p = 0;
+ Last_alloced_timelist_p = 0;
+ Curr_timelist_p = 0;
+}
+\f
+
+/* Add an item to the internal representation of the time signature
+ * currently being collected */
+
+static void
+tsig_item(item)
+
+int item; /* the byte to add to timerep */
+
+{
+ if (Tsig_offset >= MAXTSLEN - 1) {
+ l_ufatal(Curr_filename, yylineno,
+ "time signature is too complicated");
+ }
+ Timerep[Tsig_offset++] = (char) item;
+}
+