~ubuntu-branches/ubuntu/precise/pcb/precise

« back to all changes in this revision

Viewing changes to src/parse_y.c

  • Committer: Bazaar Package Importer
  • Author(s): Hamish Moffatt
  • Date: 2005-02-20 13:14:00 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20050220131400-pfz66g5vhx0azl8f
Tags: 1.99j+20050127-2
* Improved package description: (closes: #295405)
* Fixed dependency: tk84 -> tk8.4 (closes: #295404)
* Updated README.debian (closes: #269578)
* Applied patch to src/djopt.c to allow compilation with gcc-4.0
  (closes: #294319), thanks to Andreas Jochens for the patch.
* Prevent example files from being compressed

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* A Bison parser, made by GNU Bison 1.875.  */
 
2
 
 
3
/* Skeleton parser for Yacc-like parsing with Bison,
 
4
   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
 
5
 
 
6
   This program is free software; you can redistribute it and/or modify
 
7
   it under the terms of the GNU General Public License as published by
 
8
   the Free Software Foundation; either version 2, or (at your option)
 
9
   any later version.
 
10
 
 
11
   This program is distributed in the hope that it will be useful,
 
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
   GNU General Public License for more details.
 
15
 
 
16
   You should have received a copy of the GNU General Public License
 
17
   along with this program; if not, write to the Free Software
 
18
   Foundation, Inc., 59 Temple Place - Suite 330,
 
19
   Boston, MA 02111-1307, USA.  */
 
20
 
 
21
/* As a special exception, when this file is copied by Bison into a
 
22
   Bison output file, you may use that output file without restriction.
 
23
   This special exception was added by the Free Software Foundation
 
24
   in version 1.24 of Bison.  */
 
25
 
 
26
/* Written by Richard Stallman by simplifying the original so called
 
27
   ``semantic'' parser.  */
 
28
 
 
29
/* All symbols defined below should begin with yy or YY, to avoid
 
30
   infringing on user name space.  This should be done even for local
 
31
   variables, as they might otherwise be expanded by user macros.
 
32
   There are some unavoidable exceptions within include files to
 
33
   define necessary library symbols; they are noted "INFRINGES ON
 
34
   USER NAME SPACE" below.  */
 
35
 
 
36
/* Identify Bison output.  */
 
37
#define YYBISON 1
 
38
 
 
39
/* Skeleton name.  */
 
40
#define YYSKELETON_NAME "yacc.c"
 
41
 
 
42
/* Pure parsers.  */
 
43
#define YYPURE 0
 
44
 
 
45
/* Using locations.  */
 
46
#define YYLSP_NEEDED 0
 
47
 
 
48
 
 
49
 
 
50
/* Tokens.  */
 
51
#ifndef YYTOKENTYPE
 
52
# define YYTOKENTYPE
 
53
   /* Put the tokens into the symbol table, so that GDB and other debuggers
 
54
      know about them.  */
 
55
   enum yytokentype {
 
56
     NUMBER = 258,
 
57
     CHAR_CONST = 259,
 
58
     FLOAT = 260,
 
59
     STRING = 261,
 
60
     T_PCB = 262,
 
61
     T_LAYER = 263,
 
62
     T_VIA = 264,
 
63
     T_RAT = 265,
 
64
     T_LINE = 266,
 
65
     T_ARC = 267,
 
66
     T_RECTANGLE = 268,
 
67
     T_TEXT = 269,
 
68
     T_ELEMENTLINE = 270,
 
69
     T_ELEMENT = 271,
 
70
     T_PIN = 272,
 
71
     T_PAD = 273,
 
72
     T_GRID = 274,
 
73
     T_FLAGS = 275,
 
74
     T_SYMBOL = 276,
 
75
     T_SYMBOLLINE = 277,
 
76
     T_CURSOR = 278,
 
77
     T_ELEMENTARC = 279,
 
78
     T_MARK = 280,
 
79
     T_GROUPS = 281,
 
80
     T_STYLES = 282,
 
81
     T_POLYGON = 283,
 
82
     T_NETLIST = 284,
 
83
     T_NET = 285,
 
84
     T_CONN = 286,
 
85
     T_THERMAL = 287,
 
86
     T_DRC = 288
 
87
   };
 
88
#endif
 
89
#define NUMBER 258
 
90
#define CHAR_CONST 259
 
91
#define FLOAT 260
 
92
#define STRING 261
 
93
#define T_PCB 262
 
94
#define T_LAYER 263
 
95
#define T_VIA 264
 
96
#define T_RAT 265
 
97
#define T_LINE 266
 
98
#define T_ARC 267
 
99
#define T_RECTANGLE 268
 
100
#define T_TEXT 269
 
101
#define T_ELEMENTLINE 270
 
102
#define T_ELEMENT 271
 
103
#define T_PIN 272
 
104
#define T_PAD 273
 
105
#define T_GRID 274
 
106
#define T_FLAGS 275
 
107
#define T_SYMBOL 276
 
108
#define T_SYMBOLLINE 277
 
109
#define T_CURSOR 278
 
110
#define T_ELEMENTARC 279
 
111
#define T_MARK 280
 
112
#define T_GROUPS 281
 
113
#define T_STYLES 282
 
114
#define T_POLYGON 283
 
115
#define T_NETLIST 284
 
116
#define T_NET 285
 
117
#define T_CONN 286
 
118
#define T_THERMAL 287
 
119
#define T_DRC 288
 
120
 
 
121
 
 
122
 
 
123
 
 
124
/* Copy the first part of user declarations.  */
 
125
#line 3 "parse_y.y"
 
126
 
 
127
/*
 
128
 *                            COPYRIGHT
 
129
 *
 
130
 *  PCB, interactive printed circuit board design
 
131
 *  Copyright (C) 1994,1995,1996 Thomas Nau
 
132
 *
 
133
 *  This program is free software; you can redistribute it and/or modify
 
134
 *  it under the terms of the GNU General Public License as published by
 
135
 *  the Free Software Foundation; either version 2 of the License, or
 
136
 *  (at your option) any later version.
 
137
 *
 
138
 *  This program is distributed in the hope that it will be useful,
 
139
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
140
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
141
 *  GNU General Public License for more details.
 
142
 *
 
143
 *  You should have received a copy of the GNU General Public License
 
144
 *  along with this program; if not, write to the Free Software
 
145
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
146
 *
 
147
 *  Contact addresses for paper mail and Email:
 
148
 *  Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany
 
149
 *  Thomas.Nau@rz.uni-ulm.de
 
150
 *
 
151
 */
 
152
 
 
153
/* grammar to parse ASCII input of PCB description
 
154
 */
 
155
 
 
156
#ifdef HAVE_CONFIG_H
 
157
#include "config.h"
 
158
#endif
 
159
 
 
160
#define GRIDFIT(x,g) (int)(0.5 + (int)(((x)+(g)/2.)/(g))*(g))
 
161
#include "global.h"
 
162
#include "create.h"
 
163
#include "data.h"
 
164
#include "error.h"
 
165
#include "mymem.h"
 
166
#include "misc.h"
 
167
#include "parse_l.h"
 
168
#include "remove.h"
 
169
 
 
170
#ifdef HAVE_LIBDMALLOC
 
171
# include <dmalloc.h> /* see http://dmalloc.com */
 
172
#endif
 
173
 
 
174
RCSID("$Id: parse_y.y,v 1.14 2004/08/30 11:29:16 danmc Exp $");
 
175
 
 
176
static  LayerTypePtr    Layer;
 
177
static  PolygonTypePtr  Polygon;
 
178
static  SymbolTypePtr   Symbol;
 
179
static  int             pin_num;
 
180
static  LibraryMenuTypePtr      Menu;
 
181
static  Boolean                 LayerFlag[MAX_LAYER + 2];
 
182
 
 
183
extern  char                    *yytext;                /* defined by LEX */
 
184
extern  PCBTypePtr              yyPCB;
 
185
extern  DataTypePtr             yyData;
 
186
extern  ElementTypePtr  yyElement;
 
187
extern  FontTypePtr             yyFont;
 
188
extern  int                             yylineno;               /* linenumber */
 
189
extern  char                    *yyfilename;    /* in this file */
 
190
 
 
191
int yyerror(char *s);
 
192
 
 
193
 
 
194
 
 
195
/* Enabling traces.  */
 
196
#ifndef YYDEBUG
 
197
# define YYDEBUG 0
 
198
#endif
 
199
 
 
200
/* Enabling verbose error messages.  */
 
201
#ifdef YYERROR_VERBOSE
 
202
# undef YYERROR_VERBOSE
 
203
# define YYERROR_VERBOSE 1
 
204
#else
 
205
# define YYERROR_VERBOSE 0
 
206
#endif
 
207
 
 
208
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
 
209
#line 73 "parse_y.y"
 
210
typedef union YYSTYPE {
 
211
        int             number;
 
212
        float           floating;
 
213
        char            *string;
 
214
} YYSTYPE;
 
215
/* Line 191 of yacc.c.  */
 
216
#line 216 "parse_y.c"
 
217
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 
218
# define YYSTYPE_IS_DECLARED 1
 
219
# define YYSTYPE_IS_TRIVIAL 1
 
220
#endif
 
221
 
 
222
 
 
223
 
 
224
/* Copy the second part of user declarations.  */
 
225
 
 
226
 
 
227
/* Line 214 of yacc.c.  */
 
228
#line 228 "parse_y.c"
 
229
 
 
230
#if ! defined (yyoverflow) || YYERROR_VERBOSE
 
231
 
 
232
/* The parser invokes alloca or malloc; define the necessary symbols.  */
 
233
 
 
234
# if YYSTACK_USE_ALLOCA
 
235
#  define YYSTACK_ALLOC alloca
 
236
# else
 
237
#  ifndef YYSTACK_USE_ALLOCA
 
238
#   if defined (alloca) || defined (_ALLOCA_H)
 
239
#    define YYSTACK_ALLOC alloca
 
240
#   else
 
241
#    ifdef __GNUC__
 
242
#     define YYSTACK_ALLOC __builtin_alloca
 
243
#    endif
 
244
#   endif
 
245
#  endif
 
246
# endif
 
247
 
 
248
# ifdef YYSTACK_ALLOC
 
249
   /* Pacify GCC's `empty if-body' warning. */
 
250
#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
 
251
# else
 
252
#  if defined (__STDC__) || defined (__cplusplus)
 
253
#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
 
254
#   define YYSIZE_T size_t
 
255
#  endif
 
256
#  define YYSTACK_ALLOC malloc
 
257
#  define YYSTACK_FREE free
 
258
# endif
 
259
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
 
260
 
 
261
 
 
262
#if (! defined (yyoverflow) \
 
263
     && (! defined (__cplusplus) \
 
264
         || (YYSTYPE_IS_TRIVIAL)))
 
265
 
 
266
/* A type that is properly aligned for any stack member.  */
 
267
union yyalloc
 
268
{
 
269
  short yyss;
 
270
  YYSTYPE yyvs;
 
271
  };
 
272
 
 
273
/* The size of the maximum gap between one aligned stack and the next.  */
 
274
# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
 
275
 
 
276
/* The size of an array large to enough to hold all stacks, each with
 
277
   N elements.  */
 
278
# define YYSTACK_BYTES(N) \
 
279
     ((N) * (sizeof (short) + sizeof (YYSTYPE))                         \
 
280
      + YYSTACK_GAP_MAXIMUM)
 
281
 
 
282
/* Copy COUNT objects from FROM to TO.  The source and destination do
 
283
   not overlap.  */
 
284
# ifndef YYCOPY
 
285
#  if 1 < __GNUC__
 
286
#   define YYCOPY(To, From, Count) \
 
287
      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
 
288
#  else
 
289
#   define YYCOPY(To, From, Count)              \
 
290
      do                                        \
 
291
        {                                       \
 
292
          register YYSIZE_T yyi;                \
 
293
          for (yyi = 0; yyi < (Count); yyi++)   \
 
294
            (To)[yyi] = (From)[yyi];            \
 
295
        }                                       \
 
296
      while (0)
 
297
#  endif
 
298
# endif
 
299
 
 
300
/* Relocate STACK from its old location to the new one.  The
 
301
   local variables YYSIZE and YYSTACKSIZE give the old and new number of
 
302
   elements in the stack, and YYPTR gives the new location of the
 
303
   stack.  Advance YYPTR to a properly aligned location for the next
 
304
   stack.  */
 
305
# define YYSTACK_RELOCATE(Stack)                                        \
 
306
    do                                                                  \
 
307
      {                                                                 \
 
308
        YYSIZE_T yynewbytes;                                            \
 
309
        YYCOPY (&yyptr->Stack, Stack, yysize);                          \
 
310
        Stack = &yyptr->Stack;                                          \
 
311
        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
 
312
        yyptr += yynewbytes / sizeof (*yyptr);                          \
 
313
      }                                                                 \
 
314
    while (0)
 
315
 
 
316
#endif
 
317
 
 
318
#if defined (__STDC__) || defined (__cplusplus)
 
319
   typedef signed char yysigned_char;
 
320
#else
 
321
   typedef short yysigned_char;
 
322
#endif
 
323
 
 
324
/* YYFINAL -- State number of the termination state. */
 
325
#define YYFINAL  9
 
326
/* YYLAST -- Last index in YYTABLE.  */
 
327
#define YYLAST   600
 
328
 
 
329
/* YYNTOKENS -- Number of terminals. */
 
330
#define YYNTOKENS  38
 
331
/* YYNNTS -- Number of nonterminals. */
 
332
#define YYNNTS  93
 
333
/* YYNRULES -- Number of rules. */
 
334
#define YYNRULES  174
 
335
/* YYNRULES -- Number of states. */
 
336
#define YYNSTATES  572
 
337
 
 
338
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 
339
#define YYUNDEFTOK  2
 
340
#define YYMAXUTOK   288
 
341
 
 
342
#define YYTRANSLATE(YYX)                                                \
 
343
  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
344
 
 
345
/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
 
346
static const unsigned char yytranslate[] =
 
347
{
 
348
       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
349
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
350
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
351
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
352
      34,    35,     2,     2,     2,     2,     2,     2,     2,     2,
 
353
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
354
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
355
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
356
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
357
       2,    36,     2,    37,     2,     2,     2,     2,     2,     2,
 
358
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
359
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
360
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
361
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
362
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
363
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
364
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
365
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
366
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
367
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
368
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
369
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
370
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
371
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
372
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 
373
       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
 
374
       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
 
375
      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
 
376
      25,    26,    27,    28,    29,    30,    31,    32,    33
 
377
};
 
378
 
 
379
#if YYDEBUG
 
380
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
 
381
   YYRHS.  */
 
382
static const unsigned short yyprhs[] =
 
383
{
 
384
       0,     0,     3,     5,     7,     9,    11,    12,    25,    26,
 
385
      29,    31,    32,    33,    36,    41,    48,    55,    57,    59,
 
386
      61,    63,    70,    78,    86,    94,   101,   108,   115,   116,
 
387
     117,   122,   124,   126,   127,   134,   135,   143,   148,   149,
 
388
     154,   155,   160,   165,   166,   167,   169,   170,   172,   175,
 
389
     177,   179,   181,   182,   185,   187,   189,   191,   193,   195,
 
390
     197,   209,   221,   232,   242,   251,   262,   273,   274,   284,
 
391
     286,   287,   289,   292,   294,   296,   298,   300,   302,   304,
 
392
     313,   315,   317,   319,   320,   329,   340,   351,   361,   374,
 
393
     387,   399,   408,   418,   428,   430,   433,   438,   443,   444,
 
394
     446,   448,   450,   452,   454,   455,   468,   469,   485,   486,
 
395
     503,   504,   523,   524,   543,   545,   548,   550,   552,   554,
 
396
     556,   558,   567,   576,   587,   598,   604,   610,   612,   615,
 
397
     617,   619,   621,   623,   632,   641,   652,   663,   676,   689,
 
398
     700,   710,   719,   733,   747,   759,   770,   772,   775,   776,
 
399
     786,   787,   797,   799,   801,   803,   806,   808,   810,   811,
 
400
     820,   829,   831,   832,   839,   841,   842,   844,   847,   848,
 
401
     858,   860,   861,   863,   866
 
402
};
 
403
 
 
404
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
 
405
static const short yyrhs[] =
 
406
{
 
407
      39,     0,    -1,    40,    -1,    42,    -1,    45,    -1,     1,
 
408
      -1,    -1,    41,    47,    48,    53,    54,    55,    58,    59,
 
409
      60,    44,    61,   122,    -1,    -1,    43,    61,    -1,    45,
 
410
      -1,    -1,    -1,    46,   113,    -1,     7,    34,     6,    35,
 
411
      -1,     7,    34,     6,     3,     3,    35,    -1,     7,    36,
 
412
       6,     3,     3,    37,    -1,    49,    -1,    50,    -1,    51,
 
413
      -1,    52,    -1,    19,    34,     3,     3,     3,    35,    -1,
 
414
      19,    34,     3,     3,     3,     3,    35,    -1,    19,    34,
 
415
       5,     3,     3,     3,    35,    -1,    19,    36,     5,     3,
 
416
       3,     3,    37,    -1,    23,    34,     3,     3,     3,    35,
 
417
      -1,    23,    36,     3,     3,     3,    37,    -1,    23,    36,
 
418
       3,     3,     5,    37,    -1,    -1,    -1,    32,    36,     5,
 
419
      37,    -1,    56,    -1,    57,    -1,    -1,    33,    36,     3,
 
420
       3,     3,    37,    -1,    -1,    33,    36,     3,     3,     3,
 
421
       3,    37,    -1,    20,    34,     3,    35,    -1,    -1,    26,
 
422
      34,     6,    35,    -1,    -1,    27,    34,     6,    35,    -1,
 
423
      27,    36,     6,    37,    -1,    -1,    -1,    62,    -1,    -1,
 
424
      63,    -1,    62,    63,    -1,    65,    -1,    71,    -1,    72,
 
425
      -1,    -1,    64,    89,    -1,     1,    -1,    66,    -1,    67,
 
426
      -1,    68,    -1,    69,    -1,    70,    -1,     9,    36,     3,
 
427
       3,     3,     3,     3,     3,     6,     3,    37,    -1,     9,
 
428
      34,     3,     3,     3,     3,     3,     3,     6,     3,    35,
 
429
      -1,     9,    34,     3,     3,     3,     3,     3,     6,     3,
 
430
      35,    -1,     9,    34,     3,     3,     3,     3,     6,     3,
 
431
      35,    -1,     9,    34,     3,     3,     3,     6,     3,    35,
 
432
      -1,    10,    36,     3,     3,     3,     3,     3,     3,     3,
 
433
      37,    -1,    10,    34,     3,     3,     3,     3,     3,     3,
 
434
       3,    35,    -1,    -1,     8,    34,     3,     6,    35,    34,
 
435
      73,    74,    35,    -1,    75,    -1,    -1,    76,    -1,    75,
 
436
      76,    -1,    78,    -1,    79,    -1,    80,    -1,    81,    -1,
 
437
      82,    -1,    83,    -1,    13,    34,     3,     3,     3,     3,
 
438
       3,    35,    -1,    86,    -1,    85,    -1,    84,    -1,    -1,
 
439
      28,    34,     3,    35,    34,    77,    87,    35,    -1,    11,
 
440
      36,     3,     3,     3,     3,     3,     3,     3,    37,    -1,
 
441
      11,    34,     3,     3,     3,     3,     3,     3,     3,    35,
 
442
      -1,    11,    34,     3,     3,     3,     3,     3,     3,    35,
 
443
      -1,    12,    36,     3,     3,     3,     3,     3,     3,     3,
 
444
       3,     3,    37,    -1,    12,    34,     3,     3,     3,     3,
 
445
       3,     3,     3,     3,     3,    35,    -1,    12,    34,     3,
 
446
       3,     3,     3,     3,     3,     3,     3,    35,    -1,    14,
 
447
      34,     3,     3,     3,     6,     3,    35,    -1,    14,    34,
 
448
       3,     3,     3,     3,     6,     3,    35,    -1,    14,    36,
 
449
       3,     3,     3,     3,     6,     3,    37,    -1,    88,    -1,
 
450
      87,    88,    -1,    34,     3,     3,    35,    -1,    36,     3,
 
451
       3,    37,    -1,    -1,    90,    -1,    92,    -1,    94,    -1,
 
452
      96,    -1,    98,    -1,    -1,    16,    34,     6,     6,     3,
 
453
       3,     3,    35,    34,    91,   100,    35,    -1,    -1,    16,
 
454
      34,     3,     6,     6,     3,     3,     3,     3,     3,    35,
 
455
      34,    93,   100,    35,    -1,    -1,    16,    34,     3,     6,
 
456
       6,     6,     3,     3,     3,     3,     3,    35,    34,    95,
 
457
     100,    35,    -1,    -1,    16,    34,     3,     6,     6,     6,
 
458
       3,     3,     3,     3,     3,     3,     3,    35,    34,    97,
 
459
     102,    35,    -1,    -1,    16,    36,     3,     6,     6,     6,
 
460
       3,     3,     3,     3,     3,     3,     3,    37,    34,    99,
 
461
     102,    35,    -1,   101,    -1,   100,   101,    -1,   106,    -1,
 
462
     107,    -1,   108,    -1,   111,    -1,   112,    -1,    15,    36,
 
463
       3,     3,     3,     3,     3,    37,    -1,    15,    34,     3,
 
464
       3,     3,     3,     3,    35,    -1,    24,    36,     3,     3,
 
465
       3,     3,     3,     3,     3,    37,    -1,    24,    34,     3,
 
466
       3,     3,     3,     3,     3,     3,    35,    -1,    25,    36,
 
467
       3,     3,    37,    -1,    25,    34,     3,     3,    35,    -1,
 
468
     103,    -1,   102,   103,    -1,   105,    -1,   104,    -1,   110,
 
469
      -1,   109,    -1,    15,    36,     3,     3,     3,     3,     3,
 
470
      37,    -1,    15,    34,     3,     3,     3,     3,     3,    35,
 
471
      -1,    24,    36,     3,     3,     3,     3,     3,     3,     3,
 
472
      37,    -1,    24,    34,     3,     3,     3,     3,     3,     3,
 
473
       3,    35,    -1,    17,    36,     3,     3,     3,     3,     3,
 
474
       3,     6,     6,     3,    37,    -1,    17,    34,     3,     3,
 
475
       3,     3,     3,     3,     6,     6,     3,    35,    -1,    17,
 
476
      34,     3,     3,     3,     3,     6,     6,     3,    35,    -1,
 
477
      17,    34,     3,     3,     3,     3,     6,     3,    35,    -1,
 
478
      17,    34,     3,     3,     3,     6,     3,    35,    -1,    18,
 
479
      36,     3,     3,     3,     3,     3,     3,     3,     6,     6,
 
480
       3,    37,    -1,    18,    34,     3,     3,     3,     3,     3,
 
481
       3,     3,     6,     6,     3,    35,    -1,    18,    34,     3,
 
482
       3,     3,     3,     3,     6,     6,     3,    35,    -1,    18,
 
483
      34,     3,     3,     3,     3,     3,     6,     3,    35,    -1,
 
484
     114,    -1,   113,   114,    -1,    -1,    21,    36,   117,     3,
 
485
      37,    34,   115,   118,    35,    -1,    -1,    21,    34,   117,
 
486
       3,    35,    34,   116,   118,    35,    -1,     3,    -1,     4,
 
487
      -1,   119,    -1,   118,   119,    -1,   120,    -1,   121,    -1,
 
488
      -1,    22,    34,     3,     3,     3,     3,     3,    35,    -1,
 
489
      22,    36,     3,     3,     3,     3,     3,    37,    -1,   123,
 
490
      -1,    -1,    29,    34,    35,    34,   124,    35,    -1,   125,
 
491
      -1,    -1,   126,    -1,   125,   126,    -1,    -1,    30,    34,
 
492
       6,     6,    35,    34,   127,   128,    35,    -1,   129,    -1,
 
493
      -1,   130,    -1,   129,   130,    -1,    31,    34,     6,    35,
 
494
      -1
 
495
};
 
496
 
 
497
/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 
498
static const unsigned short yyrline[] =
 
499
{
 
500
       0,    93,    93,    94,    95,    96,   100,   100,   130,   130,
 
501
     148,   149,   154,   154,   175,   181,   187,   196,   197,   198,
 
502
     199,   202,   210,   223,   235,   248,   254,   260,   266,   269,
 
503
     271,   278,   279,   282,   284,   292,   294,   304,   308,   312,
 
504
     320,   323,   331,   339,   340,   344,   345,   349,   350,   354,
 
505
     355,   356,   358,   358,   365,   369,   370,   371,   372,   373,
 
506
     378,   388,   399,   409,   419,   435,   440,   450,   449,   471,
 
507
     472,   476,   477,   481,   482,   483,   484,   485,   486,   488,
 
508
     493,   494,   495,   498,   497,   519,   527,   535,   546,   554,
 
509
     562,   571,   581,   597,   613,   614,   619,   623,   627,   631,
 
510
     632,   633,   634,   635,   643,   642,   661,   660,   679,   678,
 
511
     699,   697,   720,   718,   736,   737,   741,   742,   743,   744,
 
512
     745,   747,   752,   757,   761,   766,   771,   779,   780,   784,
 
513
     785,   786,   787,   789,   795,   802,   807,   817,   829,   841,
 
514
     853,   869,   889,   903,   916,   927,   940,   941,   946,   945,
 
515
     963,   962,   982,   983,   987,   988,   992,   993,   994,   999,
 
516
    1006,  1012,  1013,  1017,  1022,  1023,  1027,  1028,  1034,  1033,
 
517
    1043,  1044,  1048,  1049,  1053
 
518
};
 
519
#endif
 
520
 
 
521
#if YYDEBUG || YYERROR_VERBOSE
 
522
/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
 
523
   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
 
524
static const char *const yytname[] =
 
525
{
 
526
  "$end", "error", "$undefined", "NUMBER", "CHAR_CONST", "FLOAT", "STRING", 
 
527
  "T_PCB", "T_LAYER", "T_VIA", "T_RAT", "T_LINE", "T_ARC", "T_RECTANGLE", 
 
528
  "T_TEXT", "T_ELEMENTLINE", "T_ELEMENT", "T_PIN", "T_PAD", "T_GRID", 
 
529
  "T_FLAGS", "T_SYMBOL", "T_SYMBOLLINE", "T_CURSOR", "T_ELEMENTARC", 
 
530
  "T_MARK", "T_GROUPS", "T_STYLES", "T_POLYGON", "T_NETLIST", "T_NET", 
 
531
  "T_CONN", "T_THERMAL", "T_DRC", "'('", "')'", "'['", "']'", "$accept", 
 
532
  "parse", "parsepcb", "@1", "parsedata", "@2", "pcbfont", "parsefont", 
 
533
  "@3", "pcbname", "pcbgrid", "pcbgridold", "pcbgridnew", "pcb2grid", 
 
534
  "pcbhigrid", "pcbcursor", "pcbthermal", "pcbdrc", "pcbdrc1", "pcbdrc2", 
 
535
  "pcbflags", "pcbgroups", "pcbstyles", "pcbdata", "pcbdefinitions", 
 
536
  "pcbdefinition", "@4", "via", "via_hi_format", "via_2.0_format", 
 
537
  "via_1.7_format", "via_newformat", "via_oldformat", "rats", "layer", 
 
538
  "@5", "layerdata", "layerdefinitions", "layerdefinition", "@6", 
 
539
  "line_hi_format", "line_1.7_format", "line_oldformat", "arc_hi_format", 
 
540
  "arc_1.7_format", "arc_oldformat", "text_oldformat", "text_newformat", 
 
541
  "text_hi_format", "polygonpoints", "polygonpoint", "element", 
 
542
  "element_oldformat", "@7", "element_1.3.4_format", "@8", 
 
543
  "element_newformat", "@9", "element_1.7_format", "@10", 
 
544
  "element_hi_format", "@11", "elementdefinitions", "elementdefinition", 
 
545
  "relementdefs", "relementdef", "pin_hi_format", "pin_1.7_format", 
 
546
  "pin_1.6.3_format", "pin_newformat", "pin_oldformat", "pad_hi_format", 
 
547
  "pad_1.7_format", "pad_newformat", "pad", "symbols", "symbol", "@12", 
 
548
  "@13", "symbolid", "symboldata", "symboldefinitions", 
 
549
  "symboldefinition", "hiressymbol", "pcbnetlist", "pcbnetdef", "nets", 
 
550
  "netdefs", "net", "@14", "connections", "conndefs", "conn", 0
 
551
};
 
552
#endif
 
553
 
 
554
# ifdef YYPRINT
 
555
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
 
556
   token YYLEX-NUM.  */
 
557
static const unsigned short yytoknum[] =
 
558
{
 
559
       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
 
560
     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
 
561
     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
 
562
     285,   286,   287,   288,    40,    41,    91,    93
 
563
};
 
564
# endif
 
565
 
 
566
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 
567
static const unsigned char yyr1[] =
 
568
{
 
569
       0,    38,    39,    39,    39,    39,    41,    40,    43,    42,
 
570
      44,    44,    46,    45,    47,    47,    47,    48,    48,    48,
 
571
      48,    49,    50,    51,    52,    53,    53,    53,    53,    54,
 
572
      54,    55,    55,    56,    56,    57,    57,    58,    58,    59,
 
573
      59,    60,    60,    60,    60,    61,    61,    62,    62,    63,
 
574
      63,    63,    64,    63,    63,    65,    65,    65,    65,    65,
 
575
      66,    67,    68,    69,    70,    71,    71,    73,    72,    74,
 
576
      74,    75,    75,    76,    76,    76,    76,    76,    76,    76,
 
577
      76,    76,    76,    77,    76,    78,    79,    80,    81,    82,
 
578
      83,    84,    85,    86,    87,    87,    88,    88,    88,    89,
 
579
      89,    89,    89,    89,    91,    90,    93,    92,    95,    94,
 
580
      97,    96,    99,    98,   100,   100,   101,   101,   101,   101,
 
581
     101,   101,   101,   101,   101,   101,   101,   102,   102,   103,
 
582
     103,   103,   103,   103,   103,   103,   103,   104,   105,   106,
 
583
     107,   108,   109,   110,   111,   112,   113,   113,   115,   114,
 
584
     116,   114,   117,   117,   118,   118,   119,   119,   119,   120,
 
585
     121,   122,   122,   123,   124,   124,   125,   125,   127,   126,
 
586
     128,   128,   129,   129,   130
 
587
};
 
588
 
 
589
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 
590
static const unsigned char yyr2[] =
 
591
{
 
592
       0,     2,     1,     1,     1,     1,     0,    12,     0,     2,
 
593
       1,     0,     0,     2,     4,     6,     6,     1,     1,     1,
 
594
       1,     6,     7,     7,     7,     6,     6,     6,     0,     0,
 
595
       4,     1,     1,     0,     6,     0,     7,     4,     0,     4,
 
596
       0,     4,     4,     0,     0,     1,     0,     1,     2,     1,
 
597
       1,     1,     0,     2,     1,     1,     1,     1,     1,     1,
 
598
      11,    11,    10,     9,     8,    10,    10,     0,     9,     1,
 
599
       0,     1,     2,     1,     1,     1,     1,     1,     1,     8,
 
600
       1,     1,     1,     0,     8,    10,    10,     9,    12,    12,
 
601
      11,     8,     9,     9,     1,     2,     4,     4,     0,     1,
 
602
       1,     1,     1,     1,     0,    12,     0,    15,     0,    16,
 
603
       0,    18,     0,    18,     1,     2,     1,     1,     1,     1,
 
604
       1,     8,     8,    10,    10,     5,     5,     1,     2,     1,
 
605
       1,     1,     1,     8,     8,    10,    10,    12,    12,    10,
 
606
       9,     8,    13,    13,    11,    10,     1,     2,     0,     9,
 
607
       0,     9,     1,     1,     1,     2,     1,     1,     0,     8,
 
608
       8,     1,     0,     6,     1,     0,     1,     2,     0,     9,
 
609
       1,     0,     1,     2,     4
 
610
};
 
611
 
 
612
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
 
613
   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
 
614
   means the default is an error.  */
 
615
static const unsigned char yydefact[] =
 
616
{
 
617
       0,     5,     0,     2,     0,     3,     0,     4,     0,     1,
 
618
       0,     0,    54,     0,     0,     0,     9,     0,    47,     0,
 
619
      49,    55,    56,    57,    58,    59,    50,    51,     0,    13,
 
620
     146,     0,     0,     0,    28,    17,    18,    19,    20,     0,
 
621
       0,     0,     0,     0,    48,     0,    53,    99,   100,   101,
 
622
     102,   103,     0,     0,   147,     0,     0,     0,     0,     0,
 
623
      29,     0,     0,     0,     0,     0,     0,     0,   152,   153,
 
624
       0,     0,     0,    14,     0,     0,     0,     0,     0,     0,
 
625
       0,    33,     0,     0,     0,     0,     0,     0,     0,     0,
 
626
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 
627
       0,    38,    31,    32,     0,     0,     0,     0,     0,     0,
 
628
       0,     0,     0,     0,    15,    16,     0,     0,     0,     0,
 
629
       0,     0,     0,     0,    40,    67,     0,     0,     0,     0,
 
630
       0,     0,     0,     0,   150,   148,     0,    21,     0,     0,
 
631
       0,     0,     0,    30,     0,     0,     0,    43,    70,     0,
 
632
       0,     0,     0,     0,     0,     0,     0,     0,     0,   158,
 
633
     158,    22,    23,    24,    25,    26,    27,     0,     0,     0,
 
634
       0,    11,     0,     0,     0,     0,     0,     0,    69,    71,
 
635
      73,    74,    75,    76,    77,    78,    82,    81,    80,     0,
 
636
       0,     0,    64,     0,     0,     0,     0,     0,     0,     0,
 
637
       0,     0,   154,   156,   157,     0,     0,    37,     0,     0,
 
638
       0,     0,    10,     0,     0,     0,     0,     0,     0,     0,
 
639
       0,    68,    72,     0,     0,    63,     0,     0,     0,     0,
 
640
       0,     0,     0,     0,     0,   151,   155,   149,     0,    34,
 
641
      39,     0,     0,   162,     0,     0,     0,     0,     0,     0,
 
642
       0,     0,     0,    62,     0,    66,    65,     0,     0,   104,
 
643
       0,     0,     0,    36,    41,    42,     0,     7,   161,     0,
 
644
       0,     0,     0,     0,     0,     0,     0,    61,    60,     0,
 
645
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 
646
       0,     0,     0,    83,     0,     0,     0,     0,     0,     0,
 
647
       0,     0,   114,   116,   117,   118,   119,   120,     0,     0,
 
648
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 
649
      98,   106,     0,     0,     0,     0,     0,     0,     0,     0,
 
650
       0,     0,   105,   115,     0,     0,     0,   165,     0,     0,
 
651
       0,     0,     0,     0,     0,     0,     0,     0,     0,    94,
 
652
       0,     0,   108,     0,     0,     0,     0,     0,     0,     0,
 
653
       0,     0,     0,     0,     0,     0,   164,   166,     0,     0,
 
654
       0,     0,    79,     0,    91,     0,     0,     0,    84,    95,
 
655
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 
656
       0,     0,   159,   160,     0,   163,   167,     0,    87,     0,
 
657
       0,     0,    92,    93,     0,     0,   107,   110,     0,     0,
 
658
       0,     0,     0,     0,     0,   126,   125,   112,     0,    86,
 
659
      85,     0,     0,    96,    97,     0,   109,     0,     0,     0,
 
660
       0,     0,     0,     0,     0,     0,     0,    90,     0,     0,
 
661
       0,     0,     0,     0,   127,   130,   129,   132,   131,     0,
 
662
       0,     0,     0,     0,     0,     0,     0,     0,    89,    88,
 
663
       0,     0,     0,     0,     0,     0,     0,     0,   111,   128,
 
664
     122,   121,     0,     0,   141,     0,     0,     0,   113,   168,
 
665
       0,     0,     0,     0,     0,     0,     0,     0,   140,     0,
 
666
       0,     0,     0,     0,   171,     0,     0,     0,     0,     0,
 
667
       0,     0,     0,   139,   145,     0,   124,   123,     0,     0,
 
668
     170,   172,     0,     0,     0,     0,     0,     0,     0,     0,
 
669
     144,     0,   169,   173,     0,     0,     0,     0,     0,     0,
 
670
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 
671
       0,   174,   134,   133,     0,     0,     0,     0,     0,     0,
 
672
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 
673
     136,   135,     0,     0,     0,     0,   138,   137,     0,     0,
 
674
     143,   142
 
675
};
 
676
 
 
677
/* YYDEFGOTO[NTERM-NUM]. */
 
678
static const short yydefgoto[] =
 
679
{
 
680
      -1,     2,     3,     4,     5,     6,   211,     7,     8,    11,
 
681
      34,    35,    36,    37,    38,    60,    81,   101,   102,   103,
 
682
     124,   147,   171,    16,    17,    18,    19,    20,    21,    22,
 
683
      23,    24,    25,    26,    27,   148,   177,   178,   179,   320,
 
684
     180,   181,   182,   183,   184,   185,   186,   187,   188,   348,
 
685
     349,    46,    47,   281,    48,   350,    49,   382,    50,   425,
 
686
      51,   434,   301,   302,   443,   444,   445,   446,   303,   304,
 
687
     305,   447,   448,   306,   307,    29,    30,   160,   159,    70,
 
688
     201,   202,   203,   204,   267,   268,   365,   366,   367,   494,
 
689
     509,   510,   511
 
690
};
 
691
 
 
692
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
 
693
   STATE-NUM.  */
 
694
#define YYPACT_NINF -425
 
695
static const short yypact[] =
 
696
{
 
697
      42,  -425,    18,  -425,    -4,  -425,    86,  -425,     5,  -425,
 
698
      96,    27,  -425,    23,    97,   100,  -425,    12,  -425,    59,
 
699
    -425,  -425,  -425,  -425,  -425,  -425,  -425,  -425,   101,     5,
 
700
    -425,    79,    85,   104,    58,  -425,  -425,  -425,  -425,    94,
 
701
     106,   117,   147,   149,  -425,   107,  -425,  -425,  -425,  -425,
 
702
    -425,  -425,   175,   175,  -425,    -1,   154,   139,   134,   111,
 
703
      72,   121,   177,   178,   179,   180,    50,   181,  -425,  -425,
 
704
     182,   183,   184,  -425,   185,   186,   187,   188,   189,   190,
 
705
     158,   162,   161,   194,   195,   196,   197,   198,   199,   200,
 
706
     166,   165,   168,   170,   205,   206,   207,   208,   209,   210,
 
707
     191,   193,  -425,  -425,   192,    66,   211,   213,   214,   212,
 
708
     216,   215,   201,   202,  -425,  -425,     1,   217,   219,   220,
 
709
     143,   203,   221,   204,   218,  -425,    95,   222,   225,   226,
 
710
     227,   105,   228,   231,  -425,  -425,   223,  -425,   224,   229,
 
711
     230,   232,   233,  -425,   236,   238,   234,   235,    48,   112,
 
712
     239,   237,   240,   242,   243,   244,   245,   246,   247,   241,
 
713
     241,  -425,  -425,  -425,  -425,  -425,  -425,   248,   249,   250,
 
714
     115,   252,   119,   120,   251,   124,   253,   254,    48,  -425,
 
715
    -425,  -425,  -425,  -425,  -425,  -425,  -425,  -425,  -425,   255,
 
716
     257,   256,  -425,   258,   264,   268,   271,   272,   259,   273,
 
717
     125,    -8,  -425,  -425,  -425,    -5,    -2,  -425,   260,   274,
 
718
     275,    15,  -425,   276,   279,   280,   283,   285,   287,   289,
 
719
     290,  -425,  -425,   293,   262,  -425,   295,   265,   266,   296,
 
720
     298,   270,   299,   302,   303,  -425,  -425,  -425,   277,  -425,
 
721
    -425,   278,   281,   282,   304,   305,   306,   307,   309,   312,
 
722
     313,   284,   286,  -425,   288,  -425,  -425,   314,   317,  -425,
 
723
     319,   320,   321,  -425,  -425,  -425,   292,  -425,  -425,   324,
 
724
     325,   326,   327,   328,   329,   330,   300,  -425,  -425,   301,
 
725
     332,    88,   334,   335,   336,   308,   337,   338,   339,   341,
 
726
     342,   116,   343,  -425,   315,     2,   128,   316,   318,   129,
 
727
     132,    30,  -425,  -425,  -425,  -425,  -425,  -425,   344,   345,
 
728
     348,   322,   350,   351,   352,   354,   355,   353,   357,   356,
 
729
     133,  -425,   358,   331,   360,   361,   363,   364,   365,   366,
 
730
     367,   368,  -425,  -425,   369,   370,   371,   346,   372,   374,
 
731
     375,   376,   347,   377,   349,   378,   380,   382,   -25,  -425,
 
732
      88,   359,  -425,   383,   384,   385,   386,   387,   388,   389,
 
733
     390,   362,   373,   379,   381,   391,   346,  -425,     3,   392,
 
734
     393,   394,  -425,   395,  -425,   396,   397,   398,  -425,  -425,
 
735
      49,   400,    88,   399,   401,   402,   403,   404,   406,   405,
 
736
     407,   408,  -425,  -425,   411,  -425,  -425,   410,  -425,   409,
 
737
     415,   416,  -425,  -425,   412,   413,  -425,  -425,    53,   417,
 
738
     418,   118,   419,   420,   421,  -425,  -425,  -425,   422,  -425,
 
739
    -425,     4,   424,  -425,  -425,    99,  -425,   426,   428,   429,
 
740
     433,   434,   435,   436,    99,   414,   423,  -425,   425,   136,
 
741
     137,   140,   141,    65,  -425,  -425,  -425,  -425,  -425,   430,
 
742
     427,   122,   431,   437,   438,   445,    75,   439,  -425,  -425,
 
743
     448,   449,   450,   451,   452,   453,   454,   456,  -425,  -425,
 
744
    -425,  -425,   432,   457,  -425,   123,   458,   460,  -425,  -425,
 
745
     465,   466,   467,   468,   469,   471,   472,   473,  -425,   442,
 
746
     443,   476,   446,   447,   455,   477,   479,   480,   482,   484,
 
747
     485,   486,   487,  -425,  -425,   459,  -425,  -425,   461,   462,
 
748
     455,  -425,   488,   489,   490,   493,   495,   496,   497,   498,
 
749
    -425,   499,  -425,  -425,   500,   501,   503,   504,   505,   506,
 
750
     507,   508,   478,   481,   475,   511,   512,   514,   515,   516,
 
751
     517,  -425,  -425,  -425,   518,   519,   520,   523,   524,   525,
 
752
     526,   527,   528,   529,   494,   502,   533,   534,   532,   535,
 
753
    -425,  -425,   509,   510,   537,   539,  -425,  -425,   513,   521,
 
754
    -425,  -425
 
755
};
 
756
 
 
757
/* YYPGOTO[NTERM-NUM].  */
 
758
static const short yypgoto[] =
 
759
{
 
760
    -425,  -425,  -425,  -425,  -425,  -425,  -425,    61,  -425,  -425,
 
761
    -425,  -425,  -425,  -425,  -425,  -425,  -425,  -425,  -425,  -425,
 
762
    -425,  -425,  -425,    22,  -425,   261,  -425,  -425,  -425,  -425,
 
763
    -425,  -425,  -425,  -425,  -425,  -425,  -425,  -425,    56,  -425,
 
764
    -425,  -425,  -425,  -425,  -425,  -425,  -425,  -425,  -425,  -425,
 
765
     -96,  -425,  -425,  -425,  -425,  -425,  -425,  -425,  -425,  -425,
 
766
    -425,  -425,  -342,  -301,  -181,  -424,  -425,  -425,  -425,  -425,
 
767
    -425,  -425,  -425,  -425,  -425,  -425,   492,  -425,  -425,   522,
 
768
     440,  -172,  -425,  -425,  -425,  -425,  -425,  -425,  -112,  -425,
 
769
    -425,  -425,  -255
 
770
};
 
771
 
 
772
/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
 
773
   positive, shift that token.  If negative, reduce the rule which
 
774
   number is the opposite.  If zero, do what YYDEFACT says.
 
775
   If YYTABLE_NINF, syntax error.  */
 
776
#define YYTABLE_NINF -53
 
777
static const short yytable[] =
 
778
{
 
779
     333,   238,    72,    10,   136,   322,   397,   436,   380,   346,
 
780
     378,   347,   -45,    12,   200,   -46,    12,   200,     9,   469,
 
781
      13,    14,    15,    13,    14,    15,    28,   235,   -52,   236,
 
782
     237,   -52,   469,   236,    73,   239,   137,   323,   398,   437,
 
783
     408,   -45,    -8,     1,   -46,   296,    33,   297,   298,    -6,
 
784
      -8,    -8,    -8,    87,   299,   300,    88,    39,    -8,   172,
 
785
     173,   174,   175,   -12,   296,   332,   297,   298,   296,   126,
 
786
     297,   298,   127,   299,   300,    45,   176,   299,   300,   333,
 
787
     439,    59,   440,   441,   406,    55,   -46,    12,   426,   442,
 
788
     439,    56,   440,   441,    13,    14,    15,    61,   149,   442,
 
789
     468,   150,   -52,   296,    80,   297,   298,   333,   155,    62,
 
790
     478,   156,   299,   300,   439,   189,   440,   441,   190,   317,
 
791
      63,   429,   318,   442,   430,   472,   490,    82,   473,   491,
 
792
      31,    40,    32,    41,    42,    52,    43,    53,    57,    77,
 
793
      58,    66,    75,    67,    76,    78,   141,    79,   142,   209,
 
794
      64,   210,    65,   213,   215,   214,   216,    74,   218,   233,
 
795
     219,   234,   324,   328,   325,   329,   330,   346,   331,   347,
 
796
     460,   462,   461,   463,   464,   466,   465,   467,    68,    69,
 
797
      83,    84,    85,    86,    89,    90,    91,    92,    93,    94,
 
798
      95,    96,    97,    98,    99,   100,   104,   105,   106,   107,
 
799
     108,   112,   113,   114,   109,   110,   111,   115,   116,   117,
 
800
     118,   119,   120,   123,   128,   121,   129,   130,   131,   132,
 
801
     138,   133,   139,   140,   144,   151,   125,   122,   152,   153,
 
802
     154,   157,   212,   243,   222,   134,   135,   158,   145,   167,
 
803
     143,   168,   191,   193,   146,   194,   195,   196,   197,   198,
 
804
     199,   206,   379,   456,   396,   523,   208,     0,   161,   162,
 
805
     224,   223,   170,   200,   226,   164,   163,   227,   169,   165,
 
806
     166,   228,   192,   -12,   229,   230,   232,     0,    44,   244,
 
807
     241,   242,   245,   246,   207,   217,   247,   220,   248,   221,
 
808
     249,   225,   250,   251,   231,   240,   252,   253,   254,   257,
 
809
     255,   258,   260,   256,   259,   261,   262,   269,   270,   271,
 
810
     272,   266,   273,   264,   263,   274,   275,   279,   265,   276,
 
811
     280,   277,   282,   283,   284,   278,   285,   286,   287,   288,
 
812
     289,   290,   291,   292,   293,   295,   294,   308,   309,   310,
 
813
     312,   313,   314,   311,   315,   316,   319,   334,   335,   321,
 
814
     326,   336,   327,   338,   339,   340,   337,   341,   342,   343,
 
815
     344,   351,   345,   353,   354,   352,   355,   356,   357,   358,
 
816
     359,   360,   361,   362,   363,   368,   364,   369,   370,   371,
 
817
     373,   375,   372,   376,   374,   377,   383,   384,   385,   386,
 
818
     387,   388,   389,   390,   381,   399,   400,   401,     0,   391,
 
819
     404,   405,   409,     0,   410,   411,   412,   413,   392,   414,
 
820
       0,     0,     0,     0,     0,   394,   393,   418,   421,   422,
 
821
     427,   428,   431,   432,   433,     0,   395,   438,   435,   449,
 
822
     402,   450,     0,   403,   407,   451,   452,   453,   454,   455,
 
823
     415,   476,   417,   475,   416,   419,   420,   423,   477,   457,
 
824
     424,   480,   481,   482,   483,   484,   485,   486,   458,   487,
 
825
     489,   492,   459,   493,   471,   470,   474,   488,   495,   496,
 
826
     497,   498,   499,   479,   500,   501,   502,   503,   504,   505,
 
827
     512,   506,   513,   514,   507,   515,   508,   516,   517,   518,
 
828
     519,   524,   525,   526,   520,   521,   527,   522,   528,   529,
 
829
     530,   531,     0,   533,   534,   532,   535,   536,   537,   538,
 
830
     539,   540,   543,   541,   544,   545,   542,   546,   547,   548,
 
831
     549,    54,     0,   552,   550,   551,   553,   554,   555,   560,
 
832
       0,     0,   556,   557,   558,   559,   562,   563,   564,   561,
 
833
     568,   565,   569,     0,   566,     0,     0,   567,   570,     0,
 
834
       0,     0,     0,     0,     0,     0,     0,     0,   571,     0,
 
835
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 
836
       0,     0,     0,     0,     0,    71,     0,     0,     0,     0,
 
837
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 
838
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 
839
     205
 
840
};
 
841
 
 
842
static const short yycheck[] =
 
843
{
 
844
     301,     3,     3,     7,     3,     3,     3,     3,   350,    34,
 
845
      35,    36,     0,     1,    22,     0,     1,    22,     0,   443,
 
846
       8,     9,    10,     8,     9,    10,    21,    35,    16,   201,
 
847
      35,    16,   456,   205,    35,    37,    35,    35,    35,    35,
 
848
     382,    29,     0,     1,    29,    15,    19,    17,    18,     7,
 
849
       8,     9,    10,     3,    24,    25,     6,    34,    16,    11,
 
850
      12,    13,    14,    21,    15,    35,    17,    18,    15,     3,
 
851
      17,    18,     6,    24,    25,    16,    28,    24,    25,   380,
 
852
      15,    23,    17,    18,    35,     6,     0,     1,    35,    24,
 
853
      15,     6,    17,    18,     8,     9,    10,     3,     3,    24,
 
854
      35,     6,    16,    15,    32,    17,    18,   408,     3,     3,
 
855
      35,     6,    24,    25,    15,     3,    17,    18,     6,     3,
 
856
       3,     3,     6,    24,     6,     3,     3,     6,     6,     6,
 
857
      34,    34,    36,    36,    34,    34,    36,    36,    34,     5,
 
858
      36,    34,     3,    36,     5,    34,     3,    36,     5,    34,
 
859
       3,    36,     3,    34,    34,    36,    36,     3,    34,    34,
 
860
      36,    36,    34,    34,    36,    36,    34,    34,    36,    36,
 
861
      34,    34,    36,    36,    34,    34,    36,    36,     3,     4,
 
862
       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
 
863
       3,     3,     3,     3,    36,    33,    35,     3,     3,     3,
 
864
       3,    35,    37,    35,     6,     6,     6,    37,     3,     3,
 
865
       3,     3,     3,    20,     3,     5,     3,     3,     6,     3,
 
866
       3,     6,     3,     3,     3,     3,    34,    36,     3,     3,
 
867
       3,     3,   171,   211,   178,    34,    34,     6,    34,     3,
 
868
      37,     3,     3,     3,    26,     3,     3,     3,     3,     3,
 
869
       3,     3,   348,   434,   366,   510,     6,    -1,    35,    35,
 
870
       3,     6,    27,    22,     6,    35,    37,     3,    34,    37,
 
871
      37,     3,    35,    21,     3,     3,     3,    -1,    17,     3,
 
872
       6,     6,     3,     3,    35,    34,     3,    34,     3,    35,
 
873
       3,    35,     3,     3,    35,    35,     3,    35,     3,     3,
 
874
      35,     3,     3,    37,    34,     3,     3,     3,     3,     3,
 
875
       3,    29,     3,    35,    37,     3,     3,     3,    37,    35,
 
876
       3,    35,     3,     3,     3,    37,    34,     3,     3,     3,
 
877
       3,     3,     3,     3,    34,     3,    35,     3,     3,     3,
 
878
       3,     3,     3,    35,     3,     3,     3,     3,     3,    34,
 
879
      34,     3,    34,     3,     3,     3,    34,     3,     3,     6,
 
880
       3,     3,     6,     3,     3,    34,     3,     3,     3,     3,
 
881
       3,     3,     3,     3,     3,     3,    30,     3,     3,     3,
 
882
       3,     3,    35,     3,    35,     3,     3,     3,     3,     3,
 
883
       3,     3,     3,     3,    35,     3,     3,     3,    -1,    37,
 
884
       3,     3,     3,    -1,     3,     3,     3,     3,    35,     3,
 
885
      -1,    -1,    -1,    -1,    -1,    34,    37,     6,     3,     3,
 
886
       3,     3,     3,     3,     3,    -1,    35,     3,     6,     3,
 
887
      35,     3,    -1,    37,    34,     6,     3,     3,     3,     3,
 
888
      35,     3,    34,     6,    37,    35,    37,    35,     3,    35,
 
889
      37,     3,     3,     3,     3,     3,     3,     3,    35,     3,
 
890
       3,     3,    37,     3,    37,    35,    35,    35,     3,     3,
 
891
       3,     3,     3,    34,     3,     3,     3,    35,    35,     3,
 
892
       3,    35,     3,     3,    37,     3,    31,     3,     3,     3,
 
893
       3,     3,     3,     3,    35,    34,     3,    35,     3,     3,
 
894
       3,     3,    -1,     3,     3,     6,     3,     3,     3,     3,
 
895
       3,     3,    37,    35,     3,     3,    35,     3,     3,     3,
 
896
       3,    29,    -1,     3,     6,     6,     3,     3,     3,    35,
 
897
      -1,    -1,     6,     6,     6,     6,     3,     3,     6,    37,
 
898
       3,     6,     3,    -1,    35,    -1,    -1,    37,    35,    -1,
 
899
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    -1,
 
900
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 
901
      -1,    -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,    -1,
 
902
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 
903
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 
904
     160
 
905
};
 
906
 
 
907
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
 
908
   symbol of state STATE-NUM.  */
 
909
static const unsigned char yystos[] =
 
910
{
 
911
       0,     1,    39,    40,    41,    42,    43,    45,    46,     0,
 
912
       7,    47,     1,     8,     9,    10,    61,    62,    63,    64,
 
913
      65,    66,    67,    68,    69,    70,    71,    72,    21,   113,
 
914
     114,    34,    36,    19,    48,    49,    50,    51,    52,    34,
 
915
      34,    36,    34,    36,    63,    16,    89,    90,    92,    94,
 
916
      96,    98,    34,    36,   114,     6,     6,    34,    36,    23,
 
917
      53,     3,     3,     3,     3,     3,    34,    36,     3,     4,
 
918
     117,   117,     3,    35,     3,     3,     5,     5,    34,    36,
 
919
      32,    54,     6,     3,     3,     3,     3,     3,     6,     3,
 
920
       3,     3,     3,     3,     3,     3,     3,     3,     3,    36,
 
921
      33,    55,    56,    57,    35,     3,     3,     3,     3,     6,
 
922
       6,     6,    35,    37,    35,    37,     3,     3,     3,     3,
 
923
       3,     5,    36,    20,    58,    34,     3,     6,     3,     3,
 
924
       3,     6,     3,     6,    34,    34,     3,    35,     3,     3,
 
925
       3,     3,     5,    37,     3,    34,    26,    59,    73,     3,
 
926
       6,     3,     3,     3,     3,     3,     6,     3,     6,   116,
 
927
     115,    35,    35,    37,    35,    37,    37,     3,     3,    34,
 
928
      27,    60,    11,    12,    13,    14,    28,    74,    75,    76,
 
929
      78,    79,    80,    81,    82,    83,    84,    85,    86,     3,
 
930
       6,     3,    35,     3,     3,     3,     3,     3,     3,     3,
 
931
      22,   118,   119,   120,   121,   118,     3,    35,     6,    34,
 
932
      36,    44,    45,    34,    36,    34,    36,    34,    34,    36,
 
933
      34,    35,    76,     6,     3,    35,     6,     3,     3,     3,
 
934
       3,    35,     3,    34,    36,    35,   119,    35,     3,    37,
 
935
      35,     6,     6,    61,     3,     3,     3,     3,     3,     3,
 
936
       3,     3,     3,    35,     3,    35,    37,     3,     3,    34,
 
937
       3,     3,     3,    37,    35,    37,    29,   122,   123,     3,
 
938
       3,     3,     3,     3,     3,     3,    35,    35,    37,     3,
 
939
       3,    91,     3,     3,     3,    34,     3,     3,     3,     3,
 
940
       3,     3,     3,    34,    35,     3,    15,    17,    18,    24,
 
941
      25,   100,   101,   106,   107,   108,   111,   112,     3,     3,
 
942
       3,    35,     3,     3,     3,     3,     3,     3,     6,     3,
 
943
      77,    34,     3,    35,    34,    36,    34,    34,    34,    36,
 
944
      34,    36,    35,   101,     3,     3,     3,    34,     3,     3,
 
945
       3,     3,     3,     6,     3,     6,    34,    36,    87,    88,
 
946
      93,     3,    34,     3,     3,     3,     3,     3,     3,     3,
 
947
       3,     3,     3,     3,    30,   124,   125,   126,     3,     3,
 
948
       3,     3,    35,     3,    35,     3,     3,     3,    35,    88,
 
949
     100,    35,    95,     3,     3,     3,     3,     3,     3,     3,
 
950
       3,    37,    35,    37,    34,    35,   126,     3,    35,     3,
 
951
       3,     3,    35,    37,     3,     3,    35,    34,   100,     3,
 
952
       3,     3,     3,     3,     3,    35,    37,    34,     6,    35,
 
953
      37,     3,     3,    35,    37,    97,    35,     3,     3,     3,
 
954
       6,     3,     3,     3,    99,     6,     3,    35,     3,    15,
 
955
      17,    18,    24,   102,   103,   104,   105,   109,   110,     3,
 
956
       3,     6,     3,     3,     3,     3,   102,    35,    35,    37,
 
957
      34,    36,    34,    36,    34,    36,    34,    36,    35,   103,
 
958
      35,    37,     3,     6,    35,     6,     3,     3,    35,    34,
 
959
       3,     3,     3,     3,     3,     3,     3,     3,    35,     3,
 
960
       3,     6,     3,     3,   127,     3,     3,     3,     3,     3,
 
961
       3,     3,     3,    35,    35,     3,    35,    37,    31,   128,
 
962
     129,   130,     3,     3,     3,     3,     3,     3,     3,     3,
 
963
      35,    34,    35,   130,     3,     3,     3,     3,     3,     3,
 
964
       3,     3,     6,     3,     3,     3,     3,     3,     3,     3,
 
965
       3,    35,    35,    37,     3,     3,     3,     3,     3,     3,
 
966
       6,     6,     3,     3,     3,     3,     6,     6,     6,     6,
 
967
      35,    37,     3,     3,     6,     6,    35,    37,     3,     3,
 
968
      35,    37
 
969
};
 
970
 
 
971
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
 
972
# define YYSIZE_T __SIZE_TYPE__
 
973
#endif
 
974
#if ! defined (YYSIZE_T) && defined (size_t)
 
975
# define YYSIZE_T size_t
 
976
#endif
 
977
#if ! defined (YYSIZE_T)
 
978
# if defined (__STDC__) || defined (__cplusplus)
 
979
#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 
980
#  define YYSIZE_T size_t
 
981
# endif
 
982
#endif
 
983
#if ! defined (YYSIZE_T)
 
984
# define YYSIZE_T unsigned int
 
985
#endif
 
986
 
 
987
#define yyerrok         (yyerrstatus = 0)
 
988
#define yyclearin       (yychar = YYEMPTY)
 
989
#define YYEMPTY         (-2)
 
990
#define YYEOF           0
 
991
 
 
992
#define YYACCEPT        goto yyacceptlab
 
993
#define YYABORT         goto yyabortlab
 
994
#define YYERROR         goto yyerrlab1
 
995
 
 
996
/* Like YYERROR except do call yyerror.  This remains here temporarily
 
997
   to ease the transition to the new meaning of YYERROR, for GCC.
 
998
   Once GCC version 2 has supplanted version 1, this can go.  */
 
999
 
 
1000
#define YYFAIL          goto yyerrlab
 
1001
 
 
1002
#define YYRECOVERING()  (!!yyerrstatus)
 
1003
 
 
1004
#define YYBACKUP(Token, Value)                                  \
 
1005
do                                                              \
 
1006
  if (yychar == YYEMPTY && yylen == 1)                          \
 
1007
    {                                                           \
 
1008
      yychar = (Token);                                         \
 
1009
      yylval = (Value);                                         \
 
1010
      yytoken = YYTRANSLATE (yychar);                           \
 
1011
      YYPOPSTACK;                                               \
 
1012
      goto yybackup;                                            \
 
1013
    }                                                           \
 
1014
  else                                                          \
 
1015
    {                                                           \
 
1016
      yyerror ("syntax error: cannot back up");\
 
1017
      YYERROR;                                                  \
 
1018
    }                                                           \
 
1019
while (0)
 
1020
 
 
1021
#define YYTERROR        1
 
1022
#define YYERRCODE       256
 
1023
 
 
1024
/* YYLLOC_DEFAULT -- Compute the default location (before the actions
 
1025
   are run).  */
 
1026
 
 
1027
#ifndef YYLLOC_DEFAULT
 
1028
# define YYLLOC_DEFAULT(Current, Rhs, N)         \
 
1029
  Current.first_line   = Rhs[1].first_line;      \
 
1030
  Current.first_column = Rhs[1].first_column;    \
 
1031
  Current.last_line    = Rhs[N].last_line;       \
 
1032
  Current.last_column  = Rhs[N].last_column;
 
1033
#endif
 
1034
 
 
1035
/* YYLEX -- calling `yylex' with the right arguments.  */
 
1036
 
 
1037
#ifdef YYLEX_PARAM
 
1038
# define YYLEX yylex (YYLEX_PARAM)
 
1039
#else
 
1040
# define YYLEX yylex ()
 
1041
#endif
 
1042
 
 
1043
/* Enable debugging if requested.  */
 
1044
#if YYDEBUG
 
1045
 
 
1046
# ifndef YYFPRINTF
 
1047
#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
 
1048
#  define YYFPRINTF fprintf
 
1049
# endif
 
1050
 
 
1051
# define YYDPRINTF(Args)                        \
 
1052
do {                                            \
 
1053
  if (yydebug)                                  \
 
1054
    YYFPRINTF Args;                             \
 
1055
} while (0)
 
1056
 
 
1057
# define YYDSYMPRINT(Args)                      \
 
1058
do {                                            \
 
1059
  if (yydebug)                                  \
 
1060
    yysymprint Args;                            \
 
1061
} while (0)
 
1062
 
 
1063
# define YYDSYMPRINTF(Title, Token, Value, LocationType)                \
 
1064
do {                                                            \
 
1065
  if (yydebug)                                                  \
 
1066
    {                                                           \
 
1067
      YYFPRINTF (stderr, "%s ", Title);                         \
 
1068
      yysymprint (stderr,                                       \
 
1069
                  Token, Value);        \
 
1070
      YYFPRINTF (stderr, "\n");                                 \
 
1071
    }                                                           \
 
1072
} while (0)
 
1073
 
 
1074
/*------------------------------------------------------------------.
 
1075
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
 
1076
| TOP (cinluded).                                                   |
 
1077
`------------------------------------------------------------------*/
 
1078
 
 
1079
#if defined (__STDC__) || defined (__cplusplus)
 
1080
static void
 
1081
yy_stack_print (short *bottom, short *top)
 
1082
#else
 
1083
static void
 
1084
yy_stack_print (bottom, top)
 
1085
    short *bottom;
 
1086
    short *top;
 
1087
#endif
 
1088
{
 
1089
  YYFPRINTF (stderr, "Stack now");
 
1090
  for (/* Nothing. */; bottom <= top; ++bottom)
 
1091
    YYFPRINTF (stderr, " %d", *bottom);
 
1092
  YYFPRINTF (stderr, "\n");
 
1093
}
 
1094
 
 
1095
# define YY_STACK_PRINT(Bottom, Top)                            \
 
1096
do {                                                            \
 
1097
  if (yydebug)                                                  \
 
1098
    yy_stack_print ((Bottom), (Top));                           \
 
1099
} while (0)
 
1100
 
 
1101
 
 
1102
/*------------------------------------------------.
 
1103
| Report that the YYRULE is going to be reduced.  |
 
1104
`------------------------------------------------*/
 
1105
 
 
1106
#if defined (__STDC__) || defined (__cplusplus)
 
1107
static void
 
1108
yy_reduce_print (int yyrule)
 
1109
#else
 
1110
static void
 
1111
yy_reduce_print (yyrule)
 
1112
    int yyrule;
 
1113
#endif
 
1114
{
 
1115
  int yyi;
 
1116
  unsigned int yylineno = yyrline[yyrule];
 
1117
  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
 
1118
             yyrule - 1, yylineno);
 
1119
  /* Print the symbols being reduced, and their result.  */
 
1120
  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
 
1121
    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
 
1122
  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
 
1123
}
 
1124
 
 
1125
# define YY_REDUCE_PRINT(Rule)          \
 
1126
do {                                    \
 
1127
  if (yydebug)                          \
 
1128
    yy_reduce_print (Rule);             \
 
1129
} while (0)
 
1130
 
 
1131
/* Nonzero means print parse trace.  It is left uninitialized so that
 
1132
   multiple parsers can coexist.  */
 
1133
int yydebug;
 
1134
#else /* !YYDEBUG */
 
1135
# define YYDPRINTF(Args)
 
1136
# define YYDSYMPRINT(Args)
 
1137
# define YYDSYMPRINTF(Title, Token, Value, LocationType)
 
1138
# define YY_STACK_PRINT(Bottom, Top)
 
1139
# define YY_REDUCE_PRINT(Rule)
 
1140
#endif /* !YYDEBUG */
 
1141
 
 
1142
 
 
1143
/* YYINITDEPTH -- initial size of the parser's stacks.  */
 
1144
#ifndef YYINITDEPTH
 
1145
# define YYINITDEPTH 200
 
1146
#endif
 
1147
 
 
1148
/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
 
1149
   if the built-in stack extension method is used).
 
1150
 
 
1151
   Do not make this value too large; the results are undefined if
 
1152
   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
 
1153
   evaluated with infinite-precision integer arithmetic.  */
 
1154
 
 
1155
#if YYMAXDEPTH == 0
 
1156
# undef YYMAXDEPTH
 
1157
#endif
 
1158
 
 
1159
#ifndef YYMAXDEPTH
 
1160
# define YYMAXDEPTH 10000
 
1161
#endif
 
1162
 
 
1163
 
 
1164
 
 
1165
#if YYERROR_VERBOSE
 
1166
 
 
1167
# ifndef yystrlen
 
1168
#  if defined (__GLIBC__) && defined (_STRING_H)
 
1169
#   define yystrlen strlen
 
1170
#  else
 
1171
/* Return the length of YYSTR.  */
 
1172
static YYSIZE_T
 
1173
#   if defined (__STDC__) || defined (__cplusplus)
 
1174
yystrlen (const char *yystr)
 
1175
#   else
 
1176
yystrlen (yystr)
 
1177
     const char *yystr;
 
1178
#   endif
 
1179
{
 
1180
  register const char *yys = yystr;
 
1181
 
 
1182
  while (*yys++ != '\0')
 
1183
    continue;
 
1184
 
 
1185
  return yys - yystr - 1;
 
1186
}
 
1187
#  endif
 
1188
# endif
 
1189
 
 
1190
# ifndef yystpcpy
 
1191
#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
 
1192
#   define yystpcpy stpcpy
 
1193
#  else
 
1194
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
 
1195
   YYDEST.  */
 
1196
static char *
 
1197
#   if defined (__STDC__) || defined (__cplusplus)
 
1198
yystpcpy (char *yydest, const char *yysrc)
 
1199
#   else
 
1200
yystpcpy (yydest, yysrc)
 
1201
     char *yydest;
 
1202
     const char *yysrc;
 
1203
#   endif
 
1204
{
 
1205
  register char *yyd = yydest;
 
1206
  register const char *yys = yysrc;
 
1207
 
 
1208
  while ((*yyd++ = *yys++) != '\0')
 
1209
    continue;
 
1210
 
 
1211
  return yyd - 1;
 
1212
}
 
1213
#  endif
 
1214
# endif
 
1215
 
 
1216
#endif /* !YYERROR_VERBOSE */
 
1217
 
 
1218
 
 
1219
 
 
1220
#if YYDEBUG
 
1221
/*--------------------------------.
 
1222
| Print this symbol on YYOUTPUT.  |
 
1223
`--------------------------------*/
 
1224
 
 
1225
#if defined (__STDC__) || defined (__cplusplus)
 
1226
static void
 
1227
yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
 
1228
#else
 
1229
static void
 
1230
yysymprint (yyoutput, yytype, yyvaluep)
 
1231
    FILE *yyoutput;
 
1232
    int yytype;
 
1233
    YYSTYPE *yyvaluep;
 
1234
#endif
 
1235
{
 
1236
  /* Pacify ``unused variable'' warnings.  */
 
1237
  (void) yyvaluep;
 
1238
 
 
1239
  if (yytype < YYNTOKENS)
 
1240
    {
 
1241
      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
 
1242
# ifdef YYPRINT
 
1243
      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
 
1244
# endif
 
1245
    }
 
1246
  else
 
1247
    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
 
1248
 
 
1249
  switch (yytype)
 
1250
    {
 
1251
      default:
 
1252
        break;
 
1253
    }
 
1254
  YYFPRINTF (yyoutput, ")");
 
1255
}
 
1256
 
 
1257
#endif /* ! YYDEBUG */
 
1258
/*-----------------------------------------------.
 
1259
| Release the memory associated to this symbol.  |
 
1260
`-----------------------------------------------*/
 
1261
 
 
1262
#if defined (__STDC__) || defined (__cplusplus)
 
1263
static void
 
1264
yydestruct (int yytype, YYSTYPE *yyvaluep)
 
1265
#else
 
1266
static void
 
1267
yydestruct (yytype, yyvaluep)
 
1268
    int yytype;
 
1269
    YYSTYPE *yyvaluep;
 
1270
#endif
 
1271
{
 
1272
  /* Pacify ``unused variable'' warnings.  */
 
1273
  (void) yyvaluep;
 
1274
 
 
1275
  switch (yytype)
 
1276
    {
 
1277
 
 
1278
      default:
 
1279
        break;
 
1280
    }
 
1281
}
 
1282
 
 
1283
 
 
1284
/* Prevent warnings from -Wmissing-prototypes.  */
 
1285
 
 
1286
#ifdef YYPARSE_PARAM
 
1287
# if defined (__STDC__) || defined (__cplusplus)
 
1288
int yyparse (void *YYPARSE_PARAM);
 
1289
# else
 
1290
int yyparse ();
 
1291
# endif
 
1292
#else /* ! YYPARSE_PARAM */
 
1293
#if defined (__STDC__) || defined (__cplusplus)
 
1294
int yyparse (void);
 
1295
#else
 
1296
int yyparse ();
 
1297
#endif
 
1298
#endif /* ! YYPARSE_PARAM */
 
1299
 
 
1300
 
 
1301
 
 
1302
/* The lookahead symbol.  */
 
1303
int yychar;
 
1304
 
 
1305
/* The semantic value of the lookahead symbol.  */
 
1306
YYSTYPE yylval;
 
1307
 
 
1308
/* Number of syntax errors so far.  */
 
1309
int yynerrs;
 
1310
 
 
1311
 
 
1312
 
 
1313
/*----------.
 
1314
| yyparse.  |
 
1315
`----------*/
 
1316
 
 
1317
#ifdef YYPARSE_PARAM
 
1318
# if defined (__STDC__) || defined (__cplusplus)
 
1319
int yyparse (void *YYPARSE_PARAM)
 
1320
# else
 
1321
int yyparse (YYPARSE_PARAM)
 
1322
  void *YYPARSE_PARAM;
 
1323
# endif
 
1324
#else /* ! YYPARSE_PARAM */
 
1325
#if defined (__STDC__) || defined (__cplusplus)
 
1326
int
 
1327
yyparse (void)
 
1328
#else
 
1329
int
 
1330
yyparse ()
 
1331
 
 
1332
#endif
 
1333
#endif
 
1334
{
 
1335
  
 
1336
  register int yystate;
 
1337
  register int yyn;
 
1338
  int yyresult;
 
1339
  /* Number of tokens to shift before error messages enabled.  */
 
1340
  int yyerrstatus;
 
1341
  /* Lookahead token as an internal (translated) token number.  */
 
1342
  int yytoken = 0;
 
1343
 
 
1344
  /* Three stacks and their tools:
 
1345
     `yyss': related to states,
 
1346
     `yyvs': related to semantic values,
 
1347
     `yyls': related to locations.
 
1348
 
 
1349
     Refer to the stacks thru separate pointers, to allow yyoverflow
 
1350
     to reallocate them elsewhere.  */
 
1351
 
 
1352
  /* The state stack.  */
 
1353
  short yyssa[YYINITDEPTH];
 
1354
  short *yyss = yyssa;
 
1355
  register short *yyssp;
 
1356
 
 
1357
  /* The semantic value stack.  */
 
1358
  YYSTYPE yyvsa[YYINITDEPTH];
 
1359
  YYSTYPE *yyvs = yyvsa;
 
1360
  register YYSTYPE *yyvsp;
 
1361
 
 
1362
 
 
1363
 
 
1364
#define YYPOPSTACK   (yyvsp--, yyssp--)
 
1365
 
 
1366
  YYSIZE_T yystacksize = YYINITDEPTH;
 
1367
 
 
1368
  /* The variables used to return semantic value and location from the
 
1369
     action routines.  */
 
1370
  YYSTYPE yyval;
 
1371
 
 
1372
 
 
1373
  /* When reducing, the number of symbols on the RHS of the reduced
 
1374
     rule.  */
 
1375
  int yylen;
 
1376
 
 
1377
  YYDPRINTF ((stderr, "Starting parse\n"));
 
1378
 
 
1379
  yystate = 0;
 
1380
  yyerrstatus = 0;
 
1381
  yynerrs = 0;
 
1382
  yychar = YYEMPTY;             /* Cause a token to be read.  */
 
1383
 
 
1384
  /* Initialize stack pointers.
 
1385
     Waste one element of value and location stack
 
1386
     so that they stay on the same level as the state stack.
 
1387
     The wasted elements are never initialized.  */
 
1388
 
 
1389
  yyssp = yyss;
 
1390
  yyvsp = yyvs;
 
1391
 
 
1392
  goto yysetstate;
 
1393
 
 
1394
/*------------------------------------------------------------.
 
1395
| yynewstate -- Push a new state, which is found in yystate.  |
 
1396
`------------------------------------------------------------*/
 
1397
 yynewstate:
 
1398
  /* In all cases, when you get here, the value and location stacks
 
1399
     have just been pushed. so pushing a state here evens the stacks.
 
1400
     */
 
1401
  yyssp++;
 
1402
 
 
1403
 yysetstate:
 
1404
  *yyssp = yystate;
 
1405
 
 
1406
  if (yyss + yystacksize - 1 <= yyssp)
 
1407
    {
 
1408
      /* Get the current used size of the three stacks, in elements.  */
 
1409
      YYSIZE_T yysize = yyssp - yyss + 1;
 
1410
 
 
1411
#ifdef yyoverflow
 
1412
      {
 
1413
        /* Give user a chance to reallocate the stack. Use copies of
 
1414
           these so that the &'s don't force the real ones into
 
1415
           memory.  */
 
1416
        YYSTYPE *yyvs1 = yyvs;
 
1417
        short *yyss1 = yyss;
 
1418
 
 
1419
 
 
1420
        /* Each stack pointer address is followed by the size of the
 
1421
           data in use in that stack, in bytes.  This used to be a
 
1422
           conditional around just the two extra args, but that might
 
1423
           be undefined if yyoverflow is a macro.  */
 
1424
        yyoverflow ("parser stack overflow",
 
1425
                    &yyss1, yysize * sizeof (*yyssp),
 
1426
                    &yyvs1, yysize * sizeof (*yyvsp),
 
1427
 
 
1428
                    &yystacksize);
 
1429
 
 
1430
        yyss = yyss1;
 
1431
        yyvs = yyvs1;
 
1432
      }
 
1433
#else /* no yyoverflow */
 
1434
# ifndef YYSTACK_RELOCATE
 
1435
      goto yyoverflowlab;
 
1436
# else
 
1437
      /* Extend the stack our own way.  */
 
1438
      if (YYMAXDEPTH <= yystacksize)
 
1439
        goto yyoverflowlab;
 
1440
      yystacksize *= 2;
 
1441
      if (YYMAXDEPTH < yystacksize)
 
1442
        yystacksize = YYMAXDEPTH;
 
1443
 
 
1444
      {
 
1445
        short *yyss1 = yyss;
 
1446
        union yyalloc *yyptr =
 
1447
          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
 
1448
        if (! yyptr)
 
1449
          goto yyoverflowlab;
 
1450
        YYSTACK_RELOCATE (yyss);
 
1451
        YYSTACK_RELOCATE (yyvs);
 
1452
 
 
1453
#  undef YYSTACK_RELOCATE
 
1454
        if (yyss1 != yyssa)
 
1455
          YYSTACK_FREE (yyss1);
 
1456
      }
 
1457
# endif
 
1458
#endif /* no yyoverflow */
 
1459
 
 
1460
      yyssp = yyss + yysize - 1;
 
1461
      yyvsp = yyvs + yysize - 1;
 
1462
 
 
1463
 
 
1464
      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
 
1465
                  (unsigned long int) yystacksize));
 
1466
 
 
1467
      if (yyss + yystacksize - 1 <= yyssp)
 
1468
        YYABORT;
 
1469
    }
 
