d5f0be48c12aad446cf64df07f25bbc3435203d5
[blender-staging.git] / intern / elbeem / intern / cfgparser.cpp
1 /* A Bison parser, made by GNU Bison 1.875d.  */
2
3 /* Skeleton parser for Yacc-like parsing with Bison,
4    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 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 /* If NAME_PREFIX is specified substitute the variables and functions
49    names.  */
50 #define yyparse yy_parse
51 #define yylex   yy_lex
52 #define yyerror yy_error
53 #define yylval  yy_lval
54 #define yychar  yy_char
55 #define yydebug yy_debug
56 #define yynerrs yy_nerrs
57
58
59 /* Tokens.  */
60 #ifndef YYTOKENTYPE
61 # define YYTOKENTYPE
62    /* Put the tokens into the symbol table, so that GDB and other debuggers
63       know about them.  */
64    enum yytokentype {
65      DT_INTEGER = 258,
66      DT_FLOAT = 259,
67      DT_STRING = 260,
68      DT_ATTRNAME = 261,
69      DT_ATTRVALUE = 262,
70      KW_LBMSIM = 263,
71      KW_COMPARELBM = 264,
72      KW_ANIFRAMETIME = 265,
73      KW_DEBUGMODE = 266,
74      KW_P_RELAXTIME = 267,
75      KW_P_REYNOLDS = 268,
76      KW_P_VISCOSITY = 269,
77      KW_P_SOUNDSPEED = 270,
78      KW_P_DOMAINSIZE = 271,
79      KW_P_FORCE = 272,
80      KW_P_TIMELENGTH = 273,
81      KW_P_STEPTIME = 274,
82      KW_P_TIMEFACTOR = 275,
83      KW_P_ANIFRAMETIME = 276,
84      KW_P_ANISTART = 277,
85      KW_P_SURFACETENSION = 278,
86      KW_P_ACTIVATE = 279,
87      KW_P_DEACTIVATE = 280,
88      KW_P_DENSITY = 281,
89      KW_P_CELLSIZE = 282,
90      KW_P_GSTAR = 283,
91      KW_PFSPATH = 284,
92      KW_PARTLINELENGTH = 285,
93      KW_PARTICLES = 286,
94      KW_FRAMESPERSEC = 287,
95      KW_RAYTRACING = 288,
96      KW_PAROPEN = 289,
97      KW_PARCLOSE = 290,
98      KW_FILENAME = 291,
99      KW_PMCAUSTICS = 292,
100      KW_MAXRAYDEPTH = 293,
101      KW_CAUSTICDIST = 294,
102      KW_CAUSTICPHOT = 295,
103      KW_SHADOWMAPBIAS = 296,
104      KW_TREEMAXDEPTH = 297,
105      KW_TREEMAXTRIANGLES = 298,
106      KW_RESOLUTION = 299,
107      KW_ANTIALIAS = 300,
108      KW_EYEPOINT = 301,
109      KW_ANISTART = 302,
110      KW_ANIFRAMES = 303,
111      KW_FRAMESKIP = 304,
112      KW_LOOKAT = 305,
113      KW_UPVEC = 306,
114      KW_FOVY = 307,
115      KW_ASPECT = 308,
116      KW_AMBIENCE = 309,
117      KW_BACKGROUND = 310,
118      KW_DEBUGPIXEL = 311,
119      KW_TESTMODE = 312,
120      KW_OPENGLATTR = 313,
121      KW_BLENDERATTR = 314,
122      KW_ATTRIBUTE = 315,
123      KW_OBJATTR = 316,
124      KW_EQUALS = 317,
125      KW_DEFINEATTR = 318,
126      KW_ATTREND = 319,
127      KW_GEOMETRY = 320,
128      KW_TYPE = 321,
129      KW_GEOTYPE_BOX = 322,
130      KW_GEOTYPE_FLUID = 323,
131      KW_GEOTYPE_OBJMODEL = 324,
132      KW_GEOTYPE_SPHERE = 325,
133      KW_CASTSHADOWS = 326,
134      KW_RECEIVESHADOWS = 327,
135      KW_VISIBLE = 328,
136      KW_BOX_END = 329,
137      KW_BOX_START = 330,
138      KW_POLY = 331,
139      KW_NUMVERTICES = 332,
140      KW_VERTEX = 333,
141      KW_NUMPOLYGONS = 334,
142      KW_ISOSURF = 335,
143      KW_FILEMODE = 336,
144      KW_INVERT = 337,
145      KW_MATERIAL = 338,
146      KW_MATTYPE_PHONG = 339,
147      KW_MATTYPE_BLINN = 340,
148      KW_NAME = 341,
149      KW_AMBIENT = 342,
150      KW_DIFFUSE = 343,
151      KW_SPECULAR = 344,
152      KW_MIRROR = 345,
153      KW_TRANSPARENCE = 346,
154      KW_REFRACINDEX = 347,
155      KW_TRANSADDITIVE = 348,
156      KW_TRANSATTCOL = 349,
157      KW_FRESNEL = 350,
158      KW_LIGHT = 351,
159      KW_ACTIVE = 352,
160      KW_COLOUR = 353,
161      KW_POSITION = 354,
162      KW_LIGHT_OMNI = 355,
163      KW_CAUSTICPHOTONS = 356,
164      KW_CAUSTICSTRENGTH = 357,
165      KW_SHADOWMAP = 358,
166      KW_CAUSTICSMAP = 359
167    };
168 #endif
169 #define DT_INTEGER 258
170 #define DT_FLOAT 259
171 #define DT_STRING 260
172 #define DT_ATTRNAME 261
173 #define DT_ATTRVALUE 262
174 #define KW_LBMSIM 263
175 #define KW_COMPARELBM 264
176 #define KW_ANIFRAMETIME 265
177 #define KW_DEBUGMODE 266
178 #define KW_P_RELAXTIME 267
179 #define KW_P_REYNOLDS 268
180 #define KW_P_VISCOSITY 269
181 #define KW_P_SOUNDSPEED 270
182 #define KW_P_DOMAINSIZE 271
183 #define KW_P_FORCE 272
184 #define KW_P_TIMELENGTH 273
185 #define KW_P_STEPTIME 274
186 #define KW_P_TIMEFACTOR 275
187 #define KW_P_ANIFRAMETIME 276
188 #define KW_P_ANISTART 277
189 #define KW_P_SURFACETENSION 278
190 #define KW_P_ACTIVATE 279
191 #define KW_P_DEACTIVATE 280
192 #define KW_P_DENSITY 281
193 #define KW_P_CELLSIZE 282
194 #define KW_P_GSTAR 283
195 #define KW_PFSPATH 284
196 #define KW_PARTLINELENGTH 285
197 #define KW_PARTICLES 286
198 #define KW_FRAMESPERSEC 287
199 #define KW_RAYTRACING 288
200 #define KW_PAROPEN 289
201 #define KW_PARCLOSE 290
202 #define KW_FILENAME 291
203 #define KW_PMCAUSTICS 292
204 #define KW_MAXRAYDEPTH 293
205 #define KW_CAUSTICDIST 294
206 #define KW_CAUSTICPHOT 295
207 #define KW_SHADOWMAPBIAS 296
208 #define KW_TREEMAXDEPTH 297
209 #define KW_TREEMAXTRIANGLES 298
210 #define KW_RESOLUTION 299
211 #define KW_ANTIALIAS 300
212 #define KW_EYEPOINT 301
213 #define KW_ANISTART 302
214 #define KW_ANIFRAMES 303
215 #define KW_FRAMESKIP 304
216 #define KW_LOOKAT 305
217 #define KW_UPVEC 306
218 #define KW_FOVY 307
219 #define KW_ASPECT 308
220 #define KW_AMBIENCE 309
221 #define KW_BACKGROUND 310
222 #define KW_DEBUGPIXEL 311
223 #define KW_TESTMODE 312
224 #define KW_OPENGLATTR 313
225 #define KW_BLENDERATTR 314
226 #define KW_ATTRIBUTE 315
227 #define KW_OBJATTR 316
228 #define KW_EQUALS 317
229 #define KW_DEFINEATTR 318
230 #define KW_ATTREND 319
231 #define KW_GEOMETRY 320
232 #define KW_TYPE 321
233 #define KW_GEOTYPE_BOX 322
234 #define KW_GEOTYPE_FLUID 323
235 #define KW_GEOTYPE_OBJMODEL 324
236 #define KW_GEOTYPE_SPHERE 325
237 #define KW_CASTSHADOWS 326
238 #define KW_RECEIVESHADOWS 327
239 #define KW_VISIBLE 328
240 #define KW_BOX_END 329
241 #define KW_BOX_START 330
242 #define KW_POLY 331
243 #define KW_NUMVERTICES 332
244 #define KW_VERTEX 333
245 #define KW_NUMPOLYGONS 334
246 #define KW_ISOSURF 335
247 #define KW_FILEMODE 336
248 #define KW_INVERT 337
249 #define KW_MATERIAL 338
250 #define KW_MATTYPE_PHONG 339
251 #define KW_MATTYPE_BLINN 340
252 #define KW_NAME 341
253 #define KW_AMBIENT 342
254 #define KW_DIFFUSE 343
255 #define KW_SPECULAR 344
256 #define KW_MIRROR 345
257 #define KW_TRANSPARENCE 346
258 #define KW_REFRACINDEX 347
259 #define KW_TRANSADDITIVE 348
260 #define KW_TRANSATTCOL 349
261 #define KW_FRESNEL 350
262 #define KW_LIGHT 351
263 #define KW_ACTIVE 352
264 #define KW_COLOUR 353
265 #define KW_POSITION 354
266 #define KW_LIGHT_OMNI 355
267 #define KW_CAUSTICPHOTONS 356
268 #define KW_CAUSTICSTRENGTH 357
269 #define KW_SHADOWMAP 358
270 #define KW_CAUSTICSMAP 359
271
272
273
274
275 /* Copy the first part of user declarations.  */
276 #line 14 "src/cfgparser.yy"
277
278
279 #define YYDEBUG 1
280
281 /* library functions */
282 #include <stdio.h>
283 #include <stdlib.h>
284 #include <string.h>
285 #include "attributes.h"
286
287         void yy_warn(char *s);
288         void yy_error(const char *s);
289
290   /* imported from flex... */
291   extern int yy_lex();
292   extern int lineCount;
293   extern FILE *yy_in;
294
295   /* the parse function from bison */
296   int yy_parse( void );
297
298 // local variables to access objects 
299 #include "simulation_object.h"
300 #ifdef LBM_INCLUDE_TESTSOLVERS
301 #include "simulation_complbm.h"
302 #endif // LBM_INCLUDE_TESTSOLVERS
303
304 #include "parametrizer.h"
305 #include "ntl_renderglobals.h"
306 #include "ntl_scene.h"
307
308 #include "ntl_lightobject.h"
309 #include "ntl_material.h"
310 #include "ntl_geometrybox.h"
311 #include "ntl_geometrysphere.h"
312 #include "ntl_geometrymodel.h"
313 #include "globals.h"
314         
315         /* global variables */
316         static map<string,AttributeList*> attrs; /* global attribute storage */
317         vector<string>                  currentAttrValue;    /* build string vector */
318         
319         // global raytracing settings, stores object,lights,material lists etc.
320         // lists are freed by ntlScene upon deletion
321   static ntlRenderGlobals *reglob;      /* raytracing global settings */
322
323         /* light initialization checks */
324         ntlLightObject      *currentLight;
325         ntlLightObject      *currentLightOmni;
326
327         /* geometry initialization checks */
328         ntlGeometryClass    *currentGeoClass;
329         ntlGeometryObject   *currentGeoObj;
330         ntlGeometryBox      *currentGeometryBox;
331         ntlGeometrySphere   *currentGeometrySphere;
332         SimulationObject    *currentGeometrySim;
333         ntlGeometryObjModel *currentGeometryModel;
334         AttributeList                           *currentAttrib;
335         string                                                  currentAttrName, currentAttribAddName;
336
337         /* material init checks */
338         ntlMaterial                             *currentMaterial;
339
340
341
342 /* Enabling traces.  */
343 #ifndef YYDEBUG
344 # define YYDEBUG 1
345 #endif
346
347 /* Enabling verbose error messages.  */
348 #ifdef YYERROR_VERBOSE
349 # undef YYERROR_VERBOSE
350 # define YYERROR_VERBOSE 1
351 #else
352 # define YYERROR_VERBOSE 0
353 #endif
354
355 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
356 #line 85 "src/cfgparser.yy"
357 typedef union YYSTYPE {
358   int    intValue;
359   float  floatValue;
360   char  *charValue;
361 } YYSTYPE;
362 /* Line 191 of yacc.c.  */
363 #line 364 "bld-std-gcc40/src/cfgparser.cpp"
364 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
365 # define YYSTYPE_IS_DECLARED 1
366 # define YYSTYPE_IS_TRIVIAL 1
367 #endif
368
369
370
371 /* Copy the second part of user declarations.  */
372
373
374 /* Line 214 of yacc.c.  */
375 #line 376 "bld-std-gcc40/src/cfgparser.cpp"
376
377 #if ! defined (yyoverflow) || YYERROR_VERBOSE
378
379 # ifndef YYFREE
380 #  define YYFREE free
381 # endif
382 # ifndef YYMALLOC
383 #  define YYMALLOC malloc
384 # endif
385
386 /* The parser invokes alloca or malloc; define the necessary symbols.  */
387
388 # ifdef YYSTACK_USE_ALLOCA
389 #  if YYSTACK_USE_ALLOCA
390 #   define YYSTACK_ALLOC alloca
391 #  endif
392 # else
393 #  if defined (alloca) || defined (_ALLOCA_H)
394 #   define YYSTACK_ALLOC alloca
395 #  else
396 #   ifdef __GNUC__
397 #    define YYSTACK_ALLOC __builtin_alloca
398 #   endif
399 #  endif
400 # endif
401
402 # ifdef YYSTACK_ALLOC
403    /* Pacify GCC's `empty if-body' warning. */
404 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
405 # else
406 #  if defined (__STDC__) || defined (__cplusplus)
407 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
408 #   define YYSIZE_T size_t
409 #  endif
410 #  define YYSTACK_ALLOC YYMALLOC
411 #  define YYSTACK_FREE YYFREE
412 # endif
413 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
414
415
416 #if (! defined (yyoverflow) \
417      && (! defined (__cplusplus) \
418          || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
419
420 /* A type that is properly aligned for any stack member.  */
421 union yyalloc
422 {
423   short int yyss;
424   YYSTYPE yyvs;
425   };
426
427 /* The size of the maximum gap between one aligned stack and the next.  */
428 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
429
430 /* The size of an array large to enough to hold all stacks, each with
431    N elements.  */
432 # define YYSTACK_BYTES(N) \
433      ((N) * (sizeof (short int) + sizeof (YYSTYPE))                     \
434       + YYSTACK_GAP_MAXIMUM)
435
436 /* Copy COUNT objects from FROM to TO.  The source and destination do
437    not overlap.  */
438 # ifndef YYCOPY
439 #  if defined (__GNUC__) && 1 < __GNUC__
440 #   define YYCOPY(To, From, Count) \
441       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
442 #  else
443 #   define YYCOPY(To, From, Count)              \
444       do                                        \
445         {                                       \
446           register YYSIZE_T yyi;                \
447           for (yyi = 0; yyi < (Count); yyi++)   \
448             (To)[yyi] = (From)[yyi];            \
449         }                                       \
450       while (0)
451 #  endif
452 # endif
453
454 /* Relocate STACK from its old location to the new one.  The
455    local variables YYSIZE and YYSTACKSIZE give the old and new number of
456    elements in the stack, and YYPTR gives the new location of the
457    stack.  Advance YYPTR to a properly aligned location for the next
458    stack.  */
459 # define YYSTACK_RELOCATE(Stack)                                        \
460     do                                                                  \
461       {                                                                 \
462         YYSIZE_T yynewbytes;                                            \
463         YYCOPY (&yyptr->Stack, Stack, yysize);                          \
464         Stack = &yyptr->Stack;                                          \
465         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
466         yyptr += yynewbytes / sizeof (*yyptr);                          \
467       }                                                                 \
468     while (0)
469
470 #endif
471
472 #if defined (__STDC__) || defined (__cplusplus)
473    typedef signed char yysigned_char;
474 #else
475    typedef short int yysigned_char;
476 #endif
477
478 /* YYFINAL -- State number of the termination state. */
479 #define YYFINAL  12
480 /* YYLAST -- Last index in YYTABLE.  */
481 #define YYLAST   278
482
483 /* YYNTOKENS -- Number of terminals. */
484 #define YYNTOKENS  105
485 /* YYNNTS -- Number of nonterminals. */
486 #define YYNNTS  77
487 /* YYNRULES -- Number of rules. */
488 #define YYNRULES  136
489 /* YYNRULES -- Number of states. */
490 #define YYNSTATES  237
491
492 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
493 #define YYUNDEFTOK  2
494 #define YYMAXUTOK   359
495
496 #define YYTRANSLATE(YYX)                                                \
497   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
498
499 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
500 static const unsigned char yytranslate[] =
501 {
502        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
503        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
504        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
505        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
506        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
507        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
508        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
509        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
510        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
511        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
512        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
513        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
514        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
515        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
516        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
517        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
518        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
519        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
520        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
521        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
522        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
523        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
524        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
525        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
526        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
527        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
528        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
529       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
530       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
531       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
532       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
533       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
534       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
535       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
536       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
537       95,    96,    97,    98,    99,   100,   101,   102,   103,   104
538 };
539
540 #if YYDEBUG
541 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
542    YYRHS.  */
543 static const unsigned short int yyprhs[] =
544 {
545        0,     0,     3,     6,     8,    10,    12,    14,    17,    22,
546       25,    27,    29,    31,    33,    35,    37,    39,    41,    43,
547       45,    47,    49,    51,    53,    55,    57,    59,    61,    63,
548       65,    67,    69,    71,    73,    75,    77,    80,    83,    86,
549       89,    93,    96,   101,   106,   111,   114,   117,   122,   127,
550      130,   133,   136,   139,   143,   146,   149,   152,   159,   162,
551      164,   166,   168,   170,   172,   174,   177,   180,   185,   190,
552      191,   199,   202,   204,   206,   208,   210,   212,   214,   216,
553      218,   220,   222,   224,   226,   228,   230,   232,   235,   238,
554      241,   244,   247,   252,   257,   260,   265,   272,   275,   277,
555      279,   281,   283,   285,   287,   289,   291,   293,   295,   297,
556      299,   301,   304,   309,   314,   318,   321,   324,   327,   330,
557      335,   338,   339,   346,   349,   351,   352,   353,   360,   363,
558      365,   367,   369,   371,   373,   375,   377
559 };
560
561 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
562 static const short int yyrhs[] =
563 {
564      106,     0,    -1,   106,   107,    -1,   107,    -1,   109,    -1,
565      169,    -1,   108,    -1,    11,     3,    -1,    33,    34,   110,
566       35,    -1,   110,   111,    -1,   111,    -1,   114,    -1,   112,
567       -1,   113,    -1,   115,    -1,   116,    -1,   117,    -1,   118,
568       -1,   119,    -1,   120,    -1,   121,    -1,   122,    -1,   123,
569       -1,   124,    -1,   125,    -1,   126,    -1,   127,    -1,   128,
570       -1,   129,    -1,   130,    -1,   131,    -1,   132,    -1,   133,
571       -1,   141,    -1,   172,    -1,   155,    -1,    47,   180,    -1,
572       10,   180,    -1,    48,   179,    -1,    49,   181,    -1,    44,
573      179,   179,    -1,    45,     3,    -1,    46,   178,   178,   178,
574       -1,    50,   178,   178,   178,    -1,    51,   178,   178,   178,
575       -1,    52,   178,    -1,    53,   178,    -1,    54,   178,   178,
576      178,    -1,    55,   178,   178,   178,    -1,    36,     5,    -1,
577       42,   179,    -1,    43,   179,    -1,    38,   179,    -1,    56,
578        3,     3,    -1,    57,   181,    -1,    58,     5,    -1,    59,
579        5,    -1,    96,    34,    66,   135,   134,    35,    -1,   134,
580      136,    -1,   136,    -1,   100,    -1,   137,    -1,   138,    -1,
581      139,    -1,   140,    -1,    97,   181,    -1,    71,   181,    -1,
582       98,   178,   178,   178,    -1,    99,   178,   178,   178,    -1,
583       -1,    65,    34,    66,   144,   142,   143,    35,    -1,   143,
584      145,    -1,   145,    -1,    67,    -1,    70,    -1,    69,    -1,
585        8,    -1,     9,    -1,   146,    -1,   147,    -1,   148,    -1,
586      149,    -1,   150,    -1,   151,    -1,   152,    -1,   153,    -1,
587      154,    -1,    86,     5,    -1,    83,     5,    -1,    71,   181,
588       -1,    72,   181,    -1,    73,   181,    -1,    75,   178,   178,
589      178,    -1,    74,   178,   178,   178,    -1,    61,     5,    -1,
590       63,    34,   171,    35,    -1,    83,    34,    66,   157,   156,
591       35,    -1,   156,   158,    -1,   158,    -1,    84,    -1,    85,
592       -1,   159,    -1,   160,    -1,   161,    -1,   162,    -1,   163,
593       -1,   165,    -1,   164,    -1,   166,    -1,   167,    -1,   168,
594       -1,    86,     5,    -1,    87,   176,   176,   176,    -1,    88,
595      176,   176,   176,    -1,    89,   178,   178,    -1,    90,   177,
596       -1,    91,   177,    -1,    92,   178,    -1,    93,   177,    -1,
597       94,   178,   178,   178,    -1,    95,   180,    -1,    -1,    60,
598        6,    34,   170,   171,    35,    -1,   171,   172,    -1,   172,
599       -1,    -1,    -1,     6,    62,   173,   175,   174,    64,    -1,
600      175,     7,    -1,     7,    -1,   177,    -1,   178,    -1,     4,
601       -1,     3,    -1,     3,    -1,     3,    -1,     3,    -1
602 };
603
604 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
605 static const unsigned short int yyrline[] =
606 {
607        0,   144,   144,   145,   148,   149,   150,   154,   164,   165,
608      165,   168,   169,   170,   171,   173,   174,   175,   176,   177,
609      178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
610      188,   189,   191,   192,   193,   194,   199,   203,   208,   212,
611      218,   222,   226,   230,   234,   238,   242,   246,   250,   254,
612      258,   262,   266,   270,   274,   278,   283,   292,   303,   304,
613      307,   315,   316,   317,   318,   322,   327,   332,   337,   355,
614      354,   374,   375,   378,   383,   388,   393,   399,   411,   412,
615      413,   414,   415,   416,   417,   418,   419,   424,   429,   435,
616      441,   447,   452,   464,   477,   483,   493,   504,   505,   508,
617      513,   517,   518,   519,   520,   521,   522,   523,   524,   525,
618      526,   531,   536,   541,   546,   552,   557,   562,   567,   572,
619      577,   588,   588,   598,   598,   601,   602,   601,   609,   612,
620      622,   625,   637,   639,   645,   656,   668
621 };
622 #endif
623
624 #if YYDEBUG || YYERROR_VERBOSE
625 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
626    First, the terminals, then, starting at YYNTOKENS, nonterminals. */
627 static const char *const yytname[] =
628 {
629   "$end", "error", "$undefined", "DT_INTEGER", "DT_FLOAT", "DT_STRING",
630   "DT_ATTRNAME", "DT_ATTRVALUE", "KW_LBMSIM", "KW_COMPARELBM",
631   "KW_ANIFRAMETIME", "KW_DEBUGMODE", "KW_P_RELAXTIME", "KW_P_REYNOLDS",
632   "KW_P_VISCOSITY", "KW_P_SOUNDSPEED", "KW_P_DOMAINSIZE", "KW_P_FORCE",
633   "KW_P_TIMELENGTH", "KW_P_STEPTIME", "KW_P_TIMEFACTOR",
634   "KW_P_ANIFRAMETIME", "KW_P_ANISTART", "KW_P_SURFACETENSION",
635   "KW_P_ACTIVATE", "KW_P_DEACTIVATE", "KW_P_DENSITY", "KW_P_CELLSIZE",
636   "KW_P_GSTAR", "KW_PFSPATH", "KW_PARTLINELENGTH", "KW_PARTICLES",
637   "KW_FRAMESPERSEC", "KW_RAYTRACING", "KW_PAROPEN", "KW_PARCLOSE",
638   "KW_FILENAME", "KW_PMCAUSTICS", "KW_MAXRAYDEPTH", "KW_CAUSTICDIST",
639   "KW_CAUSTICPHOT", "KW_SHADOWMAPBIAS", "KW_TREEMAXDEPTH",
640   "KW_TREEMAXTRIANGLES", "KW_RESOLUTION", "KW_ANTIALIAS", "KW_EYEPOINT",
641   "KW_ANISTART", "KW_ANIFRAMES", "KW_FRAMESKIP", "KW_LOOKAT", "KW_UPVEC",
642   "KW_FOVY", "KW_ASPECT", "KW_AMBIENCE", "KW_BACKGROUND", "KW_DEBUGPIXEL",
643   "KW_TESTMODE", "KW_OPENGLATTR", "KW_BLENDERATTR", "KW_ATTRIBUTE",
644   "KW_OBJATTR", "KW_EQUALS", "KW_DEFINEATTR", "KW_ATTREND", "KW_GEOMETRY",
645   "KW_TYPE", "KW_GEOTYPE_BOX", "KW_GEOTYPE_FLUID", "KW_GEOTYPE_OBJMODEL",
646   "KW_GEOTYPE_SPHERE", "KW_CASTSHADOWS", "KW_RECEIVESHADOWS", "KW_VISIBLE",
647   "KW_BOX_END", "KW_BOX_START", "KW_POLY", "KW_NUMVERTICES", "KW_VERTEX",
648   "KW_NUMPOLYGONS", "KW_ISOSURF", "KW_FILEMODE", "KW_INVERT",
649   "KW_MATERIAL", "KW_MATTYPE_PHONG", "KW_MATTYPE_BLINN", "KW_NAME",
650   "KW_AMBIENT", "KW_DIFFUSE", "KW_SPECULAR", "KW_MIRROR",
651   "KW_TRANSPARENCE", "KW_REFRACINDEX", "KW_TRANSADDITIVE",
652   "KW_TRANSATTCOL", "KW_FRESNEL", "KW_LIGHT", "KW_ACTIVE", "KW_COLOUR",
653   "KW_POSITION", "KW_LIGHT_OMNI", "KW_CAUSTICPHOTONS",
654   "KW_CAUSTICSTRENGTH", "KW_SHADOWMAP", "KW_CAUSTICSMAP", "$accept",
655   "desc_line", "desc_expression", "toggledebug_expression",
656   "raytrace_section", "raytrace_line", "raytrace_expression",
657   "anistart_expression", "aniframetime_expression", "aniframes_expression",
658   "frameskip_expression", "resolution_expression", "antialias_expression",
659   "eyepoint_expression", "lookat_expression", "upvec_expression",
660   "fovy_expression", "aspect_expression", "ambience_expression",
661   "background_expression", "filename_expression",
662   "treemaxdepth_expression", "treemaxtriangles_expression",
663   "maxraydepth_expression", "debugpixel_expression", "testmode_expression",
664   "openglattr_expr", "blenderattr_expr", "light_expression",
665   "lightsettings_line", "lighttype_expression", "lightsettings_expression",
666   "lightactive_expression", "lightcastshadows_expression",
667   "lightcolor_expression", "lightposition_expression",
668   "geometry_expression", "@1", "geometrysettings_line",
669   "geometrytype_expression", "geometrysettings_expression",
670   "geometryexpression_name", "geometryexpression_propname",
671   "geometryexpression_castshadows", "geometryexpression_recshadows",
672   "geometryexpression_visible", "geometryexpression_boxstart",
673   "geometryexpression_boxend", "geometryexpression_attrib",
674   "geometryexpression_defattrib", "material_expression",
675   "materialsettings_line", "materialtype_expression",
676   "materialsettings_expression", "materialexpression_name",
677   "materialexpression_ambient", "materialexpression_diffuse",
678   "materialexpression_specular", "materialexpression_mirror",
679   "materialexpression_transparence", "materialexpression_refracindex",
680   "materialexpression_transadd", "materialexpression_transattcol",
681   "materialexpression_fresnel", "attribute_section", "@2",
682   "attribute_line", "attribute_expression", "@3", "@4", "attrvalue_list",
683   "DT_COLOR", "DT_ZEROTOONE", "DT_REALVAL", "DT_INTLTZERO", "DT_POSINT",
684   "DT_BOOLEAN", 0
685 };
686 #endif
687
688 # ifdef YYPRINT
689 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
690    token YYLEX-NUM.  */
691 static const unsigned short int yytoknum[] =
692 {
693        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
694      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
695      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
696      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
697      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
698      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
699      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
700      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
701      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
702      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
703      355,   356,   357,   358,   359
704 };
705 # endif
706
707 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
708 static const unsigned char yyr1[] =
709 {
710        0,   105,   106,   106,   107,   107,   107,   108,   109,   110,
711      110,   111,   111,   111,   111,   111,   111,   111,   111,   111,
712      111,   111,   111,   111,   111,   111,   111,   111,   111,   111,
713      111,   111,   111,   111,   111,   111,   112,   113,   114,   115,
714      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
715      126,   127,   128,   129,   130,   131,   132,   133,   134,   134,
716      135,   136,   136,   136,   136,   137,   138,   139,   140,   142,
717      141,   143,   143,   144,   144,   144,   144,   144,   145,   145,
718      145,   145,   145,   145,   145,   145,   145,   146,   147,   148,
719      149,   150,   151,   152,   153,   154,   155,   156,   156,   157,
720      157,   158,   158,   158,   158,   158,   158,   158,   158,   158,
721      158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
722      168,   170,   169,   171,   171,   173,   174,   172,   175,   175,
723      176,   177,   178,   178,   179,   180,   181
724 };
725
726 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
727 static const unsigned char yyr2[] =
728 {
729        0,     2,     2,     1,     1,     1,     1,     2,     4,     2,
730        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
731        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
732        1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
733        3,     2,     4,     4,     4,     2,     2,     4,     4,     2,
734        2,     2,     2,     3,     2,     2,     2,     6,     2,     1,
735        1,     1,     1,     1,     1,     2,     2,     4,     4,     0,
736        7,     2,     1,     1,     1,     1,     1,     1,     1,     1,
737        1,     1,     1,     1,     1,     1,     1,     2,     2,     2,
738        2,     2,     4,     4,     2,     4,     6,     2,     1,     1,
739        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
740        1,     2,     4,     4,     3,     2,     2,     2,     2,     4,
741        2,     0,     6,     2,     1,     0,     0,     6,     2,     1,
742        1,     1,     1,     1,     1,     1,     1
743 };
744
745 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
746    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
747    means the default is an error.  */
748 static const unsigned char yydefact[] =
749 {
750        0,     0,     0,     0,     0,     3,     6,     4,     5,     7,
751        0,     0,     1,     2,     0,     0,     0,     0,     0,     0,
752        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
753        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
754       10,    12,    13,    11,    14,    15,    16,    17,    18,    19,
755       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
756       30,    31,    32,    33,    35,    34,   121,   125,   135,    37,
757       49,   134,    52,    50,    51,     0,    41,   133,   132,     0,
758       36,    38,   136,    39,     0,     0,    45,    46,     0,     0,
759        0,    54,    55,    56,     0,     0,     0,     8,     9,     0,
760        0,    40,     0,     0,     0,     0,     0,    53,     0,     0,
761        0,     0,   124,   129,   126,    42,    43,    44,    47,    48,
762       76,    77,    73,    75,    74,    69,    99,   100,     0,    60,
763        0,   122,   123,   128,     0,     0,     0,     0,     0,     0,
764        0,     0,     0,     0,     0,     0,     0,    98,   101,   102,
765      103,   104,   105,   107,   106,   108,   109,   110,     0,     0,
766        0,     0,     0,    59,    61,    62,    63,    64,   127,     0,
767        0,     0,     0,     0,     0,     0,     0,     0,     0,    72,
768       78,    79,    80,    81,    82,    83,    84,    85,    86,   111,
769        0,   130,   131,     0,     0,   115,   116,   117,   118,     0,
770      120,    96,    97,    66,    65,     0,     0,    57,    58,    94,
771        0,    89,    90,    91,     0,     0,    88,    87,    70,    71,
772        0,     0,   114,     0,     0,     0,     0,     0,     0,   112,
773      113,   119,    67,    68,    95,    93,    92
774 };
775
776 /* YYDEFGOTO[NTERM-NUM]. */
777 static const short int yydefgoto[] =
778 {
779       -1,     4,     5,     6,     7,    39,    40,    41,    42,    43,
780       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
781       54,    55,    56,    57,    58,    59,    60,    61,    62,   162,
782      130,   163,   164,   165,   166,   167,    63,   135,   178,   125,
783      179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
784       64,   146,   128,   147,   148,   149,   150,   151,   152,   153,
785      154,   155,   156,   157,     8,    99,   111,    65,   100,   134,
786      114,   190,   191,   192,    72,    69,    83
787 };
788
789 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
790    STATE-NUM.  */
791 #define YYPACT_NINF -111
792 static const short int yypact[] =
793 {
794       31,    10,   -18,    22,    12,  -111,  -111,  -111,  -111,  -111,
795      172,    -2,  -111,  -111,   -26,    41,    45,    43,    43,    43,
796       43,    48,    21,    41,    43,    51,    21,    21,    21,    21,
797       21,    21,    55,    51,    54,    60,    19,    34,    35,    50,
798     -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,
799     -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,
800     -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,
801     -111,  -111,  -111,  -111,  -111,    43,  -111,  -111,  -111,    21,
802     -111,  -111,  -111,  -111,    21,    21,  -111,  -111,    21,    21,
803       67,  -111,  -111,  -111,   -11,     5,    23,  -111,  -111,    81,
804       83,  -111,    21,    21,    21,    21,    21,  -111,     9,   -50,
805       11,     8,  -111,  -111,   105,  -111,  -111,  -111,  -111,  -111,
806     -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,   183,  -111,
807       52,  -111,  -111,  -111,    57,   171,   113,    21,    21,    21,
808       21,    21,    21,    21,    21,    41,    75,  -111,  -111,  -111,
809     -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,    51,    51,
810       21,    21,   -24,  -111,  -111,  -111,  -111,  -111,  -111,   114,
811       90,    51,    51,    51,    21,    21,   120,   121,   -34,  -111,
812     -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,
813       21,  -111,  -111,    21,    21,  -111,  -111,  -111,  -111,    21,
814     -111,  -111,  -111,  -111,  -111,    21,    21,  -111,  -111,  -111,
815       81,  -111,  -111,  -111,    21,    21,  -111,  -111,  -111,  -111,
816       21,    21,  -111,    21,    21,    21,    13,    21,    21,  -111,
817     -111,  -111,  -111,  -111,  -111,  -111,  -111
818 };
819
820 /* YYPGOTO[NTERM-NUM].  */
821 static const yysigned_char yypgoto[] =
822 {
823     -111,  -111,   125,  -111,  -111,  -111,    92,  -111,  -111,  -111,
824     -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,
825     -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,
826     -111,   -28,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,
827      -43,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,  -111,
828     -111,  -111,  -111,   -10,  -111,  -111,  -111,  -111,  -111,  -111,
829     -111,  -111,  -111,  -111,  -111,  -111,   -73,   -96,  -111,  -111,
830     -111,   -77,  -110,   -22,     2,   -13,   -31
831 };
832
833 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
834    positive, shift that token.  If negative, reduce the rule which
835    number is the opposite.  If zero, do what YYDEFACT says.
836    If YYTABLE_NINF, syntax error.  */
837 #define YYTABLE_NINF -1
838 static const unsigned char yytable[] =
839 {
840       79,   218,    91,   112,    84,    85,    86,    87,    88,    89,
841       80,   207,    12,     9,    14,   132,    10,   120,   121,    14,
842       73,    74,    75,     1,    77,    78,    81,   169,    11,   170,
843      195,   196,    66,   198,   126,   127,    67,   171,   172,   173,
844      174,   175,     1,   131,    68,     2,    71,   158,   234,   176,
845       70,    76,   177,    94,    82,   108,    14,   102,    90,    92,
846       15,   193,   103,   104,     2,    93,   105,   106,    95,    96,
847      107,   109,     3,   159,   160,   161,   122,   101,   123,   124,
848      115,   116,   117,   118,   119,    97,    16,    14,    17,   110,
849      113,     3,    18,    19,    20,    21,    22,    23,    24,    25,
850       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
851      201,   129,   133,   220,   112,    36,   221,   194,   189,   209,
852      197,   168,   199,   158,   210,   216,   217,   203,   204,    13,
853      132,    98,   200,    37,   208,   219,   202,   226,   205,   206,
854      211,   212,   213,   229,   230,     0,    38,     0,     0,   159,
855      160,   161,   214,   215,     0,     0,     0,     0,     0,     0,
856        0,   136,   137,   138,   139,   140,   141,   142,   143,   144,
857      145,     0,   222,     0,     0,     0,     0,   223,    14,     0,
858        0,     0,    15,   224,   225,     0,     0,     0,     0,     0,
859        0,     0,   227,   228,     0,     0,     0,     0,     0,     0,
860        0,   231,   232,   233,     0,   235,   236,     0,    16,     0,
861       17,     0,     0,     0,    18,    19,    20,    21,    22,    23,
862       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
863       34,    35,   169,     0,   170,     0,     0,    36,     0,     0,
864        0,     0,   171,   172,   173,   174,   175,     0,     0,     0,
865        0,     0,     0,     0,   176,    37,     0,   177,     0,     0,
866        0,     0,     0,     0,     0,     0,     0,     0,    38,   136,
867      137,   138,   139,   140,   141,   142,   143,   144,   145
868 };
869
870 static const short int yycheck[] =
871 {
872       22,    35,    33,    99,    26,    27,    28,    29,    30,    31,
873       23,    35,     0,     3,     6,   111,    34,     8,     9,     6,
874       18,    19,    20,    11,     3,     4,    24,    61,     6,    63,
875      140,   141,    34,   143,    84,    85,    62,    71,    72,    73,
876       74,    75,    11,    35,     3,    33,     3,    71,    35,    83,
877        5,     3,    86,    34,     3,    66,     6,    79,     3,     5,
878       10,   138,    84,    85,    33,     5,    88,    89,    34,    34,
879        3,    66,    60,    97,    98,    99,    67,    75,    69,    70,
880      102,   103,   104,   105,   106,    35,    36,     6,    38,    66,
881        7,    60,    42,    43,    44,    45,    46,    47,    48,    49,
882       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
883       35,   100,     7,   190,   210,    65,   193,   139,     5,     5,
884      142,    64,   144,    71,    34,     5,     5,   158,   159,     4,
885      226,    39,   145,    83,   162,   178,   146,   210,   160,   161,
886      171,   172,   173,   220,   221,    -1,    96,    -1,    -1,    97,
887       98,    99,   174,   175,    -1,    -1,    -1,    -1,    -1,    -1,
888       -1,    86,    87,    88,    89,    90,    91,    92,    93,    94,
889       95,    -1,   194,    -1,    -1,    -1,    -1,   199,     6,    -1,
890       -1,    -1,    10,   205,   206,    -1,    -1,    -1,    -1,    -1,
891       -1,    -1,   214,   215,    -1,    -1,    -1,    -1,    -1,    -1,
892       -1,   223,   224,   225,    -1,   227,   228,    -1,    36,    -1,
893       38,    -1,    -1,    -1,    42,    43,    44,    45,    46,    47,
894       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
895       58,    59,    61,    -1,    63,    -1,    -1,    65,    -1,    -1,
896       -1,    -1,    71,    72,    73,    74,    75,    -1,    -1,    -1,
897       -1,    -1,    -1,    -1,    83,    83,    -1,    86,    -1,    -1,
898       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    96,    86,
899       87,    88,    89,    90,    91,    92,    93,    94,    95
900 };
901
902 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
903    symbol of state STATE-NUM.  */
904 static const unsigned char yystos[] =
905 {
906        0,    11,    33,    60,   106,   107,   108,   109,   169,     3,
907       34,     6,     0,   107,     6,    10,    36,    38,    42,    43,
908       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
909       54,    55,    56,    57,    58,    59,    65,    83,    96,   110,
910      111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
911      121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
912      131,   132,   133,   141,   155,   172,    34,    62,     3,   180,
913        5,     3,   179,   179,   179,   179,     3,     3,     4,   178,
914      180,   179,     3,   181,   178,   178,   178,   178,   178,   178,
915        3,   181,     5,     5,    34,    34,    34,    35,   111,   170,
916      173,   179,   178,   178,   178,   178,   178,     3,    66,    66,
917       66,   171,   172,     7,   175,   178,   178,   178,   178,   178,
918        8,     9,    67,    69,    70,   144,    84,    85,   157,   100,
919      135,    35,   172,     7,   174,   142,    86,    87,    88,    89,
920       90,    91,    92,    93,    94,    95,   156,   158,   159,   160,
921      161,   162,   163,   164,   165,   166,   167,   168,    71,    97,
922       98,    99,   134,   136,   137,   138,   139,   140,    64,    61,
923       63,    71,    72,    73,    74,    75,    83,    86,   143,   145,
924      146,   147,   148,   149,   150,   151,   152,   153,   154,     5,
925      176,   177,   178,   176,   178,   177,   177,   178,   177,   178,
926      180,    35,   158,   181,   181,   178,   178,    35,   136,     5,
927       34,   181,   181,   181,   178,   178,     5,     5,    35,   145,
928      176,   176,   178,   178,   178,   178,   171,   178,   178,   176,
929      176,   178,   178,   178,    35,   178,   178
930 };
931
932 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
933 # define YYSIZE_T __SIZE_TYPE__
934 #endif
935 #if ! defined (YYSIZE_T) && defined (size_t)
936 # define YYSIZE_T size_t
937 #endif
938 #if ! defined (YYSIZE_T)
939 # if defined (__STDC__) || defined (__cplusplus)
940 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
941 #  define YYSIZE_T size_t
942 # endif
943 #endif
944 #if ! defined (YYSIZE_T)
945 # define YYSIZE_T unsigned int
946 #endif
947
948 #define yyerrok         (yyerrstatus = 0)
949 #define yyclearin       (yychar = YYEMPTY)
950 #define YYEMPTY         (-2)
951 #define YYEOF           0
952
953 #define YYACCEPT        goto yyacceptlab
954 #define YYABORT         goto yyabortlab
955 #define YYERROR         goto yyerrorlab
956
957
958 /* Like YYERROR except do call yyerror.  This remains here temporarily
959    to ease the transition to the new meaning of YYERROR, for GCC.
960    Once GCC version 2 has supplanted version 1, this can go.  */
961
962 #define YYFAIL          goto yyerrlab
963
964 #define YYRECOVERING()  (!!yyerrstatus)
965
966 #define YYBACKUP(Token, Value)                                  \
967 do                                                              \
968   if (yychar == YYEMPTY && yylen == 1)                          \
969     {                                                           \
970       yychar = (Token);                                         \
971       yylval = (Value);                                         \
972       yytoken = YYTRANSLATE (yychar);                           \
973       YYPOPSTACK;                                               \
974       goto yybackup;                                            \
975     }                                                           \
976   else                                                          \
977     {                                                           \
978       yyerror ("syntax error: cannot back up");\
979       YYERROR;                                                  \
980     }                                                           \
981 while (0)
982
983 #define YYTERROR        1
984 #define YYERRCODE       256
985
986 /* YYLLOC_DEFAULT -- Compute the default location (before the actions
987    are run).  */
988
989 #ifndef YYLLOC_DEFAULT
990 # define YYLLOC_DEFAULT(Current, Rhs, N)                \
991    ((Current).first_line   = (Rhs)[1].first_line,       \
992     (Current).first_column = (Rhs)[1].first_column,     \
993     (Current).last_line    = (Rhs)[N].last_line,        \
994     (Current).last_column  = (Rhs)[N].last_column)
995 #endif
996
997 /* YYLEX -- calling `yylex' with the right arguments.  */
998
999 #ifdef YYLEX_PARAM
1000 # define YYLEX yylex (YYLEX_PARAM)
1001 #else
1002 # define YYLEX yylex ()
1003 #endif
1004
1005 /* Enable debugging if requested.  */
1006 #if YYDEBUG
1007
1008 # ifndef YYFPRINTF
1009 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1010 #  define YYFPRINTF fprintf
1011 # endif
1012
1013 # define YYDPRINTF(Args)                        \
1014 do {                                            \
1015   if (yydebug)                                  \
1016     YYFPRINTF Args;                             \
1017 } while (0)
1018
1019 # define YYDSYMPRINT(Args)                      \
1020 do {                                            \
1021   if (yydebug)                                  \
1022     yysymprint Args;                            \
1023 } while (0)
1024
1025 # define YYDSYMPRINTF(Title, Token, Value, Location)            \
1026 do {                                                            \
1027   if (yydebug)                                                  \
1028     {                                                           \
1029       YYFPRINTF (stderr, "%s ", Title);                         \
1030       yysymprint (stderr,                                       \
1031                   Token, Value);        \
1032       YYFPRINTF (stderr, "\n");                                 \
1033     }                                                           \
1034 } while (0)
1035
1036 /*------------------------------------------------------------------.
1037 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1038 | TOP (included).                                                   |
1039 `------------------------------------------------------------------*/
1040
1041 #if defined (__STDC__) || defined (__cplusplus)
1042 static void
1043 yy_stack_print (short int *bottom, short int *top)
1044 #else
1045 static void
1046 yy_stack_print (bottom, top)
1047     short int *bottom;
1048     short int *top;
1049 #endif
1050 {
1051   YYFPRINTF (stderr, "Stack now");
1052   for (/* Nothing. */; bottom <= top; ++bottom)
1053     YYFPRINTF (stderr, " %d", *bottom);
1054   YYFPRINTF (stderr, "\n");
1055 }
1056
1057 # define YY_STACK_PRINT(Bottom, Top)                            \
1058 do {                                                            \
1059   if (yydebug)                                                  \
1060     yy_stack_print ((Bottom), (Top));                           \
1061 } while (0)
1062
1063
1064 /*------------------------------------------------.
1065 | Report that the YYRULE is going to be reduced.  |
1066 `------------------------------------------------*/
1067
1068 #if defined (__STDC__) || defined (__cplusplus)
1069 static void
1070 yy_reduce_print (int yyrule)
1071 #else
1072 static void
1073 yy_reduce_print (yyrule)
1074     int yyrule;
1075 #endif
1076 {
1077   int yyi;
1078   unsigned int yylno = yyrline[yyrule];
1079   YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
1080              yyrule - 1, yylno);
1081   /* Print the symbols being reduced, and their result.  */
1082   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
1083     YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
1084   YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
1085 }
1086
1087 # define YY_REDUCE_PRINT(Rule)          \
1088 do {                                    \
1089   if (yydebug)                          \
1090     yy_reduce_print (Rule);             \
1091 } while (0)
1092
1093 /* Nonzero means print parse trace.  It is left uninitialized so that
1094    multiple parsers can coexist.  */
1095 int yydebug;
1096 #else /* !YYDEBUG */
1097 # define YYDPRINTF(Args)
1098 # define YYDSYMPRINT(Args)
1099 # define YYDSYMPRINTF(Title, Token, Value, Location)
1100 # define YY_STACK_PRINT(Bottom, Top)
1101 # define YY_REDUCE_PRINT(Rule)
1102 #endif /* !YYDEBUG */
1103
1104
1105 /* YYINITDEPTH -- initial size of the parser's stacks.  */
1106 #ifndef YYINITDEPTH
1107 # define YYINITDEPTH 200
1108 #endif
1109
1110 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1111    if the built-in stack extension method is used).
1112
1113    Do not make this value too large; the results are undefined if
1114    SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1115    evaluated with infinite-precision integer arithmetic.  */
1116
1117 #if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
1118 # undef YYMAXDEPTH
1119 #endif
1120
1121 #ifndef YYMAXDEPTH
1122 # define YYMAXDEPTH 10000
1123 #endif
1124
1125 \f
1126
1127 #if YYERROR_VERBOSE
1128
1129 # ifndef yystrlen
1130 #  if defined (__GLIBC__) && defined (_STRING_H)
1131 #   define yystrlen strlen
1132 #  else
1133 /* Return the length of YYSTR.  */
1134 static YYSIZE_T
1135 #   if defined (__STDC__) || defined (__cplusplus)
1136 yystrlen (const char *yystr)
1137 #   else
1138 yystrlen (yystr)
1139      const char *yystr;
1140 #   endif
1141 {
1142   register const char *yys = yystr;
1143
1144   while (*yys++ != '\0')
1145     continue;
1146
1147   return yys - yystr - 1;
1148 }
1149 #  endif
1150 # endif
1151
1152 # ifndef yystpcpy
1153 #  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1154 #   define yystpcpy stpcpy
1155 #  else
1156 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1157    YYDEST.  */
1158 static char *
1159 #   if defined (__STDC__) || defined (__cplusplus)
1160 yystpcpy (char *yydest, const char *yysrc)
1161 #   else
1162 yystpcpy (yydest, yysrc)
1163      char *yydest;
1164      const char *yysrc;
1165 #   endif
1166 {
1167   register char *yyd = yydest;
1168   register const char *yys = yysrc;
1169
1170   while ((*yyd++ = *yys++) != '\0')
1171     continue;
1172
1173   return yyd - 1;
1174 }
1175 #  endif
1176 # endif
1177
1178 #endif /* !YYERROR_VERBOSE */
1179
1180 \f
1181
1182 #if YYDEBUG
1183 /*--------------------------------.
1184 | Print this symbol on YYOUTPUT.  |
1185 `--------------------------------*/
1186
1187 #if defined (__STDC__) || defined (__cplusplus)
1188 static void
1189 yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
1190 #else
1191 static void
1192 yysymprint (yyoutput, yytype, yyvaluep)
1193     FILE *yyoutput;
1194     int yytype;
1195     YYSTYPE *yyvaluep;
1196 #endif
1197 {
1198   /* Pacify ``unused variable'' warnings.  */
1199   (void) yyvaluep;
1200
1201   if (yytype < YYNTOKENS)
1202     {
1203       YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
1204 # ifdef YYPRINT
1205       YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
1206 # endif
1207     }
1208   else
1209     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
1210
1211   switch (yytype)
1212     {
1213       default:
1214         break;
1215     }
1216   YYFPRINTF (yyoutput, ")");
1217 }
1218
1219 #endif /* ! YYDEBUG */
1220 /*-----------------------------------------------.
1221 | Release the memory associated to this symbol.  |
1222 `-----------------------------------------------*/
1223
1224 #if defined (__STDC__) || defined (__cplusplus)
1225 static void
1226 yydestruct (int yytype, YYSTYPE *yyvaluep)
1227 #else
1228 static void
1229 yydestruct (yytype, yyvaluep)
1230     int yytype;
1231     YYSTYPE *yyvaluep;
1232 #endif
1233 {
1234   /* Pacify ``unused variable'' warnings.  */
1235   (void) yyvaluep;
1236
1237   switch (yytype)
1238     {
1239
1240       default:
1241         break;
1242     }
1243 }
1244 \f
1245
1246 /* Prevent warnings from -Wmissing-prototypes.  */
1247
1248 #ifdef YYPARSE_PARAM
1249 # if defined (__STDC__) || defined (__cplusplus)
1250 int yyparse (void *YYPARSE_PARAM);
1251 # else
1252 int yyparse ();
1253 # endif
1254 #else /* ! YYPARSE_PARAM */
1255 #if defined (__STDC__) || defined (__cplusplus)
1256 int yyparse (void);
1257 #else
1258 int yyparse ();
1259 #endif
1260 #endif /* ! YYPARSE_PARAM */
1261
1262
1263
1264 /* The lookahead symbol.  */
1265 int yychar;
1266
1267 /* The semantic value of the lookahead symbol.  */
1268 YYSTYPE yylval;
1269
1270 /* Number of syntax errors so far.  */
1271 int yynerrs;
1272
1273
1274
1275 /*----------.
1276 | yyparse.  |
1277 `----------*/
1278
1279 #ifdef YYPARSE_PARAM
1280 # if defined (__STDC__) || defined (__cplusplus)
1281 int yyparse (void *YYPARSE_PARAM)
1282 # else
1283 int yyparse (YYPARSE_PARAM)
1284   void *YYPARSE_PARAM;
1285 # endif
1286 #else /* ! YYPARSE_PARAM */
1287 #if defined (__STDC__) || defined (__cplusplus)
1288 int
1289 yyparse (void)
1290 #else
1291 int
1292 yyparse ()
1293
1294 #endif
1295 #endif
1296 {
1297   
1298   register int yystate;
1299   register int yyn;
1300   int yyresult;
1301   /* Number of tokens to shift before error messages enabled.  */
1302   int yyerrstatus;
1303   /* Lookahead token as an internal (translated) token number.  */
1304   int yytoken = 0;
1305
1306   /* Three stacks and their tools:
1307      `yyss': related to states,
1308      `yyvs': related to semantic values,
1309      `yyls': related to locations.
1310
1311      Refer to the stacks thru separate pointers, to allow yyoverflow
1312      to reallocate them elsewhere.  */
1313
1314   /* The state stack.  */
1315   short int yyssa[YYINITDEPTH];
1316   short int *yyss = yyssa;
1317   register short int *yyssp;
1318
1319   /* The semantic value stack.  */
1320   YYSTYPE yyvsa[YYINITDEPTH];
1321   YYSTYPE *yyvs = yyvsa;
1322   register YYSTYPE *yyvsp;
1323
1324
1325
1326 #define YYPOPSTACK   (yyvsp--, yyssp--)
1327
1328   YYSIZE_T yystacksize = YYINITDEPTH;
1329
1330   /* The variables used to return semantic value and location from the
1331      action routines.  */
1332   YYSTYPE yyval;
1333
1334
1335   /* When reducing, the number of symbols on the RHS of the reduced
1336      rule.  */
1337   int yylen;
1338
1339   YYDPRINTF ((stderr, "Starting parse\n"));
1340
1341   yystate = 0;
1342   yyerrstatus = 0;
1343   yynerrs = 0;
1344   yychar = YYEMPTY;             /* Cause a token to be read.  */
1345
1346   /* Initialize stack pointers.
1347      Waste one element of value and location stack
1348      so that they stay on the same level as the state stack.
1349      The wasted elements are never initialized.  */
1350
1351   yyssp = yyss;
1352   yyvsp = yyvs;
1353
1354
1355   goto yysetstate;
1356
1357 /*------------------------------------------------------------.
1358 | yynewstate -- Push a new state, which is found in yystate.  |
1359 `------------------------------------------------------------*/
1360  yynewstate:
1361   /* In all cases, when you get here, the value and location stacks
1362      have just been pushed. so pushing a state here evens the stacks.
1363      */
1364   yyssp++;
1365
1366  yysetstate:
1367   *yyssp = yystate;
1368
1369   if (yyss + yystacksize - 1 <= yyssp)
1370     {
1371       /* Get the current used size of the three stacks, in elements.  */
1372       YYSIZE_T yysize = yyssp - yyss + 1;
1373
1374 #ifdef yyoverflow
1375       {
1376         /* Give user a chance to reallocate the stack. Use copies of
1377            these so that the &'s don't force the real ones into
1378            memory.  */
1379         YYSTYPE *yyvs1 = yyvs;
1380         short int *yyss1 = yyss;
1381
1382
1383         /* Each stack pointer address is followed by the size of the
1384            data in use in that stack, in bytes.  This used to be a
1385            conditional around just the two extra args, but that might
1386            be undefined if yyoverflow is a macro.  */
1387         yyoverflow ("parser stack overflow",
1388                     &yyss1, yysize * sizeof (*yyssp),
1389                     &yyvs1, yysize * sizeof (*yyvsp),
1390
1391                     &yystacksize);
1392
1393         yyss = yyss1;
1394         yyvs = yyvs1;
1395       }
1396 #else /* no yyoverflow */
1397 # ifndef YYSTACK_RELOCATE
1398       goto yyoverflowlab;
1399 # else
1400       /* Extend the stack our own way.  */
1401       if (YYMAXDEPTH <= yystacksize)
1402         goto yyoverflowlab;
1403       yystacksize *= 2;
1404       if (YYMAXDEPTH < yystacksize)
1405         yystacksize = YYMAXDEPTH;
1406
1407       {
1408         short int *yyss1 = yyss;
1409         union yyalloc *yyptr =
1410           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1411         if (! yyptr)
1412           goto yyoverflowlab;
1413         YYSTACK_RELOCATE (yyss);
1414         YYSTACK_RELOCATE (yyvs);
1415
1416 #  undef YYSTACK_RELOCATE
1417         if (yyss1 != yyssa)
1418           YYSTACK_FREE (yyss1);
1419       }
1420 # endif
1421 #endif /* no yyoverflow */
1422
1423       yyssp = yyss + yysize - 1;
1424       yyvsp = yyvs + yysize - 1;
1425
1426
1427       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1428                   (unsigned long int) yystacksize));
1429
1430       if (yyss + yystacksize - 1 <= yyssp)
1431         YYABORT;
1432     }
1433
1434   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1435
1436   goto yybackup;
1437
1438 /*-----------.
1439 | yybackup.  |
1440 `-----------*/
1441 yybackup:
1442
1443 /* Do appropriate processing given the current state.  */
1444 /* Read a lookahead token if we need one and don't already have one.  */
1445 /* yyresume: */
1446
1447   /* First try to decide what to do without reference to lookahead token.  */
1448
1449   yyn = yypact[yystate];
1450   if (yyn == YYPACT_NINF)
1451     goto yydefault;
1452
1453   /* Not known => get a lookahead token if don't already have one.  */
1454
1455   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
1456   if (yychar == YYEMPTY)
1457     {
1458       YYDPRINTF ((stderr, "Reading a token: "));
1459       yychar = YYLEX;
1460     }
1461
1462   if (yychar <= YYEOF)
1463     {
1464       yychar = yytoken = YYEOF;
1465       YYDPRINTF ((stderr, "Now at end of input.\n"));
1466     }
1467   else
1468     {
1469       yytoken = YYTRANSLATE (yychar);
1470       YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
1471     }
1472
1473   /* If the proper action on seeing token YYTOKEN is to reduce or to
1474      detect an error, take that action.  */
1475   yyn += yytoken;
1476   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1477     goto yydefault;
1478   yyn = yytable[yyn];
1479   if (yyn <= 0)
1480     {
1481       if (yyn == 0 || yyn == YYTABLE_NINF)
1482         goto yyerrlab;
1483       yyn = -yyn;
1484       goto yyreduce;
1485     }
1486
1487   if (yyn == YYFINAL)
1488     YYACCEPT;
1489
1490   /* Shift the lookahead token.  */
1491   YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
1492
1493   /* Discard the token being shifted unless it is eof.  */
1494   if (yychar != YYEOF)
1495     yychar = YYEMPTY;
1496
1497   *++yyvsp = yylval;
1498
1499
1500   /* Count tokens shifted since error; after three, turn off error
1501      status.  */
1502   if (yyerrstatus)
1503     yyerrstatus--;
1504
1505   yystate = yyn;
1506   goto yynewstate;
1507
1508
1509 /*-----------------------------------------------------------.
1510 | yydefault -- do the default action for the current state.  |
1511 `-----------------------------------------------------------*/
1512 yydefault:
1513   yyn = yydefact[yystate];
1514   if (yyn == 0)
1515     goto yyerrlab;
1516   goto yyreduce;
1517
1518
1519 /*-----------------------------.
1520 | yyreduce -- Do a reduction.  |
1521 `-----------------------------*/
1522 yyreduce:
1523   /* yyn is the number of a rule to reduce with.  */
1524   yylen = yyr2[yyn];
1525
1526   /* If YYLEN is nonzero, implement the default value of the action:
1527      `$$ = $1'.
1528
1529      Otherwise, the following line sets YYVAL to garbage.
1530      This behavior is undocumented and Bison
1531      users should not rely upon it.  Assigning to YYVAL
1532      unconditionally makes the parser a bit smaller, and it avoids a
1533      GCC warning that YYVAL may be used uninitialized.  */
1534   yyval = yyvsp[1-yylen];
1535
1536
1537   YY_REDUCE_PRINT (yyn);
1538   switch (yyn)
1539     {
1540         case 7:
1541 #line 154 "src/cfgparser.yy"
1542     { yy_debug = yyvsp[0].intValue; }
1543     break;
1544
1545   case 36:
1546 #line 200 "src/cfgparser.yy"
1547     { reglob->setAniStart( yyvsp[0].intValue ); }
1548     break;
1549
1550   case 37:
1551 #line 204 "src/cfgparser.yy"
1552     { /*reglob->setAniFrameTime( $2 );*/ debMsgStd("cfgparser",DM_NOTIFY,"Deprecated setting aniframetime!",1); }
1553     break;
1554
1555   case 38:
1556 #line 209 "src/cfgparser.yy"
1557     { reglob->setAniFrames( (yyvsp[0].intValue)-1 ); }
1558     break;
1559
1560   case 39:
1561 #line 213 "src/cfgparser.yy"
1562     { reglob->setFrameSkip( (yyvsp[0].intValue) ); }
1563     break;
1564
1565   case 40:
1566 #line 219 "src/cfgparser.yy"
1567     { reglob->setResX( yyvsp[-1].intValue ); reglob->setResY( yyvsp[0].intValue); }
1568     break;
1569
1570   case 41:
1571 #line 223 "src/cfgparser.yy"
1572     { reglob->setAADepth( yyvsp[0].intValue ); }
1573     break;
1574
1575   case 42:
1576 #line 227 "src/cfgparser.yy"
1577     { reglob->setEye( ntlVec3Gfx(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); }
1578     break;
1579
1580   case 43:
1581 #line 231 "src/cfgparser.yy"
1582     { reglob->setLookat( ntlVec3Gfx(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); }
1583     break;
1584
1585   case 44:
1586 #line 235 "src/cfgparser.yy"
1587     { reglob->setUpVec( ntlVec3Gfx(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); }
1588     break;
1589
1590   case 45:
1591 #line 239 "src/cfgparser.yy"
1592     { reglob->setFovy( yyvsp[0].floatValue ); }
1593     break;
1594
1595   case 46:
1596 #line 243 "src/cfgparser.yy"
1597     { reglob->setAspect( yyvsp[0].floatValue ); }
1598     break;
1599
1600   case 47:
1601 #line 247 "src/cfgparser.yy"
1602     { reglob->setAmbientLight( ntlColor(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue)  ); }
1603     break;
1604
1605   case 48:
1606 #line 251 "src/cfgparser.yy"
1607     { reglob->setBackgroundCol( ntlColor(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); }
1608     break;
1609
1610   case 49:
1611 #line 255 "src/cfgparser.yy"
1612     { reglob->setOutFilename( yyvsp[0].charValue ); }
1613     break;
1614
1615   case 50:
1616 #line 259 "src/cfgparser.yy"
1617     { reglob->setTreeMaxDepth( yyvsp[0].intValue ); }
1618     break;
1619
1620   case 51:
1621 #line 263 "src/cfgparser.yy"
1622     { reglob->setTreeMaxTriangles( yyvsp[0].intValue ); }
1623     break;
1624
1625   case 52:
1626 #line 267 "src/cfgparser.yy"
1627     { reglob->setRayMaxDepth( yyvsp[0].intValue ); }
1628     break;
1629
1630   case 53:
1631 #line 271 "src/cfgparser.yy"
1632     { reglob->setDebugPixel( yyvsp[-1].intValue, yyvsp[0].intValue ); }
1633     break;
1634
1635   case 54:
1636 #line 275 "src/cfgparser.yy"
1637     { reglob->setTestMode( yyvsp[0].intValue ); }
1638     break;
1639
1640   case 55:
1641 #line 279 "src/cfgparser.yy"
1642     { if(attrs[yyvsp[0].charValue] == NULL){ yyerror("OPENGL ATTRIBUTES: The attribute was not found!"); }
1643                         reglob->getOpenGlAttributes()->import( attrs[yyvsp[0].charValue] ); }
1644     break;
1645
1646   case 56:
1647 #line 284 "src/cfgparser.yy"
1648     { if(attrs[yyvsp[0].charValue] == NULL){ yyerror("BLENDER ATTRIBUTES: The attribute was not found!"); }
1649                         reglob->getBlenderAttributes()->import( attrs[yyvsp[0].charValue] ); }
1650     break;
1651
1652   case 57:
1653 #line 296 "src/cfgparser.yy"
1654     { 
1655                                 /* reset light pointers */
1656                                 currentLightOmni = NULL; 
1657                         }
1658     break;
1659
1660   case 60:
1661 #line 308 "src/cfgparser.yy"
1662     { currentLightOmni = new ntlLightObject( reglob );
1663                   currentLight = currentLightOmni;
1664                         reglob->getLightList()->push_back(currentLight);
1665                 }
1666     break;
1667
1668   case 65:
1669 #line 322 "src/cfgparser.yy"
1670     { 
1671                         currentLight->setActive( yyvsp[0].intValue ); 
1672                 }
1673     break;
1674
1675   case 66:
1676 #line 327 "src/cfgparser.yy"
1677     { 
1678                         currentLight->setCastShadows( yyvsp[0].intValue ); 
1679                 }
1680     break;
1681
1682   case 67:
1683 #line 332 "src/cfgparser.yy"
1684     { 
1685                         currentLight->setColor( ntlColor(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); 
1686                 }
1687     break;
1688
1689   case 68:
1690 #line 337 "src/cfgparser.yy"
1691     { 
1692                 int init = 0;
1693                 if(currentLightOmni != NULL) {
1694                         currentLightOmni->setPosition( ntlVec3Gfx(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); init = 1; }
1695                 if(!init) yyerror("This property can only be set for omni-directional and rectangular lights!");
1696         }
1697     break;
1698
1699   case 69:
1700 #line 355 "src/cfgparser.yy"
1701     {
1702                                 // geo classes have attributes...
1703                                 reglob->getScene()->addGeoClass(currentGeoClass);
1704                                 currentAttrib = currentGeoClass->getAttributeList();
1705                         }
1706     break;
1707
1708   case 70:
1709 #line 361 "src/cfgparser.yy"
1710     { 
1711                                 /* reset geometry object pointers */
1712                                 currentGeoObj                    = NULL; 
1713                                 currentGeoClass          = NULL; 
1714                                 currentGeometryBox = NULL; 
1715                                 currentGeometrySim = NULL; 
1716                                 currentGeometryModel = NULL; 
1717                                 currentGeometrySphere = NULL; 
1718                                 currentAttrib = NULL;
1719                         }
1720     break;
1721
1722   case 73:
1723 #line 378 "src/cfgparser.yy"
1724     { 
1725                         currentGeometryBox = new ntlGeometryBox( );
1726                         currentGeoClass = currentGeometryBox;
1727                         currentGeoObj = (ntlGeometryObject*)( currentGeometryBox );
1728                 }
1729     break;
1730
1731   case 74:
1732 #line 383 "src/cfgparser.yy"
1733     { 
1734                         currentGeometrySphere = new ntlGeometrySphere( );
1735                         currentGeoClass = currentGeometrySphere;
1736                         currentGeoObj = (ntlGeometryObject*)( currentGeometrySphere );
1737                 }
1738     break;
1739
1740   case 75:
1741 #line 388 "src/cfgparser.yy"
1742     { 
1743                         currentGeometryModel = new ntlGeometryObjModel( );
1744                         currentGeoClass = currentGeometryModel;
1745                         currentGeoObj = (ntlGeometryObject*)( currentGeometryModel );
1746                 }
1747     break;
1748
1749   case 76:
1750 #line 393 "src/cfgparser.yy"
1751     { 
1752                         currentGeometrySim = new SimulationObject();
1753                         currentGeoClass = currentGeometrySim;
1754                         reglob->getSims()->push_back(currentGeometrySim);
1755                         // dont add mcubes to geo list!
1756                 }
1757     break;
1758
1759   case 77:
1760 #line 399 "src/cfgparser.yy"
1761     { 
1762 #ifdef LBM_INCLUDE_TESTSOLVERS
1763                         currentGeometrySim = new SimulationCompareLbm();
1764                         currentGeoClass = currentGeometrySim;
1765                         reglob->getSims()->push_back(currentGeometrySim);
1766 #else // LBM_INCLUDE_TESTSOLVERS
1767                         errMsg("El'Beem::cfg","compare test solver not supported!");
1768 #endif // LBM_INCLUDE_TESTSOLVERS
1769                 }
1770     break;
1771
1772   case 87:
1773 #line 424 "src/cfgparser.yy"
1774     { 
1775                         currentGeoClass->setName( yyvsp[0].charValue ); 
1776                 }
1777     break;
1778
1779   case 88:
1780 #line 429 "src/cfgparser.yy"
1781     { 
1782                         if(currentGeoObj == NULL){ yyerror(" MATERIAL : This property can only be set for geometry objects!"); }
1783                         currentGeoObj->setMaterialName( yyvsp[0].charValue ); 
1784                 }
1785     break;
1786
1787   case 89:
1788 #line 435 "src/cfgparser.yy"
1789     { 
1790                         if(currentGeoObj == NULL){ yyerror(" CAST_SHADOW : This property can only be set for geometry objects!"); }
1791                         currentGeoObj->setCastShadows( yyvsp[0].intValue ); 
1792                 }
1793     break;
1794
1795   case 90:
1796 #line 441 "src/cfgparser.yy"
1797     { 
1798                         if(currentGeoObj == NULL){ yyerror(" RECEIVE_SHADOW : This property can only be set for geometry objects!"); }
1799                         currentGeoObj->setReceiveShadows( yyvsp[0].intValue ); 
1800                 }
1801     break;
1802
1803   case 91:
1804 #line 447 "src/cfgparser.yy"
1805     { 
1806                         currentGeoClass->setVisible( yyvsp[0].intValue ); 
1807                 }
1808     break;
1809
1810   case 92:
1811 #line 452 "src/cfgparser.yy"
1812     { 
1813                 int init = 0;
1814                 if(currentGeometryBox != NULL){ 
1815                         currentGeometryBox->setStart( ntlVec3Gfx(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); init=1; }
1816                 if(currentGeometrySim != NULL){ 
1817                         currentGeometrySim->setGeoStart( ntlVec3Gfx(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); init=1; }
1818                 if(currentGeometryModel != NULL){ 
1819                         currentGeometryModel->setStart( ntlVec3Gfx(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); init=1; }
1820                 if(!init ){ yyerror("BOXSTART : This property can only be set for box, objmodel, fluid and isosurface objects!"); }
1821         }
1822     break;
1823
1824   case 93:
1825 #line 464 "src/cfgparser.yy"
1826     { 
1827                 int init = 0;
1828                 if(currentGeometryBox != NULL){ 
1829                         currentGeometryBox->setEnd( ntlVec3Gfx(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); init=1; }
1830                 if(currentGeometrySim != NULL){ 
1831                         currentGeometrySim->setGeoEnd( ntlVec3Gfx(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); init=1; }
1832                 if(currentGeometryModel != NULL){ 
1833                         currentGeometryModel->setEnd( ntlVec3Gfx(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); init=1; }
1834                 if(!init ){ yyerror("BOXEND : This property can only be set for box, objmodel, fluid and isosurface objects!"); }
1835         }
1836     break;
1837
1838   case 94:
1839 #line 477 "src/cfgparser.yy"
1840     { 
1841                         if(attrs[yyvsp[0].charValue] == NULL){ yyerror("GEO ATTRIBUTES: The attribute was not found!"); }
1842                         currentGeoClass->getAttributeList()->import( attrs[yyvsp[0].charValue] ); 
1843                 }
1844     break;
1845
1846   case 95:
1847 #line 485 "src/cfgparser.yy"
1848     { }
1849     break;
1850
1851   case 96:
1852 #line 497 "src/cfgparser.yy"
1853     { 
1854                                 /* reset geometry object pointers */
1855                                 currentMaterial = NULL; 
1856                         }
1857     break;
1858
1859   case 99:
1860 #line 509 "src/cfgparser.yy"
1861     { currentMaterial = new ntlMaterial( );
1862                         currentMaterial = currentMaterial;
1863                         reglob->getMaterials()->push_back(currentMaterial);
1864                 }
1865     break;
1866
1867   case 100:
1868 #line 513 "src/cfgparser.yy"
1869     {
1870                 yyerror("MATTYPE: Blinn NYI!"); }
1871     break;
1872
1873   case 111:
1874 #line 531 "src/cfgparser.yy"
1875     { 
1876                         currentMaterial->setName( yyvsp[0].charValue ); 
1877                 }
1878     break;
1879
1880   case 112:
1881 #line 536 "src/cfgparser.yy"
1882     {
1883                         currentMaterial->setAmbientRefl( ntlColor(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); 
1884                 }
1885     break;
1886
1887   case 113:
1888 #line 541 "src/cfgparser.yy"
1889     { 
1890                         currentMaterial->setDiffuseRefl( ntlColor(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); 
1891                 }
1892     break;
1893
1894   case 114:
1895 #line 546 "src/cfgparser.yy"
1896     { 
1897                         currentMaterial->setSpecular( yyvsp[-1].floatValue ); 
1898                         currentMaterial->setSpecExponent( yyvsp[0].floatValue ); 
1899                 }
1900     break;
1901
1902   case 115:
1903 #line 552 "src/cfgparser.yy"
1904     { 
1905                         currentMaterial->setMirror( yyvsp[0].floatValue ); 
1906                 }
1907     break;
1908
1909   case 116:
1910 #line 557 "src/cfgparser.yy"
1911     { 
1912                         currentMaterial->setTransparence( yyvsp[0].floatValue ); 
1913                 }
1914     break;
1915
1916   case 117:
1917 #line 562 "src/cfgparser.yy"
1918     { 
1919                         currentMaterial->setRefracIndex( yyvsp[0].floatValue ); 
1920                 }
1921     break;
1922
1923   case 118:
1924 #line 567 "src/cfgparser.yy"
1925     { 
1926                         currentMaterial->setTransAdditive( yyvsp[0].floatValue ); 
1927                 }
1928     break;
1929
1930   case 119:
1931 #line 572 "src/cfgparser.yy"
1932     { 
1933                         currentMaterial->setTransAttCol( ntlColor(yyvsp[-2].floatValue,yyvsp[-1].floatValue,yyvsp[0].floatValue) ); 
1934                 }
1935     break;
1936
1937   case 120:
1938 #line 577 "src/cfgparser.yy"
1939     {
1940                 currentMaterial->setFresnel( yyvsp[0].intValue ); 
1941         }
1942     break;
1943
1944   case 121:
1945 #line 588 "src/cfgparser.yy"
1946     { 
1947                 currentAttrib = new AttributeList(yyvsp[-1].charValue); 
1948                 currentAttrName = yyvsp[-1].charValue; }
1949     break;
1950
1951   case 122:
1952 #line 591 "src/cfgparser.yy"
1953     { // store attribute
1954                         //std::cerr << " NEW ATTR " << currentAttrName << std::endl;
1955                         //currentAttrib->print();
1956                         attrs[currentAttrName] = currentAttrib;
1957                         currentAttrib = NULL; }
1958     break;
1959
1960   case 125:
1961 #line 601 "src/cfgparser.yy"
1962     { currentAttrValue.clear(); currentAttribAddName = yyvsp[-1].charValue; }
1963     break;
1964
1965   case 126:
1966 #line 602 "src/cfgparser.yy"
1967     {
1968       currentAttrib->addAttr( currentAttribAddName, currentAttrValue, lineCount); 
1969                         //std::cerr << " ADD ATTR " << currentAttribAddName << std::endl;
1970                         //currentAttrib->find( currentAttribAddName )->print();
1971                 }
1972     break;
1973
1974   case 128:
1975 #line 609 "src/cfgparser.yy"
1976     { 
1977                 //std::cerr << "LLL "<<$2<<endl; 
1978                 currentAttrValue.push_back(yyvsp[0].charValue); }
1979     break;
1980
1981   case 129:
1982 #line 612 "src/cfgparser.yy"
1983     {  
1984                 //std::cerr << "LRR "<<$1<<endl; 
1985                 currentAttrValue.push_back(yyvsp[0].charValue); }
1986     break;
1987
1988   case 131:
1989 #line 626 "src/cfgparser.yy"
1990     {
1991   if ( (yyvsp[0].floatValue < 0.0) || (yyvsp[0].floatValue > 1.0) ) {
1992     yyerror("Value out of range (only 0 to 1 allowed)");
1993   }
1994
1995   /* pass that value up the tree */
1996   yyval.floatValue = yyvsp[0].floatValue;
1997 }
1998     break;
1999
2000   case 132:
2001 #line 638 "src/cfgparser.yy"
2002     { yyval.floatValue = yyvsp[0].floatValue; }
2003     break;
2004
2005   case 133:
2006 #line 640 "src/cfgparser.yy"
2007     { yyval.floatValue = (float) yyvsp[0].intValue; /* conversion from integers */ }
2008     break;
2009
2010   case 134:
2011 #line 646 "src/cfgparser.yy"
2012     {
2013   if ( yyvsp[0].intValue <= 0 ) {
2014     yy_error("Value out of range (has to be above zero)");
2015   }
2016
2017   /* pass that value up the tree */
2018   yyval.intValue = yyvsp[0].intValue;
2019 }
2020     break;
2021
2022   case 135:
2023 #line 657 "src/cfgparser.yy"
2024     {
2025   //cout << " " << $1 << " ";
2026   if ( yyvsp[0].intValue < 0 ) {
2027     yy_error("Value out of range (has to be above or equal to zero)");
2028   }
2029
2030   /* pass that value up the tree */
2031   yyval.intValue = yyvsp[0].intValue;
2032 }
2033     break;
2034
2035   case 136:
2036 #line 669 "src/cfgparser.yy"
2037     {
2038   if( ( yyvsp[0].intValue != 0 ) && ( yyvsp[0].intValue != 1 ) ) {
2039     yy_error("Boolean value has to be 1|0, 'true'|'false' or 'on'|'off'!");
2040   }
2041   /* pass that value up the tree */
2042   yyval.intValue = yyvsp[0].intValue;
2043 }
2044     break;
2045
2046
2047     }
2048
2049 /* Line 1010 of yacc.c.  */
2050 #line 2051 "bld-std-gcc40/src/cfgparser.cpp"
2051 \f
2052   yyvsp -= yylen;
2053   yyssp -= yylen;
2054
2055
2056   YY_STACK_PRINT (yyss, yyssp);
2057
2058   *++yyvsp = yyval;
2059
2060
2061   /* Now `shift' the result of the reduction.  Determine what state
2062      that goes to, based on the state we popped back to and the rule
2063      number reduced by.  */
2064
2065   yyn = yyr1[yyn];
2066
2067   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
2068   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
2069     yystate = yytable[yystate];
2070   else
2071     yystate = yydefgoto[yyn - YYNTOKENS];
2072
2073   goto yynewstate;
2074
2075
2076 /*------------------------------------.
2077 | yyerrlab -- here on detecting error |
2078 `------------------------------------*/
2079 yyerrlab:
2080   /* If not already recovering from an error, report this error.  */
2081   if (!yyerrstatus)
2082     {
2083       ++yynerrs;
2084 #if YYERROR_VERBOSE
2085       yyn = yypact[yystate];
2086
2087       if (YYPACT_NINF < yyn && yyn < YYLAST)
2088         {
2089           YYSIZE_T yysize = 0;
2090           int yytype = YYTRANSLATE (yychar);
2091           const char* yyprefix;
2092           char *yymsg;
2093           int yyx;
2094
2095           /* Start YYX at -YYN if negative to avoid negative indexes in
2096              YYCHECK.  */
2097           int yyxbegin = yyn < 0 ? -yyn : 0;
2098
2099           /* Stay within bounds of both yycheck and yytname.  */
2100           int yychecklim = YYLAST - yyn;
2101           int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
2102           int yycount = 0;
2103
2104           yyprefix = ", expecting ";
2105           for (yyx = yyxbegin; yyx < yyxend; ++yyx)
2106             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
2107               {
2108                 yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
2109                 yycount += 1;
2110                 if (yycount == 5)
2111                   {
2112                     yysize = 0;
2113                     break;
2114                   }
2115               }
2116           yysize += (sizeof ("syntax error, unexpected ")
2117                      + yystrlen (yytname[yytype]));
2118           yymsg = (char *) YYSTACK_ALLOC (yysize);
2119           if (yymsg != 0)
2120             {
2121               char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
2122               yyp = yystpcpy (yyp, yytname[yytype]);
2123
2124               if (yycount < 5)
2125                 {
2126                   yyprefix = ", expecting ";
2127                   for (yyx = yyxbegin; yyx < yyxend; ++yyx)
2128                     if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
2129                       {
2130                         yyp = yystpcpy (yyp, yyprefix);
2131                         yyp = yystpcpy (yyp, yytname[yyx]);
2132                         yyprefix = " or ";
2133                       }
2134                 }
2135               yyerror (yymsg);
2136               YYSTACK_FREE (yymsg);
2137             }
2138           else
2139             yyerror ("syntax error; also virtual memory exhausted");
2140         }
2141       else
2142 #endif /* YYERROR_VERBOSE */
2143         yyerror ("syntax error");
2144     }
2145
2146
2147
2148   if (yyerrstatus == 3)
2149     {
2150       /* If just tried and failed to reuse lookahead token after an
2151          error, discard it.  */
2152
2153       if (yychar <= YYEOF)
2154         {
2155           /* If at end of input, pop the error token,
2156              then the rest of the stack, then return failure.  */
2157           if (yychar == YYEOF)
2158              for (;;)
2159                {
2160                  YYPOPSTACK;
2161                  if (yyssp == yyss)
2162                    YYABORT;
2163                  YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
2164                  yydestruct (yystos[*yyssp], yyvsp);
2165                }
2166         }
2167       else
2168         {
2169           YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
2170           yydestruct (yytoken, &yylval);
2171           yychar = YYEMPTY;
2172
2173         }
2174     }
2175
2176   /* Else will try to reuse lookahead token after shifting the error
2177      token.  */
2178   goto yyerrlab1;
2179
2180
2181 /*---------------------------------------------------.
2182 | yyerrorlab -- error raised explicitly by YYERROR.  |
2183 `---------------------------------------------------*/
2184 yyerrorlab:
2185
2186 #ifdef __GNUC__
2187   /* Pacify GCC when the user code never invokes YYERROR and the label
2188      yyerrorlab therefore never appears in user code.  */
2189   if (0)
2190      goto yyerrorlab;
2191 #endif
2192
2193   yyvsp -= yylen;
2194   yyssp -= yylen;
2195   yystate = *yyssp;
2196   goto yyerrlab1;
2197
2198
2199 /*-------------------------------------------------------------.
2200 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
2201 `-------------------------------------------------------------*/
2202 yyerrlab1:
2203   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
2204
2205   for (;;)
2206     {
2207       yyn = yypact[yystate];
2208       if (yyn != YYPACT_NINF)
2209         {
2210           yyn += YYTERROR;
2211           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
2212             {
2213               yyn = yytable[yyn];
2214               if (0 < yyn)
2215                 break;
2216             }
2217         }
2218
2219       /* Pop the current state because it cannot handle the error token.  */
2220       if (yyssp == yyss)
2221         YYABORT;
2222
2223       YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
2224       yydestruct (yystos[yystate], yyvsp);
2225       YYPOPSTACK;
2226       yystate = *yyssp;
2227       YY_STACK_PRINT (yyss, yyssp);
2228     }
2229
2230   if (yyn == YYFINAL)
2231     YYACCEPT;
2232
2233   YYDPRINTF ((stderr, "Shifting error token, "));
2234
2235   *++yyvsp = yylval;
2236
2237
2238   yystate = yyn;
2239   goto yynewstate;
2240
2241
2242 /*-------------------------------------.
2243 | yyacceptlab -- YYACCEPT comes here.  |
2244 `-------------------------------------*/
2245 yyacceptlab:
2246   yyresult = 0;
2247   goto yyreturn;
2248
2249 /*-----------------------------------.
2250 | yyabortlab -- YYABORT comes here.  |
2251 `-----------------------------------*/
2252 yyabortlab:
2253   yyresult = 1;
2254   goto yyreturn;
2255
2256 #ifndef yyoverflow
2257 /*----------------------------------------------.
2258 | yyoverflowlab -- parser overflow comes here.  |
2259 `----------------------------------------------*/
2260 yyoverflowlab:
2261   yyerror ("parser stack overflow");
2262   yyresult = 2;
2263   /* Fall through.  */
2264 #endif
2265
2266 yyreturn:
2267 #ifndef yyoverflow
2268   if (yyss != yyssa)
2269     YYSTACK_FREE (yyss);
2270 #endif
2271   return yyresult;
2272 }
2273
2274
2275 #line 677 "src/cfgparser.yy"
2276
2277
2278 /*---------------------------------------------------------------------------*/
2279 /* parser functions                                                          */
2280 /*---------------------------------------------------------------------------*/
2281
2282
2283 /* parse warnings */
2284 void yy_warn(char *s)
2285 {
2286         printf("Config Parse Warning at Line %d: %s \n", lineCount, s);
2287 }
2288
2289 /* parse errors */
2290 void yy_error(const char *s)
2291 {
2292         //errorOut("Current token: "<<yytname[ (int)yytranslate[yychar] ]);
2293         errFatal("yy_error","Config Parse Error at Line "<<lineCount<<": "<<s,SIMWORLD_INITERROR);
2294         return;
2295 }
2296
2297
2298 /* get the global pointers from calling program */
2299 char pointersInited = 0;
2300 void setPointers(ntlRenderGlobals *setglob) 
2301 {
2302         if(
2303                  (!setglob) ||
2304                  (!setglob) 
2305                  ) {
2306                 errFatal("setPointers","Config Parse Error: Invalid Pointers!\n",SIMWORLD_INITERROR);
2307                 return;
2308         }      
2309         
2310         reglob = setglob;
2311         pointersInited = 1;
2312 }
2313
2314   
2315 /* parse given file as config file */
2316 void parseFile(string filename)
2317 {
2318         if(!pointersInited) {
2319                 errFatal("parseFile","Config Parse Error: Pointers not set!\n", SIMWORLD_INITERROR);
2320                 return;
2321         }
2322         
2323         /* open file */
2324         yy_in = fopen( filename.c_str(), "r");
2325         if(!yy_in) {
2326                 errFatal("parseFile","Config Parse Error: Unable to open '"<<filename.c_str() <<"'!\n", SIMWORLD_INITERROR );
2327                 return;
2328         }
2329
2330         /* parse */
2331         //yy_debug = 1; /* Enable debugging? */
2332         yy_parse();
2333         
2334         /* close file */
2335         fclose( yy_in );
2336         // cleanup static map<string,AttributeList*> attrs
2337         for(map<string, AttributeList*>::iterator i=attrs.begin();
2338                         i != attrs.end(); i++) {
2339                 if((*i).second) {
2340                         delete (*i).second;
2341                         (*i).second = NULL;
2342                 }
2343         }
2344 }
2345
2346
2347
2348