Imported Upstream version 1.22.4
[platform/upstream/groff.git] / src / preproc / pic / pic.cpp
1 /* A Bison parser, made by GNU Bison 3.2.  */
2
3 /* Bison implementation for Yacc-like parsers in C
4
5    Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
6
7    This program is free software: you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation, either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 /* As a special exception, you may create a larger work that contains
21    part or all of the Bison parser skeleton and distribute that work
22    under terms of your choice, so long as that work isn't itself a
23    parser generator using the skeleton or a modified version thereof
24    as a parser skeleton.  Alternatively, if you modify or redistribute
25    the parser skeleton itself, you may (at your option) remove this
26    special exception, which will cause the skeleton and the resulting
27    Bison output files to be licensed under the GNU General Public
28    License without this special exception.
29
30    This special exception was added by the Free Software Foundation in
31    version 2.2 of Bison.  */
32
33 /* C LALR(1) parser skeleton written by Richard Stallman, by
34    simplifying the original so-called "semantic" parser.  */
35
36 /* All symbols defined below should begin with yy or YY, to avoid
37    infringing on user name space.  This should be done even for local
38    variables, as they might otherwise be expanded by user macros.
39    There are some unavoidable exceptions within include files to
40    define necessary library symbols; they are noted "INFRINGES ON
41    USER NAME SPACE" below.  */
42
43 /* Undocumented macros, especially those whose name start with YY_,
44    are private implementation details.  Do not rely on them.  */
45
46 /* Identify Bison output.  */
47 #define YYBISON 1
48
49 /* Bison version.  */
50 #define YYBISON_VERSION "3.2"
51
52 /* Skeleton name.  */
53 #define YYSKELETON_NAME "yacc.c"
54
55 /* Pure parsers.  */
56 #define YYPURE 0
57
58 /* Push parsers.  */
59 #define YYPUSH 0
60
61 /* Pull parsers.  */
62 #define YYPULL 1
63
64
65
66
67 /* First part of user prologue.  */
68 #line 19 "../src/preproc/pic/pic.ypp" /* yacc.c:338  */
69
70 #include "pic.h"
71 #include "ptable.h"
72 #include "object.h"
73
74 extern int delim_flag;
75 extern void copy_rest_thru(const char *, const char *);
76 extern void copy_file_thru(const char *, const char *, const char *);
77 extern void push_body(const char *);
78 extern void do_for(char *var, double from, double to,
79                    int by_is_multiplicative, double by, char *body);
80 extern void do_lookahead();
81
82 /* Maximum number of characters produced by printf("%g") */
83 #define GDIGITS 14
84
85 int yylex();
86 void yyerror(const char *);
87
88 void reset(const char *nm);
89 void reset_all();
90
91 place *lookup_label(const char *);
92 void define_label(const char *label, const place *pl);
93
94 direction current_direction;
95 position current_position;
96
97 implement_ptable(place)
98
99 PTABLE(place) top_table;
100
101 PTABLE(place) *current_table = &top_table;
102 saved_state *current_saved_state = 0;
103
104 object_list olist;
105
106 const char *ordinal_postfix(int n);
107 const char *object_type_name(object_type type);
108 char *format_number(const char *form, double n);
109 char *do_sprintf(const char *form, const double *v, int nv);
110
111
112 #line 113 "src/preproc/pic/pic.cpp" /* yacc.c:338  */
113 # ifndef YY_NULLPTR
114 #  if defined __cplusplus
115 #   if 201103L <= __cplusplus
116 #    define YY_NULLPTR nullptr
117 #   else
118 #    define YY_NULLPTR 0
119 #   endif
120 #  else
121 #   define YY_NULLPTR ((void*)0)
122 #  endif
123 # endif
124
125 /* Enabling verbose error messages.  */
126 #ifdef YYERROR_VERBOSE
127 # undef YYERROR_VERBOSE
128 # define YYERROR_VERBOSE 1
129 #else
130 # define YYERROR_VERBOSE 0
131 #endif
132
133 /* In a future release of Bison, this section will be replaced
134    by #include "y.tab.h".  */
135 #ifndef YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED
136 # define YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED
137 /* Debug traces.  */
138 #ifndef YYDEBUG
139 # define YYDEBUG 0
140 #endif
141 #if YYDEBUG
142 extern int yydebug;
143 #endif
144
145 /* Token type.  */
146 #ifndef YYTOKENTYPE
147 # define YYTOKENTYPE
148   enum yytokentype
149   {
150     LABEL = 258,
151     VARIABLE = 259,
152     NUMBER = 260,
153     TEXT = 261,
154     COMMAND_LINE = 262,
155     DELIMITED = 263,
156     ORDINAL = 264,
157     TH = 265,
158     LEFT_ARROW_HEAD = 266,
159     RIGHT_ARROW_HEAD = 267,
160     DOUBLE_ARROW_HEAD = 268,
161     LAST = 269,
162     BOX = 270,
163     CIRCLE = 271,
164     ELLIPSE = 272,
165     ARC = 273,
166     LINE = 274,
167     ARROW = 275,
168     MOVE = 276,
169     SPLINE = 277,
170     HEIGHT = 278,
171     RADIUS = 279,
172     FIGNAME = 280,
173     WIDTH = 281,
174     DIAMETER = 282,
175     UP = 283,
176     DOWN = 284,
177     RIGHT = 285,
178     LEFT = 286,
179     FROM = 287,
180     TO = 288,
181     AT = 289,
182     WITH = 290,
183     BY = 291,
184     THEN = 292,
185     SOLID = 293,
186     DOTTED = 294,
187     DASHED = 295,
188     CHOP = 296,
189     SAME = 297,
190     INVISIBLE = 298,
191     LJUST = 299,
192     RJUST = 300,
193     ABOVE = 301,
194     BELOW = 302,
195     OF = 303,
196     THE = 304,
197     WAY = 305,
198     BETWEEN = 306,
199     AND = 307,
200     HERE = 308,
201     DOT_N = 309,
202     DOT_E = 310,
203     DOT_W = 311,
204     DOT_S = 312,
205     DOT_NE = 313,
206     DOT_SE = 314,
207     DOT_NW = 315,
208     DOT_SW = 316,
209     DOT_C = 317,
210     DOT_START = 318,
211     DOT_END = 319,
212     DOT_X = 320,
213     DOT_Y = 321,
214     DOT_HT = 322,
215     DOT_WID = 323,
216     DOT_RAD = 324,
217     SIN = 325,
218     COS = 326,
219     ATAN2 = 327,
220     LOG = 328,
221     EXP = 329,
222     SQRT = 330,
223     K_MAX = 331,
224     K_MIN = 332,
225     INT = 333,
226     RAND = 334,
227     SRAND = 335,
228     COPY = 336,
229     THRU = 337,
230     TOP = 338,
231     BOTTOM = 339,
232     UPPER = 340,
233     LOWER = 341,
234     SH = 342,
235     PRINT = 343,
236     CW = 344,
237     CCW = 345,
238     FOR = 346,
239     DO = 347,
240     IF = 348,
241     ELSE = 349,
242     ANDAND = 350,
243     OROR = 351,
244     NOTEQUAL = 352,
245     EQUALEQUAL = 353,
246     LESSEQUAL = 354,
247     GREATEREQUAL = 355,
248     LEFT_CORNER = 356,
249     RIGHT_CORNER = 357,
250     NORTH = 358,
251     SOUTH = 359,
252     EAST = 360,
253     WEST = 361,
254     CENTER = 362,
255     END = 363,
256     START = 364,
257     RESET = 365,
258     UNTIL = 366,
259     PLOT = 367,
260     THICKNESS = 368,
261     FILL = 369,
262     COLORED = 370,
263     OUTLINED = 371,
264     SHADED = 372,
265     XSLANTED = 373,
266     YSLANTED = 374,
267     ALIGNED = 375,
268     SPRINTF = 376,
269     COMMAND = 377,
270     DEFINE = 378,
271     UNDEF = 379
272   };
273 #endif
274 /* Tokens.  */
275 #define LABEL 258
276 #define VARIABLE 259
277 #define NUMBER 260
278 #define TEXT 261
279 #define COMMAND_LINE 262
280 #define DELIMITED 263
281 #define ORDINAL 264
282 #define TH 265
283 #define LEFT_ARROW_HEAD 266
284 #define RIGHT_ARROW_HEAD 267
285 #define DOUBLE_ARROW_HEAD 268
286 #define LAST 269
287 #define BOX 270
288 #define CIRCLE 271
289 #define ELLIPSE 272
290 #define ARC 273
291 #define LINE 274
292 #define ARROW 275
293 #define MOVE 276
294 #define SPLINE 277
295 #define HEIGHT 278
296 #define RADIUS 279
297 #define FIGNAME 280
298 #define WIDTH 281
299 #define DIAMETER 282
300 #define UP 283
301 #define DOWN 284
302 #define RIGHT 285
303 #define LEFT 286
304 #define FROM 287
305 #define TO 288
306 #define AT 289
307 #define WITH 290
308 #define BY 291
309 #define THEN 292
310 #define SOLID 293
311 #define DOTTED 294
312 #define DASHED 295
313 #define CHOP 296
314 #define SAME 297
315 #define INVISIBLE 298
316 #define LJUST 299
317 #define RJUST 300
318 #define ABOVE 301
319 #define BELOW 302
320 #define OF 303
321 #define THE 304
322 #define WAY 305
323 #define BETWEEN 306
324 #define AND 307
325 #define HERE 308
326 #define DOT_N 309
327 #define DOT_E 310
328 #define DOT_W 311
329 #define DOT_S 312
330 #define DOT_NE 313
331 #define DOT_SE 314
332 #define DOT_NW 315
333 #define DOT_SW 316
334 #define DOT_C 317
335 #define DOT_START 318
336 #define DOT_END 319
337 #define DOT_X 320
338 #define DOT_Y 321
339 #define DOT_HT 322
340 #define DOT_WID 323
341 #define DOT_RAD 324
342 #define SIN 325
343 #define COS 326
344 #define ATAN2 327
345 #define LOG 328
346 #define EXP 329
347 #define SQRT 330
348 #define K_MAX 331
349 #define K_MIN 332
350 #define INT 333
351 #define RAND 334
352 #define SRAND 335
353 #define COPY 336
354 #define THRU 337
355 #define TOP 338
356 #define BOTTOM 339
357 #define UPPER 340
358 #define LOWER 341
359 #define SH 342
360 #define PRINT 343
361 #define CW 344
362 #define CCW 345
363 #define FOR 346
364 #define DO 347
365 #define IF 348
366 #define ELSE 349
367 #define ANDAND 350
368 #define OROR 351
369 #define NOTEQUAL 352
370 #define EQUALEQUAL 353
371 #define LESSEQUAL 354
372 #define GREATEREQUAL 355
373 #define LEFT_CORNER 356
374 #define RIGHT_CORNER 357
375 #define NORTH 358
376 #define SOUTH 359
377 #define EAST 360
378 #define WEST 361
379 #define CENTER 362
380 #define END 363
381 #define START 364
382 #define RESET 365
383 #define UNTIL 366
384 #define PLOT 367
385 #define THICKNESS 368
386 #define FILL 369
387 #define COLORED 370
388 #define OUTLINED 371
389 #define SHADED 372
390 #define XSLANTED 373
391 #define YSLANTED 374
392 #define ALIGNED 375
393 #define SPRINTF 376
394 #define COMMAND 377
395 #define DEFINE 378
396 #define UNDEF 379
397
398 /* Value type.  */
399 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
400
401 union YYSTYPE
402 {
403 #line 65 "../src/preproc/pic/pic.ypp" /* yacc.c:353  */
404
405         char *str;
406         int n;
407         double x;
408         struct { double x, y; } pair;
409         struct { double x; char *body; } if_data;
410         struct { char *str; const char *filename; int lineno; } lstr;
411         struct { double *v; int nv; int maxv; } dv;
412         struct { double val; int is_multiplicative; } by;
413         place pl;
414         object *obj;
415         corner crn;
416         path *pth;
417         object_spec *spec;
418         saved_state *pstate;
419         graphics_state state;
420         object_type obtype;
421
422 #line 423 "src/preproc/pic/pic.cpp" /* yacc.c:353  */
423 };
424
425 typedef union YYSTYPE YYSTYPE;
426 # define YYSTYPE_IS_TRIVIAL 1
427 # define YYSTYPE_IS_DECLARED 1
428 #endif
429
430
431 extern YYSTYPE yylval;
432
433 int yyparse (void);
434
435 #endif /* !YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED  */
436
437
438
439 #ifdef short
440 # undef short
441 #endif
442
443 #ifdef YYTYPE_UINT8
444 typedef YYTYPE_UINT8 yytype_uint8;
445 #else
446 typedef unsigned char yytype_uint8;
447 #endif
448
449 #ifdef YYTYPE_INT8
450 typedef YYTYPE_INT8 yytype_int8;
451 #else
452 typedef signed char yytype_int8;
453 #endif
454
455 #ifdef YYTYPE_UINT16
456 typedef YYTYPE_UINT16 yytype_uint16;
457 #else
458 typedef unsigned short yytype_uint16;
459 #endif
460
461 #ifdef YYTYPE_INT16
462 typedef YYTYPE_INT16 yytype_int16;
463 #else
464 typedef short yytype_int16;
465 #endif
466
467 #ifndef YYSIZE_T
468 # ifdef __SIZE_TYPE__
469 #  define YYSIZE_T __SIZE_TYPE__
470 # elif defined size_t
471 #  define YYSIZE_T size_t
472 # elif ! defined YYSIZE_T
473 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
474 #  define YYSIZE_T size_t
475 # else
476 #  define YYSIZE_T unsigned
477 # endif
478 #endif
479
480 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
481
482 #ifndef YY_
483 # if defined YYENABLE_NLS && YYENABLE_NLS
484 #  if ENABLE_NLS
485 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
486 #   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
487 #  endif
488 # endif
489 # ifndef YY_
490 #  define YY_(Msgid) Msgid
491 # endif
492 #endif
493
494 #ifndef YY_ATTRIBUTE
495 # if (defined __GNUC__                                               \
496       && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
497      || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
498 #  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
499 # else
500 #  define YY_ATTRIBUTE(Spec) /* empty */
501 # endif
502 #endif
503
504 #ifndef YY_ATTRIBUTE_PURE
505 # define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
506 #endif
507
508 #ifndef YY_ATTRIBUTE_UNUSED
509 # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
510 #endif
511
512 /* Suppress unused-variable warnings by "using" E.  */
513 #if ! defined lint || defined __GNUC__
514 # define YYUSE(E) ((void) (E))
515 #else
516 # define YYUSE(E) /* empty */
517 #endif
518
519 #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
520 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
521 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
522     _Pragma ("GCC diagnostic push") \
523     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
524     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
525 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
526     _Pragma ("GCC diagnostic pop")
527 #else
528 # define YY_INITIAL_VALUE(Value) Value
529 #endif
530 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
531 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
532 # define YY_IGNORE_MAYBE_UNINITIALIZED_END
533 #endif
534 #ifndef YY_INITIAL_VALUE
535 # define YY_INITIAL_VALUE(Value) /* Nothing. */
536 #endif
537
538
539 #if ! defined yyoverflow || YYERROR_VERBOSE
540
541 /* The parser invokes alloca or malloc; define the necessary symbols.  */
542
543 # ifdef YYSTACK_USE_ALLOCA
544 #  if YYSTACK_USE_ALLOCA
545 #   ifdef __GNUC__
546 #    define YYSTACK_ALLOC __builtin_alloca
547 #   elif defined __BUILTIN_VA_ARG_INCR
548 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
549 #   elif defined _AIX
550 #    define YYSTACK_ALLOC __alloca
551 #   elif defined _MSC_VER
552 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
553 #    define alloca _alloca
554 #   else
555 #    define YYSTACK_ALLOC alloca
556 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
557 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
558       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
559 #     ifndef EXIT_SUCCESS
560 #      define EXIT_SUCCESS 0
561 #     endif
562 #    endif
563 #   endif
564 #  endif
565 # endif
566
567 # ifdef YYSTACK_ALLOC
568    /* Pacify GCC's 'empty if-body' warning.  */
569 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
570 #  ifndef YYSTACK_ALLOC_MAXIMUM
571     /* The OS might guarantee only one guard page at the bottom of the stack,
572        and a page size can be as small as 4096 bytes.  So we cannot safely
573        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
574        to allow for a few compiler-allocated temporary stack slots.  */
575 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
576 #  endif
577 # else
578 #  define YYSTACK_ALLOC YYMALLOC
579 #  define YYSTACK_FREE YYFREE
580 #  ifndef YYSTACK_ALLOC_MAXIMUM
581 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
582 #  endif
583 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
584        && ! ((defined YYMALLOC || defined malloc) \
585              && (defined YYFREE || defined free)))
586 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
587 #   ifndef EXIT_SUCCESS
588 #    define EXIT_SUCCESS 0
589 #   endif
590 #  endif
591 #  ifndef YYMALLOC
592 #   define YYMALLOC malloc
593 #   if ! defined malloc && ! defined EXIT_SUCCESS
594 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
595 #   endif
596 #  endif
597 #  ifndef YYFREE
598 #   define YYFREE free
599 #   if ! defined free && ! defined EXIT_SUCCESS
600 void free (void *); /* INFRINGES ON USER NAME SPACE */
601 #   endif
602 #  endif
603 # endif
604 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
605
606
607 #if (! defined yyoverflow \
608      && (! defined __cplusplus \
609          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
610
611 /* A type that is properly aligned for any stack member.  */
612 union yyalloc
613 {
614   yytype_int16 yyss_alloc;
615   YYSTYPE yyvs_alloc;
616 };
617
618 /* The size of the maximum gap between one aligned stack and the next.  */
619 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
620
621 /* The size of an array large to enough to hold all stacks, each with
622    N elements.  */
623 # define YYSTACK_BYTES(N) \
624      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
625       + YYSTACK_GAP_MAXIMUM)
626
627 # define YYCOPY_NEEDED 1
628
629 /* Relocate STACK from its old location to the new one.  The
630    local variables YYSIZE and YYSTACKSIZE give the old and new number of
631    elements in the stack, and YYPTR gives the new location of the
632    stack.  Advance YYPTR to a properly aligned location for the next
633    stack.  */
634 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
635     do                                                                  \
636       {                                                                 \
637         YYSIZE_T yynewbytes;                                            \
638         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
639         Stack = &yyptr->Stack_alloc;                                    \
640         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
641         yyptr += yynewbytes / sizeof (*yyptr);                          \
642       }                                                                 \
643     while (0)
644
645 #endif
646
647 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
648 /* Copy COUNT objects from SRC to DST.  The source and destination do
649    not overlap.  */
650 # ifndef YYCOPY
651 #  if defined __GNUC__ && 1 < __GNUC__
652 #   define YYCOPY(Dst, Src, Count) \
653       __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
654 #  else
655 #   define YYCOPY(Dst, Src, Count)              \
656       do                                        \
657         {                                       \
658           YYSIZE_T yyi;                         \
659           for (yyi = 0; yyi < (Count); yyi++)   \
660             (Dst)[yyi] = (Src)[yyi];            \
661         }                                       \
662       while (0)
663 #  endif
664 # endif
665 #endif /* !YYCOPY_NEEDED */
666
667 /* YYFINAL -- State number of the termination state.  */
668 #define YYFINAL  6
669 /* YYLAST -- Last index in YYTABLE.  */
670 #define YYLAST   2438
671
672 /* YYNTOKENS -- Number of terminals.  */
673 #define YYNTOKENS  146
674 /* YYNNTS -- Number of nonterminals.  */
675 #define YYNNTS  49
676 /* YYNRULES -- Number of rules.  */
677 #define YYNRULES  260
678 /* YYNSTATES -- Number of states.  */
679 #define YYNSTATES  454
680
681 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
682    by yylex, with out-of-bounds checking.  */
683 #define YYUNDEFTOK  2
684 #define YYMAXUTOK   379
685
686 #define YYTRANSLATE(YYX)                                                \
687   ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
688
689 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
690    as returned by yylex, without out-of-bounds checking.  */
691 static const yytype_uint8 yytranslate[] =
692 {
693        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
694        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
695        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
696        2,     2,     2,   137,     2,     2,     2,   136,     2,     2,
697      126,   145,   134,   132,   129,   133,   125,   135,     2,     2,
698        2,     2,     2,     2,     2,     2,     2,     2,   141,   139,
699      130,   140,   131,     2,     2,     2,     2,     2,     2,     2,
700        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
701        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
702        2,   128,     2,   144,   138,     2,   127,     2,     2,     2,
703        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
704        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
705        2,     2,     2,   142,     2,   143,     2,     2,     2,     2,
706        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
707        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
708        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
709        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
710        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
711        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
712        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
713        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
714        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
715        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
716        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
717        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
718        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
719        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
720       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
721       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
722       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
723       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
724       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
725       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
726       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
727       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
728       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
729      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
730      115,   116,   117,   118,   119,   120,   121,   122,   123,   124
731 };
732
733 #if YYDEBUG
734   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
735 static const yytype_uint16 yyrline[] =
736 {
737        0,   275,   275,   276,   285,   290,   292,   296,   298,   302,
738      303,   307,   315,   320,   332,   334,   336,   338,   340,   345,
739      350,   357,   356,   367,   375,   377,   374,   388,   390,   387,
740      400,   399,   408,   417,   416,   430,   431,   436,   437,   441,
741      446,   451,   459,   461,   480,   487,   489,   500,   499,   511,
742      512,   517,   519,   524,   530,   536,   538,   540,   542,   544,
743      546,   548,   555,   559,   564,   572,   586,   592,   600,   607,
744      613,   606,   622,   632,   633,   638,   640,   642,   644,   649,
745      656,   663,   670,   677,   682,   687,   695,   694,   721,   727,
746      733,   739,   745,   764,   771,   778,   785,   792,   799,   806,
747      813,   820,   827,   842,   854,   860,   869,   876,   901,   905,
748      911,   917,   923,   929,   934,   940,   946,   952,   959,   968,
749      975,   991,  1008,  1013,  1018,  1023,  1028,  1033,  1038,  1043,
750     1051,  1061,  1071,  1081,  1091,  1097,  1105,  1107,  1119,  1124,
751     1154,  1156,  1162,  1171,  1173,  1178,  1183,  1188,  1193,  1198,
752     1203,  1209,  1214,  1222,  1223,  1227,  1232,  1238,  1240,  1246,
753     1252,  1258,  1267,  1277,  1279,  1288,  1290,  1298,  1300,  1305,
754     1320,  1338,  1340,  1342,  1344,  1346,  1348,  1350,  1352,  1354,
755     1359,  1361,  1369,  1373,  1375,  1383,  1385,  1391,  1397,  1403,
756     1409,  1418,  1420,  1422,  1424,  1426,  1428,  1430,  1432,  1434,
757     1436,  1438,  1440,  1442,  1444,  1446,  1448,  1450,  1452,  1454,
758     1456,  1458,  1460,  1462,  1464,  1466,  1468,  1470,  1472,  1474,
759     1476,  1478,  1480,  1485,  1487,  1492,  1497,  1505,  1507,  1514,
760     1521,  1528,  1535,  1542,  1544,  1546,  1548,  1556,  1564,  1577,
761     1579,  1581,  1590,  1599,  1612,  1621,  1630,  1639,  1641,  1643,
762     1645,  1647,  1653,  1658,  1660,  1662,  1664,  1666,  1668,  1670,
763     1672
764 };
765 #endif
766
767 #if YYDEBUG || YYERROR_VERBOSE || 0
768 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
769    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
770 static const char *const yytname[] =
771 {
772   "$end", "error", "$undefined", "LABEL", "VARIABLE", "NUMBER", "TEXT",
773   "COMMAND_LINE", "DELIMITED", "ORDINAL", "TH", "LEFT_ARROW_HEAD",
774   "RIGHT_ARROW_HEAD", "DOUBLE_ARROW_HEAD", "LAST", "BOX", "CIRCLE",
775   "ELLIPSE", "ARC", "LINE", "ARROW", "MOVE", "SPLINE", "HEIGHT", "RADIUS",
776   "FIGNAME", "WIDTH", "DIAMETER", "UP", "DOWN", "RIGHT", "LEFT", "FROM",
777   "TO", "AT", "WITH", "BY", "THEN", "SOLID", "DOTTED", "DASHED", "CHOP",
778   "SAME", "INVISIBLE", "LJUST", "RJUST", "ABOVE", "BELOW", "OF", "THE",
779   "WAY", "BETWEEN", "AND", "HERE", "DOT_N", "DOT_E", "DOT_W", "DOT_S",
780   "DOT_NE", "DOT_SE", "DOT_NW", "DOT_SW", "DOT_C", "DOT_START", "DOT_END",
781   "DOT_X", "DOT_Y", "DOT_HT", "DOT_WID", "DOT_RAD", "SIN", "COS", "ATAN2",
782   "LOG", "EXP", "SQRT", "K_MAX", "K_MIN", "INT", "RAND", "SRAND", "COPY",
783   "THRU", "TOP", "BOTTOM", "UPPER", "LOWER", "SH", "PRINT", "CW", "CCW",
784   "FOR", "DO", "IF", "ELSE", "ANDAND", "OROR", "NOTEQUAL", "EQUALEQUAL",
785   "LESSEQUAL", "GREATEREQUAL", "LEFT_CORNER", "RIGHT_CORNER", "NORTH",
786   "SOUTH", "EAST", "WEST", "CENTER", "END", "START", "RESET", "UNTIL",
787   "PLOT", "THICKNESS", "FILL", "COLORED", "OUTLINED", "SHADED", "XSLANTED",
788   "YSLANTED", "ALIGNED", "SPRINTF", "COMMAND", "DEFINE", "UNDEF", "'.'",
789   "'('", "'`'", "'['", "','", "'<'", "'>'", "'+'", "'-'", "'*'", "'/'",
790   "'%'", "'!'", "'^'", "';'", "'='", "':'", "'{'", "'}'", "']'", "')'",
791   "$accept", "top", "element_list", "middle_element_list",
792   "optional_separator", "separator", "placeless_element", "$@1", "$@2",
793   "$@3", "$@4", "$@5", "$@6", "$@7", "macro_name", "reset_variables",
794   "print_args", "print_arg", "simple_if", "$@8", "until", "any_expr",
795   "text_expr", "optional_by", "element", "@9", "$@10", "optional_element",
796   "object_spec", "@11", "text", "sprintf_args", "position",
797   "position_not_place", "between", "expr_pair", "place", "label",
798   "ordinal", "optional_ordinal_last", "nth_primitive", "object_type",
799   "label_path", "relative_path", "path", "corner", "expr",
800   "expr_lower_than", "expr_not_lower_than", YY_NULLPTR
801 };
802 #endif
803
804 # ifdef YYPRINT
805 /* YYTOKNUM[NUM] -- (External) token number corresponding to the
806    (internal) symbol number NUM (which must be that of a token).  */
807 static const yytype_uint16 yytoknum[] =
808 {
809        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
810      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
811      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
812      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
813      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
814      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
815      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
816      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
817      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
818      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
819      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
820      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
821      375,   376,   377,   378,   379,    46,    40,    96,    91,    44,
822       60,    62,    43,    45,    42,    47,    37,    33,    94,    59,
823       61,    58,   123,   125,    93,    41
824 };
825 # endif
826
827 #define YYPACT_NINF -240
828
829 #define yypact_value_is_default(Yystate) \
830   (!!((Yystate) == (-240)))
831
832 #define YYTABLE_NINF -206
833
834 #define yytable_value_is_error(Yytable_value) \
835   0
836
837   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
838      STATE-NUM.  */
839 static const yytype_int16 yypact[] =
840 {
841     -114,  -240,    20,  -240,   757,  -107,  -240,   -98,  -123,  -240,
842     -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,  -106,
843     -240,  -240,  -240,  -240,     9,  -240,  1087,    46,  1172,    49,
844     1597,   -70,  1087,  -240,  -240,  -114,  -240,     3,   -33,  -240,
845      877,  -240,  -240,  -114,  1172,   -60,    36,   -14,  -240,    74,
846     -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,
847     -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,   -34,
848      -18,     8,    38,    47,    51,    65,   101,   102,   112,   122,
849     -240,  -240,    21,   150,  -240,  -240,  -240,  -240,  -240,  -240,
850     -240,  -240,  -240,  1257,  1172,  1597,  1597,  1087,  -240,  -240,
851      -43,  -240,  -240,   357,  2242,    59,   258,  -240,    10,  2147,
852     -240,     1,     6,  1172,  1172,   145,    -1,     2,   357,  2273,
853     -240,  -240,   220,   249,  1087,  -114,  -114,  -240,   721,  -240,
854      252,  -240,  -240,  -240,  -240,  1597,  1597,  1597,  1597,  2024,
855     2024,  1853,  1939,  1682,  1682,  1682,  1427,  1767,  -240,  -240,
856     2024,  2024,  2024,  -240,  -240,  -240,  -240,  -240,  -240,  -240,
857     -240,  1597,  2024,    23,    23,    23,  1597,  1597,  -240,  -240,
858     2282,   593,  -240,  1172,  -240,  -240,  -240,  -240,   250,  -240,
859     1172,  1172,  1172,  1172,  1172,  1172,  1172,  1172,  1172,   458,
860     1172,  -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,   121,
861      107,   123,   256,  2157,   137,   261,   134,   134,  -240,  1767,
862     1767,  -240,  -240,  -240,  -240,  -240,   276,  -240,  -240,  -240,
863     -240,  -240,  -240,  -240,  -240,  -240,  -240,   138,  -240,  -240,
864       24,   156,   235,  -240,  1597,  1597,  1597,  1597,  1597,  1597,
865     1597,  1597,  1597,  1597,  1597,  1597,  1597,  1597,  1597,  1682,
866     1682,  1597,  -240,   134,  -240,  1172,  1172,    23,    23,  1172,
867     1172,  -240,  -240,   143,   757,   153,  -240,  -240,   280,  2282,
868     2282,  2282,  2282,  2282,  2282,  2282,  2282,   -43,  2147,   -43,
869      -43,  2253,   275,   275,   295,  1002,   -43,  2081,  -240,  -240,
870       10,  1342,  -240,   694,  2282,  2282,  2282,  2282,  2282,  -240,
871     -240,  -240,  2282,  2282,   -98,  -123,    16,    28,  -240,   -43,
872       56,   302,  -240,   291,  -240,   155,   160,   172,   161,   164,
873      167,   184,   185,   181,  -240,   186,   188,  -240,  1682,  1767,
874     1767,  -240,  -240,  1682,  1682,  -240,  -240,  -240,  -240,  -240,
875      156,   279,   314,  2291,   440,   440,   413,   413,  2282,   413,
876      413,   -72,   -72,   134,   134,   134,   134,   -49,   117,   343,
877      322,  -240,   314,   239,  2300,  -240,  -240,  -240,   314,   239,
878     2300,  -119,  -240,  -240,  -240,  -240,  -240,  2116,  2116,  -240,
879      206,   333,  -240,   123,  2131,  -240,   228,  -240,  -240,  1172,
880     -240,  -240,  -240,  1172,  1172,  -240,  -240,  -240,  -110,   195,
881      197,   -47,   128,   292,  1682,  1682,  1597,  -240,  1597,  -240,
882      757,  -240,  -240,  2116,  -240,   228,   338,  -240,   200,   202,
883      212,  -240,  -240,  -240,  1682,  1682,  -240,   -43,   -27,   360,
884     2282,  -240,  -240,   214,  -240,  -240,  -240,  -240,  -240,   -73,
885       30,  -240,  1512,   268,  -240,  -240,   216,  1597,  2282,  -240,
886     -240,  2282,   354,  -240
887 };
888
889   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
890      Performed when YYTABLE does not specify something else to do.  Zero
891      means the default is an error.  */
892 static const yytype_uint16 yydefact[] =
893 {
894        7,     9,     0,     3,     2,     8,     1,     0,     0,   136,
895       18,    75,    76,    77,    78,    79,    80,    81,    82,     0,
896       14,    15,    17,    16,     0,    21,     0,     0,     0,    36,
897        0,     0,     0,    86,    69,     7,    72,    35,    32,     5,
898       65,    83,    10,     7,     0,     0,     0,    23,    27,     0,
899      162,   226,   227,   165,   167,   205,   204,   161,   191,   192,
900      193,   194,   195,   196,   197,   198,   199,   200,   201,     0,
901        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
902      202,   203,     0,     0,   210,   211,   216,   217,   218,   219,
903      220,   222,   221,     0,     0,     0,     0,    20,    42,    45,
904       46,   140,   143,   141,   157,     0,     0,   163,     0,    44,
905      223,   224,     0,     0,     0,     0,    52,     0,     0,    51,
906      224,    39,    84,     0,    19,     7,     7,     4,     8,    40,
907        0,    33,   124,   125,   126,     0,     0,     0,     0,    93,
908       95,    97,    99,     0,     0,     0,     0,     0,   107,   108,
909      109,   111,   120,   122,   123,   130,   131,   132,   133,   127,
910      128,     0,   113,     0,     0,     0,     0,     0,   135,   129,
911       92,     0,    12,     0,    38,    37,    11,    24,     0,    22,
912        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
913        0,   208,   206,   212,   214,   209,   207,   213,   215,     0,
914        0,   143,   141,    51,   224,     0,   239,   260,    43,     0,
915        0,   228,   229,   230,   231,   232,     0,   158,   179,   168,
916      171,   172,   173,   174,   175,   176,   177,     0,   169,   170,
917        0,   159,     0,   153,     0,     0,     0,     0,     0,     0,
918        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
919        0,     0,    61,   260,    47,     0,     0,     0,     0,     0,
920        0,    85,   138,     0,     0,     0,     6,    41,     0,    88,
921       89,    90,    91,    94,    96,    98,   100,   101,     0,   102,
922      103,   162,   165,   167,     0,     0,   105,   183,   185,   104,
923      182,     0,   106,     0,   110,   112,   121,   134,   114,   118,
924      119,   117,   115,   116,   162,   226,   205,   204,    66,     0,
925       67,    68,    13,     0,    28,     0,     0,     0,     0,     0,
926        0,     0,     0,     0,   251,     0,     0,   240,     0,     0,
927        0,   156,   142,     0,     0,   166,   144,   146,   164,   178,
928      160,     0,   258,   259,   257,   256,   253,   255,   155,   225,
929      254,   233,   234,   235,   236,   237,   238,     0,     0,     0,
930        0,    55,    56,    58,    59,    54,    53,    57,   258,    60,
931      259,     0,    87,    70,    34,   190,   182,     0,     0,   180,
932        0,     0,   184,     0,    51,    25,    49,   241,   242,     0,
933      244,   245,   246,     0,     0,   249,   250,   252,     0,   144,
934      146,     0,     0,     0,     0,     0,     0,    48,     0,   137,
935       73,   189,   188,     0,   181,    49,     0,    29,     0,     0,
936        0,   148,   145,   147,     0,     0,   154,   149,     0,    62,
937      139,    74,    71,     0,    26,    50,   243,   247,   248,   149,
938        0,   151,     0,     0,   186,   150,   151,     0,    63,    30,
939      152,    64,     0,    31
940 };
941
942   /* YYPGOTO[NTERM-NUM].  */
943 static const yytype_int16 yypgoto[] =
944 {
945     -240,  -240,    17,  -240,    12,   329,  -240,  -240,  -240,  -240,
946     -240,  -240,  -240,  -240,  -240,  -240,   334,   -76,  -240,  -240,
947      -42,    13,  -103,  -240,  -127,  -240,  -240,  -240,  -240,  -240,
948        5,  -240,    99,   194,   169,   -44,     4,  -100,  -240,  -240,
949     -240,  -104,  -240,  -239,  -240,   -50,   -26,  -240,    61
950 };
951
952   /* YYDEFGOTO[NTERM-NUM].  */
953 static const yytype_int16 yydefgoto[] =
954 {
955       -1,     2,     3,    35,   264,     5,    36,    49,   313,   415,
956      178,   386,   452,   268,   176,    37,    97,    98,    38,   360,
957      417,   199,   116,   443,    39,   126,   410,   432,    40,   125,
958      117,   371,   100,   101,   249,   102,   118,   104,   105,   106,
959      107,   228,   287,   288,   289,   108,   119,   110,   120
960 };
961
962   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
963      positive, shift that token.  If negative, reduce the rule whose
964      number is the opposite.  If YYTABLE_NINF, syntax error.  */
965 static const yytype_int16 yytable[] =
966 {
967      109,   266,   229,   404,   122,   424,   109,   129,   231,    41,
968      408,   252,     4,    50,   170,    47,   -17,    44,    45,    53,
969        6,   208,   209,   210,    54,     1,   409,    50,   -16,     9,
970      103,    99,    42,    53,    46,   421,   103,    99,    54,   174,
971      175,   115,   375,    43,   308,   169,   380,   127,   208,   201,
972      112,   191,   192,   121,   217,   171,   123,   172,   230,   209,
973      210,   131,   245,   246,   247,   218,   248,   203,   177,   206,
974      207,   109,   445,   219,   220,   221,   222,   223,   224,   225,
975      173,   226,   179,   209,   210,   209,   210,   111,   253,   209,
976      210,    48,   180,   111,   255,   256,   290,   202,   109,   257,
977      258,   103,    99,   292,   441,   209,   210,   205,   181,   269,
978      270,   271,   272,   273,   274,   275,   276,   278,   278,   278,
979      278,   293,   193,   194,   294,   295,   296,   261,   103,    99,
980      340,   250,   130,    41,   182,   297,   298,    94,   411,   412,
981      302,   303,   263,   265,    31,   278,   251,   103,   103,   103,
982      103,    94,   361,   363,   204,   -17,   367,   369,   111,   -17,
983      -17,   446,   209,   210,   183,   336,   337,   -16,   299,   300,
984      301,   -16,   -16,   184,   433,   311,    41,   185,   377,   378,
985      195,   196,   254,   293,   293,   111,   312,   227,  -140,  -140,
986      231,   186,   200,   315,   316,   317,   318,   319,   320,   321,
987      322,   323,   325,   326,   111,   111,   111,   111,   342,   343,
988      344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
989      354,   355,   356,   278,   278,   359,     9,   187,   188,   362,
990      364,   376,   111,   368,   370,   290,   328,   382,   189,   329,
991      330,   201,   277,   279,   280,   286,   405,   383,   190,   209,
992      210,   197,   198,   103,   103,   262,   267,   425,   314,   203,
993      209,   210,   365,   366,   218,   384,   327,   334,   331,    41,
994      309,   335,   248,   220,   221,   222,   223,   224,   225,   338,
995      226,   216,   339,   431,   341,   399,   400,   372,   374,   202,
996      220,   221,   222,   223,   224,   225,   373,   226,   379,   385,
997      387,   389,   278,   293,   293,   388,   390,   278,   278,   391,
998      111,   111,   392,   393,   394,   234,   235,   236,   237,   238,
999      239,   211,   212,   213,   214,   215,   395,   376,   376,   403,
1000      407,   396,   103,   397,   255,   413,   414,   103,   103,   416,
1001      422,    31,   423,   426,   435,   436,   204,   437,   357,   358,
1002      241,   242,   243,   244,   245,   246,   247,   438,   248,   444,
1003      449,   450,   453,   376,   128,   310,   124,   211,   212,   213,
1004      214,   215,   333,   434,     0,     0,   406,     0,   278,   278,
1005      429,     0,   430,     0,   200,     0,   227,     0,     0,   111,
1006        0,     0,     0,     0,   111,   111,   442,     0,   278,   278,
1007        0,   332,   418,   227,     0,     0,   419,   420,   103,   103,
1008        0,   236,   237,   238,   239,    41,   448,     0,     0,     0,
1009        0,   451,   211,   212,   213,   214,   215,   398,   103,   103,
1010        0,     0,   401,   402,  -141,  -141,     0,     0,   234,   235,
1011      236,   237,   238,   239,   241,   242,   243,   244,   245,   246,
1012      247,     0,   248,     0,     0,   234,   235,   236,   237,   238,
1013      239,    50,    51,    52,     9,   111,   111,    53,     0,     0,
1014        0,     0,    54,   241,   242,   243,   244,   245,   246,   247,
1015        0,   248,     0,     0,     0,   111,   111,     0,    55,    56,
1016      241,   242,   243,   244,   245,   246,   247,     0,   248,     0,
1017        0,     0,     0,   427,   428,     0,     0,     0,     0,     0,
1018        0,    57,    58,    59,    60,    61,    62,    63,    64,    65,
1019       66,    67,    68,   439,   440,     0,     0,     0,    69,    70,
1020       71,    72,    73,    74,    75,    76,    77,    78,    79,   238,
1021      239,    80,    81,    82,    83,   243,   244,   245,   246,   247,
1022        0,   248,     0,     0,     0,     0,     0,     0,     0,    84,
1023       85,    86,    87,    88,    89,    90,    91,    92,     0,     0,
1024      241,   242,   243,   244,   245,   246,   247,     0,   248,    31,
1025        0,     0,     0,     0,   113,    94,     0,     0,     0,     0,
1026        0,    95,     0,     0,     0,   114,   304,   305,    52,     9,
1027       10,     0,    53,   324,     0,     0,     0,    54,    11,    12,
1028       13,    14,    15,    16,    17,    18,     0,     0,    19,     0,
1029        0,    20,    21,   306,   307,     0,     0,     0,     0,     0,
1030        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1031        0,     0,     0,     0,     0,     0,    57,    58,    59,    60,
1032       61,    62,    63,    64,    65,    66,    67,    68,     0,     0,
1033        0,     0,     0,    69,    70,    71,    72,    73,    74,    75,
1034       76,    77,    78,    79,    24,     0,    80,    81,    82,    83,
1035       25,    26,     0,     0,    27,     0,    28,     0,     0,     0,
1036        0,     0,     0,     0,    84,    85,    86,    87,    88,    89,
1037       90,    91,    92,    29,     0,    30,     0,     0,     0,     0,
1038        0,     0,     0,     0,    31,    32,     0,     0,     0,    93,
1039       94,    33,     0,     0,     7,     8,    95,     9,    10,     0,
1040       96,     0,     0,     0,     0,    34,    11,    12,    13,    14,
1041       15,    16,    17,    18,     0,     0,    19,     0,     0,    20,
1042       21,    22,    23,     0,     0,     0,     0,     0,     0,     0,
1043        7,     8,     0,     9,    10,     0,     0,     0,     0,     0,
1044        0,     0,    11,    12,    13,    14,    15,    16,    17,    18,
1045        0,     0,    19,     0,     0,    20,    21,    22,    23,   234,
1046      235,   236,   237,   238,   239,     0,     0,     0,     0,     0,
1047        0,     0,    24,     0,     0,     0,     0,     0,    25,    26,
1048        0,     0,    27,     0,    28,     0,     0,     0,     0,     0,
1049        0,     0,     0,   240,   241,   242,   243,   244,   245,   246,
1050      247,    29,   248,    30,     0,     0,     0,     0,    24,     0,
1051        0,     0,    31,    32,    25,    26,     0,     0,    27,    33,
1052       28,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1053       42,     0,     0,    34,     0,     0,     0,    29,     0,    30,
1054        0,     0,     0,     0,     0,     0,     0,     0,    31,    32,
1055       50,    51,    52,     9,     0,    33,    53,     0,   132,   133,
1056      134,    54,     0,     0,     0,     0,     0,     0,     0,    34,
1057      135,   136,     0,   137,   138,   139,   140,   141,   142,   143,
1058      144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
1059      154,   155,   156,   157,   158,     0,     0,     0,     0,     0,
1060       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
1061       67,    68,     0,     0,     0,     0,     0,    69,    70,    71,
1062       72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
1063       80,    81,    82,    83,     0,     0,   159,   160,     0,     0,
1064        0,     0,     0,     0,     0,     0,     0,     0,    84,    85,
1065       86,    87,    88,    89,    90,    91,    92,     0,     0,     0,
1066      161,   162,   163,   164,   165,   166,   167,   168,    31,     0,
1067        0,     0,     0,   113,    94,    50,    51,    52,     9,     0,
1068       95,    53,     0,     0,    96,     0,    54,     0,     0,     0,
1069        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1070        0,     0,    55,    56,     0,     0,     0,     0,     0,     0,
1071        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1072        0,     0,     0,     0,     0,    57,    58,    59,    60,    61,
1073       62,    63,    64,    65,    66,    67,    68,     0,     0,     0,
1074        0,     0,    69,    70,    71,    72,    73,    74,    75,    76,
1075       77,    78,    79,     0,     0,    80,    81,    82,    83,     0,
1076       50,    51,    52,     9,     0,     0,    53,     0,     0,     0,
1077        0,    54,     0,    84,    85,    86,    87,    88,    89,    90,
1078       91,    92,     0,     0,     0,     0,     0,    55,    56,     0,
1079        0,     0,     0,    31,     0,     0,     0,   284,    93,    94,
1080        0,     0,     0,     0,     0,    95,     0,     0,     0,   114,
1081       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
1082       67,    68,     0,     0,     0,     0,     0,    69,    70,    71,
1083       72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
1084       80,    81,    82,    83,     0,    50,    51,    52,     9,     0,
1085        0,    53,     0,     0,     0,     0,    54,     0,    84,    85,
1086       86,    87,    88,    89,    90,    91,    92,     0,     0,     0,
1087        0,     0,    55,    56,     0,     0,     0,     0,    31,     0,
1088        0,     0,     0,    93,    94,     0,     0,     0,     0,     0,
1089       95,     0,     0,     0,    96,    57,    58,    59,    60,    61,
1090       62,    63,    64,    65,    66,    67,    68,     0,     0,     0,
1091        0,     0,    69,    70,    71,    72,    73,    74,    75,    76,
1092       77,    78,    79,     0,     0,    80,    81,    82,    83,     0,
1093       50,    51,    52,     9,     0,     0,    53,     0,     0,     0,
1094        0,    54,     0,    84,    85,    86,    87,    88,    89,    90,
1095       91,    92,     0,     0,     0,     0,     0,    55,    56,     0,
1096        0,     0,     0,    31,     0,     0,     0,     0,   113,    94,
1097        0,     0,     0,     0,     0,    95,     0,     0,     0,   114,
1098       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
1099       67,    68,     0,     0,     0,     0,     0,    69,    70,    71,
1100       72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
1101       80,    81,    82,    83,     0,    50,    51,    52,     9,     0,
1102        0,    53,     0,     0,     0,     0,    54,     0,    84,    85,
1103       86,    87,    88,    89,    90,    91,    92,     0,     0,     0,
1104        0,     0,    55,    56,     0,     0,     0,     0,    31,     0,
1105        0,     0,     0,    93,    94,     0,     0,     0,     0,     0,
1106       95,     0,     0,     0,   114,    57,    58,    59,    60,    61,
1107       62,    63,    64,    65,    66,    67,    68,     0,     0,     0,
1108        0,     0,    69,    70,    71,    72,    73,    74,    75,    76,
1109       77,    78,    79,     0,     0,    80,    81,    82,    83,     0,
1110      281,    51,    52,     0,     0,     0,   282,     0,     0,     0,
1111        0,   283,     0,    84,    85,    86,    87,    88,    89,    90,
1112       91,    92,     0,     0,     0,     0,     0,    55,    56,     0,
1113        0,     0,     0,    31,     0,     0,     0,     0,   291,    94,
1114        0,     0,     0,     0,     0,    95,     0,     0,     0,   114,
1115       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
1116       67,    68,     0,     0,     0,     0,     0,    69,    70,    71,
1117       72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
1118       80,    81,    82,    83,     0,    50,    51,    52,     0,     0,
1119        0,    53,     0,     0,     0,     0,    54,     0,    84,    85,
1120       86,    87,    88,    89,    90,    91,    92,     0,     0,     0,
1121        0,     0,    55,    56,     0,     0,     0,     0,     0,     0,
1122        0,     0,   284,   285,    94,     0,     0,     0,     0,     0,
1123       95,     0,     0,     0,    96,    57,    58,    59,    60,    61,
1124       62,    63,    64,    65,    66,    67,    68,     0,     0,     0,
1125        0,     0,    69,    70,    71,    72,    73,    74,    75,    76,
1126       77,    78,    79,     0,     0,    80,    81,    82,    83,     0,
1127       50,    51,    52,     0,     0,     0,    53,     0,     0,     0,
1128        0,    54,     0,    84,    85,    86,    87,    88,    89,    90,
1129       91,    92,     0,     0,     0,     0,     0,    55,    56,     0,
1130        0,     0,     0,     0,     0,     0,     0,     0,   113,    94,
1131        0,     0,     0,     0,     0,    95,   447,     0,     0,    96,
1132       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
1133       67,    68,     0,     0,     0,     0,     0,    69,    70,    71,
1134       72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
1135       80,    81,    82,    83,     0,    50,    51,    52,     0,     0,
1136        0,    53,     0,     0,     0,     0,    54,     0,    84,    85,
1137       86,    87,    88,    89,    90,    91,    92,     0,     0,     0,
1138        0,     0,    55,    56,     0,     0,     0,     0,     0,     0,
1139        0,     0,     0,   113,    94,     0,     0,     0,     0,     0,
1140       95,     0,     0,     0,    96,    57,    58,    59,    60,    61,
1141       62,    63,    64,    65,    66,    67,    68,     0,     0,     0,
1142        0,     0,    69,    70,    71,    72,    73,    74,    75,    76,
1143       77,    78,    79,     0,     0,    80,    81,    82,    83,     0,
1144       50,    51,    52,     0,     0,     0,    53,     0,     0,     0,
1145        0,    54,     0,    84,    85,    86,    87,    88,    89,    90,
1146       91,    92,     0,     0,     0,     0,     0,    55,    56,     0,
1147        0,     0,     0,     0,     0,     0,     0,     0,    93,    94,
1148        0,     0,     0,     0,     0,    95,     0,     0,     0,    96,
1149       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
1150       67,    68,     0,     0,     0,     0,     0,    69,    70,    71,
1151       72,    73,    74,    75,    76,    77,    78,    79,     0,     0,
1152       80,    81,    82,    83,     0,     0,    50,    51,    52,     0,
1153        0,     0,    53,     0,     0,     0,     0,    54,    84,    85,
1154       86,    87,    88,    89,    90,    91,    92,     0,     0,     0,
1155        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1156        0,     0,     0,   291,    94,     0,     0,     0,     0,     0,
1157       95,  -205,     0,     0,    96,     0,    57,    58,    59,    60,
1158       61,    62,    63,    64,    65,    66,    67,    68,     0,     0,
1159        0,     0,     0,    69,    70,    71,    72,    73,    74,    75,
1160       76,    77,    78,    79,     0,     0,    80,    81,    82,    83,
1161        0,     0,    50,    51,    52,     0,     0,     0,    53,     0,
1162        0,     0,     0,    54,    84,    85,    86,    87,    88,    89,
1163       90,    91,    92,     0,     0,     0,     0,     0,     0,     0,
1164        0,     0,     0,     0,     0,     0,     0,     0,     0,   113,
1165       94,     0,     0,     0,     0,     0,    95,  -204,     0,     0,
1166       96,     0,    57,    58,    59,    60,    61,    62,    63,    64,
1167       65,    66,    67,    68,     0,     0,     0,     0,     0,    69,
1168       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
1169        0,     0,    80,    81,    82,    83,     0,    50,    51,    52,
1170        0,     0,     0,    53,     0,     0,     0,     0,    54,     0,
1171       84,    85,    86,    87,    88,    89,    90,    91,    92,     0,
1172        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1173        0,     0,     0,     0,     0,   113,    94,     0,     0,     0,
1174        0,     0,    95,     0,     0,     0,    96,    57,    58,    59,
1175       60,    61,    62,    63,    64,    65,    66,    67,    68,     0,
1176        0,     0,     0,     0,    69,    70,    71,    72,    73,    74,
1177       75,    76,    77,    78,    79,     0,     0,    80,    81,    82,
1178       83,    55,    56,     0,     0,     0,     0,     0,     0,     0,
1179        0,     0,     0,     0,     0,    84,    85,    86,    87,    88,
1180       89,    90,    91,    92,     0,    58,    59,    60,    61,    62,
1181       63,    64,    65,    66,    67,    68,    55,    56,     0,     0,
1182      113,    94,     0,     0,     0,     0,     0,    95,     0,     0,
1183        0,    96,     0,     0,    80,    81,    82,    83,     0,     0,
1184       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
1185       68,     0,    84,    85,    86,    87,    88,    89,    90,    91,
1186       92,     0,     0,     0,     0,   232,     0,     0,   233,    80,
1187       81,    82,    83,     0,     0,   232,   381,     0,   233,     0,
1188        0,     0,     0,     0,     0,     0,     0,    84,    85,    86,
1189       87,    88,    89,    90,    91,    92,   259,   260,   236,   237,
1190      238,   239,     0,     0,     0,     0,     0,     0,     0,     0,
1191        0,   284,   234,   235,   236,   237,   238,   239,     0,     0,
1192        0,     0,   259,   260,   236,   237,   238,   239,     0,     0,
1193      240,   241,   242,   243,   244,   245,   246,   247,     0,   248,
1194        0,     0,     0,     0,     0,     0,   240,   241,   242,   243,
1195      244,   245,   246,   247,     0,   248,   240,   241,   242,   243,
1196      244,   245,   246,   247,     0,   248,    58,    59,    60,    61,
1197       62,    63,    64,    65,    66,    67,    68,    58,    59,    60,
1198       61,    62,    63,    64,    65,    66,    67,    68,     0,     0,
1199        0,     0,     0,     0,     0,    80,    81,    82,    83,     0,
1200        0,     0,     0,     0,     0,     0,    80,    81,    82,    83,
1201        0,     0,     0,    84,    85,    86,    87,    88,    89,    90,
1202       91,    92,     0,     0,    84,    85,    86,    87,    88,    89,
1203       90,    91,    92,     0,     0,     0,     0,   216,   259,   260,
1204      236,   237,   238,   239,     0,     0,     0,   234,   235,   236,
1205      237,   238,   239,     0,     0,     0,   234,     0,   236,   237,
1206      238,   239,     0,     0,     0,   259,     0,   236,   237,   238,
1207      239,     0,     0,   241,   242,   243,   244,   245,   246,   247,
1208        0,   248,   241,   242,   243,   244,   245,   246,   247,     0,
1209      248,   241,   242,   243,   244,   245,   246,   247,     0,   248,
1210      241,   242,   243,   244,   245,   246,   247,     0,   248
1211 };
1212
1213 static const yytype_int16 yycheck[] =
1214 {
1215       26,   128,   106,    52,    30,    52,    32,     4,   108,     4,
1216      129,   114,     0,     3,    40,     6,     0,   140,   141,     9,
1217        0,    97,   132,   133,    14,   139,   145,     3,     0,     6,
1218       26,    26,   139,     9,   140,   145,    32,    32,    14,     3,
1219        4,    28,   281,   141,   171,    40,   285,    35,   124,    93,
1220        4,    30,    31,     4,   104,    43,   126,    44,    48,   132,
1221      133,    94,   134,   135,   136,     6,   138,    93,    82,    95,
1222       96,    97,   145,    14,    15,    16,    17,    18,    19,    20,
1223      140,    22,     8,   132,   133,   132,   133,    26,   114,   132,
1224      133,    82,   126,    32,    95,    96,   146,    93,   124,    97,
1225       98,    97,    97,   147,   131,   132,   133,    94,   126,   135,
1226      136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
1227      146,   147,   101,   102,   150,   151,   152,   122,   124,   124,
1228      230,   130,   129,   128,   126,   161,   162,   127,   377,   378,
1229      166,   167,   125,   126,   121,   171,   140,   143,   144,   145,
1230      146,   127,   255,   256,    93,   139,   259,   260,    97,   143,
1231      144,   131,   132,   133,   126,   209,   210,   139,   163,   164,
1232      165,   143,   144,   126,   413,   171,   171,   126,   282,   283,
1233       30,    31,    37,   209,   210,   124,   173,   128,   132,   133,
1234      290,   126,    93,   180,   181,   182,   183,   184,   185,   186,
1235      187,   188,   189,   190,   143,   144,   145,   146,   234,   235,
1236      236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
1237      246,   247,   248,   249,   250,   251,     6,   126,   126,   255,
1238      256,   281,   171,   259,   260,   285,   129,   287,   126,   132,
1239      133,   285,   143,   144,   145,   146,   129,   291,   126,   132,
1240      133,   101,   102,   249,   250,     6,     4,   129,     8,   285,
1241      132,   133,   257,   258,     6,   291,   145,   130,   145,   264,
1242      171,    10,   138,    15,    16,    17,    18,    19,    20,     3,
1243       22,   125,   144,   410,    49,   329,   330,   144,     8,   285,
1244       15,    16,    17,    18,    19,    20,   143,    22,     3,     8,
1245      145,   129,   328,   329,   330,   145,   145,   333,   334,   145,
1246      249,   250,   145,   129,   129,    95,    96,    97,    98,    99,
1247      100,    65,    66,    67,    68,    69,   145,   377,   378,    50,
1248        8,   145,   328,   145,    95,   129,     3,   333,   334,   111,
1249      145,   121,   145,    51,     6,   145,   285,   145,   249,   250,
1250      130,   131,   132,   133,   134,   135,   136,   145,   138,   145,
1251       92,   145,     8,   413,    35,   171,    32,    65,    66,    67,
1252       68,    69,   203,   415,    -1,    -1,    33,    -1,   404,   405,
1253      406,    -1,   408,    -1,   285,    -1,   128,    -1,    -1,   328,
1254       -1,    -1,    -1,    -1,   333,   334,    36,    -1,   424,   425,
1255       -1,   145,   389,   128,    -1,    -1,   393,   394,   404,   405,
1256       -1,    97,    98,    99,   100,   410,   442,    -1,    -1,    -1,
1257       -1,   447,    65,    66,    67,    68,    69,   328,   424,   425,
1258       -1,    -1,   333,   334,   132,   133,    -1,    -1,    95,    96,
1259       97,    98,    99,   100,   130,   131,   132,   133,   134,   135,
1260      136,    -1,   138,    -1,    -1,    95,    96,    97,    98,    99,
1261      100,     3,     4,     5,     6,   404,   405,     9,    -1,    -1,
1262       -1,    -1,    14,   130,   131,   132,   133,   134,   135,   136,
1263       -1,   138,    -1,    -1,    -1,   424,   425,    -1,    30,    31,
1264      130,   131,   132,   133,   134,   135,   136,    -1,   138,    -1,
1265       -1,    -1,    -1,   404,   405,    -1,    -1,    -1,    -1,    -1,
1266       -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
1267       62,    63,    64,   424,   425,    -1,    -1,    -1,    70,    71,
1268       72,    73,    74,    75,    76,    77,    78,    79,    80,    99,
1269      100,    83,    84,    85,    86,   132,   133,   134,   135,   136,
1270       -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,
1271      102,   103,   104,   105,   106,   107,   108,   109,    -1,    -1,
1272      130,   131,   132,   133,   134,   135,   136,    -1,   138,   121,
1273       -1,    -1,    -1,    -1,   126,   127,    -1,    -1,    -1,    -1,
1274       -1,   133,    -1,    -1,    -1,   137,     3,     4,     5,     6,
1275        7,    -1,     9,   145,    -1,    -1,    -1,    14,    15,    16,
1276       17,    18,    19,    20,    21,    22,    -1,    -1,    25,    -1,
1277       -1,    28,    29,    30,    31,    -1,    -1,    -1,    -1,    -1,
1278       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
1279       -1,    -1,    -1,    -1,    -1,    -1,    53,    54,    55,    56,
1280       57,    58,    59,    60,    61,    62,    63,    64,    -1,    -1,
1281       -1,    -1,    -1,    70,    71,    72,    73,    74,    75,    76,
1282       77,    78,    79,    80,    81,    -1,    83,    84,    85,    86,
1283       87,    88,    -1,    -1,    91,    -1,    93,    -1,    -1,    -1,
1284       -1,    -1,    -1,    -1,   101,   102,   103,   104,   105,   106,
1285      107,   108,   109,   110,    -1,   112,    -1,    -1,    -1,    -1,
1286       -1,    -1,    -1,    -1,   121,   122,    -1,    -1,    -1,   126,
1287      127,   128,    -1,    -1,     3,     4,   133,     6,     7,    -1,
1288      137,    -1,    -1,    -1,    -1,   142,    15,    16,    17,    18,
1289       19,    20,    21,    22,    -1,    -1,    25,    -1,    -1,    28,
1290       29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
1291        3,     4,    -1,     6,     7,    -1,    -1,    -1,    -1,    -1,
1292       -1,    -1,    15,    16,    17,    18,    19,    20,    21,    22,
1293       -1,    -1,    25,    -1,    -1,    28,    29,    30,    31,    95,
1294       96,    97,    98,    99,   100,    -1,    -1,    -1,    -1,    -1,
1295       -1,    -1,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,
1296       -1,    -1,    91,    -1,    93,    -1,    -1,    -1,    -1,    -1,
1297       -1,    -1,    -1,   129,   130,   131,   132,   133,   134,   135,
1298      136,   110,   138,   112,    -1,    -1,    -1,    -1,    81,    -1,
1299       -1,    -1,   121,   122,    87,    88,    -1,    -1,    91,   128,
1300       93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
1301      139,    -1,    -1,   142,    -1,    -1,    -1,   110,    -1,   112,
1302       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   121,   122,
1303        3,     4,     5,     6,    -1,   128,     9,    -1,    11,    12,
1304       13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   142,
1305       23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
1306       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
1307       43,    44,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,
1308       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
1309       63,    64,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
1310       73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
1311       83,    84,    85,    86,    -1,    -1,    89,    90,    -1,    -1,
1312       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,   102,
1313      103,   104,   105,   106,   107,   108,   109,    -1,    -1,    -1,
1314      113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
1315       -1,    -1,    -1,   126,   127,     3,     4,     5,     6,    -1,
1316      133,     9,    -1,    -1,   137,    -1,    14,    -1,    -1,    -1,
1317       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
1318       -1,    -1,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
1319       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
1320       -1,    -1,    -1,    -1,    -1,    53,    54,    55,    56,    57,
1321       58,    59,    60,    61,    62,    63,    64,    -1,    -1,    -1,
1322       -1,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
1323       78,    79,    80,    -1,    -1,    83,    84,    85,    86,    -1,
1324        3,     4,     5,     6,    -1,    -1,     9,    -1,    -1,    -1,
1325       -1,    14,    -1,   101,   102,   103,   104,   105,   106,   107,
1326      108,   109,    -1,    -1,    -1,    -1,    -1,    30,    31,    -1,
1327       -1,    -1,    -1,   121,    -1,    -1,    -1,   125,   126,   127,
1328       -1,    -1,    -1,    -1,    -1,   133,    -1,    -1,    -1,   137,
1329       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
1330       63,    64,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
1331       73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
1332       83,    84,    85,    86,    -1,     3,     4,     5,     6,    -1,
1333       -1,     9,    -1,    -1,    -1,    -1,    14,    -1,   101,   102,
1334      103,   104,   105,   106,   107,   108,   109,    -1,    -1,    -1,
1335       -1,    -1,    30,    31,    -1,    -1,    -1,    -1,   121,    -1,
1336       -1,    -1,    -1,   126,   127,    -1,    -1,    -1,    -1,    -1,
1337      133,    -1,    -1,    -1,   137,    53,    54,    55,    56,    57,
1338       58,    59,    60,    61,    62,    63,    64,    -1,    -1,    -1,
1339       -1,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
1340       78,    79,    80,    -1,    -1,    83,    84,    85,    86,    -1,
1341        3,     4,     5,     6,    -1,    -1,     9,    -1,    -1,    -1,
1342       -1,    14,    -1,   101,   102,   103,   104,   105,   106,   107,
1343      108,   109,    -1,    -1,    -1,    -1,    -1,    30,    31,    -1,
1344       -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,   126,   127,
1345       -1,    -1,    -1,    -1,    -1,   133,    -1,    -1,    -1,   137,
1346       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
1347       63,    64,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
1348       73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
1349       83,    84,    85,    86,    -1,     3,     4,     5,     6,    -1,
1350       -1,     9,    -1,    -1,    -1,    -1,    14,    -1,   101,   102,
1351      103,   104,   105,   106,   107,   108,   109,    -1,    -1,    -1,
1352       -1,    -1,    30,    31,    -1,    -1,    -1,    -1,   121,    -1,
1353       -1,    -1,    -1,   126,   127,    -1,    -1,    -1,    -1,    -1,
1354      133,    -1,    -1,    -1,   137,    53,    54,    55,    56,    57,
1355       58,    59,    60,    61,    62,    63,    64,    -1,    -1,    -1,
1356       -1,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
1357       78,    79,    80,    -1,    -1,    83,    84,    85,    86,    -1,
1358        3,     4,     5,    -1,    -1,    -1,     9,    -1,    -1,    -1,
1359       -1,    14,    -1,   101,   102,   103,   104,   105,   106,   107,
1360      108,   109,    -1,    -1,    -1,    -1,    -1,    30,    31,    -1,
1361       -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,   126,   127,
1362       -1,    -1,    -1,    -1,    -1,   133,    -1,    -1,    -1,   137,
1363       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
1364       63,    64,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
1365       73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
1366       83,    84,    85,    86,    -1,     3,     4,     5,    -1,    -1,
1367       -1,     9,    -1,    -1,    -1,    -1,    14,    -1,   101,   102,
1368      103,   104,   105,   106,   107,   108,   109,    -1,    -1,    -1,
1369       -1,    -1,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
1370       -1,    -1,   125,   126,   127,    -1,    -1,    -1,    -1,    -1,
1371      133,    -1,    -1,    -1,   137,    53,    54,    55,    56,    57,
1372       58,    59,    60,    61,    62,    63,    64,    -1,    -1,    -1,
1373       -1,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
1374       78,    79,    80,    -1,    -1,    83,    84,    85,    86,    -1,
1375        3,     4,     5,    -1,    -1,    -1,     9,    -1,    -1,    -1,
1376       -1,    14,    -1,   101,   102,   103,   104,   105,   106,   107,
1377      108,   109,    -1,    -1,    -1,    -1,    -1,    30,    31,    -1,
1378       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,   127,
1379       -1,    -1,    -1,    -1,    -1,   133,   134,    -1,    -1,   137,
1380       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
1381       63,    64,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
1382       73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
1383       83,    84,    85,    86,    -1,     3,     4,     5,    -1,    -1,
1384       -1,     9,    -1,    -1,    -1,    -1,    14,    -1,   101,   102,
1385      103,   104,   105,   106,   107,   108,   109,    -1,    -1,    -1,
1386       -1,    -1,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
1387       -1,    -1,    -1,   126,   127,    -1,    -1,    -1,    -1,    -1,
1388      133,    -1,    -1,    -1,   137,    53,    54,    55,    56,    57,
1389       58,    59,    60,    61,    62,    63,    64,    -1,    -1,    -1,
1390       -1,    -1,    70,    71,    72,    73,    74,    75,    76,    77,
1391       78,    79,    80,    -1,    -1,    83,    84,    85,    86,    -1,
1392        3,     4,     5,    -1,    -1,    -1,     9,    -1,    -1,    -1,
1393       -1,    14,    -1,   101,   102,   103,   104,   105,   106,   107,
1394      108,   109,    -1,    -1,    -1,    -1,    -1,    30,    31,    -1,
1395       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,   127,
1396       -1,    -1,    -1,    -1,    -1,   133,    -1,    -1,    -1,   137,
1397       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
1398       63,    64,    -1,    -1,    -1,    -1,    -1,    70,    71,    72,
1399       73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
1400       83,    84,    85,    86,    -1,    -1,     3,     4,     5,    -1,
1401       -1,    -1,     9,    -1,    -1,    -1,    -1,    14,   101,   102,
1402      103,   104,   105,   106,   107,   108,   109,    -1,    -1,    -1,
1403       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
1404       -1,    -1,    -1,   126,   127,    -1,    -1,    -1,    -1,    -1,
1405      133,    48,    -1,    -1,   137,    -1,    53,    54,    55,    56,
1406       57,    58,    59,    60,    61,    62,    63,    64,    -1,    -1,
1407       -1,    -1,    -1,    70,    71,    72,    73,    74,    75,    76,
1408       77,    78,    79,    80,    -1,    -1,    83,    84,    85,    86,
1409       -1,    -1,     3,     4,     5,    -1,    -1,    -1,     9,    -1,
1410       -1,    -1,    -1,    14,   101,   102,   103,   104,   105,   106,
1411      107,   108,   109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
1412       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,
1413      127,    -1,    -1,    -1,    -1,    -1,   133,    48,    -1,    -1,
1414      137,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
1415       61,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    70,
1416       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
1417       -1,    -1,    83,    84,    85,    86,    -1,     3,     4,     5,
1418       -1,    -1,    -1,     9,    -1,    -1,    -1,    -1,    14,    -1,
1419      101,   102,   103,   104,   105,   106,   107,   108,   109,    -1,
1420       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
1421       -1,    -1,    -1,    -1,    -1,   126,   127,    -1,    -1,    -1,
1422       -1,    -1,   133,    -1,    -1,    -1,   137,    53,    54,    55,
1423       56,    57,    58,    59,    60,    61,    62,    63,    64,    -1,
1424       -1,    -1,    -1,    -1,    70,    71,    72,    73,    74,    75,
1425       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
1426       86,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
1427       -1,    -1,    -1,    -1,    -1,   101,   102,   103,   104,   105,
1428      106,   107,   108,   109,    -1,    54,    55,    56,    57,    58,
1429       59,    60,    61,    62,    63,    64,    30,    31,    -1,    -1,
1430      126,   127,    -1,    -1,    -1,    -1,    -1,   133,    -1,    -1,
1431       -1,   137,    -1,    -1,    83,    84,    85,    86,    -1,    -1,
1432       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
1433       64,    -1,   101,   102,   103,   104,   105,   106,   107,   108,
1434      109,    -1,    -1,    -1,    -1,    48,    -1,    -1,    51,    83,
1435       84,    85,    86,    -1,    -1,    48,   125,    -1,    51,    -1,
1436       -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,   102,   103,
1437      104,   105,   106,   107,   108,   109,    95,    96,    97,    98,
1438       99,   100,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
1439       -1,   125,    95,    96,    97,    98,    99,   100,    -1,    -1,
1440       -1,    -1,    95,    96,    97,    98,    99,   100,    -1,    -1,
1441      129,   130,   131,   132,   133,   134,   135,   136,    -1,   138,
1442       -1,    -1,    -1,    -1,    -1,    -1,   129,   130,   131,   132,
1443      133,   134,   135,   136,    -1,   138,   129,   130,   131,   132,
1444      133,   134,   135,   136,    -1,   138,    54,    55,    56,    57,
1445       58,    59,    60,    61,    62,    63,    64,    54,    55,    56,
1446       57,    58,    59,    60,    61,    62,    63,    64,    -1,    -1,
1447       -1,    -1,    -1,    -1,    -1,    83,    84,    85,    86,    -1,
1448       -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    85,    86,
1449       -1,    -1,    -1,   101,   102,   103,   104,   105,   106,   107,
1450      108,   109,    -1,    -1,   101,   102,   103,   104,   105,   106,
1451      107,   108,   109,    -1,    -1,    -1,    -1,   125,    95,    96,
1452       97,    98,    99,   100,    -1,    -1,    -1,    95,    96,    97,
1453       98,    99,   100,    -1,    -1,    -1,    95,    -1,    97,    98,
1454       99,   100,    -1,    -1,    -1,    95,    -1,    97,    98,    99,
1455      100,    -1,    -1,   130,   131,   132,   133,   134,   135,   136,
1456       -1,   138,   130,   131,   132,   133,   134,   135,   136,    -1,
1457      138,   130,   131,   132,   133,   134,   135,   136,    -1,   138,
1458      130,   131,   132,   133,   134,   135,   136,    -1,   138
1459 };
1460
1461   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1462      symbol of state STATE-NUM.  */
1463 static const yytype_uint8 yystos[] =
1464 {
1465        0,   139,   147,   148,   150,   151,     0,     3,     4,     6,
1466        7,    15,    16,    17,    18,    19,    20,    21,    22,    25,
1467       28,    29,    30,    31,    81,    87,    88,    91,    93,   110,
1468      112,   121,   122,   128,   142,   149,   152,   161,   164,   170,
1469      174,   176,   139,   141,   140,   141,   140,     6,    82,   153,
1470        3,     4,     5,     9,    14,    30,    31,    53,    54,    55,
1471       56,    57,    58,    59,    60,    61,    62,    63,    64,    70,
1472       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
1473       83,    84,    85,    86,   101,   102,   103,   104,   105,   106,
1474      107,   108,   109,   126,   127,   133,   137,   162,   163,   176,
1475      178,   179,   181,   182,   183,   184,   185,   186,   191,   192,
1476      193,   194,     4,   126,   137,   167,   168,   176,   182,   192,
1477      194,     4,   192,   126,   162,   175,   171,   150,   151,     4,
1478      129,    94,    11,    12,    13,    23,    24,    26,    27,    28,
1479       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
1480       39,    40,    41,    42,    43,    44,    45,    46,    47,    89,
1481       90,   113,   114,   115,   116,   117,   118,   119,   120,   176,
1482      192,   150,   167,   140,     3,     4,   160,    82,   156,     8,
1483      126,   126,   126,   126,   126,   126,   126,   126,   126,   126,
1484      126,    30,    31,   101,   102,    30,    31,   101,   102,   167,
1485      178,   181,   182,   192,   194,   167,   192,   192,   163,   132,
1486      133,    65,    66,    67,    68,    69,   125,   191,     6,    14,
1487       15,    16,    17,    18,    19,    20,    22,   128,   187,   187,
1488       48,   183,    48,    51,    95,    96,    97,    98,    99,   100,
1489      129,   130,   131,   132,   133,   134,   135,   136,   138,   180,
1490      130,   140,   168,   192,    37,    95,    96,    97,    98,    95,
1491       96,   176,     6,   148,   150,   148,   170,     4,   159,   192,
1492      192,   192,   192,   192,   192,   192,   192,   178,   192,   178,
1493      178,     3,     9,    14,   125,   126,   178,   188,   189,   190,
1494      191,   126,   181,   192,   192,   192,   192,   192,   192,   176,
1495      176,   176,   192,   192,     3,     4,    30,    31,   170,   178,
1496      179,   182,   167,   154,     8,   167,   167,   167,   167,   167,
1497      167,   167,   167,   167,   145,   167,   167,   145,   129,   132,
1498      133,   145,   145,   180,   130,    10,   181,   181,     3,   144,
1499      183,    49,   192,   192,   192,   192,   192,   192,   192,   192,
1500      192,   192,   192,   192,   192,   192,   192,   178,   178,   192,
1501      165,   168,   192,   168,   192,   176,   176,   168,   192,   168,
1502      192,   177,   144,   143,     8,   189,   191,   187,   187,     3,
1503      189,   125,   191,   181,   192,     8,   157,   145,   145,   129,
1504      145,   145,   145,   129,   129,   145,   145,   145,   178,   181,
1505      181,   178,   178,    50,    52,   129,    33,     8,   129,   145,
1506      172,   189,   189,   129,     3,   155,   111,   166,   167,   167,
1507      167,   145,   145,   145,    52,   129,    51,   178,   178,   192,
1508      192,   170,   173,   189,   166,     6,   145,   145,   145,   178,
1509      178,   131,    36,   169,   145,   145,   131,   134,   192,    92,
1510      145,   192,   158,     8
1511 };
1512
1513   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
1514 static const yytype_uint8 yyr1[] =
1515 {
1516        0,   146,   147,   147,   148,   149,   149,   150,   150,   151,
1517      151,   152,   152,   152,   152,   152,   152,   152,   152,   152,
1518      152,   153,   152,   152,   154,   155,   152,   156,   157,   152,
1519      158,   152,   152,   159,   152,   152,   152,   160,   160,   161,
1520      161,   161,   162,   162,   163,   163,   163,   165,   164,   166,
1521      166,   167,   167,   168,   168,   168,   168,   168,   168,   168,
1522      168,   168,   169,   169,   169,   170,   170,   170,   170,   171,
1523      172,   170,   170,   173,   173,   174,   174,   174,   174,   174,
1524      174,   174,   174,   174,   174,   174,   175,   174,   174,   174,
1525      174,   174,   174,   174,   174,   174,   174,   174,   174,   174,
1526      174,   174,   174,   174,   174,   174,   174,   174,   174,   174,
1527      174,   174,   174,   174,   174,   174,   174,   174,   174,   174,
1528      174,   174,   174,   174,   174,   174,   174,   174,   174,   174,
1529      174,   174,   174,   174,   174,   174,   176,   176,   177,   177,
1530      178,   178,   178,   179,   179,   179,   179,   179,   179,   179,
1531      179,   179,   179,   180,   180,   181,   181,   182,   182,   182,
1532      182,   182,   183,   183,   183,   184,   184,   185,   185,   186,
1533      186,   187,   187,   187,   187,   187,   187,   187,   187,   187,
1534      188,   188,   189,   189,   189,   190,   190,   190,   190,   190,
1535      190,   191,   191,   191,   191,   191,   191,   191,   191,   191,
1536      191,   191,   191,   191,   191,   191,   191,   191,   191,   191,
1537      191,   191,   191,   191,   191,   191,   191,   191,   191,   191,
1538      191,   191,   191,   192,   192,   193,   194,   194,   194,   194,
1539      194,   194,   194,   194,   194,   194,   194,   194,   194,   194,
1540      194,   194,   194,   194,   194,   194,   194,   194,   194,   194,
1541      194,   194,   194,   194,   194,   194,   194,   194,   194,   194,
1542      194
1543 };
1544
1545   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
1546 static const yytype_uint8 yyr2[] =
1547 {
1548        0,     2,     1,     1,     3,     1,     3,     0,     1,     1,
1549        2,     3,     3,     4,     1,     1,     1,     1,     1,     2,
1550        2,     0,     3,     2,     0,     0,     7,     0,     0,     6,
1551        0,    10,     1,     0,     4,     1,     1,     1,     1,     2,
1552        2,     3,     1,     2,     1,     1,     1,     0,     5,     0,
1553        2,     1,     1,     3,     3,     3,     3,     3,     3,     3,
1554        3,     2,     0,     2,     3,     1,     4,     4,     4,     0,
1555        0,     6,     1,     0,     1,     1,     1,     1,     1,     1,
1556        1,     1,     1,     1,     2,     3,     0,     4,     3,     3,
1557        3,     3,     2,     2,     3,     2,     3,     2,     3,     2,
1558        3,     3,     3,     3,     3,     3,     3,     2,     2,     2,
1559        3,     2,     3,     2,     3,     3,     3,     3,     3,     3,
1560        2,     3,     2,     2,     2,     2,     2,     2,     2,     2,
1561        2,     2,     2,     2,     3,     2,     1,     5,     0,     3,
1562        1,     1,     3,     1,     3,     5,     3,     5,     5,     5,
1563        7,     6,     8,     1,     4,     3,     3,     1,     2,     2,
1564        3,     1,     1,     1,     3,     1,     3,     1,     2,     2,
1565        2,     1,     1,     1,     1,     1,     1,     1,     2,     1,
1566        2,     3,     1,     1,     2,     1,     5,     4,     3,     3,
1567        2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
1568        1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
1569        1,     1,     2,     2,     2,     2,     1,     1,     1,     1,
1570        1,     1,     1,     1,     1,     3,     1,     1,     2,     2,
1571        2,     2,     2,     3,     3,     3,     3,     3,     3,     2,
1572        3,     4,     4,     6,     4,     4,     4,     6,     6,     4,
1573        4,     3,     4,     3,     3,     3,     3,     3,     3,     3,
1574        2
1575 };
1576
1577
1578 #define yyerrok         (yyerrstatus = 0)
1579 #define yyclearin       (yychar = YYEMPTY)
1580 #define YYEMPTY         (-2)
1581 #define YYEOF           0
1582
1583 #define YYACCEPT        goto yyacceptlab
1584 #define YYABORT         goto yyabortlab
1585 #define YYERROR         goto yyerrorlab
1586
1587
1588 #define YYRECOVERING()  (!!yyerrstatus)
1589
1590 #define YYBACKUP(Token, Value)                                  \
1591 do                                                              \
1592   if (yychar == YYEMPTY)                                        \
1593     {                                                           \
1594       yychar = (Token);                                         \
1595       yylval = (Value);                                         \
1596       YYPOPSTACK (yylen);                                       \
1597       yystate = *yyssp;                                         \
1598       goto yybackup;                                            \
1599     }                                                           \
1600   else                                                          \
1601     {                                                           \
1602       yyerror (YY_("syntax error: cannot back up")); \
1603       YYERROR;                                                  \
1604     }                                                           \
1605 while (0)
1606
1607 /* Error token number */
1608 #define YYTERROR        1
1609 #define YYERRCODE       256
1610
1611
1612
1613 /* Enable debugging if requested.  */
1614 #if YYDEBUG
1615
1616 # ifndef YYFPRINTF
1617 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1618 #  define YYFPRINTF fprintf
1619 # endif
1620
1621 # define YYDPRINTF(Args)                        \
1622 do {                                            \
1623   if (yydebug)                                  \
1624     YYFPRINTF Args;                             \
1625 } while (0)
1626
1627 /* This macro is provided for backward compatibility. */
1628 #ifndef YY_LOCATION_PRINT
1629 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
1630 #endif
1631
1632
1633 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
1634 do {                                                                      \
1635   if (yydebug)                                                            \
1636     {                                                                     \
1637       YYFPRINTF (stderr, "%s ", Title);                                   \
1638       yy_symbol_print (stderr,                                            \
1639                   Type, Value); \
1640       YYFPRINTF (stderr, "\n");                                           \
1641     }                                                                     \
1642 } while (0)
1643
1644
1645 /*-----------------------------------.
1646 | Print this symbol's value on YYO.  |
1647 `-----------------------------------*/
1648
1649 static void
1650 yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
1651 {
1652   FILE *yyoutput = yyo;
1653   YYUSE (yyoutput);
1654   if (!yyvaluep)
1655     return;
1656 # ifdef YYPRINT
1657   if (yytype < YYNTOKENS)
1658     YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
1659 # endif
1660   YYUSE (yytype);
1661 }
1662
1663
1664 /*---------------------------.
1665 | Print this symbol on YYO.  |
1666 `---------------------------*/
1667
1668 static void
1669 yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
1670 {
1671   YYFPRINTF (yyo, "%s %s (",
1672              yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
1673
1674   yy_symbol_value_print (yyo, yytype, yyvaluep);
1675   YYFPRINTF (yyo, ")");
1676 }
1677
1678 /*------------------------------------------------------------------.
1679 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1680 | TOP (included).                                                   |
1681 `------------------------------------------------------------------*/
1682
1683 static void
1684 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
1685 {
1686   YYFPRINTF (stderr, "Stack now");
1687   for (; yybottom <= yytop; yybottom++)
1688     {
1689       int yybot = *yybottom;
1690       YYFPRINTF (stderr, " %d", yybot);
1691     }
1692   YYFPRINTF (stderr, "\n");
1693 }
1694
1695 # define YY_STACK_PRINT(Bottom, Top)                            \
1696 do {                                                            \
1697   if (yydebug)                                                  \
1698     yy_stack_print ((Bottom), (Top));                           \
1699 } while (0)
1700
1701
1702 /*------------------------------------------------.
1703 | Report that the YYRULE is going to be reduced.  |
1704 `------------------------------------------------*/
1705
1706 static void
1707 yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
1708 {
1709   unsigned long yylno = yyrline[yyrule];
1710   int yynrhs = yyr2[yyrule];
1711   int yyi;
1712   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
1713              yyrule - 1, yylno);
1714   /* The symbols being reduced.  */
1715   for (yyi = 0; yyi < yynrhs; yyi++)
1716     {
1717       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
1718       yy_symbol_print (stderr,
1719                        yystos[yyssp[yyi + 1 - yynrhs]],
1720                        &(yyvsp[(yyi + 1) - (yynrhs)])
1721                                               );
1722       YYFPRINTF (stderr, "\n");
1723     }
1724 }
1725
1726 # define YY_REDUCE_PRINT(Rule)          \
1727 do {                                    \
1728   if (yydebug)                          \
1729     yy_reduce_print (yyssp, yyvsp, Rule); \
1730 } while (0)
1731
1732 /* Nonzero means print parse trace.  It is left uninitialized so that
1733    multiple parsers can coexist.  */
1734 int yydebug;
1735 #else /* !YYDEBUG */
1736 # define YYDPRINTF(Args)
1737 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
1738 # define YY_STACK_PRINT(Bottom, Top)
1739 # define YY_REDUCE_PRINT(Rule)
1740 #endif /* !YYDEBUG */
1741
1742
1743 /* YYINITDEPTH -- initial size of the parser's stacks.  */
1744 #ifndef YYINITDEPTH
1745 # define YYINITDEPTH 200
1746 #endif
1747
1748 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1749    if the built-in stack extension method is used).
1750
1751    Do not make this value too large; the results are undefined if
1752    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1753    evaluated with infinite-precision integer arithmetic.  */
1754
1755 #ifndef YYMAXDEPTH
1756 # define YYMAXDEPTH 10000
1757 #endif
1758
1759
1760 #if YYERROR_VERBOSE
1761
1762 # ifndef yystrlen
1763 #  if defined __GLIBC__ && defined _STRING_H
1764 #   define yystrlen strlen
1765 #  else
1766 /* Return the length of YYSTR.  */
1767 static YYSIZE_T
1768 yystrlen (const char *yystr)
1769 {
1770   YYSIZE_T yylen;
1771   for (yylen = 0; yystr[yylen]; yylen++)
1772     continue;
1773   return yylen;
1774 }
1775 #  endif
1776 # endif
1777
1778 # ifndef yystpcpy
1779 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1780 #   define yystpcpy stpcpy
1781 #  else
1782 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1783    YYDEST.  */
1784 static char *
1785 yystpcpy (char *yydest, const char *yysrc)
1786 {
1787   char *yyd = yydest;
1788   const char *yys = yysrc;
1789
1790   while ((*yyd++ = *yys++) != '\0')
1791     continue;
1792
1793   return yyd - 1;
1794 }
1795 #  endif
1796 # endif
1797
1798 # ifndef yytnamerr
1799 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1800    quotes and backslashes, so that it's suitable for yyerror.  The
1801    heuristic is that double-quoting is unnecessary unless the string
1802    contains an apostrophe, a comma, or backslash (other than
1803    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
1804    null, do not copy; instead, return the length of what the result
1805    would have been.  */
1806 static YYSIZE_T
1807 yytnamerr (char *yyres, const char *yystr)
1808 {
1809   if (*yystr == '"')
1810     {
1811       YYSIZE_T yyn = 0;
1812       char const *yyp = yystr;
1813
1814       for (;;)
1815         switch (*++yyp)
1816           {
1817           case '\'':
1818           case ',':
1819             goto do_not_strip_quotes;
1820
1821           case '\\':
1822             if (*++yyp != '\\')
1823               goto do_not_strip_quotes;
1824             /* Fall through.  */
1825           default:
1826             if (yyres)
1827               yyres[yyn] = *yyp;
1828             yyn++;
1829             break;
1830
1831           case '"':
1832             if (yyres)
1833               yyres[yyn] = '\0';
1834             return yyn;
1835           }
1836     do_not_strip_quotes: ;
1837     }
1838
1839   if (! yyres)
1840     return yystrlen (yystr);
1841
1842   return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres);
1843 }
1844 # endif
1845
1846 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
1847    about the unexpected token YYTOKEN for the state stack whose top is
1848    YYSSP.
1849
1850    Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
1851    not large enough to hold the message.  In that case, also set
1852    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
1853    required number of bytes is too large to store.  */
1854 static int
1855 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
1856                 yytype_int16 *yyssp, int yytoken)
1857 {
1858   YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
1859   YYSIZE_T yysize = yysize0;
1860   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1861   /* Internationalized format string. */
1862   const char *yyformat = YY_NULLPTR;
1863   /* Arguments of yyformat. */
1864   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1865   /* Number of reported tokens (one for the "unexpected", one per
1866      "expected"). */
1867   int yycount = 0;
1868
1869   /* There are many possibilities here to consider:
1870      - If this state is a consistent state with a default action, then
1871        the only way this function was invoked is if the default action
1872        is an error action.  In that case, don't check for expected
1873        tokens because there are none.
1874      - The only way there can be no lookahead present (in yychar) is if
1875        this state is a consistent state with a default action.  Thus,
1876        detecting the absence of a lookahead is sufficient to determine
1877        that there is no unexpected or expected token to report.  In that
1878        case, just report a simple "syntax error".
1879      - Don't assume there isn't a lookahead just because this state is a
1880        consistent state with a default action.  There might have been a
1881        previous inconsistent state, consistent state with a non-default
1882        action, or user semantic action that manipulated yychar.
1883      - Of course, the expected token list depends on states to have
1884        correct lookahead information, and it depends on the parser not
1885        to perform extra reductions after fetching a lookahead from the
1886        scanner and before detecting a syntax error.  Thus, state merging
1887        (from LALR or IELR) and default reductions corrupt the expected
1888        token list.  However, the list is correct for canonical LR with
1889        one exception: it will still contain any token that will not be
1890        accepted due to an error action in a later state.
1891   */
1892   if (yytoken != YYEMPTY)
1893     {
1894       int yyn = yypact[*yyssp];
1895       yyarg[yycount++] = yytname[yytoken];
1896       if (!yypact_value_is_default (yyn))
1897         {
1898           /* Start YYX at -YYN if negative to avoid negative indexes in
1899              YYCHECK.  In other words, skip the first -YYN actions for
1900              this state because they are default actions.  */
1901           int yyxbegin = yyn < 0 ? -yyn : 0;
1902           /* Stay within bounds of both yycheck and yytname.  */
1903           int yychecklim = YYLAST - yyn + 1;
1904           int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1905           int yyx;
1906
1907           for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1908             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
1909                 && !yytable_value_is_error (yytable[yyx + yyn]))
1910               {
1911                 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1912                   {
1913                     yycount = 1;
1914                     yysize = yysize0;
1915                     break;
1916                   }
1917                 yyarg[yycount++] = yytname[yyx];
1918                 {
1919                   YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
1920                   if (! (yysize <= yysize1
1921                          && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1922                     return 2;
1923                   yysize = yysize1;
1924                 }
1925               }
1926         }
1927     }
1928
1929   switch (yycount)
1930     {
1931 # define YYCASE_(N, S)                      \
1932       case N:                               \
1933         yyformat = S;                       \
1934       break
1935     default: /* Avoid compiler warnings. */
1936       YYCASE_(0, YY_("syntax error"));
1937       YYCASE_(1, YY_("syntax error, unexpected %s"));
1938       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1939       YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1940       YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1941       YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1942 # undef YYCASE_
1943     }
1944
1945   {
1946     YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
1947     if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1948       return 2;
1949     yysize = yysize1;
1950   }
1951
1952   if (*yymsg_alloc < yysize)
1953     {
1954       *yymsg_alloc = 2 * yysize;
1955       if (! (yysize <= *yymsg_alloc
1956              && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1957         *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1958       return 1;
1959     }
1960
1961   /* Avoid sprintf, as that infringes on the user's name space.
1962      Don't have undefined behavior even if the translation
1963      produced a string with the wrong number of "%s"s.  */
1964   {
1965     char *yyp = *yymsg;
1966     int yyi = 0;
1967     while ((*yyp = *yyformat) != '\0')
1968       if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
1969         {
1970           yyp += yytnamerr (yyp, yyarg[yyi++]);
1971           yyformat += 2;
1972         }
1973       else
1974         {
1975           yyp++;
1976           yyformat++;
1977         }
1978   }
1979   return 0;
1980 }
1981 #endif /* YYERROR_VERBOSE */
1982
1983 /*-----------------------------------------------.
1984 | Release the memory associated to this symbol.  |
1985 `-----------------------------------------------*/
1986
1987 static void
1988 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
1989 {
1990   YYUSE (yyvaluep);
1991   if (!yymsg)
1992     yymsg = "Deleting";
1993   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1994
1995   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1996   YYUSE (yytype);
1997   YY_IGNORE_MAYBE_UNINITIALIZED_END
1998 }
1999
2000
2001
2002
2003 /* The lookahead symbol.  */
2004 int yychar;
2005
2006 /* The semantic value of the lookahead symbol.  */
2007 YYSTYPE yylval;
2008 /* Number of syntax errors so far.  */
2009 int yynerrs;
2010
2011
2012 /*----------.
2013 | yyparse.  |
2014 `----------*/
2015
2016 int
2017 yyparse (void)
2018 {
2019     int yystate;
2020     /* Number of tokens to shift before error messages enabled.  */
2021     int yyerrstatus;
2022
2023     /* The stacks and their tools:
2024        'yyss': related to states.
2025        'yyvs': related to semantic values.
2026
2027        Refer to the stacks through separate pointers, to allow yyoverflow
2028        to reallocate them elsewhere.  */
2029
2030     /* The state stack.  */
2031     yytype_int16 yyssa[YYINITDEPTH];
2032     yytype_int16 *yyss;
2033     yytype_int16 *yyssp;
2034
2035     /* The semantic value stack.  */
2036     YYSTYPE yyvsa[YYINITDEPTH];
2037     YYSTYPE *yyvs;
2038     YYSTYPE *yyvsp;
2039
2040     YYSIZE_T yystacksize;
2041
2042   int yyn;
2043   int yyresult;
2044   /* Lookahead token as an internal (translated) token number.  */
2045   int yytoken = 0;
2046   /* The variables used to return semantic value and location from the
2047      action routines.  */
2048   YYSTYPE yyval;
2049
2050 #if YYERROR_VERBOSE
2051   /* Buffer for error messages, and its allocated size.  */
2052   char yymsgbuf[128];
2053   char *yymsg = yymsgbuf;
2054   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
2055 #endif
2056
2057 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
2058
2059   /* The number of symbols on the RHS of the reduced rule.
2060      Keep to zero when no symbol should be popped.  */
2061   int yylen = 0;
2062
2063   yyssp = yyss = yyssa;
2064   yyvsp = yyvs = yyvsa;
2065   yystacksize = YYINITDEPTH;
2066
2067   YYDPRINTF ((stderr, "Starting parse\n"));
2068
2069   yystate = 0;
2070   yyerrstatus = 0;
2071   yynerrs = 0;
2072   yychar = YYEMPTY; /* Cause a token to be read.  */
2073   goto yysetstate;
2074
2075 /*------------------------------------------------------------.
2076 | yynewstate -- Push a new state, which is found in yystate.  |
2077 `------------------------------------------------------------*/
2078  yynewstate:
2079   /* In all cases, when you get here, the value and location stacks
2080      have just been pushed.  So pushing a state here evens the stacks.  */
2081   yyssp++;
2082
2083  yysetstate:
2084   *yyssp = (yytype_int16) yystate;
2085
2086   if (yyss + yystacksize - 1 <= yyssp)
2087     {
2088       /* Get the current used size of the three stacks, in elements.  */
2089       YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1);
2090
2091 #ifdef yyoverflow
2092       {
2093         /* Give user a chance to reallocate the stack.  Use copies of
2094            these so that the &'s don't force the real ones into
2095            memory.  */
2096         YYSTYPE *yyvs1 = yyvs;
2097         yytype_int16 *yyss1 = yyss;
2098
2099         /* Each stack pointer address is followed by the size of the
2100            data in use in that stack, in bytes.  This used to be a
2101            conditional around just the two extra args, but that might
2102            be undefined if yyoverflow is a macro.  */
2103         yyoverflow (YY_("memory exhausted"),
2104                     &yyss1, yysize * sizeof (*yyssp),
2105                     &yyvs1, yysize * sizeof (*yyvsp),
2106                     &yystacksize);
2107         yyss = yyss1;
2108         yyvs = yyvs1;
2109       }
2110 #else /* no yyoverflow */
2111 # ifndef YYSTACK_RELOCATE
2112       goto yyexhaustedlab;
2113 # else
2114       /* Extend the stack our own way.  */
2115       if (YYMAXDEPTH <= yystacksize)
2116         goto yyexhaustedlab;
2117       yystacksize *= 2;
2118       if (YYMAXDEPTH < yystacksize)
2119         yystacksize = YYMAXDEPTH;
2120
2121       {
2122         yytype_int16 *yyss1 = yyss;
2123         union yyalloc *yyptr =
2124           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2125         if (! yyptr)
2126           goto yyexhaustedlab;
2127         YYSTACK_RELOCATE (yyss_alloc, yyss);
2128         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
2129 #  undef YYSTACK_RELOCATE
2130         if (yyss1 != yyssa)
2131           YYSTACK_FREE (yyss1);
2132       }
2133 # endif
2134 #endif /* no yyoverflow */
2135
2136       yyssp = yyss + yysize - 1;
2137       yyvsp = yyvs + yysize - 1;
2138
2139       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
2140                   (unsigned long) yystacksize));
2141
2142       if (yyss + yystacksize - 1 <= yyssp)
2143         YYABORT;
2144     }
2145
2146   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
2147
2148   if (yystate == YYFINAL)
2149     YYACCEPT;
2150
2151   goto yybackup;
2152
2153 /*-----------.
2154 | yybackup.  |
2155 `-----------*/
2156 yybackup:
2157
2158   /* Do appropriate processing given the current state.  Read a
2159      lookahead token if we need one and don't already have one.  */
2160
2161   /* First try to decide what to do without reference to lookahead token.  */
2162   yyn = yypact[yystate];
2163   if (yypact_value_is_default (yyn))
2164     goto yydefault;
2165
2166   /* Not known => get a lookahead token if don't already have one.  */
2167
2168   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
2169   if (yychar == YYEMPTY)
2170     {
2171       YYDPRINTF ((stderr, "Reading a token: "));
2172       yychar = yylex ();
2173     }
2174
2175   if (yychar <= YYEOF)
2176     {
2177       yychar = yytoken = YYEOF;
2178       YYDPRINTF ((stderr, "Now at end of input.\n"));
2179     }
2180   else
2181     {
2182       yytoken = YYTRANSLATE (yychar);
2183       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2184     }
2185
2186   /* If the proper action on seeing token YYTOKEN is to reduce or to
2187      detect an error, take that action.  */
2188   yyn += yytoken;
2189   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
2190     goto yydefault;
2191   yyn = yytable[yyn];
2192   if (yyn <= 0)
2193     {
2194       if (yytable_value_is_error (yyn))
2195         goto yyerrlab;
2196       yyn = -yyn;
2197       goto yyreduce;
2198     }
2199
2200   /* Count tokens shifted since error; after three, turn off error
2201      status.  */
2202   if (yyerrstatus)
2203     yyerrstatus--;
2204
2205   /* Shift the lookahead token.  */
2206   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
2207
2208   /* Discard the shifted token.  */
2209   yychar = YYEMPTY;
2210
2211   yystate = yyn;
2212   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2213   *++yyvsp = yylval;
2214   YY_IGNORE_MAYBE_UNINITIALIZED_END
2215
2216   goto yynewstate;
2217
2218
2219 /*-----------------------------------------------------------.
2220 | yydefault -- do the default action for the current state.  |
2221 `-----------------------------------------------------------*/
2222 yydefault:
2223   yyn = yydefact[yystate];
2224   if (yyn == 0)
2225     goto yyerrlab;
2226   goto yyreduce;
2227
2228
2229 /*-----------------------------.
2230 | yyreduce -- Do a reduction.  |
2231 `-----------------------------*/
2232 yyreduce:
2233   /* yyn is the number of a rule to reduce with.  */
2234   yylen = yyr2[yyn];
2235
2236   /* If YYLEN is nonzero, implement the default value of the action:
2237      '$$ = $1'.
2238
2239      Otherwise, the following line sets YYVAL to garbage.
2240      This behavior is undocumented and Bison
2241      users should not rely upon it.  Assigning to YYVAL
2242      unconditionally makes the parser a bit smaller, and it avoids a
2243      GCC warning that YYVAL may be used uninitialized.  */
2244   yyval = yyvsp[1-yylen];
2245
2246
2247   YY_REDUCE_PRINT (yyn);
2248   switch (yyn)
2249     {
2250         case 3:
2251 #line 277 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2252     {
2253                   if (olist.head)
2254                     print_picture(olist.head);
2255                 }
2256 #line 2257 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2257     break;
2258
2259   case 4:
2260 #line 286 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2261     { (yyval.pl) = (yyvsp[-1].pl); }
2262 #line 2263 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2263     break;
2264
2265   case 5:
2266 #line 291 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2267     { (yyval.pl) = (yyvsp[0].pl); }
2268 #line 2269 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2269     break;
2270
2271   case 6:
2272 #line 293 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2273     { (yyval.pl) = (yyvsp[-2].pl); }
2274 #line 2275 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2275     break;
2276
2277   case 11:
2278 #line 308 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2279     {
2280                   a_delete graphname;
2281                   graphname = new char[strlen((yyvsp[0].str)) + 1];
2282                   strcpy(graphname, (yyvsp[0].str));
2283                   a_delete (yyvsp[0].str);
2284                 }
2285 #line 2286 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2286     break;
2287
2288   case 12:
2289 #line 316 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2290     {
2291                   define_variable((yyvsp[-2].str), (yyvsp[0].x));
2292                   free((yyvsp[-2].str));
2293                 }
2294 #line 2295 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2295     break;
2296
2297   case 13:
2298 #line 321 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2299     {
2300                   place *p = lookup_label((yyvsp[-3].str));
2301                   if (!p) {
2302                     lex_error("variable '%1' not defined", (yyvsp[-3].str));
2303                     YYABORT;
2304                   }
2305                   p->obj = 0;
2306                   p->x = (yyvsp[0].x);
2307                   p->y = 0.0;
2308                   free((yyvsp[-3].str));
2309                 }
2310 #line 2311 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2311     break;
2312
2313   case 14:
2314 #line 333 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2315     { current_direction = UP_DIRECTION; }
2316 #line 2317 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2317     break;
2318
2319   case 15:
2320 #line 335 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2321     { current_direction = DOWN_DIRECTION; }
2322 #line 2323 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2323     break;
2324
2325   case 16:
2326 #line 337 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2327     { current_direction = LEFT_DIRECTION; }
2328 #line 2329 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2329     break;
2330
2331   case 17:
2332 #line 339 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2333     { current_direction = RIGHT_DIRECTION; }
2334 #line 2335 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2335     break;
2336
2337   case 18:
2338 #line 341 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2339     {
2340                   olist.append(make_command_object((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename,
2341                                                    (yyvsp[0].lstr).lineno));
2342                 }
2343 #line 2344 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2344     break;
2345
2346   case 19:
2347 #line 346 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2348     {
2349                   olist.append(make_command_object((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename,
2350                                                    (yyvsp[0].lstr).lineno));
2351                 }
2352 #line 2353 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2353     break;
2354
2355   case 20:
2356 #line 351 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2357     {
2358                   fprintf(stderr, "%s\n", (yyvsp[0].lstr).str);
2359                   a_delete (yyvsp[0].lstr).str;
2360                   fflush(stderr);
2361                 }
2362 #line 2363 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2363     break;
2364
2365   case 21:
2366 #line 357 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2367     { delim_flag = 1; }
2368 #line 2369 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2369     break;
2370
2371   case 22:
2372 #line 359 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2373     {
2374                   delim_flag = 0;
2375                   if (safer_flag)
2376                     lex_error("unsafe to run command '%1'", (yyvsp[0].str));
2377                   else
2378                     system((yyvsp[0].str));
2379                   a_delete (yyvsp[0].str);
2380                 }
2381 #line 2382 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2382     break;
2383
2384   case 23:
2385 #line 368 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2386     {
2387                   if (yychar < 0)
2388                     do_lookahead();
2389                   do_copy((yyvsp[0].lstr).str);
2390                   // do not delete the filename
2391                 }
2392 #line 2393 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2393     break;
2394
2395   case 24:
2396 #line 375 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2397     { delim_flag = 2; }
2398 #line 2399 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2399     break;
2400
2401   case 25:
2402 #line 377 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2403     { delim_flag = 0; }
2404 #line 2405 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2405     break;
2406
2407   case 26:
2408 #line 379 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2409     {
2410                   if (yychar < 0)
2411                     do_lookahead();
2412                   copy_file_thru((yyvsp[-5].lstr).str, (yyvsp[-2].str), (yyvsp[0].str));
2413                   // do not delete the filename
2414                   a_delete (yyvsp[-2].str);
2415                   a_delete (yyvsp[0].str);
2416                 }
2417 #line 2418 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2418     break;
2419
2420   case 27:
2421 #line 388 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2422     { delim_flag = 2; }
2423 #line 2424 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2424     break;
2425
2426   case 28:
2427 #line 390 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2428     { delim_flag = 0; }
2429 #line 2430 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2430     break;
2431
2432   case 29:
2433 #line 392 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2434     {
2435                   if (yychar < 0)
2436                     do_lookahead();
2437                   copy_rest_thru((yyvsp[-2].str), (yyvsp[0].str));
2438                   a_delete (yyvsp[-2].str);
2439                   a_delete (yyvsp[0].str);
2440                 }
2441 #line 2442 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2442     break;
2443
2444   case 30:
2445 #line 400 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2446     { delim_flag = 1; }
2447 #line 2448 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2448     break;
2449
2450   case 31:
2451 #line 402 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2452     {
2453                   delim_flag = 0;
2454                   if (yychar < 0)
2455                     do_lookahead();
2456                   do_for((yyvsp[-8].str), (yyvsp[-6].x), (yyvsp[-4].x), (yyvsp[-3].by).is_multiplicative, (yyvsp[-3].by).val, (yyvsp[0].str)); 
2457                 }
2458 #line 2459 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2459     break;
2460
2461   case 32:
2462 #line 409 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2463     {
2464                   if (yychar < 0)
2465                     do_lookahead();
2466                   if ((yyvsp[0].if_data).x != 0.0)
2467                     push_body((yyvsp[0].if_data).body);
2468                   a_delete (yyvsp[0].if_data).body;
2469                 }
2470 #line 2471 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2471     break;
2472
2473   case 33:
2474 #line 417 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2475     { delim_flag = 1; }
2476 #line 2477 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2477     break;
2478
2479   case 34:
2480 #line 419 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2481     {
2482                   delim_flag = 0;
2483                   if (yychar < 0)
2484                     do_lookahead();
2485                   if ((yyvsp[-3].if_data).x != 0.0)
2486                     push_body((yyvsp[-3].if_data).body);
2487                   else
2488                     push_body((yyvsp[0].str));
2489                   free((yyvsp[-3].if_data).body);
2490                   free((yyvsp[0].str));
2491                 }
2492 #line 2493 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2493     break;
2494
2495   case 36:
2496 #line 432 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2497     { define_variable("scale", 1.0); }
2498 #line 2499 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2499     break;
2500
2501   case 39:
2502 #line 442 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2503     {
2504                   reset((yyvsp[0].str));
2505                   a_delete (yyvsp[0].str);
2506                 }
2507 #line 2508 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2508     break;
2509
2510   case 40:
2511 #line 447 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2512     {
2513                   reset((yyvsp[0].str));
2514                   a_delete (yyvsp[0].str);
2515                 }
2516 #line 2517 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2517     break;
2518
2519   case 41:
2520 #line 452 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2521     {
2522                   reset((yyvsp[0].str));
2523                   a_delete (yyvsp[0].str);
2524                 }
2525 #line 2526 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2526     break;
2527
2528   case 42:
2529 #line 460 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2530     { (yyval.lstr) = (yyvsp[0].lstr); }
2531 #line 2532 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2532     break;
2533
2534   case 43:
2535 #line 462 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2536     {
2537                   (yyval.lstr).str = new char[strlen((yyvsp[-1].lstr).str) + strlen((yyvsp[0].lstr).str) + 1];
2538                   strcpy((yyval.lstr).str, (yyvsp[-1].lstr).str);
2539                   strcat((yyval.lstr).str, (yyvsp[0].lstr).str);
2540                   a_delete (yyvsp[-1].lstr).str;
2541                   a_delete (yyvsp[0].lstr).str;
2542                   if ((yyvsp[-1].lstr).filename) {
2543                     (yyval.lstr).filename = (yyvsp[-1].lstr).filename;
2544                     (yyval.lstr).lineno = (yyvsp[-1].lstr).lineno;
2545                   }
2546                   else if ((yyvsp[0].lstr).filename) {
2547                     (yyval.lstr).filename = (yyvsp[0].lstr).filename;
2548                     (yyval.lstr).lineno = (yyvsp[0].lstr).lineno;
2549                   }
2550                 }
2551 #line 2552 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2552     break;
2553
2554   case 44:
2555 #line 481 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2556     {
2557                   (yyval.lstr).str = new char[GDIGITS + 1];
2558                   sprintf((yyval.lstr).str, "%g", (yyvsp[0].x));
2559                   (yyval.lstr).filename = 0;
2560                   (yyval.lstr).lineno = 0;
2561                 }
2562 #line 2563 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2563     break;
2564
2565   case 45:
2566 #line 488 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2567     { (yyval.lstr) = (yyvsp[0].lstr); }
2568 #line 2569 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2569     break;
2570
2571   case 46:
2572 #line 490 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2573     {
2574                   (yyval.lstr).str = new char[GDIGITS + 2 + GDIGITS + 1];
2575                   sprintf((yyval.lstr).str, "%g, %g", (yyvsp[0].pair).x, (yyvsp[0].pair).y);
2576                   (yyval.lstr).filename = 0;
2577                   (yyval.lstr).lineno = 0;
2578                 }
2579 #line 2580 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2580     break;
2581
2582   case 47:
2583 #line 500 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2584     { delim_flag = 1; }
2585 #line 2586 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2586     break;
2587
2588   case 48:
2589 #line 502 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2590     {
2591                   delim_flag = 0;
2592                   (yyval.if_data).x = (yyvsp[-3].x);
2593                   (yyval.if_data).body = (yyvsp[0].str);
2594                 }
2595 #line 2596 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2596     break;
2597
2598   case 49:
2599 #line 511 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2600     { (yyval.str) = 0; }
2601 #line 2602 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2602     break;
2603
2604   case 50:
2605 #line 513 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2606     { (yyval.str) = (yyvsp[0].lstr).str; }
2607 #line 2608 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2608     break;
2609
2610   case 51:
2611 #line 518 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2612     { (yyval.x) = (yyvsp[0].x); }
2613 #line 2614 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2614     break;
2615
2616   case 52:
2617 #line 520 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2618     { (yyval.x) = (yyvsp[0].x); }
2619 #line 2620 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2620     break;
2621
2622   case 53:
2623 #line 525 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2624     {
2625                   (yyval.x) = strcmp((yyvsp[-2].lstr).str, (yyvsp[0].lstr).str) == 0;
2626                   a_delete (yyvsp[-2].lstr).str;
2627                   a_delete (yyvsp[0].lstr).str;
2628                 }
2629 #line 2630 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2630     break;
2631
2632   case 54:
2633 #line 531 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2634     {
2635                   (yyval.x) = strcmp((yyvsp[-2].lstr).str, (yyvsp[0].lstr).str) != 0;
2636                   a_delete (yyvsp[-2].lstr).str;
2637                   a_delete (yyvsp[0].lstr).str;
2638                 }
2639 #line 2640 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2640     break;
2641
2642   case 55:
2643 #line 537 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2644     { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
2645 #line 2646 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2646     break;
2647
2648   case 56:
2649 #line 539 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2650     { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
2651 #line 2652 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2652     break;
2653
2654   case 57:
2655 #line 541 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2656     { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
2657 #line 2658 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2658     break;
2659
2660   case 58:
2661 #line 543 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2662     { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
2663 #line 2664 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2664     break;
2665
2666   case 59:
2667 #line 545 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2668     { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
2669 #line 2670 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2670     break;
2671
2672   case 60:
2673 #line 547 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2674     { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
2675 #line 2676 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2676     break;
2677
2678   case 61:
2679 #line 549 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2680     { (yyval.x) = ((yyvsp[0].x) == 0.0); }
2681 #line 2682 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2682     break;
2683
2684   case 62:
2685 #line 555 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2686     {
2687                   (yyval.by).val = 1.0;
2688                   (yyval.by).is_multiplicative = 0;
2689                 }
2690 #line 2691 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2691     break;
2692
2693   case 63:
2694 #line 560 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2695     {
2696                   (yyval.by).val = (yyvsp[0].x);
2697                   (yyval.by).is_multiplicative = 0;
2698                 }
2699 #line 2700 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2700     break;
2701
2702   case 64:
2703 #line 565 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2704     {
2705                   (yyval.by).val = (yyvsp[0].x);
2706                   (yyval.by).is_multiplicative = 1;
2707                 }
2708 #line 2709 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2709     break;
2710
2711   case 65:
2712 #line 573 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2713     {
2714                   (yyval.pl).obj = (yyvsp[0].spec)->make_object(&current_position,
2715                                            &current_direction);
2716                   if ((yyval.pl).obj == 0)
2717                     YYABORT;
2718                   delete (yyvsp[0].spec);
2719                   if ((yyval.pl).obj)
2720                     olist.append((yyval.pl).obj);
2721                   else {
2722                     (yyval.pl).x = current_position.x;
2723                     (yyval.pl).y = current_position.y;
2724                   }
2725                 }
2726 #line 2727 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2727     break;
2728
2729   case 66:
2730 #line 587 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2731     {
2732                   (yyval.pl) = (yyvsp[0].pl);
2733                   define_label((yyvsp[-3].str), & (yyval.pl));
2734                   free((yyvsp[-3].str));
2735                 }
2736 #line 2737 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2737     break;
2738
2739   case 67:
2740 #line 593 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2741     {
2742                   (yyval.pl).obj = 0;
2743                   (yyval.pl).x = (yyvsp[0].pair).x;
2744                   (yyval.pl).y = (yyvsp[0].pair).y;
2745                   define_label((yyvsp[-3].str), & (yyval.pl));
2746                   free((yyvsp[-3].str));
2747                 }
2748 #line 2749 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2749     break;
2750
2751   case 68:
2752 #line 601 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2753     {
2754                   (yyval.pl) = (yyvsp[0].pl);
2755                   define_label((yyvsp[-3].str), & (yyval.pl));
2756                   free((yyvsp[-3].str));
2757                 }
2758 #line 2759 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2759     break;
2760
2761   case 69:
2762 #line 607 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2763     {
2764                   (yyval.state).x = current_position.x;
2765                   (yyval.state).y = current_position.y;
2766                   (yyval.state).dir = current_direction;
2767                 }
2768 #line 2769 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2769     break;
2770
2771   case 70:
2772 #line 613 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2773     {
2774                   current_position.x = (yyvsp[-2].state).x;
2775                   current_position.y = (yyvsp[-2].state).y;
2776                   current_direction = (yyvsp[-2].state).dir;
2777                 }
2778 #line 2779 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2779     break;
2780
2781   case 71:
2782 #line 619 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2783     {
2784                   (yyval.pl) = (yyvsp[-3].pl);
2785                 }
2786 #line 2787 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2787     break;
2788
2789   case 72:
2790 #line 623 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2791     {
2792                   (yyval.pl).obj = 0;
2793                   (yyval.pl).x = current_position.x;
2794                   (yyval.pl).y = current_position.y;
2795                 }
2796 #line 2797 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2797     break;
2798
2799   case 73:
2800 #line 632 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2801     {}
2802 #line 2803 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2803     break;
2804
2805   case 74:
2806 #line 634 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2807     {}
2808 #line 2809 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2809     break;
2810
2811   case 75:
2812 #line 639 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2813     { (yyval.spec) = new object_spec(BOX_OBJECT); }
2814 #line 2815 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2815     break;
2816
2817   case 76:
2818 #line 641 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2819     { (yyval.spec) = new object_spec(CIRCLE_OBJECT); }
2820 #line 2821 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2821     break;
2822
2823   case 77:
2824 #line 643 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2825     { (yyval.spec) = new object_spec(ELLIPSE_OBJECT); }
2826 #line 2827 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2827     break;
2828
2829   case 78:
2830 #line 645 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2831     {
2832                   (yyval.spec) = new object_spec(ARC_OBJECT);
2833                   (yyval.spec)->dir = current_direction;
2834                 }
2835 #line 2836 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2836     break;
2837
2838   case 79:
2839 #line 650 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2840     {
2841                   (yyval.spec) = new object_spec(LINE_OBJECT);
2842                   lookup_variable("lineht", & (yyval.spec)->segment_height);
2843                   lookup_variable("linewid", & (yyval.spec)->segment_width);
2844                   (yyval.spec)->dir = current_direction;
2845                 }
2846 #line 2847 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2847     break;
2848
2849   case 80:
2850 #line 657 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2851     {
2852                   (yyval.spec) = new object_spec(ARROW_OBJECT);
2853                   lookup_variable("lineht", & (yyval.spec)->segment_height);
2854                   lookup_variable("linewid", & (yyval.spec)->segment_width);
2855                   (yyval.spec)->dir = current_direction;
2856                 }
2857 #line 2858 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2858     break;
2859
2860   case 81:
2861 #line 664 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2862     {
2863                   (yyval.spec) = new object_spec(MOVE_OBJECT);
2864                   lookup_variable("moveht", & (yyval.spec)->segment_height);
2865                   lookup_variable("movewid", & (yyval.spec)->segment_width);
2866                   (yyval.spec)->dir = current_direction;
2867                 }
2868 #line 2869 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2869     break;
2870
2871   case 82:
2872 #line 671 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2873     {
2874                   (yyval.spec) = new object_spec(SPLINE_OBJECT);
2875                   lookup_variable("lineht", & (yyval.spec)->segment_height);
2876                   lookup_variable("linewid", & (yyval.spec)->segment_width);
2877                   (yyval.spec)->dir = current_direction;
2878                 }
2879 #line 2880 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2880     break;
2881
2882   case 83:
2883 #line 678 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2884     {
2885                   (yyval.spec) = new object_spec(TEXT_OBJECT);
2886                   (yyval.spec)->text = new text_item((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
2887                 }
2888 #line 2889 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2889     break;
2890
2891   case 84:
2892 #line 683 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2893     {
2894                   (yyval.spec) = new object_spec(TEXT_OBJECT);
2895                   (yyval.spec)->text = new text_item(format_number(0, (yyvsp[0].x)), 0, -1);
2896                 }
2897 #line 2898 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2898     break;
2899
2900   case 85:
2901 #line 688 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2902     {
2903                   (yyval.spec) = new object_spec(TEXT_OBJECT);
2904                   (yyval.spec)->text = new text_item(format_number((yyvsp[0].lstr).str, (yyvsp[-1].x)),
2905                                            (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
2906                   a_delete (yyvsp[0].lstr).str;
2907                 }
2908 #line 2909 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2909     break;
2910
2911   case 86:
2912 #line 695 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2913     {
2914                   saved_state *p = new saved_state;
2915                   (yyval.pstate) = p;
2916                   p->x = current_position.x;
2917                   p->y = current_position.y;
2918                   p->dir = current_direction;
2919                   p->tbl = current_table;
2920                   p->prev = current_saved_state;
2921                   current_position.x = 0.0;
2922                   current_position.y = 0.0;
2923                   current_table = new PTABLE(place);
2924                   current_saved_state = p;
2925                   olist.append(make_mark_object());
2926                 }
2927 #line 2928 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2928     break;
2929
2930   case 87:
2931 #line 710 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2932     {
2933                   current_position.x = (yyvsp[-2].pstate)->x;
2934                   current_position.y = (yyvsp[-2].pstate)->y;
2935                   current_direction = (yyvsp[-2].pstate)->dir;
2936                   (yyval.spec) = new object_spec(BLOCK_OBJECT);
2937                   olist.wrap_up_block(& (yyval.spec)->oblist);
2938                   (yyval.spec)->tbl = current_table;
2939                   current_table = (yyvsp[-2].pstate)->tbl;
2940                   current_saved_state = (yyvsp[-2].pstate)->prev;
2941                   delete (yyvsp[-2].pstate);
2942                 }
2943 #line 2944 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2944     break;
2945
2946   case 88:
2947 #line 722 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2948     {
2949                   (yyval.spec) = (yyvsp[-2].spec);
2950                   (yyval.spec)->height = (yyvsp[0].x);
2951                   (yyval.spec)->flags |= HAS_HEIGHT;
2952                 }
2953 #line 2954 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2954     break;
2955
2956   case 89:
2957 #line 728 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2958     {
2959                   (yyval.spec) = (yyvsp[-2].spec);
2960                   (yyval.spec)->radius = (yyvsp[0].x);
2961                   (yyval.spec)->flags |= HAS_RADIUS;
2962                 }
2963 #line 2964 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2964     break;
2965
2966   case 90:
2967 #line 734 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2968     {
2969                   (yyval.spec) = (yyvsp[-2].spec);
2970                   (yyval.spec)->width = (yyvsp[0].x);
2971                   (yyval.spec)->flags |= HAS_WIDTH;
2972                 }
2973 #line 2974 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2974     break;
2975
2976   case 91:
2977 #line 740 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2978     {
2979                   (yyval.spec) = (yyvsp[-2].spec);
2980                   (yyval.spec)->radius = (yyvsp[0].x)/2.0;
2981                   (yyval.spec)->flags |= HAS_RADIUS;
2982                 }
2983 #line 2984 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
2984     break;
2985
2986   case 92:
2987 #line 746 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
2988     {
2989                   (yyval.spec) = (yyvsp[-1].spec);
2990                   (yyval.spec)->flags |= HAS_SEGMENT;
2991                   switch ((yyval.spec)->dir) {
2992                   case UP_DIRECTION:
2993                     (yyval.spec)->segment_pos.y += (yyvsp[0].x);
2994                     break;
2995                   case DOWN_DIRECTION:
2996                     (yyval.spec)->segment_pos.y -= (yyvsp[0].x);
2997                     break;
2998                   case RIGHT_DIRECTION:
2999                     (yyval.spec)->segment_pos.x += (yyvsp[0].x);
3000                     break;
3001                   case LEFT_DIRECTION:
3002                     (yyval.spec)->segment_pos.x -= (yyvsp[0].x);
3003                     break;
3004                   }
3005                 }
3006 #line 3007 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3007     break;
3008
3009   case 93:
3010 #line 765 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3011     {
3012                   (yyval.spec) = (yyvsp[-1].spec);
3013                   (yyval.spec)->dir = UP_DIRECTION;
3014                   (yyval.spec)->flags |= HAS_SEGMENT;
3015                   (yyval.spec)->segment_pos.y += (yyval.spec)->segment_height;
3016                 }
3017 #line 3018 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3018     break;
3019
3020   case 94:
3021 #line 772 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3022     {
3023                   (yyval.spec) = (yyvsp[-2].spec);
3024                   (yyval.spec)->dir = UP_DIRECTION;
3025                   (yyval.spec)->flags |= HAS_SEGMENT;
3026                   (yyval.spec)->segment_pos.y += (yyvsp[0].x);
3027                 }
3028 #line 3029 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3029     break;
3030
3031   case 95:
3032 #line 779 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3033     {
3034                   (yyval.spec) = (yyvsp[-1].spec);
3035                   (yyval.spec)->dir = DOWN_DIRECTION;
3036                   (yyval.spec)->flags |= HAS_SEGMENT;
3037                   (yyval.spec)->segment_pos.y -= (yyval.spec)->segment_height;
3038                 }
3039 #line 3040 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3040     break;
3041
3042   case 96:
3043 #line 786 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3044     {
3045                   (yyval.spec) = (yyvsp[-2].spec);
3046                   (yyval.spec)->dir = DOWN_DIRECTION;
3047                   (yyval.spec)->flags |= HAS_SEGMENT;
3048                   (yyval.spec)->segment_pos.y -= (yyvsp[0].x);
3049                 }
3050 #line 3051 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3051     break;
3052
3053   case 97:
3054 #line 793 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3055     {
3056                   (yyval.spec) = (yyvsp[-1].spec);
3057                   (yyval.spec)->dir = RIGHT_DIRECTION;
3058                   (yyval.spec)->flags |= HAS_SEGMENT;
3059                   (yyval.spec)->segment_pos.x += (yyval.spec)->segment_width;
3060                 }
3061 #line 3062 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3062     break;
3063
3064   case 98:
3065 #line 800 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3066     {
3067                   (yyval.spec) = (yyvsp[-2].spec);
3068                   (yyval.spec)->dir = RIGHT_DIRECTION;
3069                   (yyval.spec)->flags |= HAS_SEGMENT;
3070                   (yyval.spec)->segment_pos.x += (yyvsp[0].x);
3071                 }
3072 #line 3073 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3073     break;
3074
3075   case 99:
3076 #line 807 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3077     {
3078                   (yyval.spec) = (yyvsp[-1].spec);
3079                   (yyval.spec)->dir = LEFT_DIRECTION;
3080                   (yyval.spec)->flags |= HAS_SEGMENT;
3081                   (yyval.spec)->segment_pos.x -= (yyval.spec)->segment_width;
3082                 }
3083 #line 3084 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3084     break;
3085
3086   case 100:
3087 #line 814 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3088     {
3089                   (yyval.spec) = (yyvsp[-2].spec);
3090                   (yyval.spec)->dir = LEFT_DIRECTION;
3091                   (yyval.spec)->flags |= HAS_SEGMENT;
3092                   (yyval.spec)->segment_pos.x -= (yyvsp[0].x);
3093                 }
3094 #line 3095 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3095     break;
3096
3097   case 101:
3098 #line 821 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3099     {
3100                   (yyval.spec) = (yyvsp[-2].spec);
3101                   (yyval.spec)->flags |= HAS_FROM;
3102                   (yyval.spec)->from.x = (yyvsp[0].pair).x;
3103                   (yyval.spec)->from.y = (yyvsp[0].pair).y;
3104                 }
3105 #line 3106 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3106     break;
3107
3108   case 102:
3109 #line 828 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3110     {
3111                   (yyval.spec) = (yyvsp[-2].spec);
3112                   if ((yyval.spec)->flags & HAS_SEGMENT)
3113                     (yyval.spec)->segment_list = new segment((yyval.spec)->segment_pos,
3114                                                    (yyval.spec)->segment_is_absolute,
3115                                                    (yyval.spec)->segment_list);
3116                   (yyval.spec)->flags |= HAS_SEGMENT;
3117                   (yyval.spec)->segment_pos.x = (yyvsp[0].pair).x;
3118                   (yyval.spec)->segment_pos.y = (yyvsp[0].pair).y;
3119                   (yyval.spec)->segment_is_absolute = 1;
3120                   (yyval.spec)->flags |= HAS_TO;
3121                   (yyval.spec)->to.x = (yyvsp[0].pair).x;
3122                   (yyval.spec)->to.y = (yyvsp[0].pair).y;
3123                 }
3124 #line 3125 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3125     break;
3126
3127   case 103:
3128 #line 843 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3129     {
3130                   (yyval.spec) = (yyvsp[-2].spec);
3131                   (yyval.spec)->flags |= HAS_AT;
3132                   (yyval.spec)->at.x = (yyvsp[0].pair).x;
3133                   (yyval.spec)->at.y = (yyvsp[0].pair).y;
3134                   if ((yyval.spec)->type != ARC_OBJECT) {
3135                     (yyval.spec)->flags |= HAS_FROM;
3136                     (yyval.spec)->from.x = (yyvsp[0].pair).x;
3137                     (yyval.spec)->from.y = (yyvsp[0].pair).y;
3138                   }
3139                 }
3140 #line 3141 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3141     break;
3142
3143   case 104:
3144 #line 855 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3145     {
3146                   (yyval.spec) = (yyvsp[-2].spec);
3147                   (yyval.spec)->flags |= HAS_WITH;
3148                   (yyval.spec)->with = (yyvsp[0].pth);
3149                 }
3150 #line 3151 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3151     break;
3152
3153   case 105:
3154 #line 861 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3155     {
3156                   (yyval.spec) = (yyvsp[-2].spec);
3157                   (yyval.spec)->flags |= HAS_WITH;
3158                   position pos;
3159                   pos.x = (yyvsp[0].pair).x;
3160                   pos.y = (yyvsp[0].pair).y;
3161                   (yyval.spec)->with = new path(pos);
3162                 }
3163 #line 3164 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3164     break;
3165
3166   case 106:
3167 #line 870 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3168     {
3169                   (yyval.spec) = (yyvsp[-2].spec);
3170                   (yyval.spec)->flags |= HAS_SEGMENT;
3171                   (yyval.spec)->segment_pos.x += (yyvsp[0].pair).x;
3172                   (yyval.spec)->segment_pos.y += (yyvsp[0].pair).y;
3173                 }
3174 #line 3175 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3175     break;
3176
3177   case 107:
3178 #line 877 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3179     {
3180                   (yyval.spec) = (yyvsp[-1].spec);
3181                   if (!((yyval.spec)->flags & HAS_SEGMENT))
3182                     switch ((yyval.spec)->dir) {
3183                     case UP_DIRECTION:
3184                       (yyval.spec)->segment_pos.y += (yyval.spec)->segment_width;
3185                       break;
3186                     case DOWN_DIRECTION:
3187                       (yyval.spec)->segment_pos.y -= (yyval.spec)->segment_width;
3188                       break;
3189                     case RIGHT_DIRECTION:
3190                       (yyval.spec)->segment_pos.x += (yyval.spec)->segment_width;
3191                       break;
3192                     case LEFT_DIRECTION:
3193                       (yyval.spec)->segment_pos.x -= (yyval.spec)->segment_width;
3194                       break;
3195                     }
3196                   (yyval.spec)->segment_list = new segment((yyval.spec)->segment_pos,
3197                                                  (yyval.spec)->segment_is_absolute,
3198                                                  (yyval.spec)->segment_list);
3199                   (yyval.spec)->flags &= ~HAS_SEGMENT;
3200                   (yyval.spec)->segment_pos.x = (yyval.spec)->segment_pos.y = 0.0;
3201                   (yyval.spec)->segment_is_absolute = 0;
3202                 }
3203 #line 3204 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3204     break;
3205
3206   case 108:
3207 #line 902 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3208     {
3209                   (yyval.spec) = (yyvsp[-1].spec);      // nothing
3210                 }
3211 #line 3212 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3212     break;
3213
3214   case 109:
3215 #line 906 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3216     {
3217                   (yyval.spec) = (yyvsp[-1].spec);
3218                   (yyval.spec)->flags |= IS_DOTTED;
3219                   lookup_variable("dashwid", & (yyval.spec)->dash_width);
3220                 }
3221 #line 3222 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3222     break;
3223
3224   case 110:
3225 #line 912 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3226     {
3227                   (yyval.spec) = (yyvsp[-2].spec);
3228                   (yyval.spec)->flags |= IS_DOTTED;
3229                   (yyval.spec)->dash_width = (yyvsp[0].x);
3230                 }
3231 #line 3232 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3232     break;
3233
3234   case 111:
3235 #line 918 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3236     {
3237                   (yyval.spec) = (yyvsp[-1].spec);
3238                   (yyval.spec)->flags |= IS_DASHED;
3239                   lookup_variable("dashwid", & (yyval.spec)->dash_width);
3240                 }
3241 #line 3242 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3242     break;
3243
3244   case 112:
3245 #line 924 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3246     {
3247                   (yyval.spec) = (yyvsp[-2].spec);
3248                   (yyval.spec)->flags |= IS_DASHED;
3249                   (yyval.spec)->dash_width = (yyvsp[0].x);
3250                 }
3251 #line 3252 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3252     break;
3253
3254   case 113:
3255 #line 930 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3256     {
3257                   (yyval.spec) = (yyvsp[-1].spec);
3258                   (yyval.spec)->flags |= IS_DEFAULT_FILLED;
3259                 }
3260 #line 3261 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3261     break;
3262
3263   case 114:
3264 #line 935 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3265     {
3266                   (yyval.spec) = (yyvsp[-2].spec);
3267                   (yyval.spec)->flags |= IS_FILLED;
3268                   (yyval.spec)->fill = (yyvsp[0].x);
3269                 }
3270 #line 3271 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3271     break;
3272
3273   case 115:
3274 #line 941 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3275     {
3276                   (yyval.spec) = (yyvsp[-2].spec);
3277                   (yyval.spec)->flags |= IS_XSLANTED;
3278                   (yyval.spec)->xslanted = (yyvsp[0].x);
3279                 }
3280 #line 3281 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3281     break;
3282
3283   case 116:
3284 #line 947 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3285     {
3286                   (yyval.spec) = (yyvsp[-2].spec);
3287                   (yyval.spec)->flags |= IS_YSLANTED;
3288                   (yyval.spec)->yslanted = (yyvsp[0].x);
3289                 }
3290 #line 3291 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3291     break;
3292
3293   case 117:
3294 #line 953 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3295     {
3296                   (yyval.spec) = (yyvsp[-2].spec);
3297                   (yyval.spec)->flags |= (IS_SHADED | IS_FILLED);
3298                   (yyval.spec)->shaded = new char[strlen((yyvsp[0].lstr).str)+1];
3299                   strcpy((yyval.spec)->shaded, (yyvsp[0].lstr).str);
3300                 }
3301 #line 3302 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3302     break;
3303
3304   case 118:
3305 #line 960 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3306     {
3307                   (yyval.spec) = (yyvsp[-2].spec);
3308                   (yyval.spec)->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED);
3309                   (yyval.spec)->shaded = new char[strlen((yyvsp[0].lstr).str)+1];
3310                   strcpy((yyval.spec)->shaded, (yyvsp[0].lstr).str);
3311                   (yyval.spec)->outlined = new char[strlen((yyvsp[0].lstr).str)+1];
3312                   strcpy((yyval.spec)->outlined, (yyvsp[0].lstr).str);
3313                 }
3314 #line 3315 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3315     break;
3316
3317   case 119:
3318 #line 969 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3319     {
3320                   (yyval.spec) = (yyvsp[-2].spec);
3321                   (yyval.spec)->flags |= IS_OUTLINED;
3322                   (yyval.spec)->outlined = new char[strlen((yyvsp[0].lstr).str)+1];
3323                   strcpy((yyval.spec)->outlined, (yyvsp[0].lstr).str);
3324                 }
3325 #line 3326 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3326     break;
3327
3328   case 120:
3329 #line 976 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3330     {
3331                   (yyval.spec) = (yyvsp[-1].spec);
3332                   // line chop chop means line chop 0 chop 0
3333                   if ((yyval.spec)->flags & IS_DEFAULT_CHOPPED) {
3334                     (yyval.spec)->flags |= IS_CHOPPED;
3335                     (yyval.spec)->flags &= ~IS_DEFAULT_CHOPPED;
3336                     (yyval.spec)->start_chop = (yyval.spec)->end_chop = 0.0;
3337                   }
3338                   else if ((yyval.spec)->flags & IS_CHOPPED) {
3339                     (yyval.spec)->end_chop = 0.0;
3340                   }
3341                   else {
3342                     (yyval.spec)->flags |= IS_DEFAULT_CHOPPED;
3343                   }
3344                 }
3345 #line 3346 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3346     break;
3347
3348   case 121:
3349 #line 992 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3350     {
3351                   (yyval.spec) = (yyvsp[-2].spec);
3352                   if ((yyval.spec)->flags & IS_DEFAULT_CHOPPED) {
3353                     (yyval.spec)->flags |= IS_CHOPPED;
3354                     (yyval.spec)->flags &= ~IS_DEFAULT_CHOPPED;
3355                     (yyval.spec)->start_chop = 0.0;
3356                     (yyval.spec)->end_chop = (yyvsp[0].x);
3357                   }
3358                   else if ((yyval.spec)->flags & IS_CHOPPED) {
3359                     (yyval.spec)->end_chop = (yyvsp[0].x);
3360                   }
3361                   else {
3362                     (yyval.spec)->start_chop = (yyval.spec)->end_chop = (yyvsp[0].x);
3363                     (yyval.spec)->flags |= IS_CHOPPED;
3364                   }
3365                 }
3366 #line 3367 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3367     break;
3368
3369   case 122:
3370 #line 1009 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3371     {
3372                   (yyval.spec) = (yyvsp[-1].spec);
3373                   (yyval.spec)->flags |= IS_SAME;
3374                 }
3375 #line 3376 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3376     break;
3377
3378   case 123:
3379 #line 1014 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3380     {
3381                   (yyval.spec) = (yyvsp[-1].spec);
3382                   (yyval.spec)->flags |= IS_INVISIBLE;
3383                 }
3384 #line 3385 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3385     break;
3386
3387   case 124:
3388 #line 1019 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3389     {
3390                   (yyval.spec) = (yyvsp[-1].spec);
3391                   (yyval.spec)->flags |= HAS_LEFT_ARROW_HEAD;
3392                 }
3393 #line 3394 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3394     break;
3395
3396   case 125:
3397 #line 1024 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3398     {
3399                   (yyval.spec) = (yyvsp[-1].spec);
3400                   (yyval.spec)->flags |= HAS_RIGHT_ARROW_HEAD;
3401                 }
3402 #line 3403 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3403     break;
3404
3405   case 126:
3406 #line 1029 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3407     {
3408                   (yyval.spec) = (yyvsp[-1].spec);
3409                   (yyval.spec)->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD);
3410                 }
3411 #line 3412 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3412     break;
3413
3414   case 127:
3415 #line 1034 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3416     {
3417                   (yyval.spec) = (yyvsp[-1].spec);
3418                   (yyval.spec)->flags |= IS_CLOCKWISE;
3419                 }
3420 #line 3421 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3421     break;
3422
3423   case 128:
3424 #line 1039 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3425     {
3426                   (yyval.spec) = (yyvsp[-1].spec);
3427                   (yyval.spec)->flags &= ~IS_CLOCKWISE;
3428                 }
3429 #line 3430 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3430     break;
3431
3432   case 129:
3433 #line 1044 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3434     {
3435                   (yyval.spec) = (yyvsp[-1].spec);
3436                   text_item **p;
3437                   for (p = & (yyval.spec)->text; *p; p = &(*p)->next)
3438                     ;
3439                   *p = new text_item((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
3440                 }
3441 #line 3442 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3442     break;
3443
3444   case 130:
3445 #line 1052 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3446     {
3447                   (yyval.spec) = (yyvsp[-1].spec);
3448                   if ((yyval.spec)->text) {
3449                     text_item *p;
3450                     for (p = (yyval.spec)->text; p->next; p = p->next)
3451                       ;
3452                     p->adj.h = LEFT_ADJUST;
3453                   }
3454                 }
3455 #line 3456 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3456     break;
3457
3458   case 131:
3459 #line 1062 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3460     {
3461                   (yyval.spec) = (yyvsp[-1].spec);
3462                   if ((yyval.spec)->text) {
3463                     text_item *p;
3464                     for (p = (yyval.spec)->text; p->next; p = p->next)
3465                       ;
3466                     p->adj.h = RIGHT_ADJUST;
3467                   }
3468                 }
3469 #line 3470 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3470     break;
3471
3472   case 132:
3473 #line 1072 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3474     {
3475                   (yyval.spec) = (yyvsp[-1].spec);
3476                   if ((yyval.spec)->text) {
3477                     text_item *p;
3478                     for (p = (yyval.spec)->text; p->next; p = p->next)
3479                       ;
3480                     p->adj.v = ABOVE_ADJUST;
3481                   }
3482                 }
3483 #line 3484 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3484     break;
3485
3486   case 133:
3487 #line 1082 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3488     {
3489                   (yyval.spec) = (yyvsp[-1].spec);
3490                   if ((yyval.spec)->text) {
3491                     text_item *p;
3492                     for (p = (yyval.spec)->text; p->next; p = p->next)
3493                       ;
3494                     p->adj.v = BELOW_ADJUST;
3495                   }
3496                 }
3497 #line 3498 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3498     break;
3499
3500   case 134:
3501 #line 1092 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3502     {
3503                   (yyval.spec) = (yyvsp[-2].spec);
3504                   (yyval.spec)->flags |= HAS_THICKNESS;
3505                   (yyval.spec)->thickness = (yyvsp[0].x);
3506                 }
3507 #line 3508 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3508     break;
3509
3510   case 135:
3511 #line 1098 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3512     {
3513                   (yyval.spec) = (yyvsp[-1].spec);
3514                   (yyval.spec)->flags |= IS_ALIGNED;
3515                 }
3516 #line 3517 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3517     break;
3518
3519   case 136:
3520 #line 1106 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3521     { (yyval.lstr) = (yyvsp[0].lstr); }
3522 #line 3523 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3523     break;
3524
3525   case 137:
3526 #line 1108 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3527     {
3528                   (yyval.lstr).filename = (yyvsp[-2].lstr).filename;
3529                   (yyval.lstr).lineno = (yyvsp[-2].lstr).lineno;
3530                   (yyval.lstr).str = do_sprintf((yyvsp[-2].lstr).str, (yyvsp[-1].dv).v, (yyvsp[-1].dv).nv);
3531                   a_delete (yyvsp[-1].dv).v;
3532                   free((yyvsp[-2].lstr).str);
3533                 }
3534 #line 3535 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3535     break;
3536
3537   case 138:
3538 #line 1119 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3539     {
3540                   (yyval.dv).v = 0;
3541                   (yyval.dv).nv = 0;
3542                   (yyval.dv).maxv = 0;
3543                 }
3544 #line 3545 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3545     break;
3546
3547   case 139:
3548 #line 1125 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3549     {
3550                   (yyval.dv) = (yyvsp[-2].dv);
3551                   if ((yyval.dv).nv >= (yyval.dv).maxv) {
3552                     if ((yyval.dv).nv == 0) {
3553                       (yyval.dv).v = new double[4];
3554                       (yyval.dv).maxv = 4;
3555                     }
3556                     else {
3557                       double *oldv = (yyval.dv).v;
3558                       (yyval.dv).maxv *= 2;
3559 #if 0
3560                       (yyval.dv).v = new double[(yyval.dv).maxv];
3561                       memcpy((yyval.dv).v, oldv, (yyval.dv).nv*sizeof(double));
3562 #else
3563                       // workaround for bug in Compaq C++ V6.5-033
3564                       // for Compaq Tru64 UNIX V5.1A (Rev. 1885)
3565                       double *foo = new double[(yyval.dv).maxv];
3566                       memcpy(foo, oldv, (yyval.dv).nv*sizeof(double));
3567                       (yyval.dv).v = foo;
3568 #endif
3569                       a_delete oldv;
3570                     }
3571                   }
3572                   (yyval.dv).v[(yyval.dv).nv] = (yyvsp[0].x);
3573                   (yyval.dv).nv += 1;
3574                 }
3575 #line 3576 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3576     break;
3577
3578   case 140:
3579 #line 1155 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3580     { (yyval.pair) = (yyvsp[0].pair); }
3581 #line 3582 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3582     break;
3583
3584   case 141:
3585 #line 1157 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3586     {
3587                   position pos = (yyvsp[0].pl);
3588                   (yyval.pair).x = pos.x;
3589                   (yyval.pair).y = pos.y;
3590                 }
3591 #line 3592 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3592     break;
3593
3594   case 142:
3595 #line 1163 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3596     {
3597                   position pos = (yyvsp[-1].pl);
3598                   (yyval.pair).x = pos.x;
3599                   (yyval.pair).y = pos.y;
3600                 }
3601 #line 3602 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3602     break;
3603
3604   case 143:
3605 #line 1172 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3606     { (yyval.pair) = (yyvsp[0].pair); }
3607 #line 3608 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3608     break;
3609
3610   case 144:
3611 #line 1174 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3612     {
3613                   (yyval.pair).x = (yyvsp[-2].pair).x + (yyvsp[0].pair).x;
3614                   (yyval.pair).y = (yyvsp[-2].pair).y + (yyvsp[0].pair).y;
3615                 }
3616 #line 3617 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3617     break;
3618
3619   case 145:
3620 #line 1179 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3621     {
3622                   (yyval.pair).x = (yyvsp[-3].pair).x + (yyvsp[-1].pair).x;
3623                   (yyval.pair).y = (yyvsp[-3].pair).y + (yyvsp[-1].pair).y;
3624                 }
3625 #line 3626 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3626     break;
3627
3628   case 146:
3629 #line 1184 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3630     {
3631                   (yyval.pair).x = (yyvsp[-2].pair).x - (yyvsp[0].pair).x;
3632                   (yyval.pair).y = (yyvsp[-2].pair).y - (yyvsp[0].pair).y;
3633                 }
3634 #line 3635 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3635     break;
3636
3637   case 147:
3638 #line 1189 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3639     {
3640                   (yyval.pair).x = (yyvsp[-3].pair).x - (yyvsp[-1].pair).x;
3641                   (yyval.pair).y = (yyvsp[-3].pair).y - (yyvsp[-1].pair).y;
3642                 }
3643 #line 3644 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3644     break;
3645
3646   case 148:
3647 #line 1194 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3648     {
3649                   (yyval.pair).x = (yyvsp[-3].pair).x;
3650                   (yyval.pair).y = (yyvsp[-1].pair).y;
3651                 }
3652 #line 3653 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3653     break;
3654
3655   case 149:
3656 #line 1199 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3657     {
3658                   (yyval.pair).x = (1.0 - (yyvsp[-4].x))*(yyvsp[-2].pair).x + (yyvsp[-4].x)*(yyvsp[0].pair).x;
3659                   (yyval.pair).y = (1.0 - (yyvsp[-4].x))*(yyvsp[-2].pair).y + (yyvsp[-4].x)*(yyvsp[0].pair).y;
3660                 }
3661 #line 3662 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3662     break;
3663
3664   case 150:
3665 #line 1204 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3666     {
3667                   (yyval.pair).x = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).x + (yyvsp[-5].x)*(yyvsp[-1].pair).x;
3668                   (yyval.pair).y = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).y + (yyvsp[-5].x)*(yyvsp[-1].pair).y;
3669                 }
3670 #line 3671 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3671     break;
3672
3673   case 151:
3674 #line 1210 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3675     {
3676                   (yyval.pair).x = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).x + (yyvsp[-5].x)*(yyvsp[-1].pair).x;
3677                   (yyval.pair).y = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).y + (yyvsp[-5].x)*(yyvsp[-1].pair).y;
3678                 }
3679 #line 3680 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3680     break;
3681
3682   case 152:
3683 #line 1215 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3684     {
3685                   (yyval.pair).x = (1.0 - (yyvsp[-6].x))*(yyvsp[-4].pair).x + (yyvsp[-6].x)*(yyvsp[-2].pair).x;
3686                   (yyval.pair).y = (1.0 - (yyvsp[-6].x))*(yyvsp[-4].pair).y + (yyvsp[-6].x)*(yyvsp[-2].pair).y;
3687                 }
3688 #line 3689 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3689     break;
3690
3691   case 155:
3692 #line 1228 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3693     {
3694                   (yyval.pair).x = (yyvsp[-2].x);
3695                   (yyval.pair).y = (yyvsp[0].x);
3696                 }
3697 #line 3698 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3698     break;
3699
3700   case 156:
3701 #line 1233 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3702     { (yyval.pair) = (yyvsp[-1].pair); }
3703 #line 3704 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3704     break;
3705
3706   case 157:
3707 #line 1239 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3708     { (yyval.pl) = (yyvsp[0].pl); }
3709 #line 3710 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3710     break;
3711
3712   case 158:
3713 #line 1241 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3714     {
3715                   path pth((yyvsp[0].crn));
3716                   if (!pth.follow((yyvsp[-1].pl), & (yyval.pl)))
3717                     YYABORT;
3718                 }
3719 #line 3720 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3720     break;
3721
3722   case 159:
3723 #line 1247 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3724     {
3725                   path pth((yyvsp[-1].crn));
3726                   if (!pth.follow((yyvsp[0].pl), & (yyval.pl)))
3727                     YYABORT;
3728                 }
3729 #line 3730 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3730     break;
3731
3732   case 160:
3733 #line 1253 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3734     {
3735                   path pth((yyvsp[-2].crn));
3736                   if (!pth.follow((yyvsp[0].pl), & (yyval.pl)))
3737                     YYABORT;
3738                 }
3739 #line 3740 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3740     break;
3741
3742   case 161:
3743 #line 1259 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3744     {
3745                   (yyval.pl).x = current_position.x;
3746                   (yyval.pl).y = current_position.y;
3747                   (yyval.pl).obj = 0;
3748                 }
3749 #line 3750 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3750     break;
3751
3752   case 162:
3753 #line 1268 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3754     {
3755                   place *p = lookup_label((yyvsp[0].str));
3756                   if (!p) {
3757                     lex_error("there is no place '%1'", (yyvsp[0].str));
3758                     YYABORT;
3759                   }
3760                   (yyval.pl) = *p;
3761                   free((yyvsp[0].str));
3762                 }
3763 #line 3764 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3764     break;
3765
3766   case 163:
3767 #line 1278 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3768     { (yyval.pl).obj = (yyvsp[0].obj); }
3769 #line 3770 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3770     break;
3771
3772   case 164:
3773 #line 1280 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3774     {
3775                   path pth((yyvsp[0].str));
3776                   if (!pth.follow((yyvsp[-2].pl), & (yyval.pl)))
3777                     YYABORT;
3778                 }
3779 #line 3780 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3780     break;
3781
3782   case 165:
3783 #line 1289 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3784     { (yyval.n) = (yyvsp[0].n); }
3785 #line 3786 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3786     break;
3787
3788   case 166:
3789 #line 1291 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3790     {
3791                   // XXX Check for overflow (and non-integers?).
3792                   (yyval.n) = (int)(yyvsp[-1].x);
3793                 }
3794 #line 3795 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3795     break;
3796
3797   case 167:
3798 #line 1299 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3799     { (yyval.n) = 1; }
3800 #line 3801 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3801     break;
3802
3803   case 168:
3804 #line 1301 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3805     { (yyval.n) = (yyvsp[-1].n); }
3806 #line 3807 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3807     break;
3808
3809   case 169:
3810 #line 1306 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3811     {
3812                   int count = 0;
3813                   object *p;
3814                   for (p = olist.head; p != 0; p = p->next)
3815                     if (p->type() == (yyvsp[0].obtype) && ++count == (yyvsp[-1].n)) {
3816                       (yyval.obj) = p;
3817                       break;
3818                     }
3819                   if (p == 0) {
3820                     lex_error("there is no %1%2 %3", (yyvsp[-1].n), ordinal_postfix((yyvsp[-1].n)),
3821                               object_type_name((yyvsp[0].obtype)));
3822                     YYABORT;
3823                   }
3824                 }
3825 #line 3826 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3826     break;
3827
3828   case 170:
3829 #line 1321 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3830     {
3831                   int count = 0;
3832                   object *p;
3833                   for (p = olist.tail; p != 0; p = p->prev)
3834                     if (p->type() == (yyvsp[0].obtype) && ++count == (yyvsp[-1].n)) {
3835                       (yyval.obj) = p;
3836                       break;
3837                     }
3838                   if (p == 0) {
3839                     lex_error("there is no %1%2 last %3", (yyvsp[-1].n),
3840                               ordinal_postfix((yyvsp[-1].n)), object_type_name((yyvsp[0].obtype)));
3841                     YYABORT;
3842                   }
3843                 }
3844 #line 3845 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3845     break;
3846
3847   case 171:
3848 #line 1339 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3849     { (yyval.obtype) = BOX_OBJECT; }
3850 #line 3851 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3851     break;
3852
3853   case 172:
3854 #line 1341 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3855     { (yyval.obtype) = CIRCLE_OBJECT; }
3856 #line 3857 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3857     break;
3858
3859   case 173:
3860 #line 1343 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3861     { (yyval.obtype) = ELLIPSE_OBJECT; }
3862 #line 3863 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3863     break;
3864
3865   case 174:
3866 #line 1345 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3867     { (yyval.obtype) = ARC_OBJECT; }
3868 #line 3869 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3869     break;
3870
3871   case 175:
3872 #line 1347 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3873     { (yyval.obtype) = LINE_OBJECT; }
3874 #line 3875 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3875     break;
3876
3877   case 176:
3878 #line 1349 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3879     { (yyval.obtype) = ARROW_OBJECT; }
3880 #line 3881 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3881     break;
3882
3883   case 177:
3884 #line 1351 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3885     { (yyval.obtype) = SPLINE_OBJECT; }
3886 #line 3887 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3887     break;
3888
3889   case 178:
3890 #line 1353 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3891     { (yyval.obtype) = BLOCK_OBJECT; }
3892 #line 3893 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3893     break;
3894
3895   case 179:
3896 #line 1355 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3897     { (yyval.obtype) = TEXT_OBJECT; }
3898 #line 3899 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3899     break;
3900
3901   case 180:
3902 #line 1360 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3903     { (yyval.pth) = new path((yyvsp[0].str)); }
3904 #line 3905 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3905     break;
3906
3907   case 181:
3908 #line 1362 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3909     {
3910                   (yyval.pth) = (yyvsp[-2].pth);
3911                   (yyval.pth)->append((yyvsp[0].str));
3912                 }
3913 #line 3914 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3914     break;
3915
3916   case 182:
3917 #line 1370 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3918     { (yyval.pth) = new path((yyvsp[0].crn)); }
3919 #line 3920 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3920     break;
3921
3922   case 183:
3923 #line 1374 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3924     { (yyval.pth) = (yyvsp[0].pth); }
3925 #line 3926 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3926     break;
3927
3928   case 184:
3929 #line 1376 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3930     {
3931                   (yyval.pth) = (yyvsp[-1].pth);
3932                   (yyval.pth)->append((yyvsp[0].crn));
3933                 }
3934 #line 3935 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3935     break;
3936
3937   case 185:
3938 #line 1384 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3939     { (yyval.pth) = (yyvsp[0].pth); }
3940 #line 3941 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3941     break;
3942
3943   case 186:
3944 #line 1386 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3945     {
3946                   (yyval.pth) = (yyvsp[-3].pth);
3947                   (yyval.pth)->set_ypath((yyvsp[-1].pth));
3948                 }
3949 #line 3950 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3950     break;
3951
3952   case 187:
3953 #line 1392 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3954     {
3955                   lex_warning("'%1%2 last %3' in 'with' argument ignored",
3956                               (yyvsp[-3].n), ordinal_postfix((yyvsp[-3].n)), object_type_name((yyvsp[-1].obtype)));
3957                   (yyval.pth) = (yyvsp[0].pth);
3958                 }
3959 #line 3960 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3960     break;
3961
3962   case 188:
3963 #line 1398 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3964     {
3965                   lex_warning("'last %1' in 'with' argument ignored",
3966                               object_type_name((yyvsp[-1].obtype)));
3967                   (yyval.pth) = (yyvsp[0].pth);
3968                 }
3969 #line 3970 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3970     break;
3971
3972   case 189:
3973 #line 1404 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3974     {
3975                   lex_warning("'%1%2 %3' in 'with' argument ignored",
3976                               (yyvsp[-2].n), ordinal_postfix((yyvsp[-2].n)), object_type_name((yyvsp[-1].obtype)));
3977                   (yyval.pth) = (yyvsp[0].pth);
3978                 }
3979 #line 3980 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3980     break;
3981
3982   case 190:
3983 #line 1410 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3984     {
3985                   lex_warning("initial '%1' in 'with' argument ignored", (yyvsp[-1].str));
3986                   a_delete (yyvsp[-1].str);
3987                   (yyval.pth) = (yyvsp[0].pth);
3988                 }
3989 #line 3990 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3990     break;
3991
3992   case 191:
3993 #line 1419 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
3994     { (yyval.crn) = &object::north; }
3995 #line 3996 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
3996     break;
3997
3998   case 192:
3999 #line 1421 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4000     { (yyval.crn) = &object::east; }
4001 #line 4002 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4002     break;
4003
4004   case 193:
4005 #line 1423 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4006     { (yyval.crn) = &object::west; }
4007 #line 4008 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4008     break;
4009
4010   case 194:
4011 #line 1425 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4012     { (yyval.crn) = &object::south; }
4013 #line 4014 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4014     break;
4015
4016   case 195:
4017 #line 1427 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4018     { (yyval.crn) = &object::north_east; }
4019 #line 4020 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4020     break;
4021
4022   case 196:
4023 #line 1429 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4024     { (yyval.crn) = &object:: south_east; }
4025 #line 4026 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4026     break;
4027
4028   case 197:
4029 #line 1431 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4030     { (yyval.crn) = &object::north_west; }
4031 #line 4032 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4032     break;
4033
4034   case 198:
4035 #line 1433 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4036     { (yyval.crn) = &object::south_west; }
4037 #line 4038 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4038     break;
4039
4040   case 199:
4041 #line 1435 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4042     { (yyval.crn) = &object::center; }
4043 #line 4044 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4044     break;
4045
4046   case 200:
4047 #line 1437 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4048     { (yyval.crn) = &object::start; }
4049 #line 4050 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4050     break;
4051
4052   case 201:
4053 #line 1439 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4054     { (yyval.crn) = &object::end; }
4055 #line 4056 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4056     break;
4057
4058   case 202:
4059 #line 1441 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4060     { (yyval.crn) = &object::north; }
4061 #line 4062 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4062     break;
4063
4064   case 203:
4065 #line 1443 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4066     { (yyval.crn) = &object::south; }
4067 #line 4068 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4068     break;
4069
4070   case 204:
4071 #line 1445 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4072     { (yyval.crn) = &object::west; }
4073 #line 4074 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4074     break;
4075
4076   case 205:
4077 #line 1447 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4078     { (yyval.crn) = &object::east; }
4079 #line 4080 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4080     break;
4081
4082   case 206:
4083 #line 1449 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4084     { (yyval.crn) = &object::north_west; }
4085 #line 4086 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4086     break;
4087
4088   case 207:
4089 #line 1451 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4090     { (yyval.crn) = &object::south_west; }
4091 #line 4092 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4092     break;
4093
4094   case 208:
4095 #line 1453 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4096     { (yyval.crn) = &object::north_east; }
4097 #line 4098 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4098     break;
4099
4100   case 209:
4101 #line 1455 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4102     { (yyval.crn) = &object::south_east; }
4103 #line 4104 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4104     break;
4105
4106   case 210:
4107 #line 1457 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4108     { (yyval.crn) = &object::west; }
4109 #line 4110 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4110     break;
4111
4112   case 211:
4113 #line 1459 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4114     { (yyval.crn) = &object::east; }
4115 #line 4116 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4116     break;
4117
4118   case 212:
4119 #line 1461 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4120     { (yyval.crn) = &object::north_west; }
4121 #line 4122 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4122     break;
4123
4124   case 213:
4125 #line 1463 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4126     { (yyval.crn) = &object::south_west; }
4127 #line 4128 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4128     break;
4129
4130   case 214:
4131 #line 1465 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4132     { (yyval.crn) = &object::north_east; }
4133 #line 4134 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4134     break;
4135
4136   case 215:
4137 #line 1467 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4138     { (yyval.crn) = &object::south_east; }
4139 #line 4140 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4140     break;
4141
4142   case 216:
4143 #line 1469 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4144     { (yyval.crn) = &object::north; }
4145 #line 4146 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4146     break;
4147
4148   case 217:
4149 #line 1471 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4150     { (yyval.crn) = &object::south; }
4151 #line 4152 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4152     break;
4153
4154   case 218:
4155 #line 1473 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4156     { (yyval.crn) = &object::east; }
4157 #line 4158 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4158     break;
4159
4160   case 219:
4161 #line 1475 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4162     { (yyval.crn) = &object::west; }
4163 #line 4164 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4164     break;
4165
4166   case 220:
4167 #line 1477 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4168     { (yyval.crn) = &object::center; }
4169 #line 4170 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4170     break;
4171
4172   case 221:
4173 #line 1479 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4174     { (yyval.crn) = &object::start; }
4175 #line 4176 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4176     break;
4177
4178   case 222:
4179 #line 1481 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4180     { (yyval.crn) = &object::end; }
4181 #line 4182 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4182     break;
4183
4184   case 223:
4185 #line 1486 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4186     { (yyval.x) = (yyvsp[0].x); }
4187 #line 4188 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4188     break;
4189
4190   case 224:
4191 #line 1488 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4192     { (yyval.x) = (yyvsp[0].x); }
4193 #line 4194 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4194     break;
4195
4196   case 225:
4197 #line 1493 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4198     { (yyval.x) = ((yyvsp[-2].x) < (yyvsp[0].x)); }
4199 #line 4200 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4200     break;
4201
4202   case 226:
4203 #line 1498 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4204     {
4205                   if (!lookup_variable((yyvsp[0].str), & (yyval.x))) {
4206                     lex_error("there is no variable '%1'", (yyvsp[0].str));
4207                     YYABORT;
4208                   }
4209                   free((yyvsp[0].str));
4210                 }
4211 #line 4212 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4212     break;
4213
4214   case 227:
4215 #line 1506 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4216     { (yyval.x) = (yyvsp[0].x); }
4217 #line 4218 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4218     break;
4219
4220   case 228:
4221 #line 1508 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4222     {
4223                   if ((yyvsp[-1].pl).obj != 0)
4224                     (yyval.x) = (yyvsp[-1].pl).obj->origin().x;
4225                   else
4226                     (yyval.x) = (yyvsp[-1].pl).x;
4227                 }
4228 #line 4229 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4229     break;
4230
4231   case 229:
4232 #line 1515 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4233     {
4234                   if ((yyvsp[-1].pl).obj != 0)
4235                     (yyval.x) = (yyvsp[-1].pl).obj->origin().y;
4236                   else
4237                     (yyval.x) = (yyvsp[-1].pl).y;
4238                 }
4239 #line 4240 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4240     break;
4241
4242   case 230:
4243 #line 1522 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4244     {
4245                   if ((yyvsp[-1].pl).obj != 0)
4246                     (yyval.x) = (yyvsp[-1].pl).obj->height();
4247                   else
4248                     (yyval.x) = 0.0;
4249                 }
4250 #line 4251 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4251     break;
4252
4253   case 231:
4254 #line 1529 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4255     {
4256                   if ((yyvsp[-1].pl).obj != 0)
4257                     (yyval.x) = (yyvsp[-1].pl).obj->width();
4258                   else
4259                     (yyval.x) = 0.0;
4260                 }
4261 #line 4262 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4262     break;
4263
4264   case 232:
4265 #line 1536 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4266     {
4267                   if ((yyvsp[-1].pl).obj != 0)
4268                     (yyval.x) = (yyvsp[-1].pl).obj->radius();
4269                   else
4270                     (yyval.x) = 0.0;
4271                 }
4272 #line 4273 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4273     break;
4274
4275   case 233:
4276 #line 1543 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4277     { (yyval.x) = (yyvsp[-2].x) + (yyvsp[0].x); }
4278 #line 4279 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4279     break;
4280
4281   case 234:
4282 #line 1545 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4283     { (yyval.x) = (yyvsp[-2].x) - (yyvsp[0].x); }
4284 #line 4285 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4285     break;
4286
4287   case 235:
4288 #line 1547 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4289     { (yyval.x) = (yyvsp[-2].x) * (yyvsp[0].x); }
4290 #line 4291 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4291     break;
4292
4293   case 236:
4294 #line 1549 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4295     {
4296                   if ((yyvsp[0].x) == 0.0) {
4297                     lex_error("division by zero");
4298                     YYABORT;
4299                   }
4300                   (yyval.x) = (yyvsp[-2].x)/(yyvsp[0].x);
4301                 }
4302 #line 4303 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4303     break;
4304
4305   case 237:
4306 #line 1557 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4307     {
4308                   if ((yyvsp[0].x) == 0.0) {
4309                     lex_error("modulus by zero");
4310                     YYABORT;
4311                   }
4312                   (yyval.x) = fmod((yyvsp[-2].x), (yyvsp[0].x));
4313                 }
4314 #line 4315 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4315     break;
4316
4317   case 238:
4318 #line 1565 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4319     {
4320                   errno = 0;
4321                   (yyval.x) = pow((yyvsp[-2].x), (yyvsp[0].x));
4322                   if (errno == EDOM) {
4323                     lex_error("arguments to '^' operator out of domain");
4324                     YYABORT;
4325                   }
4326                   if (errno == ERANGE) {
4327                     lex_error("result of '^' operator out of range");
4328                     YYABORT;
4329                   }
4330                 }
4331 #line 4332 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4332     break;
4333
4334   case 239:
4335 #line 1578 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4336     { (yyval.x) = -(yyvsp[0].x); }
4337 #line 4338 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4338     break;
4339
4340   case 240:
4341 #line 1580 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4342     { (yyval.x) = (yyvsp[-1].x); }
4343 #line 4344 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4344     break;
4345
4346   case 241:
4347 #line 1582 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4348     {
4349                   errno = 0;
4350                   (yyval.x) = sin((yyvsp[-1].x));
4351                   if (errno == ERANGE) {
4352                     lex_error("sin result out of range");
4353                     YYABORT;
4354                   }
4355                 }
4356 #line 4357 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4357     break;
4358
4359   case 242:
4360 #line 1591 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4361     {
4362                   errno = 0;
4363                   (yyval.x) = cos((yyvsp[-1].x));
4364                   if (errno == ERANGE) {
4365                     lex_error("cos result out of range");
4366                     YYABORT;
4367                   }
4368                 }
4369 #line 4370 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4370     break;
4371
4372   case 243:
4373 #line 1600 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4374     {
4375                   errno = 0;
4376                   (yyval.x) = atan2((yyvsp[-3].x), (yyvsp[-1].x));
4377                   if (errno == EDOM) {
4378                     lex_error("atan2 argument out of domain");
4379                     YYABORT;
4380                   }
4381                   if (errno == ERANGE) {
4382                     lex_error("atan2 result out of range");
4383                     YYABORT;
4384                   }
4385                 }
4386 #line 4387 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4387     break;
4388
4389   case 244:
4390 #line 1613 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4391     {
4392                   errno = 0;
4393                   (yyval.x) = log10((yyvsp[-1].x));
4394                   if (errno == ERANGE) {
4395                     lex_error("log result out of range");
4396                     YYABORT;
4397                   }
4398                 }
4399 #line 4400 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4400     break;
4401
4402   case 245:
4403 #line 1622 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4404     {
4405                   errno = 0;
4406                   (yyval.x) = pow(10.0, (yyvsp[-1].x));
4407                   if (errno == ERANGE) {
4408                     lex_error("exp result out of range");
4409                     YYABORT;
4410                   }
4411                 }
4412 #line 4413 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4413     break;
4414
4415   case 246:
4416 #line 1631 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4417     {
4418                   errno = 0;
4419                   (yyval.x) = sqrt((yyvsp[-1].x));
4420                   if (errno == EDOM) {
4421                     lex_error("sqrt argument out of domain");
4422                     YYABORT;
4423                   }
4424                 }
4425 #line 4426 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4426     break;
4427
4428   case 247:
4429 #line 1640 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4430     { (yyval.x) = (yyvsp[-3].x) > (yyvsp[-1].x) ? (yyvsp[-3].x) : (yyvsp[-1].x); }
4431 #line 4432 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4432     break;
4433
4434   case 248:
4435 #line 1642 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4436     { (yyval.x) = (yyvsp[-3].x) < (yyvsp[-1].x) ? (yyvsp[-3].x) : (yyvsp[-1].x); }
4437 #line 4438 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4438     break;
4439
4440   case 249:
4441 #line 1644 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4442     { (yyval.x) = (yyvsp[-1].x) < 0 ? -floor(-(yyvsp[-1].x)) : floor((yyvsp[-1].x)); }
4443 #line 4444 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4444     break;
4445
4446   case 250:
4447 #line 1646 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4448     { (yyval.x) = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*(yyvsp[-1].x)); }
4449 #line 4450 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4450     break;
4451
4452   case 251:
4453 #line 1648 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4454     {
4455                   /* return a random number in the range [0,1) */
4456                   /* portable, but not very random */
4457                   (yyval.x) = (rand() & 0x7fff) / double(0x8000);
4458                 }
4459 #line 4460 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4460     break;
4461
4462   case 252:
4463 #line 1654 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4464     {
4465                   (yyval.x) = 0;
4466                   srand((unsigned int)(yyvsp[-1].x));
4467                 }
4468 #line 4469 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4469     break;
4470
4471   case 253:
4472 #line 1659 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4473     { (yyval.x) = ((yyvsp[-2].x) <= (yyvsp[0].x)); }
4474 #line 4475 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4475     break;
4476
4477   case 254:
4478 #line 1661 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4479     { (yyval.x) = ((yyvsp[-2].x) > (yyvsp[0].x)); }
4480 #line 4481 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4481     break;
4482
4483   case 255:
4484 #line 1663 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4485     { (yyval.x) = ((yyvsp[-2].x) >= (yyvsp[0].x)); }
4486 #line 4487 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4487     break;
4488
4489   case 256:
4490 #line 1665 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4491     { (yyval.x) = ((yyvsp[-2].x) == (yyvsp[0].x)); }
4492 #line 4493 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4493     break;
4494
4495   case 257:
4496 #line 1667 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4497     { (yyval.x) = ((yyvsp[-2].x) != (yyvsp[0].x)); }
4498 #line 4499 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4499     break;
4500
4501   case 258:
4502 #line 1669 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4503     { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
4504 #line 4505 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4505     break;
4506
4507   case 259:
4508 #line 1671 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4509     { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
4510 #line 4511 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4511     break;
4512
4513   case 260:
4514 #line 1673 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
4515     { (yyval.x) = ((yyvsp[0].x) == 0.0); }
4516 #line 4517 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4517     break;
4518
4519
4520 #line 4521 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
4521       default: break;
4522     }
4523   /* User semantic actions sometimes alter yychar, and that requires
4524      that yytoken be updated with the new translation.  We take the
4525      approach of translating immediately before every use of yytoken.
4526      One alternative is translating here after every semantic action,
4527      but that translation would be missed if the semantic action invokes
4528      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
4529      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
4530      incorrect destructor might then be invoked immediately.  In the
4531      case of YYERROR or YYBACKUP, subsequent parser actions might lead
4532      to an incorrect destructor call or verbose syntax error message
4533      before the lookahead is translated.  */
4534   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
4535
4536   YYPOPSTACK (yylen);
4537   yylen = 0;
4538   YY_STACK_PRINT (yyss, yyssp);
4539
4540   *++yyvsp = yyval;
4541
4542   /* Now 'shift' the result of the reduction.  Determine what state
4543      that goes to, based on the state we popped back to and the rule
4544      number reduced by.  */
4545   {
4546     const int yylhs = yyr1[yyn] - YYNTOKENS;
4547     const int yyi = yypgoto[yylhs] + *yyssp;
4548     yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
4549                ? yytable[yyi]
4550                : yydefgoto[yylhs]);
4551   }
4552
4553   goto yynewstate;
4554
4555
4556 /*--------------------------------------.
4557 | yyerrlab -- here on detecting error.  |
4558 `--------------------------------------*/
4559 yyerrlab:
4560   /* Make sure we have latest lookahead translation.  See comments at
4561      user semantic actions for why this is necessary.  */
4562   yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
4563
4564   /* If not already recovering from an error, report this error.  */
4565   if (!yyerrstatus)
4566     {
4567       ++yynerrs;
4568 #if ! YYERROR_VERBOSE
4569       yyerror (YY_("syntax error"));
4570 #else
4571 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
4572                                         yyssp, yytoken)
4573       {
4574         char const *yymsgp = YY_("syntax error");
4575         int yysyntax_error_status;
4576         yysyntax_error_status = YYSYNTAX_ERROR;
4577         if (yysyntax_error_status == 0)
4578           yymsgp = yymsg;
4579         else if (yysyntax_error_status == 1)
4580           {
4581             if (yymsg != yymsgbuf)
4582               YYSTACK_FREE (yymsg);
4583             yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
4584             if (!yymsg)
4585               {
4586                 yymsg = yymsgbuf;
4587                 yymsg_alloc = sizeof yymsgbuf;
4588                 yysyntax_error_status = 2;
4589               }
4590             else
4591               {
4592                 yysyntax_error_status = YYSYNTAX_ERROR;
4593                 yymsgp = yymsg;
4594               }
4595           }
4596         yyerror (yymsgp);
4597         if (yysyntax_error_status == 2)
4598           goto yyexhaustedlab;
4599       }
4600 # undef YYSYNTAX_ERROR
4601 #endif
4602     }
4603
4604
4605
4606   if (yyerrstatus == 3)
4607     {
4608       /* If just tried and failed to reuse lookahead token after an
4609          error, discard it.  */
4610
4611       if (yychar <= YYEOF)
4612         {
4613           /* Return failure if at end of input.  */
4614           if (yychar == YYEOF)
4615             YYABORT;
4616         }
4617       else
4618         {
4619           yydestruct ("Error: discarding",
4620                       yytoken, &yylval);
4621           yychar = YYEMPTY;
4622         }
4623     }
4624
4625   /* Else will try to reuse lookahead token after shifting the error
4626      token.  */
4627   goto yyerrlab1;
4628
4629
4630 /*---------------------------------------------------.
4631 | yyerrorlab -- error raised explicitly by YYERROR.  |
4632 `---------------------------------------------------*/
4633 yyerrorlab:
4634
4635   /* Pacify compilers like GCC when the user code never invokes
4636      YYERROR and the label yyerrorlab therefore never appears in user
4637      code.  */
4638   if (/*CONSTCOND*/ 0)
4639      goto yyerrorlab;
4640
4641   /* Do not reclaim the symbols of the rule whose action triggered
4642      this YYERROR.  */
4643   YYPOPSTACK (yylen);
4644   yylen = 0;
4645   YY_STACK_PRINT (yyss, yyssp);
4646   yystate = *yyssp;
4647   goto yyerrlab1;
4648
4649
4650 /*-------------------------------------------------------------.
4651 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
4652 `-------------------------------------------------------------*/
4653 yyerrlab1:
4654   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
4655
4656   for (;;)
4657     {
4658       yyn = yypact[yystate];
4659       if (!yypact_value_is_default (yyn))
4660         {
4661           yyn += YYTERROR;
4662           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4663             {
4664               yyn = yytable[yyn];
4665               if (0 < yyn)
4666                 break;
4667             }
4668         }
4669
4670       /* Pop the current state because it cannot handle the error token.  */
4671       if (yyssp == yyss)
4672         YYABORT;
4673
4674
4675       yydestruct ("Error: popping",
4676                   yystos[yystate], yyvsp);
4677       YYPOPSTACK (1);
4678       yystate = *yyssp;
4679       YY_STACK_PRINT (yyss, yyssp);
4680     }
4681
4682   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
4683   *++yyvsp = yylval;
4684   YY_IGNORE_MAYBE_UNINITIALIZED_END
4685
4686
4687   /* Shift the error token.  */
4688   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
4689
4690   yystate = yyn;
4691   goto yynewstate;
4692
4693
4694 /*-------------------------------------.
4695 | yyacceptlab -- YYACCEPT comes here.  |
4696 `-------------------------------------*/
4697 yyacceptlab:
4698   yyresult = 0;
4699   goto yyreturn;
4700
4701 /*-----------------------------------.
4702 | yyabortlab -- YYABORT comes here.  |
4703 `-----------------------------------*/
4704 yyabortlab:
4705   yyresult = 1;
4706   goto yyreturn;
4707
4708 #if !defined yyoverflow || YYERROR_VERBOSE
4709 /*-------------------------------------------------.
4710 | yyexhaustedlab -- memory exhaustion comes here.  |
4711 `-------------------------------------------------*/
4712 yyexhaustedlab:
4713   yyerror (YY_("memory exhausted"));
4714   yyresult = 2;
4715   /* Fall through.  */
4716 #endif
4717
4718 yyreturn:
4719   if (yychar != YYEMPTY)
4720     {
4721       /* Make sure we have latest lookahead translation.  See comments at
4722          user semantic actions for why this is necessary.  */
4723       yytoken = YYTRANSLATE (yychar);
4724       yydestruct ("Cleanup: discarding lookahead",
4725                   yytoken, &yylval);
4726     }
4727   /* Do not reclaim the symbols of the rule whose action triggered
4728      this YYABORT or YYACCEPT.  */
4729   YYPOPSTACK (yylen);
4730   YY_STACK_PRINT (yyss, yyssp);
4731   while (yyssp != yyss)
4732     {
4733       yydestruct ("Cleanup: popping",
4734                   yystos[*yyssp], yyvsp);
4735       YYPOPSTACK (1);
4736     }
4737 #ifndef yyoverflow
4738   if (yyss != yyssa)
4739     YYSTACK_FREE (yyss);
4740 #endif
4741 #if YYERROR_VERBOSE
4742   if (yymsg != yymsgbuf)
4743     YYSTACK_FREE (yymsg);
4744 #endif
4745   return yyresult;
4746 }
4747 #line 1677 "../src/preproc/pic/pic.ypp" /* yacc.c:1903  */
4748
4749
4750 /* bison defines const to be empty unless __STDC__ is defined, which it
4751 isn't under cfront */
4752
4753 #ifdef const
4754 #undef const
4755 #endif
4756
4757 static struct {
4758   const char *name;
4759   double val;
4760   int scaled;                // non-zero if val should be multiplied by scale
4761 } defaults_table[] = {
4762   { "arcrad", .25, 1 },
4763   { "arrowht", .1, 1 },
4764   { "arrowwid", .05, 1 },
4765   { "circlerad", .25, 1 },
4766   { "boxht", .5, 1 },
4767   { "boxwid", .75, 1 },
4768   { "boxrad", 0.0, 1 },
4769   { "dashwid", .05, 1 },
4770   { "ellipseht", .5, 1 },
4771   { "ellipsewid", .75, 1 },
4772   { "moveht", .5, 1 },
4773   { "movewid", .5, 1 },
4774   { "lineht", .5, 1 },
4775   { "linewid", .5, 1 },
4776   { "textht", 0.0, 1 },
4777   { "textwid", 0.0, 1 },
4778   { "scale", 1.0, 0 },
4779   { "linethick", -1.0, 0 },             // in points
4780   { "fillval", .5, 0 },
4781   { "arrowhead", 1.0, 0 },
4782   { "maxpswid", 8.5, 0 },
4783   { "maxpsht", 11.0, 0 },
4784 };
4785
4786 place *lookup_label(const char *label)
4787 {
4788   saved_state *state = current_saved_state;
4789   PTABLE(place) *tbl = current_table;
4790   for (;;) {
4791     place *pl = tbl->lookup(label);
4792     if (pl)
4793       return pl;
4794     if (!state)
4795       return 0;
4796     tbl = state->tbl;
4797     state = state->prev;
4798   }
4799 }
4800
4801 void define_label(const char *label, const place *pl)
4802 {
4803   place *p = new place[1];
4804   *p = *pl;
4805   current_table->define(label, p);
4806 }
4807
4808 int lookup_variable(const char *name, double *val)
4809 {
4810   place *pl = lookup_label(name);
4811   if (pl) {
4812     *val = pl->x;
4813     return 1;
4814   }
4815   return 0;
4816 }
4817
4818 void define_variable(const char *name, double val)
4819 {
4820   place *p = new place[1];
4821   p->obj = 0;
4822   p->x = val;
4823   p->y = 0.0;
4824   current_table->define(name, p);
4825   if (strcmp(name, "scale") == 0) {
4826     // When the scale changes, reset all scaled pre-defined variables to
4827     // their default values.
4828     for (unsigned int i = 0;
4829          i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) 
4830       if (defaults_table[i].scaled)
4831         define_variable(defaults_table[i].name, val*defaults_table[i].val);
4832   }
4833 }
4834
4835 // called once only (not once per parse)
4836
4837 void parse_init()
4838 {
4839   current_direction = RIGHT_DIRECTION;
4840   current_position.x = 0.0;
4841   current_position.y = 0.0;
4842   // This resets everything to its default value.
4843   reset_all();
4844 }
4845
4846 void reset(const char *nm)
4847 {
4848   for (unsigned int i = 0;
4849        i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
4850     if (strcmp(nm, defaults_table[i].name) == 0) {
4851       double val = defaults_table[i].val;
4852       if (defaults_table[i].scaled) {
4853         double scale;
4854         lookup_variable("scale", &scale);
4855         val *= scale;
4856       }
4857       define_variable(defaults_table[i].name, val);
4858       return;
4859     }
4860   lex_error("'%1' is not a predefined variable", nm);
4861 }
4862
4863 void reset_all()
4864 {
4865   // We only have to explicitly reset the pre-defined variables that
4866   // aren't scaled because 'scale' is not scaled, and changing the
4867   // value of 'scale' will reset all the pre-defined variables that
4868   // are scaled.
4869   for (unsigned int i = 0;
4870        i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
4871     if (!defaults_table[i].scaled)
4872       define_variable(defaults_table[i].name, defaults_table[i].val);
4873 }
4874
4875 // called after each parse
4876
4877 void parse_cleanup()
4878 {
4879   while (current_saved_state != 0) {
4880     delete current_table;
4881     current_table = current_saved_state->tbl;
4882     saved_state *tem = current_saved_state;
4883     current_saved_state = current_saved_state->prev;
4884     delete tem;
4885   }
4886   assert(current_table == &top_table);
4887   PTABLE_ITERATOR(place) iter(current_table);
4888   const char *key;
4889   place *pl;
4890   while (iter.next(&key, &pl))
4891     if (pl->obj != 0) {
4892       position pos = pl->obj->origin();
4893       pl->obj = 0;
4894       pl->x = pos.x;
4895       pl->y = pos.y;
4896     }
4897   while (olist.head != 0) {
4898     object *tem = olist.head;
4899     olist.head = olist.head->next;
4900     delete tem;
4901   }
4902   olist.tail = 0;
4903   current_direction = RIGHT_DIRECTION;
4904   current_position.x = 0.0;
4905   current_position.y = 0.0;
4906 }
4907
4908 const char *ordinal_postfix(int n)
4909 {
4910   if (n < 10 || n > 20)
4911     switch (n % 10) {
4912     case 1:
4913       return "st";
4914     case 2:
4915       return "nd";
4916     case 3:
4917       return "rd";
4918     }
4919   return "th";
4920 }
4921
4922 const char *object_type_name(object_type type)
4923 {
4924   switch (type) {
4925   case BOX_OBJECT:
4926     return "box";
4927   case CIRCLE_OBJECT:
4928     return "circle";
4929   case ELLIPSE_OBJECT:
4930     return "ellipse";
4931   case ARC_OBJECT:
4932     return "arc";
4933   case SPLINE_OBJECT:
4934     return "spline";
4935   case LINE_OBJECT:
4936     return "line";
4937   case ARROW_OBJECT:
4938     return "arrow";
4939   case MOVE_OBJECT:
4940     return "move";
4941   case TEXT_OBJECT:
4942     return "\"\"";
4943   case BLOCK_OBJECT:
4944     return "[]";
4945   case OTHER_OBJECT:
4946   case MARK_OBJECT:
4947   default:
4948     break;
4949   }
4950   return "object";
4951 }
4952
4953 static char sprintf_buf[1024];
4954
4955 char *format_number(const char *form, double n)
4956 {
4957   if (form == 0)
4958     form = "%g";
4959   return do_sprintf(form, &n, 1);
4960 }
4961
4962 char *do_sprintf(const char *form, const double *v, int nv)
4963 {
4964   string result;
4965   int i = 0;
4966   string one_format;
4967   while (*form) {
4968     if (*form == '%') {
4969       one_format += *form++;
4970       for (; *form != '\0' && strchr("#-+ 0123456789.", *form) != 0; form++)
4971         one_format += *form;
4972       if (*form == '\0' || strchr("eEfgG%", *form) == 0) {
4973         lex_error("bad sprintf format");
4974         result += one_format;
4975         result += form;
4976         break;
4977       }
4978       if (*form == '%') {
4979         one_format += *form++;
4980         one_format += '\0';
4981         snprintf(sprintf_buf, sizeof(sprintf_buf),
4982                  "%s", one_format.contents());
4983       }
4984       else {
4985         if (i >= nv) {
4986           lex_error("too few arguments to snprintf");
4987           result += one_format;
4988           result += form;
4989           break;
4990         }
4991         one_format += *form++;
4992         one_format += '\0';
4993         snprintf(sprintf_buf, sizeof(sprintf_buf),
4994                  one_format.contents(), v[i++]);
4995       }
4996       one_format.clear();
4997       result += sprintf_buf;
4998     }
4999     else
5000       result += *form++;
5001   }
5002   result += '\0';
5003   return strsave(result.contents());
5004 }