1470
 
 
1471
  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
 
1472
 
 
1473
  goto yybackup;
 
1474
 
 
1475
/*-----------.
 
1476
| yybackup.  |
 
1477
`-----------*/
 
1478
yybackup:
 
1479
 
 
1480
/* Do appropriate processing given the current state.  */
 
1481
/* Read a lookahead token if we need one and don't already have one.  */
 
1482
/* yyresume: */
 
1483
 
 
1484
  /* First try to decide what to do without reference to lookahead token.  */
 
1485
 
 
1486
  yyn = yypact[yystate];
 
1487
  if (yyn == YYPACT_NINF)
 
1488
    goto yydefault;
 
1489
 
 
1490
  /* Not known => get a lookahead token if don't already have one.  */
 
1491
 
 
1492
  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
 
1493
  if (yychar == YYEMPTY)
 
1494
    {
 
1495
      YYDPRINTF ((stderr, "Reading a token: "));
 
1496
      yychar = YYLEX;
 
1497
    }
 
1498
 
 
1499
  if (yychar <= YYEOF)
 
1500
    {
 
1501
      yychar = yytoken = YYEOF;
 
1502
      YYDPRINTF ((stderr, "Now at end of input.\n"));
 
1503
    }
 
1504
  else
 
1505
    {
 
1506
      yytoken = YYTRANSLATE (yychar);
 
1507
      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
 
1508
    }
 
1509
 
 
1510
  /* If the proper action on seeing token YYTOKEN is to reduce or to
 
1511
     detect an error, take that action.  */
 
1512
  yyn += yytoken;
 
1513
  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
 
1514
    goto yydefault;
 
1515
  yyn = yytable[yyn];
 
1516
  if (yyn <= 0)
 
1517
    {
 
1518
      if (yyn == 0 || yyn == YYTABLE_NINF)
 
1519
        goto yyerrlab;
 
1520
      yyn = -yyn;
 
1521
      goto yyreduce;
 
1522
    }
 
1523
 
 
1524
  if (yyn == YYFINAL)
 
1525
    YYACCEPT;
 
1526
 
 
1527
  /* Shift the lookahead token.  */
 
1528
  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
 
1529
 
 
1530
  /* Discard the token being shifted unless it is eof.  */
 
1531
  if (yychar != YYEOF)
 
1532
    yychar = YYEMPTY;
 
1533
 
 
1534
  *++yyvsp = yylval;
 
1535
 
 
1536
 
 
1537
  /* Count tokens shifted since error; after three, turn off error
 
1538
     status.  */
 
1539
  if (yyerrstatus)
 
1540
    yyerrstatus--;
 
1541
 
 
1542
  yystate = yyn;
 
1543
  goto yynewstate;
 
1544
 
 
1545
 
 
1546
/*-----------------------------------------------------------.
 
1547
| yydefault -- do the default action for the current state.  |
 
1548
`-----------------------------------------------------------*/
 
1549
yydefault:
 
1550
  yyn = yydefact[yystate];
 
1551
  if (yyn == 0)
 
1552
    goto yyerrlab;
 
1553
  goto yyreduce;
 
1554
 
 
1555
 
 
1556
/*-----------------------------.
 
1557
| yyreduce -- Do a reduction.  |
 
1558
`-----------------------------*/
 
1559
yyreduce:
 
1560
  /* yyn is the number of a rule to reduce with.  */
 
1561
  yylen = yyr2[yyn];
 
1562
 
 
1563
  /* If YYLEN is nonzero, implement the default value of the action:
 
1564
     `$$ = $1'.
 
1565
 
 
1566
     Otherwise, the following line sets YYVAL to garbage.
 
1567
     This behavior is undocumented and Bison
 
1568
     users should not rely upon it.  Assigning to YYVAL
 
1569
     unconditionally makes the parser a bit smaller, and it avoids a
 
1570
     GCC warning that YYVAL may be used uninitialized.  */
 
1571
  yyval = yyvsp[1-yylen];
 
1572
 
 
1573
 
 
1574
  YY_REDUCE_PRINT (yyn);
 
1575
  switch (yyn)
 
1576
    {
 
1577
        case 5:
 
1578
#line 96 "parse_y.y"
 
1579
    { YYABORT; }
 
1580
    break;
 
1581
 
 
1582
  case 6:
 
1583
#line 100 "parse_y.y"
 
1584
    {
 
1585
                                        /* reset flags for 'used layers';
 
1586
                                         * init font and data pointers
 
1587
                                         */
 
1588
                                int     i;
 
1589
 
 
1590
                                if (!yyPCB)
 
1591
                                {
 
1592
                                        Message("illegal fileformat\n");
 
1593
                                        YYABORT;
 
1594
                                }
 
1595
                                for (i = 0; i < MAX_LAYER + 2; i++)
 
1596
                                        LayerFlag[i] = False;
 
1597
                                yyFont = &yyPCB->Font;
 
1598
                                yyData = yyPCB->Data;
 
1599
                        }
 
1600
    break;
 
1601
 
 
1602
  case 8:
 
1603
#line 130 "parse_y.y"
 
1604
    {
 
1605
                                        /* reset flags for 'used layers';
 
1606
                                         * init font and data pointers
 
1607
                                         */
 
1608
                                int     i;
 
1609
 
 
1610
                                if (!yyData || !yyFont)
 
1611
                                {
 
1612
                                        Message("illegal fileformat\n");
 
1613
                                        YYABORT;
 
1614
                                }
 
1615
                                for (i = 0; i < MAX_LAYER + 2; i++)
 
1616
                                        LayerFlag[i] = False;
 
1617
                        }
 
1618
    break;
 
1619
 
 
1620
  case 12:
 
1621
#line 154 "parse_y.y"
 
1622
    {
 
1623
                                        /* mark all symbols invalid */
 
1624
                                int     i;
 
1625
 
 
1626
                                if (!yyFont)
 
1627
                                {
 
1628
                                        Message("illegal fileformat\n");
 
1629
                                        YYABORT;
 
1630
                                }
 
1631
                                yyFont->Valid = False;
 
1632
                                for (i = 0; i <= MAX_FONTPOSITION; i++)
 
1633
                                        yyFont->Symbol[i].Valid = False;
 
1634
                        }
 
1635
    break;
 
1636
 
 
1637
  case 13:
 
1638
#line 168 "parse_y.y"
 
1639
    {
 
1640
                                yyFont->Valid = True;
 
1641
                                SetFontInfo(yyFont);
 
1642
                        }
 
1643
    break;
 
1644
 
 
1645
  case 14:
 
1646
#line 176 "parse_y.y"
 
1647
    {
 
1648
                                yyPCB->Name = yyvsp[-1].string;
 
1649
                                yyPCB->MaxWidth = MAX_COORD;
 
1650
                                yyPCB->MaxHeight = MAX_COORD;
 
1651
                        }
 
1652
    break;
 
1653
 
 
1654
  case 15:
 
1655
#line 182 "parse_y.y"
 
1656
    {
 
1657
                                yyPCB->Name = yyvsp[-3].string;
 
1658
                                yyPCB->MaxWidth = yyvsp[-2].number*100;
 
1659
                                yyPCB->MaxHeight = yyvsp[-1].number*100;
 
1660
                        }
 
1661
    break;
 
1662
 
 
1663
  case 16:
 
1664
#line 188 "parse_y.y"
 
1665
    {
 
1666
                                yyPCB->Name = yyvsp[-3].string;
 
1667
                                yyPCB->MaxWidth = yyvsp[-2].number;
 
1668
                                yyPCB->MaxHeight = yyvsp[-1].number;
 
1669
                        }
 
1670
    break;
 
1671
 
 
1672
  case 21:
 
1673
#line 203 "parse_y.y"
 
1674
    {
 
1675
                                yyPCB->Grid = yyvsp[-3].number*100;
 
1676
                                yyPCB->GridOffsetX = yyvsp[-2].number*100;
 
1677
                                yyPCB->GridOffsetY = yyvsp[-1].number*100;
 
1678
                        }
 
1679
    break;
 
1680
 
 
1681
  case 22:
 
1682
#line 211 "parse_y.y"
 
1683
    {
 
1684
                                yyPCB->Grid = yyvsp[-4].number*100;
 
1685
                                yyPCB->GridOffsetX = yyvsp[-3].number*100;
 
1686
                                yyPCB->GridOffsetY = yyvsp[-2].number*100;
 
1687
                                if (yyvsp[-1].number)
 
1688
                                        Settings.DrawGrid = True;
 
1689
                                else
 
1690
                                        Settings.DrawGrid = False;
 
1691
                        }
 
1692
    break;
 
1693
 
 
1694
  case 23:
 
1695
#line 224 "parse_y.y"
 
1696
    {
 
1697
                                yyPCB->Grid = yyvsp[-4].floating*100;
 
1698
                                yyPCB->GridOffsetX = yyvsp[-3].number*100;
 
1699
                                yyPCB->GridOffsetY = yyvsp[-2].number*100;
 
1700
                                if (yyvsp[-1].number)
 
1701
                                        Settings.DrawGrid = True;
 
1702
                                else
 
1703
                                        Settings.DrawGrid = False;
 
1704
                        }
 
1705
    break;
 
1706
 
 
1707
  case 24:
 
1708
#line 236 "parse_y.y"
 
1709
    {
 
1710
                                yyPCB->Grid = yyvsp[-4].floating;
 
1711
                                yyPCB->GridOffsetX = yyvsp[-3].number;
 
1712
                                yyPCB->GridOffsetY = yyvsp[-2].number;
 
1713
                                if (yyvsp[-1].number)
 
1714
                                        Settings.DrawGrid = True;
 
1715
                                else
 
1716
                                        Settings.DrawGrid = False;
 
1717
                        }
 
1718
    break;
 
1719
 
 
1720
  case 25:
 
1721
#line 249 "parse_y.y"
 
1722
    {
 
1723
                                yyPCB->CursorX = yyvsp[-3].number*100;
 
1724
                                yyPCB->CursorY = yyvsp[-2].number*100;
 
1725
                                yyPCB->Zoom = yyvsp[-1].number*2;
 
1726
                        }
 
1727
    break;
 
1728
 
 
1729
  case 26:
 
1730
#line 255 "parse_y.y"
 
1731
    {
 
1732
                                yyPCB->CursorX = yyvsp[-3].number;
 
1733
                                yyPCB->CursorY = yyvsp[-2].number;
 
1734
                                yyPCB->Zoom = yyvsp[-1].number;
 
1735
                        }
 
1736
    break;
 
1737
 
 
1738
  case 27:
 
1739
#line 261 "parse_y.y"
 
1740
    {
 
1741
                                yyPCB->CursorX = yyvsp[-3].number;
 
1742
                                yyPCB->CursorY = yyvsp[-2].number;
 
1743
                                yyPCB->Zoom = yyvsp[-1].floating;
 
1744
                        }
 
1745
    break;
 
1746
 
 
1747
  case 30:
 
1748
#line 272 "parse_y.y"
 
1749
    {
 
1750
                                yyPCB->ThermScale = yyvsp[-1].floating;
 
1751
                        }
 
1752
    break;
 
1753
 
 
1754
  case 34:
 
1755
#line 285 "parse_y.y"
 
1756
    {
 
1757
                                Settings.Bloat = yyvsp[-3].number;
 
1758
                                Settings.Shrink = yyvsp[-2].number;
 
1759
                                Settings.minWid = yyvsp[-1].number;
 
1760
                        }
 
1761
    break;
 
1762
 
 
1763
  case 36:
 
1764
#line 295 "parse_y.y"
 
1765
    {
 
1766
                                Settings.Bloat = yyvsp[-4].number;
 
1767
                                Settings.Shrink = yyvsp[-3].number;
 
1768
                                Settings.minWid = yyvsp[-2].number;
 
1769
                                Settings.minSlk = yyvsp[-1].number;
 
1770
                        }
 
1771
    break;
 
1772
 
 
1773
  case 37:
 
1774
#line 305 "parse_y.y"
 
1775
    {
 
1776
                                yyPCB->Flags = yyvsp[-1].number & PCB_FLAGS;
 
1777
                        }
 
1778
    break;
 
1779
 
 
1780
  case 39:
 
1781
#line 313 "parse_y.y"
 
1782
    {
 
1783
                                if (ParseGroupString(yyvsp[-1].string, &yyPCB->LayerGroups))
 
1784
                                {
 
1785
                                        Message("illegal layer-group string\n");
 
1786
                                        YYABORT;
 
1787
                                }
 
1788
                        }
 
1789
    break;
 
1790
 
 
1791
  case 41:
 
1792
#line 324 "parse_y.y"
 
1793
    {
 
1794
                                if (ParseRouteString(yyvsp[-1].string, &yyPCB->RouteStyle[0], 100))
 
1795
                                {
 
1796
                                        Message("illegal route-style string\n");
 
1797
                                        YYABORT;
 
1798
                                }
 
1799
                        }
 
1800
    break;
 
1801
 
 
1802
  case 42:
 
1803
#line 332 "parse_y.y"
 
1804
    {
 
1805
                                if (ParseRouteString(yyvsp[-1].string, &yyPCB->RouteStyle[0], 1))
 
1806
                                {
 
1807
                                        Message("illegal route-style string\n");
 
1808
                                        YYABORT;
 
1809
                                }
 
1810
                        }
 
1811
    break;
 
1812
 
 
1813
  case 52:
 
1814
#line 358 "parse_y.y"
 
1815
    {
 
1816
                                        /* clear pointer to force memory allocation by 
 
1817
                                         * the appropriate subroutine
 
1818
                                         */
 
1819
                                yyElement = NULL;
 
1820
                        }
 
1821
    break;
 
1822
 
 
1823
  case 54:
 
1824
#line 365 "parse_y.y"
 
1825
    { YYABORT; }
 
1826
    break;
 
1827
 
 
1828
  case 60:
 
1829
#line 379 "parse_y.y"
 
1830
    {
 
1831
                                CreateNewVia(yyData, yyvsp[-8].number, yyvsp[-7].number, yyvsp[-6].number, yyvsp[-5].number, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].string,
 
1832
                                        (yyvsp[-1].number & OBJ_FLAGS) | VIAFLAG);
 
1833
                                SaveFree(yyvsp[-2].string);
 
1834
                        }
 
1835
    break;
 
1836
 
 
1837
  case 61:
 
1838
#line 389 "parse_y.y"
 
1839
    {
 
1840
                                CreateNewVia(yyData, yyvsp[-8].number*100, yyvsp[-7].number*100, yyvsp[-6].number*100, yyvsp[-5].number*100, yyvsp[-4].number*100, yyvsp[-3].number*100, yyvsp[-2].string,
 
1841
                                        (yyvsp[-1].number & OBJ_FLAGS) | VIAFLAG);
 
1842
                                SaveFree(yyvsp[-2].string);
 
1843
                        }
 
1844
    break;
 
1845
 
 
1846
  case 62:
 
1847
#line 400 "parse_y.y"
 
1848
    {
 
1849
                                CreateNewVia(yyData, yyvsp[-7].number*100, yyvsp[-6].number*100, yyvsp[-5].number*100, yyvsp[-4].number*100, (yyvsp[-5].number + yyvsp[-4].number)*100, yyvsp[-3].number*100, yyvsp[-2].string,
 
1850
                                        (yyvsp[-1].number & OBJ_FLAGS) | VIAFLAG);
 
1851
                                SaveFree(yyvsp[-2].string);
 
1852
                        }
 
1853
    break;
 
1854
 
 
1855
  case 63:
 
1856
#line 410 "parse_y.y"
 
1857
    {
 
1858
                                CreateNewVia(yyData, yyvsp[-6].number*100, yyvsp[-5].number*100, yyvsp[-4].number*100, 200*GROUNDPLANEFRAME,
 
1859
                                        (yyvsp[-4].number + 2*MASKFRAME)*100,  yyvsp[-3].number*100, yyvsp[-2].string, (yyvsp[-1].number & OBJ_FLAGS) | VIAFLAG);
 
1860
                                SaveFree(yyvsp[-2].string);
 
1861
                        }
 
1862
    break;
 
1863
 
 
1864
  case 64:
 
1865
#line 420 "parse_y.y"
 
1866
    {
 
1867
                                BDimension      hole = (yyvsp[-3].number *DEFAULT_DRILLINGHOLE);
 
1868
 
 
1869
                                        /* make sure that there's enough copper left */
 
1870
                                if (yyvsp[-3].number -hole < MIN_PINORVIACOPPER && 
 
1871
                                        yyvsp[-3].number > MIN_PINORVIACOPPER)
 
1872
                                        hole = yyvsp[-3].number -MIN_PINORVIACOPPER;
 
1873
 
 
1874
                                CreateNewVia(yyData, yyvsp[-5].number*100, yyvsp[-4].number*100, yyvsp[-3].number*100, 200*GROUNDPLANEFRAME,
 
1875
                                        (yyvsp[-3].number + 2*MASKFRAME)*100, hole, yyvsp[-2].string, (yyvsp[-1].number & OBJ_FLAGS) | VIAFLAG);
 
1876
                                SaveFree(yyvsp[-2].string);
 
1877
                        }
 
1878
    break;
 
1879
 
 
1880
  case 65:
 
1881
#line 436 "parse_y.y"
 
1882
    {
 
1883
                                CreateNewRat(yyData, yyvsp[-7].number, yyvsp[-6].number, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-5].number, yyvsp[-2].number,
 
1884
                                        Settings.RatThickness, (yyvsp[-1].number & OBJ_FLAGS));
 
1885
                        }
 
1886
    break;
 
1887
 
 
1888
  case 66:
 
1889
#line 441 "parse_y.y"
 
1890
    {
 
1891
                                CreateNewRat(yyData, yyvsp[-7].number*100, yyvsp[-6].number*100, yyvsp[-4].number*100, yyvsp[-3].number*100, yyvsp[-5].number, yyvsp[-2].number,
 
1892
                                        Settings.RatThickness, (yyvsp[-1].number & OBJ_FLAGS));
 
1893
                        }
 
1894
    break;
 
1895
 
 
1896
  case 67:
 
1897
#line 450 "parse_y.y"
 
1898
    {
 
1899
                                if (yyvsp[-3].number <= 0 || yyvsp[-3].number > MAX_LAYER + 2)
 
1900
                                {
 
1901
                                        yyerror("Layernumber out of range");
 
1902
                                        YYABORT;
 
1903
                                }
 
1904
                                if (LayerFlag[yyvsp[-3].number-1])
 
1905
                                {
 
1906
                                        yyerror("Layernumber used twice");
 
1907
                                        YYABORT;
 
1908
                                }
 
1909
                                Layer = &yyData->Layer[yyvsp[-3].number-1];
 
1910
 
 
1911
                                        /* memory for name is alread allocated */
 
1912
                                Layer->Name = yyvsp[-2].string;
 
1913
                                LayerFlag[yyvsp[-3].number-1] = True;
 
1914
                        }
 
1915
    break;
 
1916
 
 
1917
  case 79:
 
1918
#line 489 "parse_y.y"
 
1919
    {
 
1920
                                CreateNewPolygonFromRectangle(Layer,
 
1921
                                        yyvsp[-5].number*100, yyvsp[-4].number*100, (yyvsp[-5].number+yyvsp[-3].number)*100, (yyvsp[-4].number+yyvsp[-2].number)*100, yyvsp[-1].number & OBJ_FLAGS);
 
1922
                        }
 
1923
    break;
 
1924
 
 
1925
  case 83:
 
1926
#line 498 "parse_y.y"
 
1927
    {
 
1928
                                Polygon = CreateNewPolygon(Layer, yyvsp[-2].number & OBJ_FLAGS);
 
1929
                        }
 
1930
    break;
 
1931
 
 
1932
  case 84:
 
1933
#line 502 "parse_y.y"
 
1934
    {
 
1935
                                        /* ignore junk */
 
1936
                                if (Polygon->PointN >= 3)
 
1937
                                        SetPolygonBoundingBox(Polygon);
 
1938
                                else
 
1939
                                {
 
1940
                                        Message("WARNING parsing file '%s'\n"
 
1941
                                                "    line:        %i\n"
 
1942
                                                "    description: 'ignored polygon (< 3 points)'\n",
 
1943
                                                yyfilename, yylineno);
 
1944
                                        DestroyObject(PCB->Data, POLYGON_TYPE, Layer, Polygon, Polygon);
 
1945
                                }
 
1946
                        }
 
1947
    break;
 
1948
 
 
1949
  case 85:
 
1950
#line 520 "parse_y.y"
 
1951
    {
 
1952
                                CreateNewLineOnLayer(Layer, yyvsp[-7].number, yyvsp[-6].number, yyvsp[-5].number, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].number, yyvsp[-1].number & OBJ_FLAGS);
 
1953
                        }
 
1954
    break;
 
1955
 
 
1956
  case 86:
 
1957
#line 528 "parse_y.y"
 
1958
    {
 
1959
                                CreateNewLineOnLayer(Layer, yyvsp[-7].number*100, yyvsp[-6].number*100, yyvsp[-5].number*100, yyvsp[-4].number*100, yyvsp[-3].number*100, yyvsp[-2].number*100, yyvsp[-1].number & OBJ_FLAGS);
 
1960
                        }
 
1961
    break;
 
1962
 
 
1963
  case 87:
 
1964
#line 536 "parse_y.y"
 
1965
    {
 
1966
                                /* elliminate old-style rat-lines */
 
1967
                        if ((yyvsp[-1].number & RATFLAG) == 0)
 
1968
                                CreateNewLineOnLayer(Layer, yyvsp[-6].number*100, yyvsp[-5].number*100, yyvsp[-4].number*100, yyvsp[-3].number*100, yyvsp[-2].number*100,
 
1969
                                        200*GROUNDPLANEFRAME, yyvsp[-1].number & OBJ_FLAGS);
 
1970
                        }
 
1971
    break;
 
1972
 
 
1973
  case 88:
 
1974
#line 547 "parse_y.y"
 
1975
    {
 
1976
                                CreateNewArcOnLayer(Layer, yyvsp[-9].number, yyvsp[-8].number, yyvsp[-7].number, yyvsp[-3].number, yyvsp[-2].number, yyvsp[-5].number, yyvsp[-4].number, yyvsp[-1].number & OBJ_FLAGS);
 
1977
                        }
 
1978
    break;
 
1979
 
 
1980
  case 89:
 
1981
#line 555 "parse_y.y"
 
1982
    {
 
1983
                                CreateNewArcOnLayer(Layer, yyvsp[-9].number*100, yyvsp[-8].number*100, yyvsp[-7].number*100, yyvsp[-3].number, yyvsp[-2].number, yyvsp[-5].number*100, yyvsp[-4].number*100, yyvsp[-1].number & OBJ_FLAGS);
 
1984
                        }
 
1985
    break;
 
1986
 
 
1987
  case 90:
 
1988
#line 563 "parse_y.y"
 
1989
    {
 
1990
                                CreateNewArcOnLayer(Layer, yyvsp[-8].number*100, yyvsp[-7].number*100, yyvsp[-6].number*100, yyvsp[-3].number, yyvsp[-2].number,
 
1991
                                        yyvsp[-4].number*100, 200*GROUNDPLANEFRAME, yyvsp[-1].number & OBJ_FLAGS);
 
1992
                        }
 
1993
    break;
 
1994
 
 
1995
  case 91:
 
1996
#line 572 "parse_y.y"
 
1997
    {
 
1998
                                        /* use a default scale of 100% */
 
1999
                                CreateNewText(Layer,yyFont,yyvsp[-5].number*100, yyvsp[-4].number*100, yyvsp[-3].number, 100, yyvsp[-2].string, yyvsp[-1].number & OBJ_FLAGS);
 
2000
                                SaveFree(yyvsp[-2].string);
 
2001
                        }
 
2002
    break;
 
2003
 
 
2004
  case 92:
 
2005
#line 582 "parse_y.y"
 
2006
    {
 
2007
                                if (yyvsp[-1].number & ONSILKFLAG)
 
2008
                                {
 
2009
                                        LayerTypePtr lay = &yyData->Layer[MAX_LAYER +
 
2010
                                                ((yyvsp[-1].number & ONSOLDERFLAG) ? SOLDER_LAYER : COMPONENT_LAYER)];
 
2011
 
 
2012
                                        CreateNewText(lay ,yyFont, yyvsp[-6].number*100, yyvsp[-5].number*100, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].string, yyvsp[-1].number & OBJ_FLAGS);
 
2013
                                }
 
2014
                                else
 
2015
                                        CreateNewText(Layer, yyFont, yyvsp[-6].number*100, yyvsp[-5].number*100, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].string, yyvsp[-1].number & OBJ_FLAGS);
 
2016
                                SaveFree(yyvsp[-2].string);
 
2017
                        }
 
2018
    break;
 
2019
 
 
2020
  case 93:
 
2021
#line 598 "parse_y.y"
 
2022
    {
 
2023
                                if (yyvsp[-1].number & ONSILKFLAG)
 
2024
                                {
 
2025
                                        LayerTypePtr lay = &yyData->Layer[MAX_LAYER +
 
2026
                                                ((yyvsp[-1].number & ONSOLDERFLAG) ? SOLDER_LAYER : COMPONENT_LAYER)];
 
2027
 
 
2028
                                        CreateNewText(lay ,yyFont, yyvsp[-6].number, yyvsp[-5].number, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].string, yyvsp[-1].number & OBJ_FLAGS);
 
2029
                                }
 
2030
                                else
 
2031
                                        CreateNewText(Layer, yyFont, yyvsp[-6].number, yyvsp[-5].number, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].string, yyvsp[-1].number & OBJ_FLAGS);
 
2032
                                SaveFree(yyvsp[-2].string);
 
2033
                        }
 
2034
    break;
 
2035
 
 
2036
  case 96:
 
2037
#line 620 "parse_y.y"
 
2038
    {
 
2039
                                CreateNewPointInPolygon(Polygon, yyvsp[-2].number*100, yyvsp[-1].number*100);
 
2040
                        }
 
2041
    break;
 
2042
 
 
2043
  case 97:
 
2044
#line 624 "parse_y.y"
 
2045
    {
 
2046
                                CreateNewPointInPolygon(Polygon, yyvsp[-2].number, yyvsp[-1].number);
 
2047
                        }
 
2048
    break;
 
2049
 
 
2050
  case 104:
 
2051
#line 643 "parse_y.y"
 
2052
    {
 
2053
                                yyElement = CreateNewElement(yyData, yyElement, yyFont, 0x0000,
 
2054
                                        yyvsp[-6].string, yyvsp[-5].string, NULL, yyvsp[-4].number*100, yyvsp[-3].number*100, yyvsp[-2].number, 100, 0x0000, False);
 
2055
                                SaveFree(yyvsp[-6].string);
 
2056
                                SaveFree(yyvsp[-5].string);
 
2057
                                pin_num = 1;
 
2058
                        }
 
2059
    break;
 
2060
 
 
2061
  case 105:
 
2062
#line 651 "parse_y.y"
 
2063
    {
 
2064
                                SetElementBoundingBox(yyData, yyElement, yyFont);
 
2065
                        }
 
2066
    break;
 
2067
 
 
2068
  case 106:
 
2069
#line 661 "parse_y.y"
 
2070
    {
 
2071
                                yyElement = CreateNewElement(yyData, yyElement, yyFont, yyvsp[-9].number,
 
2072
                                        yyvsp[-8].string, yyvsp[-7].string, NULL, yyvsp[-6].number*100, yyvsp[-5].number*100, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].number, False);
 
2073
                                SaveFree(yyvsp[-8].string);
 
2074
                                SaveFree(yyvsp[-7].string);
 
2075
                                pin_num = 1;
 
2076
                        }
 
2077
    break;
 
2078
 
 
2079
  case 107:
 
2080
#line 669 "parse_y.y"
 
2081
    {
 
2082
                                SetElementBoundingBox(yyData, yyElement, yyFont);
 
2083
                        }
 
2084
    break;
 
2085
 
 
2086
  case 108:
 
2087
#line 679 "parse_y.y"
 
2088
    {
 
2089
                                yyElement = CreateNewElement(yyData, yyElement, yyFont, yyvsp[-10].number,
 
2090
                                        yyvsp[-9].string, yyvsp[-8].string, yyvsp[-7].string, yyvsp[-6].number*100, yyvsp[-5].number*100, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].number, False);
 
2091
                                SaveFree(yyvsp[-9].string);
 
2092
                                SaveFree(yyvsp[-8].string);
 
2093
                                SaveFree(yyvsp[-7].string);
 
2094
                                pin_num = 1;
 
2095
                        }
 
2096
    break;
 
2097
 
 
2098
  case 109:
 
2099
#line 688 "parse_y.y"
 
2100
    {
 
2101
                                SetElementBoundingBox(yyData, yyElement, yyFont);
 
2102
                        }
 
2103
    break;
 
2104
 
 
2105
  case 110:
 
2106
#line 699 "parse_y.y"
 
2107
    {
 
2108
                                yyElement = CreateNewElement(yyData, yyElement, yyFont, yyvsp[-12].number,
 
2109
                                        yyvsp[-11].string, yyvsp[-10].string, yyvsp[-9].string, (yyvsp[-8].number+yyvsp[-6].number)*100, (yyvsp[-7].number+yyvsp[-5].number)*100, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].number, False);
 
2110
                                yyElement->MarkX = yyvsp[-8].number*100;
 
2111
                                yyElement->MarkY = yyvsp[-7].number*100;
 
2112
                                SaveFree(yyvsp[-11].string);
 
2113
                                SaveFree(yyvsp[-10].string);
 
2114
                                SaveFree(yyvsp[-9].string);
 
2115
                        }
 
2116
    break;
 
2117
 
 
2118
  case 111:
 
2119
#line 709 "parse_y.y"
 
2120
    {
 
2121
                                SetElementBoundingBox(yyData, yyElement, yyFont);
 
2122
                        }
 
2123
    break;
 
2124
 
 
2125
  case 112:
 
2126
#line 720 "parse_y.y"
 
2127
    {
 
2128
                                yyElement = CreateNewElement(yyData, yyElement, yyFont, yyvsp[-12].number,
 
2129
                                        yyvsp[-11].string, yyvsp[-10].string, yyvsp[-9].string, (yyvsp[-8].number+yyvsp[-6].number), (yyvsp[-7].number+yyvsp[-5].number), yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].number, False);
 
2130
                                yyElement->MarkX = yyvsp[-8].number;
 
2131
                                yyElement->MarkY = yyvsp[-7].number;
 
2132
                                SaveFree(yyvsp[-11].string);
 
2133
                                SaveFree(yyvsp[-10].string);
 
2134
                                SaveFree(yyvsp[-9].string);
 
2135
                        }
 
2136
    break;
 
2137
 
 
2138
  case 113:
 
2139
#line 730 "parse_y.y"
 
2140
    {
 
2141
                                SetElementBoundingBox(yyData, yyElement, yyFont);
 
2142
                        }
 
2143
    break;
 
2144
 
 
2145
  case 121:
 
2146
#line 748 "parse_y.y"
 
2147
    {
 
2148
                                CreateNewLineInElement(yyElement, yyvsp[-5].number, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].number, yyvsp[-1].number);
 
2149
                        }
 
2150
    break;
 
2151
 
 
2152
  case 122:
 
2153
#line 753 "parse_y.y"
 
2154
    {
 
2155
                                CreateNewLineInElement(yyElement, yyvsp[-5].number*100, yyvsp[-4].number*100, yyvsp[-3].number*100, yyvsp[-2].number*100, yyvsp[-1].number*100);
 
2156
                        }
 
2157
    break;
 
2158
 
 
2159
  case 123:
 
2160
#line 758 "parse_y.y"
 
2161
    {
 
2162
                                CreateNewArcInElement(yyElement, yyvsp[-7].number, yyvsp[-6].number, yyvsp[-5].number, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].number, yyvsp[-1].number);
 
2163
                        }
 
2164
    break;
 
2165
 
 
2166
  case 124:
 
2167
#line 762 "parse_y.y"
 
2168
    {
 
2169
                                CreateNewArcInElement(yyElement, yyvsp[-7].number*100, yyvsp[-6].number*100, yyvsp[-5].number*100, yyvsp[-4].number*100, yyvsp[-3].number, yyvsp[-2].number, yyvsp[-1].number*100);
 
2170
                        }
 
2171
    break;
 
2172
 
 
2173
  case 125:
 
2174
#line 767 "parse_y.y"
 
2175
    {
 
2176
                                yyElement->MarkX = yyvsp[-2].number;
 
2177
                                yyElement->MarkY = yyvsp[-1].number;
 
2178
                        }
 
2179
    break;
 
2180
 
 
2181
  case 126:
 
2182
#line 772 "parse_y.y"
 
2183
    {
 
2184
                                yyElement->MarkX = yyvsp[-2].number*100;
 
2185
                                yyElement->MarkY = yyvsp[-1].number*100;
 
2186
                        }
 
2187
    break;
 
2188
 
 
2189
  case 133:
 
2190
#line 790 "parse_y.y"
 
2191
    {
 
2192
                                CreateNewLineInElement(yyElement, yyvsp[-5].number + yyElement->MarkX,
 
2193
                                        yyvsp[-4].number + yyElement->MarkY, yyvsp[-3].number + yyElement->MarkX,
 
2194
                                        yyvsp[-2].number + yyElement->MarkY, yyvsp[-1].number);
 
2195
                        }
 
2196
    break;
 
2197
 
 
2198
  case 134:
 
2199
#line 796 "parse_y.y"
 
2200
    {
 
2201
                                CreateNewLineInElement(yyElement, yyvsp[-5].number*100 + yyElement->MarkX,
 
2202
                                        yyvsp[-4].number*100 + yyElement->MarkY, yyvsp[-3].number*100 + yyElement->MarkX,
 
2203
                                        yyvsp[-2].number*100 + yyElement->MarkY, yyvsp[-1].number*100);
 
2204
                        }
 
2205
    break;
 
2206
 
 
2207
  case 135:
 
2208
#line 803 "parse_y.y"
 
2209
    {
 
2210
                                CreateNewArcInElement(yyElement, yyvsp[-7].number + yyElement->MarkX,
 
2211
                                        yyvsp[-6].number + yyElement->MarkY, yyvsp[-5].number, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].number, yyvsp[-1].number);
 
2212
                        }
 
2213
    break;
 
2214
 
 
2215
  case 136:
 
2216
#line 808 "parse_y.y"
 
2217
    {
 
2218
                                CreateNewArcInElement(yyElement, yyvsp[-7].number*100 + yyElement->MarkX,
 
2219
                                        yyvsp[-6].number*100 + yyElement->MarkY, yyvsp[-5].number*100, yyvsp[-4].number*100, yyvsp[-3].number, yyvsp[-2].number, yyvsp[-1].number*100);
 
2220
                        }
 
2221
    break;
 
2222
 
 
2223
  case 137:
 
2224
#line 818 "parse_y.y"
 
2225
    {
 
2226
                                CreateNewPin(yyElement, yyvsp[-9].number + yyElement->MarkX,
 
2227
                                        yyvsp[-8].number + yyElement->MarkY, yyvsp[-7].number, yyvsp[-6].number, yyvsp[-5].number, yyvsp[-4].number, yyvsp[-3].string,
 
2228
                                        yyvsp[-2].string, (yyvsp[-1].number & OBJ_FLAGS) | PINFLAG);
 
2229
                                SaveFree(yyvsp[-3].string);
 
2230
                                SaveFree(yyvsp[-2].string);
 
2231
                        }
 
2232
    break;
 
2233
 
 
2234
  case 138:
 
2235
#line 830 "parse_y.y"
 
2236
    {
 
2237
                                CreateNewPin(yyElement, yyvsp[-9].number*100 + yyElement->MarkX,
 
2238
                                        yyvsp[-8].number*100 + yyElement->MarkY, yyvsp[-7].number*100, yyvsp[-6].number*100, yyvsp[-5].number*100, yyvsp[-4].number*100, yyvsp[-3].string,
 
2239
                                        yyvsp[-2].string, (yyvsp[-1].number & OBJ_FLAGS) | PINFLAG);
 
2240
                                SaveFree(yyvsp[-3].string);
 
2241
                                SaveFree(yyvsp[-2].string);
 
2242
                        }
 
2243
    break;
 
2244
 
 
2245
  case 139:
 
2246
#line 842 "parse_y.y"
 
2247
    {
 
2248
                                CreateNewPin(yyElement, yyvsp[-7].number*100, yyvsp[-6].number*100, yyvsp[-5].number*100, 200*GROUNDPLANEFRAME,
 
2249
                                        (yyvsp[-5].number + 2*MASKFRAME)*100, yyvsp[-4].number*100, yyvsp[-3].string, yyvsp[-2].string,
 
2250
                                        (yyvsp[-1].number & OBJ_FLAGS) | PINFLAG);
 
2251
                                SaveFree(yyvsp[-3].string);
 
2252
                                SaveFree(yyvsp[-2].string);
 
2253
                        }
 
2254
    break;
 
2255
 
 
2256
  case 140:
 
2257
#line 854 "parse_y.y"
 
2258
    {
 
2259
                                char    p_number[8];
 
2260
 
 
2261
                                sprintf(p_number, "%d", pin_num++);
 
2262
                                CreateNewPin(yyElement, yyvsp[-6].number*100, yyvsp[-5].number*100, yyvsp[-4].number*100, 200*GROUNDPLANEFRAME,
 
2263
                                        (yyvsp[-4].number + 2*MASKFRAME)*100, yyvsp[-3].number*100, yyvsp[-2].string, p_number,
 
2264
                                        (yyvsp[-1].number & OBJ_FLAGS) | PINFLAG);
 
2265
                                SaveFree(yyvsp[-2].string);
 
2266
                        }
 
2267
    break;
 
2268
 
 
2269
  case 141:
 
2270
#line 870 "parse_y.y"
 
2271
    {
 
2272
                                BDimension      hole = (yyvsp[-3].number *DEFAULT_DRILLINGHOLE);
 
2273
                                char            p_number[8];
 
2274
 
 
2275
                                        /* make sure that there's enough copper left */
 
2276
                                if (yyvsp[-3].number -hole < MIN_PINORVIACOPPER && 
 
2277
                                        yyvsp[-3].number > MIN_PINORVIACOPPER)
 
2278
                                        hole = yyvsp[-3].number -MIN_PINORVIACOPPER;
 
2279
 
 
2280
                                sprintf(p_number, "%d", pin_num++);
 
2281
                                CreateNewPin(yyElement, yyvsp[-5].number*100, yyvsp[-4].number*100, yyvsp[-3].number*100, 200*GROUNDPLANEFRAME,
 
2282
                                        (yyvsp[-3].number + 2*MASKFRAME)*100, hole, yyvsp[-2].string, p_number,
 
2283
                                        (yyvsp[-1].number & OBJ_FLAGS) | PINFLAG);
 
2284
                                SaveFree(yyvsp[-2].string);
 
2285
                        }
 
2286
    break;
 
2287
 
 
2288
  case 142:
 
2289
#line 890 "parse_y.y"
 
2290
    {
 
2291
                                CreateNewPad(yyElement, yyvsp[-10].number + yyElement->MarkX,
 
2292
                                        yyvsp[-9].number + yyElement->MarkY,
 
2293
                                        yyvsp[-8].number + yyElement->MarkX,
 
2294
                                        yyvsp[-7].number + yyElement->MarkY, yyvsp[-6].number, yyvsp[-5].number, yyvsp[-4].number,
 
2295
                                        yyvsp[-3].string, yyvsp[-2].string, (yyvsp[-1].number & OBJ_FLAGS));
 
2296
                                SaveFree(yyvsp[-3].string);
 
2297
                                SaveFree(yyvsp[-2].string);
 
2298
                        }
 
2299
    break;
 
2300
 
 
2301
  case 143:
 
2302
#line 904 "parse_y.y"
 
2303
    {
 
2304
                                CreateNewPad(yyElement,yyvsp[-10].number*100 + yyElement->MarkX,
 
2305
                                        yyvsp[-9].number*100 + yyElement->MarkY, yyvsp[-8].number*100 + yyElement->MarkX,
 
2306
                                        yyvsp[-7].number*100 + yyElement->MarkY, yyvsp[-6].number*100, yyvsp[-5].number*100, yyvsp[-4].number*100,
 
2307
                                        yyvsp[-3].string, yyvsp[-2].string, (yyvsp[-1].number & OBJ_FLAGS));
 
2308
                                SaveFree(yyvsp[-3].string);
 
2309
                                SaveFree(yyvsp[-2].string);
 
2310
                        }
 
2311
    break;
 
2312
 
 
2313
  case 144:
 
2314
#line 917 "parse_y.y"
 
2315
    {
 
2316
                                CreateNewPad(yyElement,yyvsp[-8].number*100,yyvsp[-7].number*100,yyvsp[-6].number*100,yyvsp[-5].number*100,yyvsp[-4].number*100, 200*GROUNDPLANEFRAME,
 
2317
                                        (yyvsp[-4].number + 2*MASKFRAME)*100, yyvsp[-3].string,yyvsp[-2].string, (yyvsp[-1].number & OBJ_FLAGS));
 
2318
                                SaveFree(yyvsp[-3].string);
 
2319
                                SaveFree(yyvsp[-2].string);
 
2320
                        }
 
2321
    break;
 
2322
 
 
2323
  case 145:
 
2324
#line 928 "parse_y.y"
 
2325
    {
 
2326
                                char            p_number[8];
 
2327
 
 
2328
                                sprintf(p_number, "%d", pin_num++);
 
2329
                                CreateNewPad(yyElement,yyvsp[-7].number*100,yyvsp[-6].number*100,yyvsp[-5].number*100,yyvsp[-4].number*100,yyvsp[-3].number*100, 200*GROUNDPLANEFRAME,
 
2330
                                        (yyvsp[-3].number + 2*MASKFRAME)*100, yyvsp[-2].string,p_number,
 
2331
                                        (yyvsp[-1].number & OBJ_FLAGS));
 
2332
                                SaveFree(yyvsp[-2].string);
 
2333
                        }
 
2334
    break;
 
2335
 
 
2336
  case 148:
 
2337
#line 946 "parse_y.y"
 
2338
    {
 
2339
                                if (yyvsp[-3].number <= 0 || yyvsp[-3].number > MAX_FONTPOSITION)
 
2340
                                {
 
2341
                                        yyerror("fontposition out of range");
 
2342
                                        YYABORT;
 
2343
                                }
 
2344
                                Symbol = &yyFont->Symbol[yyvsp[-3].number];
 
2345
                                if (Symbol->Valid)
 
2346
                                {
 
2347
                                        yyerror("symbol ID used twice");
 
2348
                                        YYABORT;
 
2349
                                }
 
2350
                                Symbol->Valid = True;
 
2351
                                Symbol->Delta = yyvsp[-2].number;
 
2352
                        }
 
2353
    break;
 
2354
 
 
2355
  case 150:
 
2356
#line 963 "parse_y.y"
 
2357
    {
 
2358
                                if (yyvsp[-3].number <= 0 || yyvsp[-3].number > MAX_FONTPOSITION)
 
2359
                                {
 
2360
                                        yyerror("fontposition out of range");
 
2361
                                        YYABORT;
 
2362
                                }
 
2363
                                Symbol = &yyFont->Symbol[yyvsp[-3].number];
 
2364
                                if (Symbol->Valid)
 
2365
                                {
 
2366
                                        yyerror("symbol ID used twice");
 
2367
                                        YYABORT;
 
2368
                                }
 
2369
                                Symbol->Valid = True;
 
2370
                                Symbol->Delta = yyvsp[-2].number*100;
 
2371
                        }
 
2372
    break;
 
2373
 
 
2374
  case 159:
 
2375
#line 1000 "parse_y.y"
 
2376
    {
 
2377
                                CreateNewLineInSymbol(Symbol, yyvsp[-5].number*100, yyvsp[-4].number*100, yyvsp[-3].number*100, yyvsp[-2].number*100, yyvsp[-1].number*100);
 
2378
                        }
 
2379
    break;
 
2380
 
 
2381
  case 160:
 
2382
#line 1007 "parse_y.y"
 
2383
    {
 
2384
                                CreateNewLineInSymbol(Symbol, yyvsp[-5].number, yyvsp[-4].number, yyvsp[-3].number, yyvsp[-2].number, yyvsp[-1].number);
 
2385
                        }
 
2386
    break;
 
2387
 
 
2388
  case 168:
 
2389
#line 1034 "parse_y.y"
 
2390
    {
 
2391
                                Menu = CreateNewNet(&yyPCB->NetlistLib, yyvsp[-3].string, yyvsp[-2].string);
 
2392
                                SaveFree(yyvsp[-3].string);
 
2393
                                SaveFree(yyvsp[-2].string);
 
2394
                        }
 
2395
    break;
 
2396
 
 
2397
  case 174:
 
2398
#line 1054 "parse_y.y"
 
2399
    {
 
2400
                                CreateNewConnection(Menu, yyvsp[-1].string);
 
2401
                                SaveFree(yyvsp[-1].string);
 
2402
                        }
 
2403
    break;
 
2404
 
 
2405
 
 
2406
    }
 
2407
 
 
2408
/* Line 991 of yacc.c.  */
 
2409
#line 2409 "parse_y.c"
 
2410
 
 
2411
  yyvsp -= yylen;
 
2412
  yyssp -= yylen;
 
2413
 
 
2414
 
 
2415
  YY_STACK_PRINT (yyss, yyssp);
 
2416
 
 
2417
  *++yyvsp = yyval;
 
2418
 
 
2419
 
 
2420
  /* Now `shift' the result of the reduction.  Determine what state
 
2421
     that goes to, based on the state we popped back to and the rule
 
2422
     number reduced by.  */
 
2423
 
 
2424
  yyn = yyr1[yyn];
 
2425
 
 
2426
  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
 
2427
  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
 
2428
    yystate = yytable[yystate];
 
2429
  else
 
2430
    yystate = yydefgoto[yyn - YYNTOKENS];
 
2431
 
 
2432
  goto yynewstate;
 
2433
 
 
2434
 
 
2435
/*------------------------------------.
 
2436
| yyerrlab -- here on detecting error |
 
2437
`------------------------------------*/
 
2438
yyerrlab:
 
2439
  /* If not already recovering from an error, report this error.  */
 
2440
  if (!yyerrstatus)
 
2441
    {
 
2442
      ++yynerrs;
 
2443
#if YYERROR_VERBOSE
 
2444
      yyn = yypact[yystate];
 
2445
 
 
2446
      if (YYPACT_NINF < yyn && yyn < YYLAST)
 
2447
        {
 
2448
          YYSIZE_T yysize = 0;
 
2449
          int yytype = YYTRANSLATE (yychar);
 
2450
          char *yymsg;
 
2451
          int yyx, yycount;
 
2452
 
 
2453
          yycount = 0;
 
2454
          /* Start YYX at -YYN if negative to avoid negative indexes in
 
2455
             YYCHECK.  */
 
2456
          for (yyx = yyn < 0 ? -yyn : 0;
 
2457
               yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
 
2458
            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
 
2459
              yysize += yystrlen (yytname[yyx]) + 15, yycount++;
 
2460
          yysize += yystrlen ("syntax error, unexpected ") + 1;
 
2461
          yysize += yystrlen (yytname[yytype]);
 
2462
          yymsg = (char *) YYSTACK_ALLOC (yysize);
 
2463
          if (yymsg != 0)
 
2464
            {
 
2465
              char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
 
2466
              yyp = yystpcpy (yyp, yytname[yytype]);
 
2467
 
 
2468
              if (yycount < 5)
 
2469
                {
 
2470
                  yycount = 0;
 
2471
                  for (yyx = yyn < 0 ? -yyn : 0;
 
2472
                       yyx < (int) (sizeof (yytname) / sizeof (char *));
 
2473
                       yyx++)
 
2474
                    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
 
2475
                      {
 
2476
                        const char *yyq = ! yycount ? ", expecting " : " or ";
 
2477
                        yyp = yystpcpy (yyp, yyq);
 
2478
                        yyp = yystpcpy (yyp, yytname[yyx]);
 
2479
                        yycount++;
 
2480
                      }
 
2481
                }
 
2482
              yyerror (yymsg);
 
2483
              YYSTACK_FREE (yymsg);
 
2484
            }
 
2485
          else
 
2486
            yyerror ("syntax error; also virtual memory exhausted");
 
2487
        }
 
2488
      else
 
2489
#endif /* YYERROR_VERBOSE */
 
2490
        yyerror ("syntax error");
 
2491
    }
 
2492
 
 
2493
 
 
2494
 
 
2495
  if (yyerrstatus == 3)
 
2496
    {
 
2497
      /* If just tried and failed to reuse lookahead token after an
 
2498
         error, discard it.  */
 
2499
 
 
2500
      /* Return failure if at end of input.  */
 
2501
      if (yychar == YYEOF)
 
2502
        {
 
2503
          /* Pop the error token.  */
 
2504
          YYPOPSTACK;
 
2505
          /* Pop the rest of the stack.  */
 
2506
          while (yyss < yyssp)
 
2507
            {
 
2508
              YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
 
2509
              yydestruct (yystos[*yyssp], yyvsp);
 
2510
              YYPOPSTACK;
 
2511
            }
 
2512
          YYABORT;
 
2513
        }
 
2514
 
 
2515
      YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
 
2516
      yydestruct (yytoken, &yylval);
 
2517
      yychar = YYEMPTY;
 
2518
 
 
2519
    }
 
2520
 
 
2521
  /* Else will try to reuse lookahead token after shifting the error
 
2522
     token.  */
 
2523
  goto yyerrlab2;
 
2524
 
 
2525
 
 
2526
/*----------------------------------------------------.
 
2527
| yyerrlab1 -- error raised explicitly by an action.  |
 
2528
`----------------------------------------------------*/
 
2529
yyerrlab1:
 
2530
 
 
2531
  /* Suppress GCC warning that yyerrlab1 is unused when no action
 
2532
     invokes YYERROR.  MacOS 10.2.3's buggy "smart preprocessor"
 
2533
     insists on the trailing semicolon.  */
 
2534
#if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__)
 
2535
  __attribute__ ((__unused__));
 
2536
#endif
 
2537
 
 
2538
 
 
2539
  goto yyerrlab2;
 
2540
 
 
2541
 
 
2542
/*---------------------------------------------------------------.
 
2543
| yyerrlab2 -- pop states until the error token can be shifted.  |
 
2544
`---------------------------------------------------------------*/
 
2545
yyerrlab2:
 
2546
  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
 
2547
 
 
2548
  for (;;)
 
2549
    {
 
2550
      yyn = yypact[yystate];
 
2551
      if (yyn != YYPACT_NINF)
 
2552
        {
 
2553
          yyn += YYTERROR;
 
2554
          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
 
2555
            {
 
2556
              yyn = yytable[yyn];
 
2557
              if (0 < yyn)
 
2558
                break;
 
2559
            }
 
2560
        }
 
2561
 
 
2562
      /* Pop the current state because it cannot handle the error token.  */
 
2563
      if (yyssp == yyss)
 
2564
        YYABORT;
 
2565
 
 
2566
      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
 
2567
      yydestruct (yystos[yystate], yyvsp);
 
2568
      yyvsp--;
 
2569
      yystate = *--yyssp;
 
2570
 
 
2571
      YY_STACK_PRINT (yyss, yyssp);
 
2572
    }
 
2573
 
 
2574
  if (yyn == YYFINAL)
 
2575
    YYACCEPT;
 
2576
 
 
2577
  YYDPRINTF ((stderr, "Shifting error token, "));
 
2578
 
 
2579
  *++yyvsp = yylval;
 
2580
 
 
2581
 
 
2582
  yystate = yyn;
 
2583
  goto yynewstate;
 
2584
 
 
2585
 
 
2586
/*-------------------------------------.
 
2587
| yyacceptlab -- YYACCEPT comes here.  |
 
2588
`-------------------------------------*/
 
2589
yyacceptlab:
 
2590
  yyresult = 0;
 
2591
  goto yyreturn;
 
2592
 
 
2593
/*-----------------------------------.
 
2594
| yyabortlab -- YYABORT comes here.  |
 
2595
`-----------------------------------*/
 
2596
yyabortlab:
 
2597
  yyresult = 1;
 
2598
  goto yyreturn;
 
2599
 
 
2600
#ifndef yyoverflow
 
2601
/*----------------------------------------------.
 
2602
| yyoverflowlab -- parser overflow comes here.  |
 
2603
`----------------------------------------------*/
 
2604
yyoverflowlab:
 
2605
  yyerror ("parser stack overflow");
 
2606
  yyresult = 2;
 
2607
  /* Fall through.  */
 
2608
#endif
 
2609
 
 
2610
yyreturn:
 
2611
#ifndef yyoverflow
 
2612
  if (yyss != yyssa)
 
2613
    YYSTACK_FREE (yyss);
 
2614
#endif
 
2615
  return yyresult;
 
2616
}
 
2617
 
 
2618
 
 
2619
#line 92 "parse_y.y"
 
2620
 
 
2621
 
 
2622
/* ---------------------------------------------------------------------------
 
2623
 * error routine called by parser library
 
2624
 */
 
2625
int yyerror(s)
 
2626
char *s;
 
2627
{
 
2628
        Message("ERROR parsing file '%s'\n"
 
2629
                "    line:        %i\n"
 
2630
                "    description: '%s'\n",
 
2631
                yyfilename, yylineno, s);
 
2632
        return(0);
 
2633
}
 
2634
 
 
2635
int yywrap()
 
2636
{
 
2637
  return 1;
 
2638
}
 
2639