fb29627c889c1fc597ab92bf45632622c16744e8
1 /* A Bison parser, made by GNU Bison 1.875c. */
3 /* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
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)
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.
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. */
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. */
26 /* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
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. */
36 /* Identify Bison output. */
40 #define YYSKELETON_NAME "yacc.c"
45 /* Using locations. */
46 #define YYLSP_NEEDED 0
53 /* Put the tokens into the symbol table, so that GDB and other debuggers
80 tAUTORADIOBUTTON
= 282,
114 tCHARACTERISTICS
= 316,
120 tPRODUCTVERSION
= 322,
121 tFILEFLAGSMASK
= 323,
146 #define tFILENAME 263
148 #define tACCELERATORS 265
152 #define tDIALOGEX 269
155 #define tMESSAGETABLE 272
157 #define tVERSIONINFO 274
158 #define tSTRINGTABLE 275
163 #define tAUTO3STATE 280
164 #define tAUTOCHECKBOX 281
165 #define tAUTORADIOBUTTON 282
166 #define tCHECKBOX 283
167 #define tDEFPUSHBUTTON 284
168 #define tPUSHBUTTON 285
169 #define tRADIOBUTTON 286
171 #define tGROUPBOX 288
172 #define tCOMBOBOX 289
174 #define tSCROLLBAR 291
176 #define tEDITTEXT 293
188 #define tINACTIVE 305
189 #define tNOINVERT 306
192 #define tDISCARDABLE 309
193 #define tLOADONCALL 310
196 #define tMOVEABLE 313
199 #define tCHARACTERISTICS 316
203 #define tLANGUAGE 320
204 #define tFILEVERSION 321
205 #define tPRODUCTVERSION 322
206 #define tFILEFLAGSMASK 323
208 #define tFILETYPE 325
209 #define tFILEFLAGS 326
210 #define tFILESUBTYPE 327
211 #define tMENUBARBREAK 328
212 #define tMENUBREAK 329
213 #define tMENUITEM 330
215 #define tSEPARATOR 332
228 /* Copy the first part of user declarations. */
232 * Copyright 1994 Martin von Loewis
233 * Copyright 1998-2000 Bertho A. Stultiens (BS)
234 * 1999 Juergen Schmied (JS)
236 * This library is free software; you can redistribute it and/or
237 * modify it under the terms of the GNU Lesser General Public
238 * License as published by the Free Software Foundation; either
239 * version 2.1 of the License, or (at your option) any later version.
241 * This library is distributed in the hope that it will be useful,
242 * but WITHOUT ANY WARRANTY; without even the implied warranty of
243 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
244 * Lesser General Public License for more details.
246 * You should have received a copy of the GNU Lesser General Public
247 * License along with this library; if not, write to the Free Software
248 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
251 * 24-Jul-2000 BS - Made a fix for broken Berkeley yacc on
252 * non-terminals (see cjunk rule).
253 * 21-May-2000 BS - Partial implementation of font resources.
254 * - Corrected language propagation for binary
255 * resources such as bitmaps, icons, cursors,
256 * userres and rcdata. The language is now
257 * correct in .res files.
258 * - Fixed reading the resource name as ident,
259 * so that it may overlap keywords.
260 * 20-May-2000 BS - Implemented animated cursors and icons
262 * 30-Apr-2000 BS - Reintegration into the wine-tree
263 * 14-Jan-2000 BS - Redid the usertype resources so that they
265 * 02-Jan-2000 BS - Removed the preprocessor from the grammar
266 * except for the # command (line numbers).
268 * 06-Nov-1999 JS - see CHANGES
270 * 29-Dec-1998 AdH - Grammar and function extensions.
271 * grammar: TOOLBAR resources, Named ICONs in
273 * functions: semantic actions for the grammar
274 * changes, resource files can now be anywhere
275 * on the include path instead of just in the
278 * 20-Jun-1998 BS - Fixed a bug in load_file() where the name was not
279 * printed out correctly.
281 * 17-Jun-1998 BS - Fixed a bug in CLASS statement parsing which should
282 * also accept a tSTRING as argument.
284 * 25-May-1998 BS - Found out that I need to support language, version
285 * and characteristics in inline resources (bitmap,
286 * cursor, etc) but they can also be specified with
287 * a filename. This renders my filename-scanning scheme
288 * worthless. Need to build newline parsing to solve
290 * It will come with version 1.1.0 (sigh).
292 * 19-May-1998 BS - Started to build a builtin preprocessor
294 * 30-Apr-1998 BS - Redid the stringtable parsing/handling. My previous
295 * ideas had some serious flaws.
297 * 27-Apr-1998 BS - Removed a lot of dead comments and put it in a doc
300 * 21-Apr-1998 BS - Added correct behavior for cursors and icons.
301 * - This file is growing too big. It is time to strip
302 * things and put it in a support file.
304 * 19-Apr-1998 BS - Tagged the stringtable resource so that only one
305 * resource will be created. This because the table
306 * has a different layout than other resources. The
307 * table has to be sorted, and divided into smaller
308 * resource entries (see comment in source).
310 * 17-Apr-1998 BS - Almost all strings, including identifiers, are parsed
311 * as string_t which include unicode strings upon
313 * - Parser now emits a warning when compiling win32
314 * extensions in win16 mode.
316 * 16-Apr-1998 BS - Raw data elements are now *optionally* separated
317 * by commas. Read the comments in file sq2dq.l.
318 * - FIXME: there are instances in the source that rely
319 * on the fact that int==32bit and pointers are int size.
320 * - Fixed the conflict in menuex by changing a rule
321 * back into right recursion. See note in source.
322 * - UserType resources cannot have an expression as its
323 * typeclass. See note in source.
325 * 15-Apr-1998 BS - Changed all right recursion into left recursion to
326 * get reduction of the parsestack.
327 * This also helps communication between bison and flex.
328 * Main advantage is that the Empty rule gets reduced
329 * first, which is used to allocate/link things.
330 * It also added a shift/reduce conflict in the menuex
331 * handling, due to expression/option possibility,
332 * although not serious.
334 * 14-Apr-1998 BS - Redone almost the entire parser. We're not talking
335 * about making it more efficient, but readable (for me)
336 * and slightly easier to expand/change.
337 * This is done primarily by using more reduce states
338 * with many (intuitive) types for the various resource
340 * - Added expression handling for all resources where a
341 * number is accepted (not only for win32). Also added
342 * multiply and division (not MS compatible, but handy).
343 * Unary minus introduced a shift/reduce conflict, but
346 * 13-Apr-1998 BS - Reordered a lot of things
347 * - Made the source more readable
348 * - Added Win32 resource definitions
349 * - Corrected syntax problems with an old yacc (;)
350 * - Added extra comment about grammar
353 #include "wine/port.h"
367 #include "newstruc.h"
369 #include "wine/wpp.h"
370 #include "wine/unicode.h"
378 /* Berkeley yacc (byacc) doesn't seem to know about these */
379 /* Some *BSD supplied versions do define these though */
381 # define YYEMPTY (-1) /* Empty lookahead value of yychar */
384 # define YYLEX yylex()
387 #elif defined(YYBISON)
388 /* Bison was used for original development */
389 /* #define YYEMPTY -2 */
390 /* #define YYLEX yylex() */
393 /* No yacc we know yet */
394 # if !defined(YYEMPTY) || !defined(YYLEX)
395 # error Yacc version/type unknown. This version needs to be verified for settings of YYEMPTY and YYLEX.
396 # elif defined(__GNUC__) /* gcc defines the #warning directive */
397 # warning Yacc version/type unknown. It defines YYEMPTY and YYLEX, but is not tested
398 /* #else we just take a chance that it works... */
402 int want_nl
= 0; /* Signal flex that we need the next newline */
403 int want_id
= 0; /* Signal flex that we need the next identifier */
404 stringtable_t
*tagstt
; /* Stringtable tag.
405 * It is set while parsing a stringtable to one of
406 * the stringtables in the sttres list or a new one
407 * if the language was not parsed before.
409 stringtable_t
*sttres
; /* Stringtable resources. This holds the list of
410 * stringtables with different lanuages
412 static int dont_want_id
= 0; /* See language parsing for details */
414 /* Set to the current options of the currently scanning stringtable */
415 static int *tagstt_memopt
;
416 static characts_t
*tagstt_characts
;
417 static version_t
*tagstt_version
;
419 static const char riff
[4] = "RIFF"; /* RIFF file magic for animated cursor/icon */
421 /* Prototypes of here defined functions */
422 static event_t
*get_event_head(event_t
*p
);
423 static control_t
*get_control_head(control_t
*p
);
424 static ver_value_t
*get_ver_value_head(ver_value_t
*p
);
425 static ver_block_t
*get_ver_block_head(ver_block_t
*p
);
426 static resource_t
*get_resource_head(resource_t
*p
);
427 static menuex_item_t
*get_itemex_head(menuex_item_t
*p
);
428 static menu_item_t
*get_item_head(menu_item_t
*p
);
429 static raw_data_t
*merge_raw_data_str(raw_data_t
*r1
, string_t
*str
);
430 static raw_data_t
*merge_raw_data_int(raw_data_t
*r1
, int i
);
431 static raw_data_t
*merge_raw_data_long(raw_data_t
*r1
, int i
);
432 static raw_data_t
*merge_raw_data(raw_data_t
*r1
, raw_data_t
*r2
);
433 static raw_data_t
*str2raw_data(string_t
*str
);
434 static raw_data_t
*int2raw_data(int i
);
435 static raw_data_t
*long2raw_data(int i
);
436 static raw_data_t
*load_file(string_t
*name
, language_t
*lang
);
437 static itemex_opt_t
*new_itemex_opt(int id
, int type
, int state
, int helpid
);
438 static event_t
*add_string_event(string_t
*key
, int id
, int flags
, event_t
*prev
);
439 static event_t
*add_event(int key
, int id
, int flags
, event_t
*prev
);
440 static dialogex_t
*dialogex_version(version_t
*v
, dialogex_t
*dlg
);
441 static dialogex_t
*dialogex_characteristics(characts_t
*c
, dialogex_t
*dlg
);
442 static dialogex_t
*dialogex_language(language_t
*l
, dialogex_t
*dlg
);
443 static dialogex_t
*dialogex_menu(name_id_t
*m
, dialogex_t
*dlg
);
444 static dialogex_t
*dialogex_class(name_id_t
*n
, dialogex_t
*dlg
);
445 static dialogex_t
*dialogex_font(font_id_t
*f
, dialogex_t
*dlg
);
446 static dialogex_t
*dialogex_caption(string_t
*s
, dialogex_t
*dlg
);
447 static dialogex_t
*dialogex_exstyle(style_t
*st
, dialogex_t
*dlg
);
448 static dialogex_t
*dialogex_style(style_t
*st
, dialogex_t
*dlg
);
449 static name_id_t
*convert_ctlclass(name_id_t
*cls
);
450 static control_t
*ins_ctrl(int type
, int special_style
, control_t
*ctrl
, control_t
*prev
);
451 static dialog_t
*dialog_version(version_t
*v
, dialog_t
*dlg
);
452 static dialog_t
*dialog_characteristics(characts_t
*c
, dialog_t
*dlg
);
453 static dialog_t
*dialog_language(language_t
*l
, dialog_t
*dlg
);
454 static dialog_t
*dialog_menu(name_id_t
*m
, dialog_t
*dlg
);
455 static dialog_t
*dialog_class(name_id_t
*n
, dialog_t
*dlg
);
456 static dialog_t
*dialog_font(font_id_t
*f
, dialog_t
*dlg
);
457 static dialog_t
*dialog_caption(string_t
*s
, dialog_t
*dlg
);
458 static dialog_t
*dialog_exstyle(style_t
* st
, dialog_t
*dlg
);
459 static dialog_t
*dialog_style(style_t
* st
, dialog_t
*dlg
);
460 static resource_t
*build_stt_resources(stringtable_t
*stthead
);
461 static stringtable_t
*find_stringtable(lvc_t
*lvc
);
462 static toolbar_item_t
*ins_tlbr_button(toolbar_item_t
*prev
, toolbar_item_t
*idrec
);
463 static toolbar_item_t
*get_tlbr_buttons_head(toolbar_item_t
*p
, int *nitems
);
464 static string_t
*make_filename(string_t
*s
);
465 static resource_t
*build_fontdirs(resource_t
*tail
);
466 static resource_t
*build_fontdir(resource_t
**fnt
, int nfnt
);
467 static int rsrcid_to_token(int lookahead
);
471 /* Enabling traces. */
476 /* Enabling verbose error messages. */
477 #ifdef YYERROR_VERBOSE
478 # undef YYERROR_VERBOSE
479 # define YYERROR_VERBOSE 1
481 # define YYERROR_VERBOSE 0
484 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
485 #line 241 "./parser.y"
486 typedef union YYSTYPE
{
515 menuex_item_t
*menexitm
;
523 toolbar_item_t
*tlbarItems
;
525 style_pair_t
*styles
;
529 /* Line 191 of yacc.c. */
530 #line 531 "parser.tab.c"
531 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
532 # define YYSTYPE_IS_DECLARED 1
533 # define YYSTYPE_IS_TRIVIAL 1
538 /* Copy the second part of user declarations. */
541 /* Line 214 of yacc.c. */
542 #line 543 "parser.tab.c"
544 #if ! defined (yyoverflow) || YYERROR_VERBOSE
550 # define YYMALLOC malloc
553 /* The parser invokes alloca or malloc; define the necessary symbols. */
555 # ifdef YYSTACK_USE_ALLOCA
556 # if YYSTACK_USE_ALLOCA
557 # define YYSTACK_ALLOC alloca
560 # if defined (alloca) || defined (_ALLOCA_H)
561 # define YYSTACK_ALLOC alloca
564 # define YYSTACK_ALLOC __builtin_alloca
569 # ifdef YYSTACK_ALLOC
570 /* Pacify GCC's `empty if-body' warning. */
571 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
573 # if defined (__STDC__) || defined (__cplusplus)
574 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
575 # define YYSIZE_T size_t
577 # define YYSTACK_ALLOC YYMALLOC
578 # define YYSTACK_FREE YYFREE
580 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
583 #if (! defined (yyoverflow) \
584 && (! defined (__cplusplus) \
585 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
587 /* A type that is properly aligned for any stack member. */
594 /* The size of the maximum gap between one aligned stack and the next. */
595 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
597 /* The size of an array large to enough to hold all stacks, each with
599 # define YYSTACK_BYTES(N) \
600 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
601 + YYSTACK_GAP_MAXIMUM)
603 /* Copy COUNT objects from FROM to TO. The source and destination do
606 # if defined (__GNUC__) && 1 < __GNUC__
607 # define YYCOPY(To, From, Count) \
608 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
610 # define YYCOPY(To, From, Count) \
613 register YYSIZE_T yyi; \
614 for (yyi = 0; yyi < (Count); yyi++) \
615 (To)[yyi] = (From)[yyi]; \
621 /* Relocate STACK from its old location to the new one. The
622 local variables YYSIZE and YYSTACKSIZE give the old and new number of
623 elements in the stack, and YYPTR gives the new location of the
624 stack. Advance YYPTR to a properly aligned location for the next
626 # define YYSTACK_RELOCATE(Stack) \
629 YYSIZE_T yynewbytes; \
630 YYCOPY (&yyptr->Stack, Stack, yysize); \
631 Stack = &yyptr->Stack; \
632 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
633 yyptr += yynewbytes / sizeof (*yyptr); \
639 #if defined (__STDC__) || defined (__cplusplus)
640 typedef signed char yysigned_char
;
642 typedef short yysigned_char
;
645 /* YYFINAL -- State number of the termination state. */
647 /* YYLAST -- Last index in YYTABLE. */
650 /* YYNTOKENS -- Number of terminals. */
652 /* YYNNTS -- Number of nonterminals. */
654 /* YYNRULES -- Number of rules. */
656 /* YYNRULES -- Number of states. */
657 #define YYNSTATES 575
659 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
661 #define YYMAXUTOK 340
663 #define YYTRANSLATE(YYX) \
664 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
666 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
667 static const unsigned char yytranslate
[] =
669 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
670 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
671 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
672 2, 2, 2, 2, 2, 2, 2, 2, 86, 2,
673 95, 96, 89, 87, 94, 88, 2, 90, 2, 2,
674 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
675 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
676 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
677 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
678 2, 2, 2, 2, 85, 2, 2, 2, 2, 2,
679 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
680 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
681 2, 2, 2, 2, 84, 2, 91, 2, 2, 2,
682 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
683 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
684 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
685 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
686 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
687 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
688 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
689 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
690 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
691 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
692 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
693 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
694 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
695 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
696 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
697 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
698 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
699 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
700 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
701 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
702 75, 76, 77, 78, 79, 80, 81, 82, 83, 92,
707 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
709 static const unsigned short yyprhs
[] =
711 0, 0, 3, 5, 6, 9, 12, 16, 20, 22,
712 23, 29, 30, 32, 34, 36, 38, 40, 42, 44,
713 46, 48, 50, 52, 54, 56, 58, 60, 62, 64,
714 66, 68, 70, 72, 74, 76, 78, 82, 86, 90,
715 94, 98, 102, 106, 110, 114, 118, 120, 122, 129,
716 130, 136, 142, 143, 146, 148, 152, 154, 156, 158,
717 160, 162, 164, 178, 179, 183, 187, 191, 194, 198,
718 202, 205, 208, 211, 212, 216, 220, 224, 228, 232,
719 236, 240, 244, 248, 252, 256, 260, 264, 268, 272,
720 276, 280, 291, 304, 315, 316, 321, 328, 337, 355,
721 371, 376, 377, 380, 385, 389, 393, 395, 398, 400,
722 402, 417, 418, 422, 426, 430, 433, 436, 440, 444,
723 447, 450, 453, 454, 458, 462, 466, 470, 474, 478,
724 482, 486, 490, 494, 498, 502, 506, 510, 514, 518,
725 522, 533, 553, 570, 585, 598, 599, 601, 602, 605,
726 615, 616, 619, 624, 628, 629, 636, 640, 646, 647,
727 651, 655, 659, 663, 667, 671, 676, 680, 681, 686,
728 690, 696, 697, 700, 706, 713, 714, 717, 722, 729,
729 738, 743, 747, 748, 753, 754, 756, 763, 764, 774,
730 784, 788, 792, 796, 800, 804, 805, 808, 814, 815,
731 818, 820, 825, 830, 832, 836, 846, 847, 851, 854,
732 855, 858, 861, 863, 865, 867, 869, 871, 873, 875,
733 876, 879, 882, 885, 890, 893, 896, 901, 903, 905,
734 908, 910, 913, 915, 919, 923, 928, 932, 937, 941,
735 943, 945, 946, 948, 950, 954, 958, 962, 966, 970,
736 974, 978, 981, 984, 987, 991, 993, 995, 998, 1000
739 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
740 static const short yyrhs
[] =
742 98, 0, -1, 99, -1, -1, 99, 100, -1, 99,
743 3, -1, 177, 102, 105, -1, 7, 102, 105, -1,
744 153, -1, -1, 65, 101, 177, 94, 177, -1, -1,
745 177, -1, 7, -1, 103, -1, 6, -1, 118, -1,
746 107, -1, 108, -1, 123, -1, 134, -1, 115, -1,
747 110, -1, 111, -1, 109, -1, 144, -1, 148, -1,
748 112, -1, 113, -1, 114, -1, 164, -1, 116, -1,
749 157, -1, 8, -1, 7, -1, 6, -1, 11, 166,
750 175, -1, 12, 166, 175, -1, 23, 166, 175, -1,
751 21, 166, 175, -1, 22, 166, 175, -1, 17, 166,
752 175, -1, 24, 166, 175, -1, 18, 166, 175, -1,
753 83, 166, 175, -1, 117, 166, 175, -1, 4, -1,
754 7, -1, 10, 166, 169, 81, 119, 82, -1, -1,
755 119, 6, 94, 177, 120, -1, 119, 177, 94, 177,
756 120, -1, -1, 94, 121, -1, 122, -1, 121, 94,
757 122, -1, 51, -1, 44, -1, 37, -1, 45, -1,
758 46, -1, 47, -1, 13, 166, 177, 94, 177, 94,
759 177, 94, 177, 124, 81, 125, 82, -1, -1, 124,
760 63, 132, -1, 124, 62, 132, -1, 124, 60, 6,
761 -1, 124, 130, -1, 124, 59, 104, -1, 124, 15,
762 103, -1, 124, 170, -1, 124, 171, -1, 124, 172,
763 -1, -1, 125, 37, 129, -1, 125, 38, 127, -1,
764 125, 35, 127, -1, 125, 34, 127, -1, 125, 36,
765 127, -1, 125, 28, 126, -1, 125, 29, 126, -1,
766 125, 33, 126, -1, 125, 30, 126, -1, 125, 31,
767 126, -1, 125, 25, 126, -1, 125, 32, 126, -1,
768 125, 26, 126, -1, 125, 27, 126, -1, 125, 41,
769 126, -1, 125, 40, 126, -1, 125, 39, 126, -1,
770 125, 23, 104, 156, 177, 94, 177, 94, 177, 128,
771 -1, 6, 156, 177, 94, 177, 94, 177, 94, 177,
772 94, 177, 131, -1, 177, 94, 177, 94, 177, 94,
773 177, 94, 177, 131, -1, -1, 94, 177, 94, 177,
774 -1, 94, 177, 94, 177, 94, 132, -1, 94, 177,
775 94, 177, 94, 132, 94, 132, -1, 104, 156, 177,
776 94, 133, 94, 132, 94, 177, 94, 177, 94, 177,
777 94, 177, 94, 132, -1, 104, 156, 177, 94, 133,
778 94, 132, 94, 177, 94, 177, 94, 177, 94, 177,
779 -1, 21, 177, 94, 6, -1, -1, 94, 132, -1,
780 94, 132, 94, 132, -1, 132, 84, 132, -1, 95,
781 132, 96, -1, 178, -1, 92, 178, -1, 177, -1,
782 6, -1, 14, 166, 177, 94, 177, 94, 177, 94,
783 177, 141, 135, 81, 136, 82, -1, -1, 135, 63,
784 132, -1, 135, 62, 132, -1, 135, 60, 6, -1,
785 135, 130, -1, 135, 142, -1, 135, 59, 104, -1,
786 135, 15, 103, -1, 135, 170, -1, 135, 171, -1,
787 135, 172, -1, -1, 136, 37, 137, -1, 136, 38,
788 139, -1, 136, 35, 139, -1, 136, 34, 139, -1,
789 136, 36, 139, -1, 136, 28, 138, -1, 136, 29,
790 138, -1, 136, 33, 138, -1, 136, 30, 138, -1,
791 136, 31, 138, -1, 136, 25, 138, -1, 136, 32,
792 138, -1, 136, 26, 138, -1, 136, 27, 138, -1,
793 136, 41, 138, -1, 136, 40, 138, -1, 136, 39,
794 138, -1, 136, 23, 104, 156, 177, 94, 177, 94,
795 177, 128, -1, 104, 156, 177, 94, 133, 94, 132,
796 94, 177, 94, 177, 94, 177, 94, 177, 94, 132,
797 141, 140, -1, 104, 156, 177, 94, 133, 94, 132,
798 94, 177, 94, 177, 94, 177, 94, 177, 140, -1,
799 6, 156, 177, 94, 177, 94, 177, 94, 177, 94,
800 177, 131, 141, 140, -1, 177, 94, 177, 94, 177,
801 94, 177, 94, 177, 131, 141, 140, -1, -1, 173,
802 -1, -1, 94, 177, -1, 21, 177, 94, 6, 94,
803 177, 94, 177, 143, -1, -1, 94, 177, -1, 15,
804 166, 169, 145, -1, 81, 146, 82, -1, -1, 146,
805 75, 6, 156, 177, 147, -1, 146, 75, 77, -1,
806 146, 76, 6, 147, 145, -1, -1, 156, 49, 147,
807 -1, 156, 48, 147, -1, 156, 78, 147, -1, 156,
808 50, 147, -1, 156, 73, 147, -1, 156, 74, 147,
809 -1, 16, 166, 169, 149, -1, 81, 150, 82, -1,
810 -1, 150, 75, 6, 151, -1, 150, 75, 77, -1,
811 150, 76, 6, 152, 149, -1, -1, 94, 177, -1,
812 94, 176, 94, 176, 147, -1, 94, 176, 94, 176,
813 94, 177, -1, -1, 94, 177, -1, 94, 176, 94,
814 177, -1, 94, 176, 94, 176, 94, 177, -1, 94,
815 176, 94, 176, 94, 176, 94, 177, -1, 154, 81,
816 155, 82, -1, 20, 166, 169, -1, -1, 155, 177,
817 156, 6, -1, -1, 94, -1, 19, 166, 158, 81,
818 159, 82, -1, -1, 158, 66, 177, 94, 177, 94,
819 177, 94, 177, -1, 158, 67, 177, 94, 177, 94,
820 177, 94, 177, -1, 158, 71, 177, -1, 158, 68,
821 177, -1, 158, 69, 177, -1, 158, 70, 177, -1,
822 158, 72, 177, -1, -1, 159, 160, -1, 42, 6,
823 81, 161, 82, -1, -1, 161, 162, -1, 160, -1,
824 43, 6, 94, 6, -1, 43, 6, 94, 163, -1,
825 177, -1, 163, 94, 177, -1, 79, 166, 177, 94,
826 177, 169, 81, 165, 82, -1, -1, 165, 80, 177,
827 -1, 165, 77, -1, -1, 166, 167, -1, 166, 168,
828 -1, 56, -1, 58, -1, 54, -1, 52, -1, 55,
829 -1, 57, -1, 53, -1, -1, 169, 170, -1, 169,
830 171, -1, 169, 172, -1, 65, 177, 94, 177, -1,
831 61, 177, -1, 64, 177, -1, 169, 81, 174, 82,
832 -1, 9, -1, 4, -1, 88, 4, -1, 5, -1,
833 88, 5, -1, 6, -1, 174, 156, 9, -1, 174,
834 156, 4, -1, 174, 156, 88, 4, -1, 174, 156,
835 5, -1, 174, 156, 88, 5, -1, 174, 156, 6,
836 -1, 106, -1, 173, -1, -1, 177, -1, 179, -1,
837 179, 87, 179, -1, 179, 88, 179, -1, 179, 84,
838 179, -1, 179, 86, 179, -1, 179, 89, 179, -1,
839 179, 90, 179, -1, 179, 85, 179, -1, 91, 179,
840 -1, 88, 179, -1, 87, 179, -1, 95, 179, 96,
841 -1, 180, -1, 178, -1, 92, 180, -1, 4, -1,
845 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
846 static const unsigned short yyrline
[] =
848 0, 364, 364, 398, 399, 469, 475, 487, 497, 505,
849 505, 549, 555, 562, 572, 573, 582, 583, 584, 608,
850 609, 615, 616, 617, 618, 642, 643, 649, 650, 651,
851 652, 653, 654, 658, 659, 660, 664, 668, 684, 706,
852 716, 724, 732, 736, 740, 744, 755, 760, 769, 793,
853 794, 795, 804, 805, 808, 809, 812, 813, 814, 815,
854 816, 817, 822, 857, 858, 859, 860, 861, 862, 863,
855 864, 865, 866, 869, 870, 871, 872, 873, 874, 875,
856 876, 877, 878, 880, 881, 882, 883, 884, 885, 886,
857 887, 889, 899, 924, 946, 948, 953, 960, 971, 985,
858 1000, 1005, 1006, 1007, 1011, 1012, 1013, 1014, 1018, 1023,
859 1031, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083,
860 1084, 1085, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095,
861 1096, 1097, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106,
862 1108, 1118, 1143, 1159, 1187, 1210, 1211, 1214, 1215, 1219,
863 1226, 1227, 1231, 1254, 1258, 1259, 1268, 1274, 1293, 1294,
864 1295, 1296, 1297, 1298, 1299, 1303, 1328, 1332, 1333, 1349,
865 1355, 1375, 1376, 1380, 1388, 1399, 1400, 1404, 1410, 1418,
866 1438, 1479, 1490, 1491, 1524, 1526, 1531, 1547, 1548, 1558,
867 1568, 1575, 1582, 1589, 1596, 1606, 1607, 1616, 1624, 1625,
868 1634, 1639, 1645, 1654, 1655, 1659, 1685, 1686, 1691, 1700,
869 1701, 1711, 1726, 1727, 1728, 1729, 1732, 1733, 1734, 1738,
870 1739, 1747, 1755, 1773, 1780, 1784, 1788, 1803, 1804, 1805,
871 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1818,
872 1819, 1826, 1827, 1831, 1834, 1835, 1836, 1837, 1838, 1839,
873 1840, 1841, 1842, 1843, 1844, 1845, 1849, 1850, 1853, 1854
877 #if YYDEBUG || YYERROR_VERBOSE
878 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
879 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
880 static const char *const yytname
[] =
882 "$end", "error", "$undefined", "tNL", "tNUMBER", "tLNUMBER", "tSTRING",
883 "tIDENT", "tFILENAME", "tRAWDATA", "tACCELERATORS", "tBITMAP", "tCURSOR",
884 "tDIALOG", "tDIALOGEX", "tMENU", "tMENUEX", "tMESSAGETABLE", "tRCDATA",
885 "tVERSIONINFO", "tSTRINGTABLE", "tFONT", "tFONTDIR", "tICON", "tHTML",
886 "tAUTO3STATE", "tAUTOCHECKBOX", "tAUTORADIOBUTTON", "tCHECKBOX",
887 "tDEFPUSHBUTTON", "tPUSHBUTTON", "tRADIOBUTTON", "tSTATE3", "tGROUPBOX",
888 "tCOMBOBOX", "tLISTBOX", "tSCROLLBAR", "tCONTROL", "tEDITTEXT", "tRTEXT",
889 "tCTEXT", "tLTEXT", "tBLOCK", "tVALUE", "tSHIFT", "tALT", "tASCII",
890 "tVIRTKEY", "tGRAYED", "tCHECKED", "tINACTIVE", "tNOINVERT", "tPURE",
891 "tIMPURE", "tDISCARDABLE", "tLOADONCALL", "tPRELOAD", "tFIXED",
892 "tMOVEABLE", "tCLASS", "tCAPTION", "tCHARACTERISTICS", "tEXSTYLE",
893 "tSTYLE", "tVERSION", "tLANGUAGE", "tFILEVERSION", "tPRODUCTVERSION",
894 "tFILEFLAGSMASK", "tFILEOS", "tFILETYPE", "tFILEFLAGS", "tFILESUBTYPE",
895 "tMENUBARBREAK", "tMENUBREAK", "tMENUITEM", "tPOPUP", "tSEPARATOR",
896 "tHELP", "tTOOLBAR", "tBUTTON", "tBEGIN", "tEND", "tDLGINIT", "'|'",
897 "'^'", "'&'", "'+'", "'-'", "'*'", "'/'", "'~'", "tNOT", "pUPM", "','",
898 "'('", "')'", "$accept", "resource_file", "resources", "resource", "@1",
899 "usrcvt", "nameid", "nameid_s", "resource_definition", "filename",
900 "bitmap", "cursor", "icon", "font", "fontdir", "messagetable", "html",
901 "rcdata", "dlginit", "userres", "usertype", "accelerators", "events",
902 "acc_opt", "accs", "acc", "dialog", "dlg_attributes", "ctrls",
903 "lab_ctrl", "ctrl_desc", "iconinfo", "gen_ctrl", "opt_font",
904 "optional_style_pair", "style", "ctlclass", "dialogex", "dlgex_attribs",
905 "exctrls", "gen_exctrl", "lab_exctrl", "exctrl_desc", "opt_data",
906 "helpid", "opt_exfont", "opt_expr", "menu", "menu_body",
907 "item_definitions", "item_options", "menuex", "menuex_body",
908 "itemex_definitions", "itemex_options", "itemex_p_options",
909 "stringtable", "stt_head", "strings", "opt_comma", "versioninfo",
910 "fix_version", "ver_blocks", "ver_block", "ver_values", "ver_value",
911 "ver_words", "toolbar", "toolbar_items", "loadmemopts", "lamo", "lama",
912 "opt_lvc", "opt_language", "opt_characts", "opt_version", "raw_data",
913 "raw_elements", "file_raw", "e_expr", "expr", "xpr_no_not", "xpr",
919 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
921 static const unsigned short yytoknum
[] =
923 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
924 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
925 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
926 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
927 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
928 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
929 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
930 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
931 335, 336, 337, 338, 124, 94, 38, 43, 45, 42,
932 47, 126, 339, 340, 44, 40, 41
936 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
937 static const unsigned char yyr1
[] =
939 0, 97, 98, 99, 99, 99, 100, 100, 100, 101,
940 100, 102, 103, 103, 104, 104, 105, 105, 105, 105,
941 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
942 105, 105, 105, 106, 106, 106, 107, 108, 109, 110,
943 111, 112, 113, 114, 115, 116, 117, 117, 118, 119,
944 119, 119, 120, 120, 121, 121, 122, 122, 122, 122,
945 122, 122, 123, 124, 124, 124, 124, 124, 124, 124,
946 124, 124, 124, 125, 125, 125, 125, 125, 125, 125,
947 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
948 125, 125, 126, 127, 128, 128, 128, 128, 129, 129,
949 130, 131, 131, 131, 132, 132, 132, 132, 133, 133,
950 134, 135, 135, 135, 135, 135, 135, 135, 135, 135,
951 135, 135, 136, 136, 136, 136, 136, 136, 136, 136,
952 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
953 136, 137, 137, 138, 139, 140, 140, 141, 141, 142,
954 143, 143, 144, 145, 146, 146, 146, 146, 147, 147,
955 147, 147, 147, 147, 147, 148, 149, 150, 150, 150,
956 150, 151, 151, 151, 151, 152, 152, 152, 152, 152,
957 153, 154, 155, 155, 156, 156, 157, 158, 158, 158,
958 158, 158, 158, 158, 158, 159, 159, 160, 161, 161,
959 162, 162, 162, 163, 163, 164, 165, 165, 165, 166,
960 166, 166, 167, 167, 167, 167, 168, 168, 168, 169,
961 169, 169, 169, 170, 171, 172, 173, 174, 174, 174,
962 174, 174, 174, 174, 174, 174, 174, 174, 174, 175,
963 175, 176, 176, 177, 178, 178, 178, 178, 178, 178,
964 178, 178, 178, 178, 178, 178, 179, 179, 180, 180
967 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
968 static const unsigned char yyr2
[] =
970 0, 2, 1, 0, 2, 2, 3, 3, 1, 0,
971 5, 0, 1, 1, 1, 1, 1, 1, 1, 1,
972 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
973 1, 1, 1, 1, 1, 1, 3, 3, 3, 3,
974 3, 3, 3, 3, 3, 3, 1, 1, 6, 0,
975 5, 5, 0, 2, 1, 3, 1, 1, 1, 1,
976 1, 1, 13, 0, 3, 3, 3, 2, 3, 3,
977 2, 2, 2, 0, 3, 3, 3, 3, 3, 3,
978 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
979 3, 10, 12, 10, 0, 4, 6, 8, 17, 15,
980 4, 0, 2, 4, 3, 3, 1, 2, 1, 1,
981 14, 0, 3, 3, 3, 2, 2, 3, 3, 2,
982 2, 2, 0, 3, 3, 3, 3, 3, 3, 3,
983 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
984 10, 19, 16, 14, 12, 0, 1, 0, 2, 9,
985 0, 2, 4, 3, 0, 6, 3, 5, 0, 3,
986 3, 3, 3, 3, 3, 4, 3, 0, 4, 3,
987 5, 0, 2, 5, 6, 0, 2, 4, 6, 8,
988 4, 3, 0, 4, 0, 1, 6, 0, 9, 9,
989 3, 3, 3, 3, 3, 0, 2, 5, 0, 2,
990 1, 4, 4, 1, 3, 9, 0, 3, 2, 0,
991 2, 2, 1, 1, 1, 1, 1, 1, 1, 0,
992 2, 2, 2, 4, 2, 2, 4, 1, 1, 2,
993 1, 2, 1, 3, 3, 4, 3, 4, 3, 1,
994 1, 0, 1, 1, 3, 3, 3, 3, 3, 3,
995 3, 2, 2, 2, 3, 1, 1, 2, 1, 1
998 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
999 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
1000 means the default is an error. */
1001 static const unsigned short yydefact
[] =
1003 3, 0, 2, 1, 5, 258, 259, 11, 209, 9,
1004 0, 0, 0, 0, 0, 4, 8, 0, 11, 256,
1005 243, 255, 0, 219, 0, 253, 252, 251, 257, 0,
1006 182, 0, 0, 0, 0, 0, 0, 0, 0, 46,
1007 47, 209, 209, 209, 209, 209, 209, 209, 209, 209,
1008 209, 209, 209, 209, 209, 209, 209, 7, 17, 18,
1009 24, 22, 23, 27, 28, 29, 21, 31, 209, 16,
1010 19, 20, 25, 26, 32, 30, 215, 218, 214, 216,
1011 212, 217, 213, 210, 211, 181, 0, 254, 0, 6,
1012 246, 250, 247, 244, 245, 248, 249, 219, 219, 219,
1013 0, 0, 219, 219, 219, 219, 187, 219, 219, 219,
1014 219, 0, 219, 219, 0, 0, 0, 220, 221, 222,
1015 0, 180, 184, 0, 35, 34, 33, 239, 0, 240,
1016 36, 37, 0, 0, 0, 0, 41, 43, 0, 39,
1017 40, 38, 42, 0, 44, 45, 224, 225, 0, 10,
1018 185, 0, 49, 0, 0, 0, 154, 152, 167, 165,
1019 0, 0, 0, 0, 0, 0, 0, 195, 0, 0,
1020 183, 0, 228, 230, 232, 227, 0, 184, 0, 0,
1021 0, 0, 0, 0, 191, 192, 193, 190, 194, 0,
1022 219, 223, 0, 48, 0, 229, 231, 226, 0, 0,
1023 0, 0, 0, 153, 0, 0, 166, 0, 0, 0,
1024 186, 196, 0, 0, 0, 234, 236, 238, 233, 0,
1025 0, 0, 184, 156, 184, 171, 169, 175, 0, 0,
1026 0, 206, 52, 52, 235, 237, 0, 0, 0, 0,
1027 0, 241, 168, 241, 0, 0, 0, 198, 0, 0,
1028 50, 51, 63, 147, 184, 157, 184, 184, 184, 184,
1029 184, 184, 0, 172, 0, 176, 170, 0, 0, 0,
1030 208, 0, 205, 58, 57, 59, 60, 61, 56, 53,
1031 54, 0, 0, 111, 155, 160, 159, 162, 163, 164,
1032 161, 241, 241, 0, 0, 0, 197, 200, 199, 207,
1033 0, 0, 0, 0, 0, 0, 0, 73, 67, 70,
1034 71, 72, 148, 0, 184, 242, 0, 177, 188, 189,
1035 0, 55, 13, 69, 12, 0, 15, 14, 68, 66,
1036 0, 0, 65, 106, 0, 64, 0, 0, 0, 0,
1037 0, 0, 0, 122, 115, 116, 119, 120, 121, 185,
1038 173, 241, 0, 0, 107, 255, 0, 0, 0, 0,
1039 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1040 0, 0, 0, 0, 0, 0, 62, 118, 0, 117,
1041 114, 113, 112, 0, 174, 0, 178, 201, 202, 203,
1042 100, 105, 104, 184, 184, 84, 86, 87, 79, 80,
1043 82, 83, 85, 81, 77, 0, 76, 78, 184, 74,
1044 75, 90, 89, 88, 0, 0, 0, 0, 0, 0,
1045 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1046 0, 0, 0, 110, 0, 0, 0, 0, 0, 0,
1047 100, 184, 184, 133, 135, 136, 128, 129, 131, 132,
1048 134, 130, 126, 0, 125, 127, 184, 123, 124, 139,
1049 138, 137, 179, 204, 0, 0, 0, 0, 0, 0,
1050 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1051 0, 0, 0, 0, 0, 109, 0, 108, 0, 0,
1052 0, 0, 0, 0, 0, 0, 0, 150, 0, 0,
1053 0, 0, 94, 0, 0, 0, 0, 149, 0, 0,
1054 0, 0, 0, 91, 0, 0, 0, 151, 94, 0,
1055 0, 0, 0, 0, 101, 0, 140, 0, 0, 0,
1056 0, 0, 0, 93, 0, 0, 101, 0, 95, 101,
1057 102, 0, 0, 147, 0, 0, 92, 0, 0, 101,
1058 145, 0, 96, 103, 0, 147, 144, 146, 0, 0,
1059 0, 145, 0, 97, 99, 143, 0, 0, 145, 98,
1060 0, 142, 147, 145, 141
1063 /* YYDEFGOTO[NTERM-NUM]. */
1064 static const short yydefgoto
[] =
1066 -1, 1, 2, 15, 24, 22, 327, 328, 57, 127,
1067 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
1068 68, 69, 171, 250, 279, 280, 70, 281, 336, 395,
1069 404, 513, 409, 308, 533, 332, 486, 71, 313, 383,
1070 457, 443, 452, 556, 283, 345, 507, 72, 157, 180,
1071 239, 73, 159, 181, 242, 244, 16, 17, 88, 240,
1072 74, 138, 189, 211, 269, 298, 388, 75, 248, 23,
1073 83, 84, 128, 117, 118, 119, 129, 177, 130, 262,
1077 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1079 #define YYPACT_NINF -472
1080 static const short yypact
[] =
1082 -472, 17, 1, -472, -472, -472, -472, -472, -472, -472,
1083 86, 86, 86, 140, 86, -472, -472, -55, -472, -472,
1084 610, -472, 376, 649, 86, -472, -472, -472, -472, 597,
1085 -472, 376, 86, 86, 86, 86, 86, 86, 86, -472,
1086 -472, -472, -472, -472, -472, -472, -472, -472, -472, -472,
1087 -472, -472, -472, -472, -472, -472, -472, -472, -472, -472,
1088 -472, -472, -472, -472, -472, -472, -472, -472, -472, -472,
1089 -472, -472, -472, -472, -472, -472, -472, -472, -472, -472,
1090 -472, -472, -472, -472, -472, 268, 21, -472, 59, -472,
1091 480, 409, 327, -78, -78, -472, -472, 649, 395, 395,
1092 48, 48, 649, 649, 395, 395, 649, 395, 395, 395,
1093 395, 48, 395, 395, 86, 86, 86, -472, -472, -472,
1094 86, -472, 44, 67, -472, -472, -472, -472, 156, -472,
1095 -472, -472, 55, 62, 240, 247, -472, -472, 413, -472,
1096 -472, -472, -472, 71, -472, -472, -472, -472, 78, -472,
1097 -472, 68, -472, 187, 86, 86, -472, -472, -472, -472,
1098 86, 86, 86, 86, 86, 86, 86, -472, 86, 86,
1099 -472, 29, -472, -472, -472, -472, 183, -21, 82, 85,
1100 249, 262, 108, 114, -472, -472, -472, -472, -472, 12,
1101 -472, -472, 128, -472, 137, -472, -472, -472, 195, 86,
1102 86, 3, 117, -472, 7, 236, -472, 86, 86, 243,
1103 -472, -472, 278, 86, 86, -472, -472, -472, -472, 282,
1104 159, 160, 44, -472, -71, 168, -472, 174, 188, 203,
1105 191, -472, 220, 220, -472, -472, 86, 86, 86, 241,
1106 178, 86, -472, 86, 259, 86, 86, -472, -10, 472,
1107 -472, -472, -472, 223, 182, -472, 364, 364, 364, 364,
1108 364, 364, 254, 264, 266, 264, -472, 270, 271, 15,
1109 -472, 86, -472, -472, -472, -472, -472, -472, -472, 281,
1110 -472, 292, 86, -472, -472, -472, -472, -472, -472, -472,
1111 -472, 86, 86, 86, 86, 324, -472, -472, -472, -472,
1112 472, 211, 86, 179, 356, 228, 228, -472, -472, -472,
1113 -472, -472, -472, 348, 381, -472, 285, 264, -472, -472,
1114 302, -472, -472, -472, -472, 310, -472, -472, -472, -472,
1115 86, 228, 300, 623, 610, 300, 550, 211, 86, 179,
1116 370, 228, 228, -472, -472, -472, -472, -472, -472, 86,
1117 -472, 86, 42, 399, 623, -472, -15, 228, 179, 400,
1118 400, 400, 400, 400, 400, 400, 400, 400, 86, 86,
1119 86, 179, 86, 400, 400, 400, -472, -472, 325, -472,
1120 -472, 300, 300, 569, -472, 326, 264, -472, 332, -472,
1121 -472, -472, -472, 44, 44, -472, -472, -472, -472, -472,
1122 -472, -472, -472, -472, -472, 334, -472, -472, 44, -472,
1123 -472, -472, -472, -472, 424, 179, 425, 425, 425, 425,
1124 425, 425, 425, 425, 425, 86, 86, 86, 179, 86,
1125 425, 425, 425, -472, 86, 86, 86, 86, 86, 86,
1126 347, 44, 44, -472, -472, -472, -472, -472, -472, -472,
1127 -472, -472, -472, 349, -472, -472, 44, -472, -472, -472,
1128 -472, -472, -472, -472, 350, 360, 366, 371, 86, 86,
1129 86, 86, 86, 86, 86, 86, 290, 382, 383, 384,
1130 407, 408, 411, 417, 426, -472, 427, -472, 86, 86,
1131 86, 86, 290, 86, 86, 86, 228, 428, 430, 436,
1132 437, 439, 440, 441, 443, 125, 86, -472, 86, 86,
1133 86, 228, 86, -472, 86, 86, 86, -472, 440, 444,
1134 445, 129, 447, 449, 450, 451, -472, 86, 86, 86,
1135 86, 86, 228, -472, 86, 453, 450, 454, 456, 450,
1136 146, 458, 86, 223, 86, 228, -472, 228, 86, 450,
1137 357, 459, 154, 300, 460, 223, -472, -472, 86, 228,
1138 86, 357, 461, 300, 463, -472, 86, 228, 61, 300,
1139 228, -472, 161, 357, -472
1142 /* YYPGOTO[NTERM-NUM]. */
1143 static const short yypgoto
[] =
1145 -472, -472, -472, -472, -472, 485, -258, -168, 528, -472,
1146 -472, -472, -472, -472, -472, -472, -472, -472, -472, -472,
1147 -472, -472, -472, 209, -472, 260, -472, -472, -472, 279,
1148 2, 43, -472, 280, -471, -282, 70, -472, -472, -472,
1149 -472, 238, 35, -379, -348, -472, -472, -472, 333, -472,
1150 -229, -472, 385, -472, -472, -472, -472, -472, -472, -115,
1151 -472, -472, -472, 358, -472, -472, -472, -472, -472, 570,
1152 -472, -472, -20, -205, -194, -186, -393, -472, 567, -241,
1156 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1157 positive, shift that token. If negative, reduce the rule which
1158 number is the opposite. If zero, do what YYDEFACT says.
1159 If YYTABLE_NINF, syntax error. */
1160 #define YYTABLE_NINF -257
1161 static const short yytable
[] =
1163 18, 28, 264, 85, 4, 5, 6, 151, 7, 222,
1164 -158, 37, 38, 225, 25, 26, 27, 3, 29, 333,
1165 333, 8, 86, 150, 335, 284, 30, 285, 286, 287,
1166 288, 289, 290, 5, 6, 192, 90, 91, 92, 93,
1167 94, 95, 96, 323, 354, 333, 5, 6, 387, 356,
1168 314, 316, 5, 6, 209, 333, 333, 209, 295, 381,
1169 382, 197, 198, 5, 6, 543, 9, 270, 546, 357,
1170 271, 333, 272, 150, 170, 392, 309, 123, 555, 377,
1171 223, 391, 134, 135, 226, 350, 122, 310, 10, 11,
1172 5, 6, 12, 13, 210, 311, 14, 296, 132, 133,
1173 76, 77, 78, 79, 80, 81, 82, 238, 346, 143,
1174 385, 193, 146, 147, 148, 120, 10, 11, 149, 347,
1175 12, 13, -219, 224, 14, -219, -219, 348, 114, 10,
1176 11, 115, 116, 12, 13, 10, 11, 14, 150, 12,
1177 13, 121, -219, 14, 5, 6, 10, 11, 152, 154,
1178 12, 13, 178, 179, 14, 570, 155, 557, 182, 183,
1179 184, 185, 186, 187, 188, 168, 190, 191, 557, 194,
1180 212, 379, 169, 10, 11, 557, 199, 12, 13, 200,
1181 557, 14, 565, 5, 6, 326, 322, 195, 196, 571,
1182 393, 172, 173, 174, 574, 550, 175, 220, 221, 215,
1183 216, 217, 207, 408, 218, 228, 229, 561, 208, 357,
1184 333, 232, 233, 357, 505, 5, 6, 114, 322, 516,
1185 115, 116, 213, 529, 573, 333, 256, 257, 258, 521,
1186 357, 214, 5, 6, 252, 253, 254, 153, 357, 263,
1187 547, 265, 227, 267, 268, 357, 333, 441, 559, 230,
1188 540, 259, 260, 236, 237, 282, 261, -158, -158, 333,
1189 456, 333, 241, 552, -158, 553, 10, 11, 243, 299,
1190 12, 13, 247, 333, 14, 176, 150, 563, 436, 437,
1191 312, 333, 245, 219, 333, 569, 234, 235, 572, 315,
1192 317, 318, 319, 439, 5, 6, 485, 246, 10, 11,
1193 325, 114, 12, 13, 115, 116, 14, 301, 114, 334,
1194 334, 115, 116, 302, 249, 10, 11, 282, 355, 12,
1195 330, 156, 156, 331, 201, 202, 469, 470, 158, 114,
1196 320, 203, 115, 116, 334, 29, 378, 204, 205, 114,
1197 158, 472, 115, 116, 206, 334, 334, 384, 291, 386,
1198 389, 303, 304, 114, 305, 306, 115, 116, -242, 231,
1199 292, 334, 329, 337, 293, 294, 405, 405, 405, 338,
1200 405, 406, 407, 307, 410, 300, 380, 10, 11, 351,
1201 39, 12, 13, 40, 357, 14, 41, 42, 43, 44,
1202 45, 46, 47, 48, 49, 50, 352, 51, 52, 53,
1203 54, 124, 125, 126, 353, 390, 394, 339, 340, 114,
1204 341, 342, 115, 116, 35, 36, 37, 38, -219, 414,
1205 434, -219, -219, 453, 453, 453, 435, 453, 438, 343,
1206 440, 442, 462, 463, 464, 465, 466, 467, -219, -158,
1207 -158, 468, 251, 471, 473, -158, -158, 76, 77, 78,
1208 79, 80, 81, 82, 474, 55, -158, -158, 150, 56,
1209 475, 454, 455, -158, 458, 476, 477, 478, 479, 480,
1210 481, 482, 483, 484, 487, 349, 488, 489, 490, 160,
1211 161, 162, 163, 164, 165, 166, 497, 498, 499, 500,
1212 487, 502, 503, 504, 167, 34, 35, 36, 37, 38,
1213 334, 491, 492, 31, 517, 493, 518, 519, 520, 273,
1214 522, 494, 523, 524, 525, 334, 274, 275, 276, 277,
1215 495, 496, 506, 278, 508, 535, 536, 537, 538, 539,
1216 509, 510, 541, 511, 512, 514, 334, 515, 527, 528,
1217 549, 530, 551, 531, 532, 534, 554, 542, 544, 334,
1218 545, 334, 548, 558, 560, 566, 562, 567, 564, 89,
1219 321, 526, 501, 334, 568, 33, 34, 35, 36, 37,
1220 38, 334, 255, 358, 334, 359, 360, 361, 362, 363,
1221 364, 365, 366, 367, 368, 369, 370, 371, 372, 373,
1222 374, 375, 415, 344, 416, 417, 418, 419, 420, 421,
1223 422, 423, 424, 425, 426, 427, 428, 429, 430, 431,
1224 432, 97, 98, 99, 100, 101, 102, 103, 104, 105,
1225 106, 107, 108, 109, 110, 111, 112, 297, 0, 266,
1226 0, 0, 376, 0, 0, 0, 0, 0, 113, 396,
1227 397, 398, 399, 400, 401, 402, 403, 0, 0, 0,
1228 0, 433, 411, 412, 413, 444, 445, 446, 447, 448,
1229 449, 450, 451, 0, 0, 0, 131, 0, 459, 460,
1230 461, 136, 137, 0, 139, 140, 141, 142, 0, 144,
1231 145, 32, 33, 34, 35, 36, 37, 38, 0, 0,
1232 0, 0, 0, 87, 32, 33, 34, 35, 36, 37,
1233 38, 76, 77, 78, 79, 80, 81, 82, -256, -256,
1234 -256, -256, -256, -256
1237 static const short yycheck
[] =
1239 2, 13, 243, 23, 3, 4, 5, 122, 7, 6,
1240 81, 89, 90, 6, 10, 11, 12, 0, 14, 305,
1241 306, 20, 24, 94, 306, 254, 81, 256, 257, 258,
1242 259, 260, 261, 4, 5, 6, 32, 33, 34, 35,
1243 36, 37, 38, 301, 330, 331, 4, 5, 6, 331,
1244 291, 292, 4, 5, 42, 341, 342, 42, 43, 341,
1245 342, 82, 177, 4, 5, 536, 65, 77, 539, 84,
1246 80, 357, 82, 94, 6, 357, 281, 97, 549, 337,
1247 77, 96, 102, 103, 77, 314, 88, 281, 87, 88,
1248 4, 5, 91, 92, 82, 281, 95, 82, 100, 101,
1249 52, 53, 54, 55, 56, 57, 58, 222, 313, 111,
1250 351, 82, 114, 115, 116, 94, 87, 88, 120, 313,
1251 91, 92, 61, 6, 95, 64, 65, 313, 61, 87,
1252 88, 64, 65, 91, 92, 87, 88, 95, 94, 91,
1253 92, 82, 81, 95, 4, 5, 87, 88, 81, 94,
1254 91, 92, 154, 155, 95, 94, 94, 550, 160, 161,
1255 162, 163, 164, 165, 166, 94, 168, 169, 561, 171,
1256 190, 339, 94, 87, 88, 568, 94, 91, 92, 94,
1257 573, 95, 561, 4, 5, 6, 7, 4, 5, 568,
1258 358, 4, 5, 6, 573, 543, 9, 199, 200, 4,
1259 5, 6, 94, 371, 9, 207, 208, 555, 94, 84,
1260 496, 213, 214, 84, 496, 4, 5, 61, 7, 94,
1261 64, 65, 94, 94, 572, 511, 48, 49, 50, 511,
1262 84, 94, 4, 5, 236, 237, 238, 81, 84, 241,
1263 94, 243, 6, 245, 246, 84, 532, 415, 94, 6,
1264 532, 73, 74, 94, 94, 94, 78, 75, 76, 545,
1265 428, 547, 94, 545, 82, 547, 87, 88, 94, 271,
1266 91, 92, 81, 559, 95, 88, 94, 559, 393, 394,
1267 282, 567, 94, 88, 570, 567, 4, 5, 570, 291,
1268 292, 293, 294, 408, 4, 5, 6, 94, 87, 88,
1269 302, 61, 91, 92, 64, 65, 95, 15, 61, 305,
1270 306, 64, 65, 21, 94, 87, 88, 94, 330, 91,
1271 92, 81, 81, 95, 75, 76, 441, 442, 81, 61,
1272 6, 82, 64, 65, 330, 331, 338, 75, 76, 61,
1273 81, 456, 64, 65, 82, 341, 342, 349, 94, 351,
1274 352, 59, 60, 61, 62, 63, 64, 65, 94, 81,
1275 94, 357, 6, 15, 94, 94, 368, 369, 370, 21,
1276 372, 369, 370, 81, 372, 94, 6, 87, 88, 94,
1277 4, 91, 92, 7, 84, 95, 10, 11, 12, 13,
1278 14, 15, 16, 17, 18, 19, 94, 21, 22, 23,
1279 24, 6, 7, 8, 94, 6, 6, 59, 60, 61,
1280 62, 63, 64, 65, 87, 88, 89, 90, 61, 94,
1281 94, 64, 65, 425, 426, 427, 94, 429, 94, 81,
1282 6, 6, 434, 435, 436, 437, 438, 439, 81, 75,
1283 76, 94, 233, 94, 94, 81, 82, 52, 53, 54,
1284 55, 56, 57, 58, 94, 79, 75, 76, 94, 83,
1285 94, 426, 427, 82, 429, 94, 468, 469, 470, 471,
1286 472, 473, 474, 475, 476, 94, 94, 94, 94, 66,
1287 67, 68, 69, 70, 71, 72, 488, 489, 490, 491,
1288 492, 493, 494, 495, 81, 86, 87, 88, 89, 90,
1289 496, 94, 94, 18, 506, 94, 508, 509, 510, 37,
1290 512, 94, 514, 515, 516, 511, 44, 45, 46, 47,
1291 94, 94, 94, 51, 94, 527, 528, 529, 530, 531,
1292 94, 94, 534, 94, 94, 94, 532, 94, 94, 94,
1293 542, 94, 544, 94, 94, 94, 548, 94, 94, 545,
1294 94, 547, 94, 94, 94, 94, 558, 94, 560, 31,
1295 300, 518, 492, 559, 566, 85, 86, 87, 88, 89,
1296 90, 567, 239, 23, 570, 25, 26, 27, 28, 29,
1297 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
1298 40, 41, 23, 313, 25, 26, 27, 28, 29, 30,
1299 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
1300 41, 41, 42, 43, 44, 45, 46, 47, 48, 49,
1301 50, 51, 52, 53, 54, 55, 56, 269, -1, 244,
1302 -1, -1, 82, -1, -1, -1, -1, -1, 68, 360,
1303 361, 362, 363, 364, 365, 366, 367, -1, -1, -1,
1304 -1, 82, 373, 374, 375, 417, 418, 419, 420, 421,
1305 422, 423, 424, -1, -1, -1, 99, -1, 430, 431,
1306 432, 104, 105, -1, 107, 108, 109, 110, -1, 112,
1307 113, 84, 85, 86, 87, 88, 89, 90, -1, -1,
1308 -1, -1, -1, 96, 84, 85, 86, 87, 88, 89,
1309 90, 52, 53, 54, 55, 56, 57, 58, 85, 86,
1313 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1314 symbol of state STATE-NUM. */
1315 static const unsigned char yystos
[] =
1317 0, 98, 99, 0, 3, 4, 5, 7, 20, 65,
1318 87, 88, 91, 92, 95, 100, 153, 154, 177, 178,
1319 179, 180, 102, 166, 101, 179, 179, 179, 180, 179,
1320 81, 102, 84, 85, 86, 87, 88, 89, 90, 4,
1321 7, 10, 11, 12, 13, 14, 15, 16, 17, 18,
1322 19, 21, 22, 23, 24, 79, 83, 105, 107, 108,
1323 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
1324 123, 134, 144, 148, 157, 164, 52, 53, 54, 55,
1325 56, 57, 58, 167, 168, 169, 177, 96, 155, 105,
1326 179, 179, 179, 179, 179, 179, 179, 166, 166, 166,
1327 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
1328 166, 166, 166, 166, 61, 64, 65, 170, 171, 172,
1329 94, 82, 177, 169, 6, 7, 8, 106, 169, 173,
1330 175, 175, 177, 177, 169, 169, 175, 175, 158, 175,
1331 175, 175, 175, 177, 175, 175, 177, 177, 177, 177,
1332 94, 156, 81, 81, 94, 94, 81, 145, 81, 149,
1333 66, 67, 68, 69, 70, 71, 72, 81, 94, 94,
1334 6, 119, 4, 5, 6, 9, 88, 174, 177, 177,
1335 146, 150, 177, 177, 177, 177, 177, 177, 177, 159,
1336 177, 177, 6, 82, 177, 4, 5, 82, 156, 94,
1337 94, 75, 76, 82, 75, 76, 82, 94, 94, 42,
1338 82, 160, 169, 94, 94, 4, 5, 6, 9, 88,
1339 177, 177, 6, 77, 6, 6, 77, 6, 177, 177,
1340 6, 81, 177, 177, 4, 5, 94, 94, 156, 147,
1341 156, 94, 151, 94, 152, 94, 94, 81, 165, 94,
1342 120, 120, 177, 177, 177, 145, 48, 49, 50, 73,
1343 74, 78, 176, 177, 176, 177, 149, 177, 177, 161,
1344 77, 80, 82, 37, 44, 45, 46, 47, 51, 121,
1345 122, 124, 94, 141, 147, 147, 147, 147, 147, 147,
1346 147, 94, 94, 94, 94, 43, 82, 160, 162, 177,
1347 94, 15, 21, 59, 60, 62, 63, 81, 130, 170,
1348 171, 172, 177, 135, 176, 177, 176, 177, 177, 177,
1349 6, 122, 7, 103, 177, 177, 6, 103, 104, 6,
1350 92, 95, 132, 178, 179, 132, 125, 15, 21, 59,
1351 60, 62, 63, 81, 130, 142, 170, 171, 172, 94,
1352 147, 94, 94, 94, 178, 180, 132, 84, 23, 25,
1353 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
1354 36, 37, 38, 39, 40, 41, 82, 103, 177, 104,
1355 6, 132, 132, 136, 177, 176, 177, 6, 163, 177,
1356 6, 96, 132, 104, 6, 126, 126, 126, 126, 126,
1357 126, 126, 126, 126, 127, 177, 127, 127, 104, 129,
1358 127, 126, 126, 126, 94, 23, 25, 26, 27, 28,
1359 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
1360 39, 40, 41, 82, 94, 94, 156, 156, 94, 156,
1361 6, 104, 6, 138, 138, 138, 138, 138, 138, 138,
1362 138, 138, 139, 177, 139, 139, 104, 137, 139, 138,
1363 138, 138, 177, 177, 177, 177, 177, 177, 94, 156,
1364 156, 94, 156, 94, 94, 94, 94, 177, 177, 177,
1365 177, 177, 177, 177, 177, 6, 133, 177, 94, 94,
1366 94, 94, 94, 94, 94, 94, 94, 177, 177, 177,
1367 177, 133, 177, 177, 177, 132, 94, 143, 94, 94,
1368 94, 94, 94, 128, 94, 94, 94, 177, 177, 177,
1369 177, 132, 177, 177, 177, 177, 128, 94, 94, 94,
1370 94, 94, 94, 131, 94, 177, 177, 177, 177, 177,
1371 132, 177, 94, 131, 94, 94, 131, 94, 94, 177,
1372 141, 177, 132, 132, 177, 131, 140, 173, 94, 94,
1373 94, 141, 177, 132, 177, 140, 94, 94, 177, 132,
1374 94, 140, 132, 141, 140
1377 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1378 # define YYSIZE_T __SIZE_TYPE__
1380 #if ! defined (YYSIZE_T) && defined (size_t)
1381 # define YYSIZE_T size_t
1383 #if ! defined (YYSIZE_T)
1384 # if defined (__STDC__) || defined (__cplusplus)
1385 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1386 # define YYSIZE_T size_t
1389 #if ! defined (YYSIZE_T)
1390 # define YYSIZE_T unsigned int
1393 #define yyerrok (yyerrstatus = 0)
1394 #define yyclearin (yychar = YYEMPTY)
1395 #define YYEMPTY (-2)
1398 #define YYACCEPT goto yyacceptlab
1399 #define YYABORT goto yyabortlab
1400 #define YYERROR goto yyerrorlab
1403 /* Like YYERROR except do call yyerror. This remains here temporarily
1404 to ease the transition to the new meaning of YYERROR, for GCC.
1405 Once GCC version 2 has supplanted version 1, this can go. */
1407 #define YYFAIL goto yyerrlab
1409 #define YYRECOVERING() (!!yyerrstatus)
1411 #define YYBACKUP(Token, Value) \
1413 if (yychar == YYEMPTY && yylen == 1) \
1417 yytoken = YYTRANSLATE (yychar); \
1423 yyerror ("syntax error: cannot back up");\
1429 #define YYERRCODE 256
1431 /* YYLLOC_DEFAULT -- Compute the default location (before the actions
1434 #ifndef YYLLOC_DEFAULT
1435 # define YYLLOC_DEFAULT(Current, Rhs, N) \
1436 ((Current).first_line = (Rhs)[1].first_line, \
1437 (Current).first_column = (Rhs)[1].first_column, \
1438 (Current).last_line = (Rhs)[N].last_line, \
1439 (Current).last_column = (Rhs)[N].last_column)
1442 /* YYLEX -- calling `yylex' with the right arguments. */
1445 # define YYLEX yylex (YYLEX_PARAM)
1447 # define YYLEX yylex ()
1450 /* Enable debugging if requested. */
1454 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1455 # define YYFPRINTF fprintf
1458 # define YYDPRINTF(Args) \
1464 # define YYDSYMPRINT(Args) \
1470 # define YYDSYMPRINTF(Title, Token, Value, Location) \
1474 YYFPRINTF (stderr, "%s ", Title); \
1475 yysymprint (stderr, \
1477 YYFPRINTF (stderr, "\n"); \
1481 /*------------------------------------------------------------------.
1482 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1484 `------------------------------------------------------------------*/
1486 #if defined (__STDC__) || defined (__cplusplus)
1488 yy_stack_print (short *bottom
, short *top
)
1491 yy_stack_print (bottom
, top
)
1496 YYFPRINTF (stderr
, "Stack now");
1497 for (/* Nothing. */; bottom
<= top
; ++bottom
)
1498 YYFPRINTF (stderr
, " %d", *bottom
);
1499 YYFPRINTF (stderr
, "\n");
1502 # define YY_STACK_PRINT(Bottom, Top) \
1505 yy_stack_print ((Bottom), (Top)); \
1509 /*------------------------------------------------.
1510 | Report that the YYRULE is going to be reduced. |
1511 `------------------------------------------------*/
1513 #if defined (__STDC__) || defined (__cplusplus)
1515 yy_reduce_print (int yyrule
)
1518 yy_reduce_print (yyrule
)
1523 unsigned int yylno
= yyrline
[yyrule
];
1524 YYFPRINTF (stderr
, "Reducing stack by rule %d (line %u), ",
1526 /* Print the symbols being reduced, and their result. */
1527 for (yyi
= yyprhs
[yyrule
]; 0 <= yyrhs
[yyi
]; yyi
++)
1528 YYFPRINTF (stderr
, "%s ", yytname
[yyrhs
[yyi
]]);
1529 YYFPRINTF (stderr
, "-> %s\n", yytname
[yyr1
[yyrule
]]);
1532 # define YY_REDUCE_PRINT(Rule) \
1535 yy_reduce_print (Rule); \
1538 /* Nonzero means print parse trace. It is left uninitialized so that
1539 multiple parsers can coexist. */
1541 #else /* !YYDEBUG */
1542 # define YYDPRINTF(Args)
1543 # define YYDSYMPRINT(Args)
1544 # define YYDSYMPRINTF(Title, Token, Value, Location)
1545 # define YY_STACK_PRINT(Bottom, Top)
1546 # define YY_REDUCE_PRINT(Rule)
1547 #endif /* !YYDEBUG */
1550 /* YYINITDEPTH -- initial size of the parser's stacks. */
1552 # define YYINITDEPTH 200
1555 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1556 if the built-in stack extension method is used).
1558 Do not make this value too large; the results are undefined if
1559 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1560 evaluated with infinite-precision integer arithmetic. */
1562 #if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
1567 # define YYMAXDEPTH 10000
1575 # if defined (__GLIBC__) && defined (_STRING_H)
1576 # define yystrlen strlen
1578 /* Return the length of YYSTR. */
1580 # if defined (__STDC__) || defined (__cplusplus)
1581 yystrlen (const char *yystr
)
1587 register const char *yys
= yystr
;
1589 while (*yys
++ != '\0')
1592 return yys
- yystr
- 1;
1598 # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1599 # define yystpcpy stpcpy
1601 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1604 # if defined (__STDC__) || defined (__cplusplus)
1605 yystpcpy (char *yydest
, const char *yysrc
)
1607 yystpcpy (yydest
, yysrc
)
1612 register char *yyd
= yydest
;
1613 register const char *yys
= yysrc
;
1615 while ((*yyd
++ = *yys
++) != '\0')
1623 #endif /* !YYERROR_VERBOSE */
1628 /*--------------------------------.
1629 | Print this symbol on YYOUTPUT. |
1630 `--------------------------------*/
1632 #if defined (__STDC__) || defined (__cplusplus)
1634 yysymprint (FILE *yyoutput
, int yytype
, YYSTYPE
*yyvaluep
)
1637 yysymprint (yyoutput
, yytype
, yyvaluep
)
1643 /* Pacify ``unused variable'' warnings. */
1646 if (yytype
< YYNTOKENS
)
1648 YYFPRINTF (yyoutput
, "token %s (", yytname
[yytype
]);
1650 YYPRINT (yyoutput
, yytoknum
[yytype
], *yyvaluep
);
1654 YYFPRINTF (yyoutput
, "nterm %s (", yytname
[yytype
]);
1661 YYFPRINTF (yyoutput
, ")");
1664 #endif /* ! YYDEBUG */
1665 /*-----------------------------------------------.
1666 | Release the memory associated to this symbol. |
1667 `-----------------------------------------------*/
1669 #if defined (__STDC__) || defined (__cplusplus)
1671 yydestruct (int yytype
, YYSTYPE
*yyvaluep
)
1674 yydestruct (yytype
, yyvaluep
)
1679 /* Pacify ``unused variable'' warnings. */
1691 /* Prevent warnings from -Wmissing-prototypes. */
1693 #ifdef YYPARSE_PARAM
1694 # if defined (__STDC__) || defined (__cplusplus)
1695 int yyparse (void *YYPARSE_PARAM
);
1699 #else /* ! YYPARSE_PARAM */
1700 #if defined (__STDC__) || defined (__cplusplus)
1705 #endif /* ! YYPARSE_PARAM */
1709 /* The lookahead symbol. */
1712 /* The semantic value of the lookahead symbol. */
1715 /* Number of syntax errors so far. */
1724 #ifdef YYPARSE_PARAM
1725 # if defined (__STDC__) || defined (__cplusplus)
1726 int yyparse (void *YYPARSE_PARAM
)
1728 int yyparse (YYPARSE_PARAM
)
1729 void *YYPARSE_PARAM
;
1731 #else /* ! YYPARSE_PARAM */
1732 #if defined (__STDC__) || defined (__cplusplus)
1743 register int yystate
;
1746 /* Number of tokens to shift before error messages enabled. */
1748 /* Lookahead token as an internal (translated) token number. */
1751 /* Three stacks and their tools:
1752 `yyss': related to states,
1753 `yyvs': related to semantic values,
1754 `yyls': related to locations.
1756 Refer to the stacks thru separate pointers, to allow yyoverflow
1757 to reallocate them elsewhere. */
1759 /* The state stack. */
1760 short yyssa
[YYINITDEPTH
];
1761 short *yyss
= yyssa
;
1762 register short *yyssp
;
1764 /* The semantic value stack. */
1765 YYSTYPE yyvsa
[YYINITDEPTH
];
1766 YYSTYPE
*yyvs
= yyvsa
;
1767 register YYSTYPE
*yyvsp
;
1771 #define YYPOPSTACK (yyvsp--, yyssp--)
1773 YYSIZE_T yystacksize
= YYINITDEPTH
;
1775 /* The variables used to return semantic value and location from the
1780 /* When reducing, the number of symbols on the RHS of the reduced
1784 YYDPRINTF ((stderr
, "Starting parse\n"));
1789 yychar
= YYEMPTY
; /* Cause a token to be read. */
1791 /* Initialize stack pointers.
1792 Waste one element of value and location stack
1793 so that they stay on the same level as the state stack.
1794 The wasted elements are never initialized. */
1801 /*------------------------------------------------------------.
1802 | yynewstate -- Push a new state, which is found in yystate. |
1803 `------------------------------------------------------------*/
1805 /* In all cases, when you get here, the value and location stacks
1806 have just been pushed. so pushing a state here evens the stacks.
1813 if (yyss
+ yystacksize
- 1 <= yyssp
)
1815 /* Get the current used size of the three stacks, in elements. */
1816 YYSIZE_T yysize
= yyssp
- yyss
+ 1;
1820 /* Give user a chance to reallocate the stack. Use copies of
1821 these so that the &'s don't force the real ones into
1823 YYSTYPE
*yyvs1
= yyvs
;
1824 short *yyss1
= yyss
;
1827 /* Each stack pointer address is followed by the size of the
1828 data in use in that stack, in bytes. This used to be a
1829 conditional around just the two extra args, but that might
1830 be undefined if yyoverflow is a macro. */
1831 yyoverflow ("parser stack overflow",
1832 &yyss1
, yysize
* sizeof (*yyssp
),
1833 &yyvs1
, yysize
* sizeof (*yyvsp
),
1840 #else /* no yyoverflow */
1841 # ifndef YYSTACK_RELOCATE
1844 /* Extend the stack our own way. */
1845 if (YYMAXDEPTH
<= yystacksize
)
1848 if (YYMAXDEPTH
< yystacksize
)
1849 yystacksize
= YYMAXDEPTH
;
1852 short *yyss1
= yyss
;
1853 union yyalloc
*yyptr
=
1854 (union yyalloc
*) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize
));
1857 YYSTACK_RELOCATE (yyss
);
1858 YYSTACK_RELOCATE (yyvs
);
1860 # undef YYSTACK_RELOCATE
1862 YYSTACK_FREE (yyss1
);
1865 #endif /* no yyoverflow */
1867 yyssp
= yyss
+ yysize
- 1;
1868 yyvsp
= yyvs
+ yysize
- 1;
1871 YYDPRINTF ((stderr
, "Stack size increased to %lu\n",
1872 (unsigned long int) yystacksize
));
1874 if (yyss
+ yystacksize
- 1 <= yyssp
)
1878 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
1887 /* Do appropriate processing given the current state. */
1888 /* Read a lookahead token if we need one and don't already have one. */
1891 /* First try to decide what to do without reference to lookahead token. */
1893 yyn
= yypact
[yystate
];
1894 if (yyn
== YYPACT_NINF
)
1897 /* Not known => get a lookahead token if don't already have one. */
1899 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
1900 if (yychar
== YYEMPTY
)
1902 YYDPRINTF ((stderr
, "Reading a token: "));
1906 if (yychar
<= YYEOF
)
1908 yychar
= yytoken
= YYEOF
;
1909 YYDPRINTF ((stderr
, "Now at end of input.\n"));
1913 yytoken
= YYTRANSLATE (yychar
);
1914 YYDSYMPRINTF ("Next token is", yytoken
, &yylval
, &yylloc
);
1917 /* If the proper action on seeing token YYTOKEN is to reduce or to
1918 detect an error, take that action. */
1920 if (yyn
< 0 || YYLAST
< yyn
|| yycheck
[yyn
] != yytoken
)
1925 if (yyn
== 0 || yyn
== YYTABLE_NINF
)
1934 /* Shift the lookahead token. */
1935 YYDPRINTF ((stderr
, "Shifting token %s, ", yytname
[yytoken
]));
1937 /* Discard the token being shifted unless it is eof. */
1938 if (yychar
!= YYEOF
)
1944 /* Count tokens shifted since error; after three, turn off error
1953 /*-----------------------------------------------------------.
1954 | yydefault -- do the default action for the current state. |
1955 `-----------------------------------------------------------*/
1957 yyn
= yydefact
[yystate
];
1963 /*-----------------------------.
1964 | yyreduce -- Do a reduction. |
1965 `-----------------------------*/
1967 /* yyn is the number of a rule to reduce with. */
1970 /* If YYLEN is nonzero, implement the default value of the action:
1973 Otherwise, the following line sets YYVAL to garbage.
1974 This behavior is undocumented and Bison
1975 users should not rely upon it. Assigning to YYVAL
1976 unconditionally makes the parser a bit smaller, and it avoids a
1977 GCC warning that YYVAL may be used uninitialized. */
1978 yyval
= yyvsp
[1-yylen
];
1981 YY_REDUCE_PRINT (yyn
);
1985 #line 364 "./parser.y"
1988 /* First add stringtables to the resource-list */
1989 rsc
= build_stt_resources(sttres
);
1990 /* 'build_stt_resources' returns a head and $1 is a tail */
1993 yyvsp
[0].res
->next
= rsc
;
1995 rsc
->prev
= yyvsp
[0].res
;
1999 /* Find the tail again */
2000 while(yyvsp
[0].res
&& yyvsp
[0].res
->next
)
2001 yyvsp
[0].res
= yyvsp
[0].res
->next
;
2002 /* Now add any fontdirecory */
2003 rsc
= build_fontdirs(yyvsp
[0].res
);
2004 /* 'build_fontdir' returns a head and $1 is a tail */
2007 yyvsp
[0].res
->next
= rsc
;
2009 rsc
->prev
= yyvsp
[0].res
;
2013 /* Final statement before were done */
2014 resource_top
= get_resource_head(yyvsp
[0].res
);
2019 #line 398 "./parser.y"
2020 { yyval
.res
= NULL
; want_id
= 1; }
2024 #line 399 "./parser.y"
2028 resource_t
*tail
= yyvsp
[0].res
;
2029 resource_t
*head
= yyvsp
[0].res
;
2034 head
->prev
= yyvsp
[-1].res
;
2036 yyvsp
[-1].res
->next
= head
;
2038 /* Check for duplicate identifiers */
2039 while(yyvsp
[-1].res
&& head
)
2041 resource_t
*rsc
= yyvsp
[-1].res
;
2044 if(rsc
->type
== head
->type
2045 && rsc
->lan
->id
== head
->lan
->id
2046 && rsc
->lan
->sub
== head
->lan
->sub
2047 && !compare_name_id(rsc
->name
, head
->name
))
2049 yyerror("Duplicate resource name '%s'", get_nameid_str(rsc
->name
));
2056 else if(yyvsp
[-1].res
)
2058 resource_t
*tail
= yyvsp
[-1].res
;
2066 if(!dont_want_id
) /* See comments in language parsing below */
2073 #line 475 "./parser.y"
2075 yyval
.res
= yyvsp
[0].res
;
2078 if(yyvsp
[-2].num
> 65535 || yyvsp
[-2].num
< -32768)
2079 yyerror("Resource's ID out of range (%d)", yyvsp
[-2].num
);
2080 yyval
.res
->name
= new_name_id();
2081 yyval
.res
->name
->type
= name_ord
;
2082 yyval
.res
->name
->name
.i_name
= yyvsp
[-2].num
;
2083 chat("Got %s (%d)", get_typename(yyvsp
[0].res
), yyval
.res
->name
->name
.i_name
);
2089 #line 487 "./parser.y"
2091 yyval
.res
= yyvsp
[0].res
;
2094 yyval
.res
->name
= new_name_id();
2095 yyval
.res
->name
->type
= name_str
;
2096 yyval
.res
->name
->name
.s_name
= yyvsp
[-2].str
;
2097 chat("Got %s (%s)", get_typename(yyvsp
[0].res
), yyval
.res
->name
->name
.s_name
->str
.cstr
);
2103 #line 497 "./parser.y"
2105 /* Don't do anything, stringtables are converted to
2106 * resource_t structures when we are finished parsing and
2107 * the final rule of the parser is reduced (see above)
2110 chat("Got STRINGTABLE");
2115 #line 505 "./parser.y"
2120 #line 505 "./parser.y"
2122 /* We *NEED* the newline to delimit the expression.
2123 * Otherwise, we would not be able to set the next
2124 * want_id anymore because of the token-lookahead.
2126 * However, we can test the lookahead-token for
2127 * being "non-expression" type, in which case we
2128 * continue. Fortunately, tNL is the only token that
2129 * will break expression parsing and is implicitely
2130 * void, so we just remove it. This scheme makes it
2131 * possible to do some (not all) fancy preprocessor
2133 * BTW, we also need to make sure that the next
2134 * reduction of 'resources' above will *not* set
2135 * want_id because we already have a lookahead that
2138 if(yychar
!= YYEMPTY
&& yychar
!= tNL
)
2142 yychar
= YYEMPTY
; /* Could use 'yyclearin', but we already need the*/
2143 /* direct access to yychar in rule 'usrcvt' below. */
2144 else if(yychar
== tIDENT
)
2145 yywarning("LANGUAGE statement not delimited with newline; next identifier might be wrong");
2147 want_nl
= 0; /* We don't want it anymore if we didn't get it */
2150 yywarning("LANGUAGE not supported in 16-bit mode");
2152 free(currentlanguage
);
2153 if (get_language_codepage(yyvsp
[-2].num
, yyvsp
[0].num
) == -1)
2154 yyerror( "Language %04x is not supported", (yyvsp
[0].num
<<10) + yyvsp
[-2].num
);
2155 currentlanguage
= new_language(yyvsp
[-2].num
, yyvsp
[0].num
);
2157 chat("Got LANGUAGE %d,%d (0x%04x)", yyvsp
[-2].num
, yyvsp
[0].num
, (yyvsp
[0].num
<<10) + yyvsp
[-2].num
);
2162 #line 549 "./parser.y"
2163 { yychar
= rsrcid_to_token(yychar
); }
2167 #line 555 "./parser.y"
2169 if(yyvsp
[0].num
> 65535 || yyvsp
[0].num
< -32768)
2170 yyerror("Resource's ID out of range (%d)", yyvsp
[0].num
);
2171 yyval
.nid
= new_name_id();
2172 yyval
.nid
->type
= name_ord
;
2173 yyval
.nid
->name
.i_name
= yyvsp
[0].num
;
2178 #line 562 "./parser.y"
2180 yyval
.nid
= new_name_id();
2181 yyval
.nid
->type
= name_str
;
2182 yyval
.nid
->name
.s_name
= yyvsp
[0].str
;
2187 #line 572 "./parser.y"
2188 { yyval
.nid
= yyvsp
[0].nid
; }
2192 #line 573 "./parser.y"
2194 yyval
.nid
= new_name_id();
2195 yyval
.nid
->type
= name_str
;
2196 yyval
.nid
->name
.s_name
= yyvsp
[0].str
;
2201 #line 582 "./parser.y"
2202 { yyval
.res
= new_resource(res_acc
, yyvsp
[0].acc
, yyvsp
[0].acc
->memopt
, yyvsp
[0].acc
->lvc
.language
); }
2206 #line 583 "./parser.y"
2207 { yyval
.res
= new_resource(res_bmp
, yyvsp
[0].bmp
, yyvsp
[0].bmp
->memopt
, yyvsp
[0].bmp
->data
->lvc
.language
); }
2211 #line 584 "./parser.y"
2214 if(yyvsp
[0].ani
->type
== res_anicur
)
2216 yyval
.res
= rsc
= new_resource(res_anicur
, yyvsp
[0].ani
->u
.ani
, yyvsp
[0].ani
->u
.ani
->memopt
, yyvsp
[0].ani
->u
.ani
->data
->lvc
.language
);
2218 else if(yyvsp
[0].ani
->type
== res_curg
)
2221 yyval
.res
= rsc
= new_resource(res_curg
, yyvsp
[0].ani
->u
.curg
, yyvsp
[0].ani
->u
.curg
->memopt
, yyvsp
[0].ani
->u
.curg
->lvc
.language
);
2222 for(cur
= yyvsp
[0].ani
->u
.curg
->cursorlist
; cur
; cur
= cur
->next
)
2224 rsc
->prev
= new_resource(res_cur
, cur
, yyvsp
[0].ani
->u
.curg
->memopt
, yyvsp
[0].ani
->u
.curg
->lvc
.language
);
2225 rsc
->prev
->next
= rsc
;
2227 rsc
->name
= new_name_id();
2228 rsc
->name
->type
= name_ord
;
2229 rsc
->name
->name
.i_name
= cur
->id
;
2233 internal_error(__FILE__
, __LINE__
, "Invalid top-level type %d in cursor resource", yyvsp
[0].ani
->type
);
2239 #line 608 "./parser.y"
2240 { yyval
.res
= new_resource(res_dlg
, yyvsp
[0].dlg
, yyvsp
[0].dlg
->memopt
, yyvsp
[0].dlg
->lvc
.language
); }
2244 #line 609 "./parser.y"
2247 yyval
.res
= new_resource(res_dlgex
, yyvsp
[0].dlgex
, yyvsp
[0].dlgex
->memopt
, yyvsp
[0].dlgex
->lvc
.language
);
2254 #line 615 "./parser.y"
2255 { yyval
.res
= new_resource(res_dlginit
, yyvsp
[0].dginit
, yyvsp
[0].dginit
->memopt
, yyvsp
[0].dginit
->data
->lvc
.language
); }
2259 #line 616 "./parser.y"
2260 { yyval
.res
= new_resource(res_fnt
, yyvsp
[0].fnt
, yyvsp
[0].fnt
->memopt
, yyvsp
[0].fnt
->data
->lvc
.language
); }
2264 #line 617 "./parser.y"
2265 { yyval
.res
= new_resource(res_fntdir
, yyvsp
[0].fnd
, yyvsp
[0].fnd
->memopt
, yyvsp
[0].fnd
->data
->lvc
.language
); }
2269 #line 618 "./parser.y"
2272 if(yyvsp
[0].ani
->type
== res_aniico
)
2274 yyval
.res
= rsc
= new_resource(res_aniico
, yyvsp
[0].ani
->u
.ani
, yyvsp
[0].ani
->u
.ani
->memopt
, yyvsp
[0].ani
->u
.ani
->data
->lvc
.language
);
2276 else if(yyvsp
[0].ani
->type
== res_icog
)
2279 yyval
.res
= rsc
= new_resource(res_icog
, yyvsp
[0].ani
->u
.icog
, yyvsp
[0].ani
->u
.icog
->memopt
, yyvsp
[0].ani
->u
.icog
->lvc
.language
);
2280 for(ico
= yyvsp
[0].ani
->u
.icog
->iconlist
; ico
; ico
= ico
->next
)
2282 rsc
->prev
= new_resource(res_ico
, ico
, yyvsp
[0].ani
->u
.icog
->memopt
, yyvsp
[0].ani
->u
.icog
->lvc
.language
);
2283 rsc
->prev
->next
= rsc
;
2285 rsc
->name
= new_name_id();
2286 rsc
->name
->type
= name_ord
;
2287 rsc
->name
->name
.i_name
= ico
->id
;
2291 internal_error(__FILE__
, __LINE__
, "Invalid top-level type %d in icon resource", yyvsp
[0].ani
->type
);
2297 #line 642 "./parser.y"
2298 { yyval
.res
= new_resource(res_men
, yyvsp
[0].men
, yyvsp
[0].men
->memopt
, yyvsp
[0].men
->lvc
.language
); }
2302 #line 643 "./parser.y"
2305 yyval
.res
= new_resource(res_menex
, yyvsp
[0].menex
, yyvsp
[0].menex
->memopt
, yyvsp
[0].menex
->lvc
.language
);
2312 #line 649 "./parser.y"
2313 { yyval
.res
= new_resource(res_msg
, yyvsp
[0].msg
, WRC_MO_MOVEABLE
| WRC_MO_DISCARDABLE
, yyvsp
[0].msg
->data
->lvc
.language
); }
2317 #line 650 "./parser.y"
2318 { yyval
.res
= new_resource(res_html
, yyvsp
[0].html
, yyvsp
[0].html
->memopt
, yyvsp
[0].html
->data
->lvc
.language
); }
2322 #line 651 "./parser.y"
2323 { yyval
.res
= new_resource(res_rdt
, yyvsp
[0].rdt
, yyvsp
[0].rdt
->memopt
, yyvsp
[0].rdt
->data
->lvc
.language
); }
2327 #line 652 "./parser.y"
2328 { yyval
.res
= new_resource(res_toolbar
, yyvsp
[0].tlbar
, yyvsp
[0].tlbar
->memopt
, yyvsp
[0].tlbar
->lvc
.language
); }
2332 #line 653 "./parser.y"
2333 { yyval
.res
= new_resource(res_usr
, yyvsp
[0].usr
, yyvsp
[0].usr
->memopt
, yyvsp
[0].usr
->data
->lvc
.language
); }
2337 #line 654 "./parser.y"
2338 { yyval
.res
= new_resource(res_ver
, yyvsp
[0].veri
, WRC_MO_MOVEABLE
| WRC_MO_DISCARDABLE
, yyvsp
[0].veri
->lvc
.language
); }
2342 #line 658 "./parser.y"
2343 { yyval
.str
= make_filename(yyvsp
[0].str
); }
2347 #line 659 "./parser.y"
2348 { yyval
.str
= make_filename(yyvsp
[0].str
); }
2352 #line 660 "./parser.y"
2353 { yyval
.str
= make_filename(yyvsp
[0].str
); }
2357 #line 664 "./parser.y"
2358 { yyval
.bmp
= new_bitmap(yyvsp
[0].raw
, yyvsp
[-1].iptr
); }
2362 #line 668 "./parser.y"
2364 yyval
.ani
= new_ani_any();
2365 if(yyvsp
[0].raw
->size
> 4 && !memcmp(yyvsp
[0].raw
->data
, riff
, sizeof(riff
)))
2367 yyval
.ani
->type
= res_anicur
;
2368 yyval
.ani
->u
.ani
= new_ani_curico(res_anicur
, yyvsp
[0].raw
, yyvsp
[-1].iptr
);
2372 yyval
.ani
->type
= res_curg
;
2373 yyval
.ani
->u
.curg
= new_cursor_group(yyvsp
[0].raw
, yyvsp
[-1].iptr
);
2379 #line 684 "./parser.y"
2381 yyval
.ani
= new_ani_any();
2382 if(yyvsp
[0].raw
->size
> 4 && !memcmp(yyvsp
[0].raw
->data
, riff
, sizeof(riff
)))
2384 yyval
.ani
->type
= res_aniico
;
2385 yyval
.ani
->u
.ani
= new_ani_curico(res_aniico
, yyvsp
[0].raw
, yyvsp
[-1].iptr
);
2389 yyval
.ani
->type
= res_icog
;
2390 yyval
.ani
->u
.icog
= new_icon_group(yyvsp
[0].raw
, yyvsp
[-1].iptr
);
2396 #line 706 "./parser.y"
2397 { yyval
.fnt
= new_font(yyvsp
[0].raw
, yyvsp
[-1].iptr
); }
2401 #line 716 "./parser.y"
2402 { yyval
.fnd
= new_fontdir(yyvsp
[0].raw
, yyvsp
[-1].iptr
); }
2406 #line 724 "./parser.y"
2409 yywarning("MESSAGETABLE not supported in 16-bit mode");
2410 yyval
.msg
= new_messagetable(yyvsp
[0].raw
, yyvsp
[-1].iptr
);
2415 #line 732 "./parser.y"
2416 { yyval
.html
= new_html(yyvsp
[0].raw
, yyvsp
[-1].iptr
); }
2420 #line 736 "./parser.y"
2421 { yyval
.rdt
= new_rcdata(yyvsp
[0].raw
, yyvsp
[-1].iptr
); }
2425 #line 740 "./parser.y"
2426 { yyval
.dginit
= new_dlginit(yyvsp
[0].raw
, yyvsp
[-1].iptr
); }
2430 #line 744 "./parser.y"
2432 #ifdef WORDS_BIGENDIAN
2433 if(pedantic
&& byteorder
!= WRC_BO_LITTLE
)
2435 if(pedantic
&& byteorder
== WRC_BO_BIG
)
2437 yywarning("Byteordering is not little-endian and type cannot be interpreted");
2438 yyval
.usr
= new_user(yyvsp
[-2].nid
, yyvsp
[0].raw
, yyvsp
[-1].iptr
);
2443 #line 755 "./parser.y"
2445 yyval
.nid
= new_name_id();
2446 yyval
.nid
->type
= name_ord
;
2447 yyval
.nid
->name
.i_name
= yyvsp
[0].num
;
2452 #line 760 "./parser.y"
2454 yyval
.nid
= new_name_id();
2455 yyval
.nid
->type
= name_str
;
2456 yyval
.nid
->name
.s_name
= yyvsp
[0].str
;
2461 #line 769 "./parser.y"
2463 yyval
.acc
= new_accelerator();
2466 yyval
.acc
->memopt
= *(yyvsp
[-4].iptr
);
2467 free(yyvsp
[-4].iptr
);
2471 yyval
.acc
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
;
2473 if(!yyvsp
[-1].event
)
2474 yyerror("Accelerator table must have at least one entry");
2475 yyval
.acc
->events
= get_event_head(yyvsp
[-1].event
);
2478 yyval
.acc
->lvc
= *(yyvsp
[-3].lvc
);
2479 free(yyvsp
[-3].lvc
);
2481 if(!yyval
.acc
->lvc
.language
)
2482 yyval
.acc
->lvc
.language
= dup_language(currentlanguage
);
2487 #line 793 "./parser.y"
2488 { yyval
.event
=NULL
; }
2492 #line 794 "./parser.y"
2493 { yyval
.event
=add_string_event(yyvsp
[-3].str
, yyvsp
[-1].num
, yyvsp
[0].num
, yyvsp
[-4].event
); }
2497 #line 795 "./parser.y"
2498 { yyval
.event
=add_event(yyvsp
[-3].num
, yyvsp
[-1].num
, yyvsp
[0].num
, yyvsp
[-4].event
); }
2502 #line 804 "./parser.y"
2507 #line 805 "./parser.y"
2508 { yyval
.num
= yyvsp
[0].num
; }
2512 #line 808 "./parser.y"
2513 { yyval
.num
= yyvsp
[0].num
; }
2517 #line 809 "./parser.y"
2518 { yyval
.num
= yyvsp
[-2].num
| yyvsp
[0].num
; }
2522 #line 812 "./parser.y"
2523 { yyval
.num
= WRC_AF_NOINVERT
; }
2527 #line 813 "./parser.y"
2528 { yyval
.num
= WRC_AF_SHIFT
; }
2532 #line 814 "./parser.y"
2533 { yyval
.num
= WRC_AF_CONTROL
; }
2537 #line 815 "./parser.y"
2538 { yyval
.num
= WRC_AF_ALT
; }
2542 #line 816 "./parser.y"
2543 { yyval
.num
= WRC_AF_ASCII
; }
2547 #line 817 "./parser.y"
2548 { yyval
.num
= WRC_AF_VIRTKEY
; }
2552 #line 823 "./parser.y"
2556 yyvsp
[-3].dlg
->memopt
= *(yyvsp
[-11].iptr
);
2557 free(yyvsp
[-11].iptr
);
2560 yyvsp
[-3].dlg
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
| WRC_MO_DISCARDABLE
;
2561 yyvsp
[-3].dlg
->x
= yyvsp
[-10].num
;
2562 yyvsp
[-3].dlg
->y
= yyvsp
[-8].num
;
2563 yyvsp
[-3].dlg
->width
= yyvsp
[-6].num
;
2564 yyvsp
[-3].dlg
->height
= yyvsp
[-4].num
;
2565 yyvsp
[-3].dlg
->controls
= get_control_head(yyvsp
[-1].ctl
);
2566 yyval
.dlg
= yyvsp
[-3].dlg
;
2567 if(!yyval
.dlg
->gotstyle
)
2569 yyval
.dlg
->style
= new_style(0,0);
2570 yyval
.dlg
->style
->or_mask
= WS_POPUP
;
2571 yyval
.dlg
->gotstyle
= TRUE
;
2573 if(yyval
.dlg
->title
)
2574 yyval
.dlg
->style
->or_mask
|= WS_CAPTION
;
2576 yyval
.dlg
->style
->or_mask
|= DS_SETFONT
;
2578 yyval
.dlg
->style
->or_mask
&= ~(yyval
.dlg
->style
->and_mask
);
2579 yyval
.dlg
->style
->and_mask
= 0;
2581 if(!yyval
.dlg
->lvc
.language
)
2582 yyval
.dlg
->lvc
.language
= dup_language(currentlanguage
);
2587 #line 857 "./parser.y"
2588 { yyval
.dlg
=new_dialog(); }
2592 #line 858 "./parser.y"
2593 { yyval
.dlg
=dialog_style(yyvsp
[0].style
,yyvsp
[-2].dlg
); }
2597 #line 859 "./parser.y"
2598 { yyval
.dlg
=dialog_exstyle(yyvsp
[0].style
,yyvsp
[-2].dlg
); }
2602 #line 860 "./parser.y"
2603 { yyval
.dlg
=dialog_caption(yyvsp
[0].str
,yyvsp
[-2].dlg
); }
2607 #line 861 "./parser.y"
2608 { yyval
.dlg
=dialog_font(yyvsp
[0].fntid
,yyvsp
[-1].dlg
); }
2612 #line 862 "./parser.y"
2613 { yyval
.dlg
=dialog_class(yyvsp
[0].nid
,yyvsp
[-2].dlg
); }
2617 #line 863 "./parser.y"
2618 { yyval
.dlg
=dialog_menu(yyvsp
[0].nid
,yyvsp
[-2].dlg
); }
2622 #line 864 "./parser.y"
2623 { yyval
.dlg
=dialog_language(yyvsp
[0].lan
,yyvsp
[-1].dlg
); }
2627 #line 865 "./parser.y"
2628 { yyval
.dlg
=dialog_characteristics(yyvsp
[0].chars
,yyvsp
[-1].dlg
); }
2632 #line 866 "./parser.y"
2633 { yyval
.dlg
=dialog_version(yyvsp
[0].ver
,yyvsp
[-1].dlg
); }
2637 #line 869 "./parser.y"
2638 { yyval
.ctl
= NULL
; }
2642 #line 870 "./parser.y"
2643 { yyval
.ctl
=ins_ctrl(-1, 0, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2647 #line 871 "./parser.y"
2648 { yyval
.ctl
=ins_ctrl(CT_EDIT
, 0, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2652 #line 872 "./parser.y"
2653 { yyval
.ctl
=ins_ctrl(CT_LISTBOX
, 0, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2657 #line 873 "./parser.y"
2658 { yyval
.ctl
=ins_ctrl(CT_COMBOBOX
, 0, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2662 #line 874 "./parser.y"
2663 { yyval
.ctl
=ins_ctrl(CT_SCROLLBAR
, 0, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2667 #line 875 "./parser.y"
2668 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_CHECKBOX
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2672 #line 876 "./parser.y"
2673 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_DEFPUSHBUTTON
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2677 #line 877 "./parser.y"
2678 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_GROUPBOX
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
);}
2682 #line 878 "./parser.y"
2683 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_PUSHBUTTON
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2687 #line 880 "./parser.y"
2688 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_RADIOBUTTON
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2692 #line 881 "./parser.y"
2693 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_AUTO3STATE
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2697 #line 882 "./parser.y"
2698 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_3STATE
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2702 #line 883 "./parser.y"
2703 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_AUTOCHECKBOX
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2707 #line 884 "./parser.y"
2708 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_AUTORADIOBUTTON
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2712 #line 885 "./parser.y"
2713 { yyval
.ctl
=ins_ctrl(CT_STATIC
, SS_LEFT
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2717 #line 886 "./parser.y"
2718 { yyval
.ctl
=ins_ctrl(CT_STATIC
, SS_CENTER
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2722 #line 887 "./parser.y"
2723 { yyval
.ctl
=ins_ctrl(CT_STATIC
, SS_RIGHT
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
2727 #line 889 "./parser.y"
2729 yyvsp
[0].ctl
->title
= yyvsp
[-7].nid
;
2730 yyvsp
[0].ctl
->id
= yyvsp
[-5].num
;
2731 yyvsp
[0].ctl
->x
= yyvsp
[-3].num
;
2732 yyvsp
[0].ctl
->y
= yyvsp
[-1].num
;
2733 yyval
.ctl
= ins_ctrl(CT_STATIC
, SS_ICON
, yyvsp
[0].ctl
, yyvsp
[-9].ctl
);
2738 #line 899 "./parser.y"
2740 yyval
.ctl
=new_control();
2741 yyval
.ctl
->title
= new_name_id();
2742 yyval
.ctl
->title
->type
= name_str
;
2743 yyval
.ctl
->title
->name
.s_name
= yyvsp
[-11].str
;
2744 yyval
.ctl
->id
= yyvsp
[-9].num
;
2745 yyval
.ctl
->x
= yyvsp
[-7].num
;
2746 yyval
.ctl
->y
= yyvsp
[-5].num
;
2747 yyval
.ctl
->width
= yyvsp
[-3].num
;
2748 yyval
.ctl
->height
= yyvsp
[-1].num
;
2751 yyval
.ctl
->style
= yyvsp
[0].styles
->style
;
2752 yyval
.ctl
->gotstyle
= TRUE
;
2753 if (yyvsp
[0].styles
->exstyle
)
2755 yyval
.ctl
->exstyle
= yyvsp
[0].styles
->exstyle
;
2756 yyval
.ctl
->gotexstyle
= TRUE
;
2758 free(yyvsp
[0].styles
);
2764 #line 924 "./parser.y"
2766 yyval
.ctl
= new_control();
2767 yyval
.ctl
->id
= yyvsp
[-9].num
;
2768 yyval
.ctl
->x
= yyvsp
[-7].num
;
2769 yyval
.ctl
->y
= yyvsp
[-5].num
;
2770 yyval
.ctl
->width
= yyvsp
[-3].num
;
2771 yyval
.ctl
->height
= yyvsp
[-1].num
;
2774 yyval
.ctl
->style
= yyvsp
[0].styles
->style
;
2775 yyval
.ctl
->gotstyle
= TRUE
;
2776 if (yyvsp
[0].styles
->exstyle
)
2778 yyval
.ctl
->exstyle
= yyvsp
[0].styles
->exstyle
;
2779 yyval
.ctl
->gotexstyle
= TRUE
;
2781 free(yyvsp
[0].styles
);
2787 #line 946 "./parser.y"
2788 { yyval
.ctl
= new_control(); }
2792 #line 948 "./parser.y"
2794 yyval
.ctl
= new_control();
2795 yyval
.ctl
->width
= yyvsp
[-2].num
;
2796 yyval
.ctl
->height
= yyvsp
[0].num
;
2801 #line 953 "./parser.y"
2803 yyval
.ctl
= new_control();
2804 yyval
.ctl
->width
= yyvsp
[-4].num
;
2805 yyval
.ctl
->height
= yyvsp
[-2].num
;
2806 yyval
.ctl
->style
= yyvsp
[0].style
;
2807 yyval
.ctl
->gotstyle
= TRUE
;
2812 #line 960 "./parser.y"
2814 yyval
.ctl
= new_control();
2815 yyval
.ctl
->width
= yyvsp
[-6].num
;
2816 yyval
.ctl
->height
= yyvsp
[-4].num
;
2817 yyval
.ctl
->style
= yyvsp
[-2].style
;
2818 yyval
.ctl
->gotstyle
= TRUE
;
2819 yyval
.ctl
->exstyle
= yyvsp
[0].style
;
2820 yyval
.ctl
->gotexstyle
= TRUE
;
2825 #line 971 "./parser.y"
2827 yyval
.ctl
=new_control();
2828 yyval
.ctl
->title
= yyvsp
[-16].nid
;
2829 yyval
.ctl
->id
= yyvsp
[-14].num
;
2830 yyval
.ctl
->ctlclass
= convert_ctlclass(yyvsp
[-12].nid
);
2831 yyval
.ctl
->style
= yyvsp
[-10].style
;
2832 yyval
.ctl
->gotstyle
= TRUE
;
2833 yyval
.ctl
->x
= yyvsp
[-8].num
;
2834 yyval
.ctl
->y
= yyvsp
[-6].num
;
2835 yyval
.ctl
->width
= yyvsp
[-4].num
;
2836 yyval
.ctl
->height
= yyvsp
[-2].num
;
2837 yyval
.ctl
->exstyle
= yyvsp
[0].style
;
2838 yyval
.ctl
->gotexstyle
= TRUE
;
2843 #line 985 "./parser.y"
2845 yyval
.ctl
=new_control();
2846 yyval
.ctl
->title
= yyvsp
[-14].nid
;
2847 yyval
.ctl
->id
= yyvsp
[-12].num
;
2848 yyval
.ctl
->ctlclass
= convert_ctlclass(yyvsp
[-10].nid
);
2849 yyval
.ctl
->style
= yyvsp
[-8].style
;
2850 yyval
.ctl
->gotstyle
= TRUE
;
2851 yyval
.ctl
->x
= yyvsp
[-6].num
;
2852 yyval
.ctl
->y
= yyvsp
[-4].num
;
2853 yyval
.ctl
->width
= yyvsp
[-2].num
;
2854 yyval
.ctl
->height
= yyvsp
[0].num
;
2859 #line 1000 "./parser.y"
2860 { yyval
.fntid
= new_font_id(yyvsp
[-2].num
, yyvsp
[0].str
, 0, 0); }
2864 #line 1005 "./parser.y"
2865 { yyval
.styles
= NULL
; }
2869 #line 1006 "./parser.y"
2870 { yyval
.styles
= new_style_pair(yyvsp
[0].style
, 0); }
2874 #line 1007 "./parser.y"
2875 { yyval
.styles
= new_style_pair(yyvsp
[-2].style
, yyvsp
[0].style
); }
2879 #line 1011 "./parser.y"
2880 { yyval
.style
= new_style(yyvsp
[-2].style
->or_mask
| yyvsp
[0].style
->or_mask
, yyvsp
[-2].style
->and_mask
| yyvsp
[0].style
->and_mask
); free(yyvsp
[-2].style
); free(yyvsp
[0].style
);}
2884 #line 1012 "./parser.y"
2885 { yyval
.style
= yyvsp
[-1].style
; }
2889 #line 1013 "./parser.y"
2890 { yyval
.style
= new_style(yyvsp
[0].num
, 0); }
2894 #line 1014 "./parser.y"
2895 { yyval
.style
= new_style(0, yyvsp
[0].num
); }
2899 #line 1018 "./parser.y"
2901 yyval
.nid
= new_name_id();
2902 yyval
.nid
->type
= name_ord
;
2903 yyval
.nid
->name
.i_name
= yyvsp
[0].num
;
2908 #line 1023 "./parser.y"
2910 yyval
.nid
= new_name_id();
2911 yyval
.nid
->type
= name_str
;
2912 yyval
.nid
->name
.s_name
= yyvsp
[0].str
;
2917 #line 1032 "./parser.y"
2920 yywarning("DIALOGEX not supported in 16-bit mode");
2923 yyvsp
[-3].dlgex
->memopt
= *(yyvsp
[-12].iptr
);
2924 free(yyvsp
[-12].iptr
);
2927 yyvsp
[-3].dlgex
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
| WRC_MO_DISCARDABLE
;
2928 yyvsp
[-3].dlgex
->x
= yyvsp
[-11].num
;
2929 yyvsp
[-3].dlgex
->y
= yyvsp
[-9].num
;
2930 yyvsp
[-3].dlgex
->width
= yyvsp
[-7].num
;
2931 yyvsp
[-3].dlgex
->height
= yyvsp
[-5].num
;
2934 yyvsp
[-3].dlgex
->helpid
= *(yyvsp
[-4].iptr
);
2935 yyvsp
[-3].dlgex
->gothelpid
= TRUE
;
2936 free(yyvsp
[-4].iptr
);
2938 yyvsp
[-3].dlgex
->controls
= get_control_head(yyvsp
[-1].ctl
);
2939 yyval
.dlgex
= yyvsp
[-3].dlgex
;
2941 assert(yyval
.dlgex
->style
!= NULL
);
2942 if(!yyval
.dlgex
->gotstyle
)
2944 yyval
.dlgex
->style
->or_mask
= WS_POPUP
;
2945 yyval
.dlgex
->gotstyle
= TRUE
;
2947 if(yyval
.dlgex
->title
)
2948 yyval
.dlgex
->style
->or_mask
|= WS_CAPTION
;
2949 if(yyval
.dlgex
->font
)
2950 yyval
.dlgex
->style
->or_mask
|= DS_SETFONT
;
2952 yyval
.dlgex
->style
->or_mask
&= ~(yyval
.dlgex
->style
->and_mask
);
2953 yyval
.dlgex
->style
->and_mask
= 0;
2955 if(!yyval
.dlgex
->lvc
.language
)
2956 yyval
.dlgex
->lvc
.language
= dup_language(currentlanguage
);
2961 #line 1075 "./parser.y"
2962 { yyval
.dlgex
=new_dialogex(); }
2966 #line 1076 "./parser.y"
2967 { yyval
.dlgex
=dialogex_style(yyvsp
[0].style
,yyvsp
[-2].dlgex
); }
2971 #line 1077 "./parser.y"
2972 { yyval
.dlgex
=dialogex_exstyle(yyvsp
[0].style
,yyvsp
[-2].dlgex
); }
2976 #line 1078 "./parser.y"
2977 { yyval
.dlgex
=dialogex_caption(yyvsp
[0].str
,yyvsp
[-2].dlgex
); }
2981 #line 1079 "./parser.y"
2982 { yyval
.dlgex
=dialogex_font(yyvsp
[0].fntid
,yyvsp
[-1].dlgex
); }
2986 #line 1080 "./parser.y"
2987 { yyval
.dlgex
=dialogex_font(yyvsp
[0].fntid
,yyvsp
[-1].dlgex
); }
2991 #line 1081 "./parser.y"
2992 { yyval
.dlgex
=dialogex_class(yyvsp
[0].nid
,yyvsp
[-2].dlgex
); }
2996 #line 1082 "./parser.y"
2997 { yyval
.dlgex
=dialogex_menu(yyvsp
[0].nid
,yyvsp
[-2].dlgex
); }
3001 #line 1083 "./parser.y"
3002 { yyval
.dlgex
=dialogex_language(yyvsp
[0].lan
,yyvsp
[-1].dlgex
); }
3006 #line 1084 "./parser.y"
3007 { yyval
.dlgex
=dialogex_characteristics(yyvsp
[0].chars
,yyvsp
[-1].dlgex
); }
3011 #line 1085 "./parser.y"
3012 { yyval
.dlgex
=dialogex_version(yyvsp
[0].ver
,yyvsp
[-1].dlgex
); }
3016 #line 1088 "./parser.y"
3017 { yyval
.ctl
= NULL
; }
3021 #line 1089 "./parser.y"
3022 { yyval
.ctl
=ins_ctrl(-1, 0, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3026 #line 1090 "./parser.y"
3027 { yyval
.ctl
=ins_ctrl(CT_EDIT
, 0, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3031 #line 1091 "./parser.y"
3032 { yyval
.ctl
=ins_ctrl(CT_LISTBOX
, 0, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3036 #line 1092 "./parser.y"
3037 { yyval
.ctl
=ins_ctrl(CT_COMBOBOX
, 0, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3041 #line 1093 "./parser.y"
3042 { yyval
.ctl
=ins_ctrl(CT_SCROLLBAR
, 0, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3046 #line 1094 "./parser.y"
3047 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_CHECKBOX
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3051 #line 1095 "./parser.y"
3052 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_DEFPUSHBUTTON
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3056 #line 1096 "./parser.y"
3057 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_GROUPBOX
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
);}
3061 #line 1097 "./parser.y"
3062 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_PUSHBUTTON
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3066 #line 1099 "./parser.y"
3067 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_RADIOBUTTON
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3071 #line 1100 "./parser.y"
3072 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_AUTO3STATE
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3076 #line 1101 "./parser.y"
3077 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_3STATE
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3081 #line 1102 "./parser.y"
3082 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_AUTOCHECKBOX
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3086 #line 1103 "./parser.y"
3087 { yyval
.ctl
=ins_ctrl(CT_BUTTON
, BS_AUTORADIOBUTTON
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3091 #line 1104 "./parser.y"
3092 { yyval
.ctl
=ins_ctrl(CT_STATIC
, SS_LEFT
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3096 #line 1105 "./parser.y"
3097 { yyval
.ctl
=ins_ctrl(CT_STATIC
, SS_CENTER
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3101 #line 1106 "./parser.y"
3102 { yyval
.ctl
=ins_ctrl(CT_STATIC
, SS_RIGHT
, yyvsp
[0].ctl
, yyvsp
[-2].ctl
); }
3106 #line 1108 "./parser.y"
3108 yyvsp
[0].ctl
->title
= yyvsp
[-7].nid
;
3109 yyvsp
[0].ctl
->id
= yyvsp
[-5].num
;
3110 yyvsp
[0].ctl
->x
= yyvsp
[-3].num
;
3111 yyvsp
[0].ctl
->y
= yyvsp
[-1].num
;
3112 yyval
.ctl
= ins_ctrl(CT_STATIC
, SS_ICON
, yyvsp
[0].ctl
, yyvsp
[-9].ctl
);
3117 #line 1119 "./parser.y"
3119 yyval
.ctl
=new_control();
3120 yyval
.ctl
->title
= yyvsp
[-18].nid
;
3121 yyval
.ctl
->id
= yyvsp
[-16].num
;
3122 yyval
.ctl
->ctlclass
= convert_ctlclass(yyvsp
[-14].nid
);
3123 yyval
.ctl
->style
= yyvsp
[-12].style
;
3124 yyval
.ctl
->gotstyle
= TRUE
;
3125 yyval
.ctl
->x
= yyvsp
[-10].num
;
3126 yyval
.ctl
->y
= yyvsp
[-8].num
;
3127 yyval
.ctl
->width
= yyvsp
[-6].num
;
3128 yyval
.ctl
->height
= yyvsp
[-4].num
;
3131 yyval
.ctl
->exstyle
= yyvsp
[-2].style
;
3132 yyval
.ctl
->gotexstyle
= TRUE
;
3136 yyval
.ctl
->helpid
= *(yyvsp
[-1].iptr
);
3137 yyval
.ctl
->gothelpid
= TRUE
;
3138 free(yyvsp
[-1].iptr
);
3140 yyval
.ctl
->extra
= yyvsp
[0].raw
;
3145 #line 1143 "./parser.y"
3147 yyval
.ctl
=new_control();
3148 yyval
.ctl
->title
= yyvsp
[-15].nid
;
3149 yyval
.ctl
->id
= yyvsp
[-13].num
;
3150 yyval
.ctl
->style
= yyvsp
[-9].style
;
3151 yyval
.ctl
->gotstyle
= TRUE
;
3152 yyval
.ctl
->ctlclass
= convert_ctlclass(yyvsp
[-11].nid
);
3153 yyval
.ctl
->x
= yyvsp
[-7].num
;
3154 yyval
.ctl
->y
= yyvsp
[-5].num
;
3155 yyval
.ctl
->width
= yyvsp
[-3].num
;
3156 yyval
.ctl
->height
= yyvsp
[-1].num
;
3157 yyval
.ctl
->extra
= yyvsp
[0].raw
;
3162 #line 1159 "./parser.y"
3164 yyval
.ctl
=new_control();
3165 yyval
.ctl
->title
= new_name_id();
3166 yyval
.ctl
->title
->type
= name_str
;
3167 yyval
.ctl
->title
->name
.s_name
= yyvsp
[-13].str
;
3168 yyval
.ctl
->id
= yyvsp
[-11].num
;
3169 yyval
.ctl
->x
= yyvsp
[-9].num
;
3170 yyval
.ctl
->y
= yyvsp
[-7].num
;
3171 yyval
.ctl
->width
= yyvsp
[-5].num
;
3172 yyval
.ctl
->height
= yyvsp
[-3].num
;
3173 if(yyvsp
[-2].styles
)
3175 yyval
.ctl
->style
= yyvsp
[-2].styles
->style
;
3176 yyval
.ctl
->gotstyle
= TRUE
;
3178 if (yyvsp
[-2].styles
->exstyle
)
3180 yyval
.ctl
->exstyle
= yyvsp
[-2].styles
->exstyle
;
3181 yyval
.ctl
->gotexstyle
= TRUE
;
3183 free(yyvsp
[-2].styles
);
3186 yyval
.ctl
->extra
= yyvsp
[0].raw
;
3191 #line 1187 "./parser.y"
3193 yyval
.ctl
= new_control();
3194 yyval
.ctl
->id
= yyvsp
[-11].num
;
3195 yyval
.ctl
->x
= yyvsp
[-9].num
;
3196 yyval
.ctl
->y
= yyvsp
[-7].num
;
3197 yyval
.ctl
->width
= yyvsp
[-5].num
;
3198 yyval
.ctl
->height
= yyvsp
[-3].num
;
3199 if(yyvsp
[-2].styles
)
3201 yyval
.ctl
->style
= yyvsp
[-2].styles
->style
;
3202 yyval
.ctl
->gotstyle
= TRUE
;
3204 if (yyvsp
[-2].styles
->exstyle
)
3206 yyval
.ctl
->exstyle
= yyvsp
[-2].styles
->exstyle
;
3207 yyval
.ctl
->gotexstyle
= TRUE
;
3209 free(yyvsp
[-2].styles
);
3211 yyval
.ctl
->extra
= yyvsp
[0].raw
;
3216 #line 1210 "./parser.y"
3217 { yyval
.raw
= NULL
; }
3221 #line 1211 "./parser.y"
3222 { yyval
.raw
= yyvsp
[0].raw
; }
3226 #line 1214 "./parser.y"
3227 { yyval
.iptr
= NULL
; }
3231 #line 1215 "./parser.y"
3232 { yyval
.iptr
= new_int(yyvsp
[0].num
); }
3236 #line 1219 "./parser.y"
3237 { yyval
.fntid
= new_font_id(yyvsp
[-7].num
, yyvsp
[-5].str
, yyvsp
[-3].num
, yyvsp
[-1].num
); }
3241 #line 1226 "./parser.y"
3242 { yyval
.fntid
= NULL
; }
3246 #line 1227 "./parser.y"
3247 { yyval
.fntid
= NULL
; }
3251 #line 1231 "./parser.y"
3253 if(!yyvsp
[0].menitm
)
3254 yyerror("Menu must contain items");
3255 yyval
.men
= new_menu();
3258 yyval
.men
->memopt
= *(yyvsp
[-2].iptr
);
3259 free(yyvsp
[-2].iptr
);
3262 yyval
.men
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
| WRC_MO_DISCARDABLE
;
3263 yyval
.men
->items
= get_item_head(yyvsp
[0].menitm
);
3266 yyval
.men
->lvc
= *(yyvsp
[-1].lvc
);
3267 free(yyvsp
[-1].lvc
);
3269 if(!yyval
.men
->lvc
.language
)
3270 yyval
.men
->lvc
.language
= dup_language(currentlanguage
);
3275 #line 1254 "./parser.y"
3276 { yyval
.menitm
= yyvsp
[-1].menitm
; }
3280 #line 1258 "./parser.y"
3281 {yyval
.menitm
= NULL
;}
3285 #line 1259 "./parser.y"
3287 yyval
.menitm
=new_menu_item();
3288 yyval
.menitm
->prev
= yyvsp
[-5].menitm
;
3289 if(yyvsp
[-5].menitm
)
3290 yyvsp
[-5].menitm
->next
= yyval
.menitm
;
3291 yyval
.menitm
->id
= yyvsp
[-1].num
;
3292 yyval
.menitm
->state
= yyvsp
[0].num
;
3293 yyval
.menitm
->name
= yyvsp
[-3].str
;
3298 #line 1268 "./parser.y"
3300 yyval
.menitm
=new_menu_item();
3301 yyval
.menitm
->prev
= yyvsp
[-2].menitm
;
3302 if(yyvsp
[-2].menitm
)
3303 yyvsp
[-2].menitm
->next
= yyval
.menitm
;
3308 #line 1274 "./parser.y"
3310 yyval
.menitm
= new_menu_item();
3311 yyval
.menitm
->prev
= yyvsp
[-4].menitm
;
3312 if(yyvsp
[-4].menitm
)
3313 yyvsp
[-4].menitm
->next
= yyval
.menitm
;
3314 yyval
.menitm
->popup
= get_item_head(yyvsp
[0].menitm
);
3315 yyval
.menitm
->name
= yyvsp
[-2].str
;
3320 #line 1293 "./parser.y"
3325 #line 1294 "./parser.y"
3326 { yyval
.num
= yyvsp
[0].num
| MF_CHECKED
; }
3330 #line 1295 "./parser.y"
3331 { yyval
.num
= yyvsp
[0].num
| MF_GRAYED
; }
3335 #line 1296 "./parser.y"
3336 { yyval
.num
= yyvsp
[0].num
| MF_HELP
; }
3340 #line 1297 "./parser.y"
3341 { yyval
.num
= yyvsp
[0].num
| MF_DISABLED
; }
3345 #line 1298 "./parser.y"
3346 { yyval
.num
= yyvsp
[0].num
| MF_MENUBARBREAK
; }
3350 #line 1299 "./parser.y"
3351 { yyval
.num
= yyvsp
[0].num
| MF_MENUBREAK
; }
3355 #line 1303 "./parser.y"
3358 yywarning("MENUEX not supported in 16-bit mode");
3359 if(!yyvsp
[0].menexitm
)
3360 yyerror("MenuEx must contain items");
3361 yyval
.menex
= new_menuex();
3364 yyval
.menex
->memopt
= *(yyvsp
[-2].iptr
);
3365 free(yyvsp
[-2].iptr
);
3368 yyval
.menex
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
| WRC_MO_DISCARDABLE
;
3369 yyval
.menex
->items
= get_itemex_head(yyvsp
[0].menexitm
);
3372 yyval
.menex
->lvc
= *(yyvsp
[-1].lvc
);
3373 free(yyvsp
[-1].lvc
);
3375 if(!yyval
.menex
->lvc
.language
)
3376 yyval
.menex
->lvc
.language
= dup_language(currentlanguage
);
3381 #line 1328 "./parser.y"
3382 { yyval
.menexitm
= yyvsp
[-1].menexitm
; }
3386 #line 1332 "./parser.y"
3387 {yyval
.menexitm
= NULL
; }
3391 #line 1333 "./parser.y"
3393 yyval
.menexitm
= new_menuex_item();
3394 yyval
.menexitm
->prev
= yyvsp
[-3].menexitm
;
3395 if(yyvsp
[-3].menexitm
)
3396 yyvsp
[-3].menexitm
->next
= yyval
.menexitm
;
3397 yyval
.menexitm
->name
= yyvsp
[-1].str
;
3398 yyval
.menexitm
->id
= yyvsp
[0].exopt
->id
;
3399 yyval
.menexitm
->type
= yyvsp
[0].exopt
->type
;
3400 yyval
.menexitm
->state
= yyvsp
[0].exopt
->state
;
3401 yyval
.menexitm
->helpid
= yyvsp
[0].exopt
->helpid
;
3402 yyval
.menexitm
->gotid
= yyvsp
[0].exopt
->gotid
;
3403 yyval
.menexitm
->gottype
= yyvsp
[0].exopt
->gottype
;
3404 yyval
.menexitm
->gotstate
= yyvsp
[0].exopt
->gotstate
;
3405 yyval
.menexitm
->gothelpid
= yyvsp
[0].exopt
->gothelpid
;
3406 free(yyvsp
[0].exopt
);
3411 #line 1349 "./parser.y"
3413 yyval
.menexitm
= new_menuex_item();
3414 yyval
.menexitm
->prev
= yyvsp
[-2].menexitm
;
3415 if(yyvsp
[-2].menexitm
)
3416 yyvsp
[-2].menexitm
->next
= yyval
.menexitm
;
3421 #line 1355 "./parser.y"
3423 yyval
.menexitm
= new_menuex_item();
3424 yyval
.menexitm
->prev
= yyvsp
[-4].menexitm
;
3425 if(yyvsp
[-4].menexitm
)
3426 yyvsp
[-4].menexitm
->next
= yyval
.menexitm
;
3427 yyval
.menexitm
->popup
= get_itemex_head(yyvsp
[0].menexitm
);
3428 yyval
.menexitm
->name
= yyvsp
[-2].str
;
3429 yyval
.menexitm
->id
= yyvsp
[-1].exopt
->id
;
3430 yyval
.menexitm
->type
= yyvsp
[-1].exopt
->type
;
3431 yyval
.menexitm
->state
= yyvsp
[-1].exopt
->state
;
3432 yyval
.menexitm
->helpid
= yyvsp
[-1].exopt
->helpid
;
3433 yyval
.menexitm
->gotid
= yyvsp
[-1].exopt
->gotid
;
3434 yyval
.menexitm
->gottype
= yyvsp
[-1].exopt
->gottype
;
3435 yyval
.menexitm
->gotstate
= yyvsp
[-1].exopt
->gotstate
;
3436 yyval
.menexitm
->gothelpid
= yyvsp
[-1].exopt
->gothelpid
;
3437 free(yyvsp
[-1].exopt
);
3442 #line 1375 "./parser.y"
3443 { yyval
.exopt
= new_itemex_opt(0, 0, 0, 0); }
3447 #line 1376 "./parser.y"
3449 yyval
.exopt
= new_itemex_opt(yyvsp
[0].num
, 0, 0, 0);
3450 yyval
.exopt
->gotid
= TRUE
;
3455 #line 1380 "./parser.y"
3457 yyval
.exopt
= new_itemex_opt(yyvsp
[-3].iptr
? *(yyvsp
[-3].iptr
) : 0, yyvsp
[-1].iptr
? *(yyvsp
[-1].iptr
) : 0, yyvsp
[0].num
, 0);
3458 yyval
.exopt
->gotid
= TRUE
;
3459 yyval
.exopt
->gottype
= TRUE
;
3460 yyval
.exopt
->gotstate
= TRUE
;
3461 if(yyvsp
[-3].iptr
) free(yyvsp
[-3].iptr
);
3462 if(yyvsp
[-1].iptr
) free(yyvsp
[-1].iptr
);
3467 #line 1388 "./parser.y"
3469 yyval
.exopt
= new_itemex_opt(yyvsp
[-4].iptr
? *(yyvsp
[-4].iptr
) : 0, yyvsp
[-2].iptr
? *(yyvsp
[-2].iptr
) : 0, yyvsp
[0].num
, 0);
3470 yyval
.exopt
->gotid
= TRUE
;
3471 yyval
.exopt
->gottype
= TRUE
;
3472 yyval
.exopt
->gotstate
= TRUE
;
3473 if(yyvsp
[-4].iptr
) free(yyvsp
[-4].iptr
);
3474 if(yyvsp
[-2].iptr
) free(yyvsp
[-2].iptr
);
3479 #line 1399 "./parser.y"
3480 { yyval
.exopt
= new_itemex_opt(0, 0, 0, 0); }
3484 #line 1400 "./parser.y"
3486 yyval
.exopt
= new_itemex_opt(yyvsp
[0].num
, 0, 0, 0);
3487 yyval
.exopt
->gotid
= TRUE
;
3492 #line 1404 "./parser.y"
3494 yyval
.exopt
= new_itemex_opt(yyvsp
[-2].iptr
? *(yyvsp
[-2].iptr
) : 0, yyvsp
[0].num
, 0, 0);
3495 if(yyvsp
[-2].iptr
) free(yyvsp
[-2].iptr
);
3496 yyval
.exopt
->gotid
= TRUE
;
3497 yyval
.exopt
->gottype
= TRUE
;
3502 #line 1410 "./parser.y"
3504 yyval
.exopt
= new_itemex_opt(yyvsp
[-4].iptr
? *(yyvsp
[-4].iptr
) : 0, yyvsp
[-2].iptr
? *(yyvsp
[-2].iptr
) : 0, yyvsp
[0].num
, 0);
3505 if(yyvsp
[-4].iptr
) free(yyvsp
[-4].iptr
);
3506 if(yyvsp
[-2].iptr
) free(yyvsp
[-2].iptr
);
3507 yyval
.exopt
->gotid
= TRUE
;
3508 yyval
.exopt
->gottype
= TRUE
;
3509 yyval
.exopt
->gotstate
= TRUE
;
3514 #line 1418 "./parser.y"
3516 yyval
.exopt
= new_itemex_opt(yyvsp
[-6].iptr
? *(yyvsp
[-6].iptr
) : 0, yyvsp
[-4].iptr
? *(yyvsp
[-4].iptr
) : 0, yyvsp
[-2].iptr
? *(yyvsp
[-2].iptr
) : 0, yyvsp
[0].num
);
3517 if(yyvsp
[-6].iptr
) free(yyvsp
[-6].iptr
);
3518 if(yyvsp
[-4].iptr
) free(yyvsp
[-4].iptr
);
3519 if(yyvsp
[-2].iptr
) free(yyvsp
[-2].iptr
);
3520 yyval
.exopt
->gotid
= TRUE
;
3521 yyval
.exopt
->gottype
= TRUE
;
3522 yyval
.exopt
->gotstate
= TRUE
;
3523 yyval
.exopt
->gothelpid
= TRUE
;
3528 #line 1438 "./parser.y"
3532 yyerror("Stringtable must have at least one entry");
3537 /* Check if we added to a language table or created
3540 for(stt
= sttres
; stt
; stt
= stt
->next
)
3547 /* It is a new one */
3550 sttres
->prev
= tagstt
;
3551 tagstt
->next
= sttres
;
3557 /* Else were done */
3561 free(tagstt_memopt
);
3562 tagstt_memopt
= NULL
;
3570 #line 1479 "./parser.y"
3572 if((tagstt
= find_stringtable(yyvsp
[0].lvc
)) == NULL
)
3573 tagstt
= new_stringtable(yyvsp
[0].lvc
);
3574 tagstt_memopt
= yyvsp
[-1].iptr
;
3575 tagstt_version
= yyvsp
[0].lvc
->version
;
3576 tagstt_characts
= yyvsp
[0].lvc
->characts
;
3583 #line 1490 "./parser.y"
3584 { yyval
.stt
= NULL
; }
3588 #line 1491 "./parser.y"
3591 assert(tagstt
!= NULL
);
3592 if(yyvsp
[-2].num
> 65535 || yyvsp
[-2].num
< -32768)
3593 yyerror("Stringtable entry's ID out of range (%d)", yyvsp
[-2].num
);
3594 /* Search for the ID */
3595 for(i
= 0; i
< tagstt
->nentries
; i
++)
3597 if(tagstt
->entries
[i
].id
== yyvsp
[-2].num
)
3598 yyerror("Stringtable ID %d already in use", yyvsp
[-2].num
);
3600 /* If we get here, then we have a new unique entry */
3602 tagstt
->entries
= xrealloc(tagstt
->entries
, sizeof(tagstt
->entries
[0]) * tagstt
->nentries
);
3603 tagstt
->entries
[tagstt
->nentries
-1].id
= yyvsp
[-2].num
;
3604 tagstt
->entries
[tagstt
->nentries
-1].str
= yyvsp
[0].str
;
3606 tagstt
->entries
[tagstt
->nentries
-1].memopt
= *tagstt_memopt
;
3608 tagstt
->entries
[tagstt
->nentries
-1].memopt
= WRC_MO_MOVEABLE
| WRC_MO_DISCARDABLE
| WRC_MO_PURE
;
3609 tagstt
->entries
[tagstt
->nentries
-1].version
= tagstt_version
;
3610 tagstt
->entries
[tagstt
->nentries
-1].characts
= tagstt_characts
;
3612 if(pedantic
&& !yyvsp
[0].str
->size
)
3613 yywarning("Zero length strings make no sense");
3614 if(!win32
&& yyvsp
[0].str
->size
> 254)
3615 yyerror("Stringtable entry more than 254 characters");
3616 if(win32
&& yyvsp
[0].str
->size
> 65534) /* Hmm..., does this happen? */
3617 yyerror("Stringtable entry more than 65534 characters (probably something else that went wrong)");
3623 #line 1531 "./parser.y"
3625 yyval
.veri
= yyvsp
[-3].veri
;
3628 yyval
.veri
->memopt
= *(yyvsp
[-4].iptr
);
3629 free(yyvsp
[-4].iptr
);
3632 yyval
.veri
->memopt
= WRC_MO_MOVEABLE
| (win32
? WRC_MO_PURE
: 0);
3633 yyval
.veri
->blocks
= get_ver_block_head(yyvsp
[-1].blk
);
3634 /* Set language; there is no version or characteristics */
3635 yyval
.veri
->lvc
.language
= dup_language(currentlanguage
);
3640 #line 1547 "./parser.y"
3641 { yyval
.veri
= new_versioninfo(); }
3645 #line 1548 "./parser.y"
3647 if(yyvsp
[-8].veri
->gotit
.fv
)
3648 yyerror("FILEVERSION already defined");
3649 yyval
.veri
= yyvsp
[-8].veri
;
3650 yyval
.veri
->filever_maj1
= yyvsp
[-6].num
;
3651 yyval
.veri
->filever_maj2
= yyvsp
[-4].num
;
3652 yyval
.veri
->filever_min1
= yyvsp
[-2].num
;
3653 yyval
.veri
->filever_min2
= yyvsp
[0].num
;
3654 yyval
.veri
->gotit
.fv
= 1;
3659 #line 1558 "./parser.y"
3661 if(yyvsp
[-8].veri
->gotit
.pv
)
3662 yyerror("PRODUCTVERSION already defined");
3663 yyval
.veri
= yyvsp
[-8].veri
;
3664 yyval
.veri
->prodver_maj1
= yyvsp
[-6].num
;
3665 yyval
.veri
->prodver_maj2
= yyvsp
[-4].num
;
3666 yyval
.veri
->prodver_min1
= yyvsp
[-2].num
;
3667 yyval
.veri
->prodver_min2
= yyvsp
[0].num
;
3668 yyval
.veri
->gotit
.pv
= 1;
3673 #line 1568 "./parser.y"
3675 if(yyvsp
[-2].veri
->gotit
.ff
)
3676 yyerror("FILEFLAGS already defined");
3677 yyval
.veri
= yyvsp
[-2].veri
;
3678 yyval
.veri
->fileflags
= yyvsp
[0].num
;
3679 yyval
.veri
->gotit
.ff
= 1;
3684 #line 1575 "./parser.y"
3686 if(yyvsp
[-2].veri
->gotit
.ffm
)
3687 yyerror("FILEFLAGSMASK already defined");
3688 yyval
.veri
= yyvsp
[-2].veri
;
3689 yyval
.veri
->fileflagsmask
= yyvsp
[0].num
;
3690 yyval
.veri
->gotit
.ffm
= 1;
3695 #line 1582 "./parser.y"
3697 if(yyvsp
[-2].veri
->gotit
.fo
)
3698 yyerror("FILEOS already defined");
3699 yyval
.veri
= yyvsp
[-2].veri
;
3700 yyval
.veri
->fileos
= yyvsp
[0].num
;
3701 yyval
.veri
->gotit
.fo
= 1;
3706 #line 1589 "./parser.y"
3708 if(yyvsp
[-2].veri
->gotit
.ft
)
3709 yyerror("FILETYPE already defined");
3710 yyval
.veri
= yyvsp
[-2].veri
;
3711 yyval
.veri
->filetype
= yyvsp
[0].num
;
3712 yyval
.veri
->gotit
.ft
= 1;
3717 #line 1596 "./parser.y"
3719 if(yyvsp
[-2].veri
->gotit
.fst
)
3720 yyerror("FILESUBTYPE already defined");
3721 yyval
.veri
= yyvsp
[-2].veri
;
3722 yyval
.veri
->filesubtype
= yyvsp
[0].num
;
3723 yyval
.veri
->gotit
.fst
= 1;
3728 #line 1606 "./parser.y"
3729 { yyval
.blk
= NULL
; }
3733 #line 1607 "./parser.y"
3735 yyval
.blk
= yyvsp
[0].blk
;
3736 yyval
.blk
->prev
= yyvsp
[-1].blk
;
3738 yyvsp
[-1].blk
->next
= yyval
.blk
;
3743 #line 1616 "./parser.y"
3745 yyval
.blk
= new_ver_block();
3746 yyval
.blk
->name
= yyvsp
[-3].str
;
3747 yyval
.blk
->values
= get_ver_value_head(yyvsp
[-1].val
);
3752 #line 1624 "./parser.y"
3753 { yyval
.val
= NULL
; }
3757 #line 1625 "./parser.y"
3759 yyval
.val
= yyvsp
[0].val
;
3760 yyval
.val
->prev
= yyvsp
[-1].val
;
3762 yyvsp
[-1].val
->next
= yyval
.val
;
3767 #line 1634 "./parser.y"
3769 yyval
.val
= new_ver_value();
3770 yyval
.val
->type
= val_block
;
3771 yyval
.val
->value
.block
= yyvsp
[0].blk
;
3776 #line 1639 "./parser.y"
3778 yyval
.val
= new_ver_value();
3779 yyval
.val
->type
= val_str
;
3780 yyval
.val
->key
= yyvsp
[-2].str
;
3781 yyval
.val
->value
.str
= yyvsp
[0].str
;
3786 #line 1645 "./parser.y"
3788 yyval
.val
= new_ver_value();
3789 yyval
.val
->type
= val_words
;
3790 yyval
.val
->key
= yyvsp
[-2].str
;
3791 yyval
.val
->value
.words
= yyvsp
[0].verw
;
3796 #line 1654 "./parser.y"
3797 { yyval
.verw
= new_ver_words(yyvsp
[0].num
); }
3801 #line 1655 "./parser.y"
3802 { yyval
.verw
= add_ver_words(yyvsp
[-2].verw
, yyvsp
[0].num
); }
3806 #line 1659 "./parser.y"
3809 toolbar_item_t
*items
= get_tlbr_buttons_head(yyvsp
[-1].tlbarItems
, &nitems
);
3810 yyval
.tlbar
= new_toolbar(yyvsp
[-6].num
, yyvsp
[-4].num
, items
, nitems
);
3813 yyval
.tlbar
->memopt
= *(yyvsp
[-7].iptr
);
3814 free(yyvsp
[-7].iptr
);
3818 yyval
.tlbar
->memopt
= WRC_MO_MOVEABLE
| WRC_MO_PURE
;
3822 yyval
.tlbar
->lvc
= *(yyvsp
[-3].lvc
);
3823 free(yyvsp
[-3].lvc
);
3825 if(!yyval
.tlbar
->lvc
.language
)
3827 yyval
.tlbar
->lvc
.language
= dup_language(currentlanguage
);
3833 #line 1685 "./parser.y"
3834 { yyval
.tlbarItems
= NULL
; }
3838 #line 1686 "./parser.y"
3840 toolbar_item_t
*idrec
= new_toolbar_item();
3841 idrec
->id
= yyvsp
[0].num
;
3842 yyval
.tlbarItems
= ins_tlbr_button(yyvsp
[-2].tlbarItems
, idrec
);
3847 #line 1691 "./parser.y"
3849 toolbar_item_t
*idrec
= new_toolbar_item();
3851 yyval
.tlbarItems
= ins_tlbr_button(yyvsp
[-1].tlbarItems
, idrec
);
3856 #line 1700 "./parser.y"
3857 { yyval
.iptr
= NULL
; }
3861 #line 1701 "./parser.y"
3865 *(yyvsp
[-1].iptr
) |= *(yyvsp
[0].iptr
);
3866 yyval
.iptr
= yyvsp
[-1].iptr
;
3867 free(yyvsp
[0].iptr
);
3870 yyval
.iptr
= yyvsp
[0].iptr
;
3875 #line 1711 "./parser.y"
3879 *(yyvsp
[-1].iptr
) &= *(yyvsp
[0].iptr
);
3880 yyval
.iptr
= yyvsp
[-1].iptr
;
3881 free(yyvsp
[0].iptr
);
3885 *yyvsp
[0].iptr
&= WRC_MO_MOVEABLE
| WRC_MO_DISCARDABLE
| WRC_MO_PURE
;
3886 yyval
.iptr
= yyvsp
[0].iptr
;
3892 #line 1726 "./parser.y"
3893 { yyval
.iptr
= new_int(WRC_MO_PRELOAD
); }
3897 #line 1727 "./parser.y"
3898 { yyval
.iptr
= new_int(WRC_MO_MOVEABLE
); }
3902 #line 1728 "./parser.y"
3903 { yyval
.iptr
= new_int(WRC_MO_DISCARDABLE
); }
3907 #line 1729 "./parser.y"
3908 { yyval
.iptr
= new_int(WRC_MO_PURE
); }
3912 #line 1732 "./parser.y"
3913 { yyval
.iptr
= new_int(~WRC_MO_PRELOAD
); }
3917 #line 1733 "./parser.y"
3918 { yyval
.iptr
= new_int(~WRC_MO_MOVEABLE
); }
3922 #line 1734 "./parser.y"
3923 { yyval
.iptr
= new_int(~WRC_MO_PURE
); }
3927 #line 1738 "./parser.y"
3928 { yyval
.lvc
= new_lvc(); }
3932 #line 1739 "./parser.y"
3935 yywarning("LANGUAGE not supported in 16-bit mode");
3936 if(yyvsp
[-1].lvc
->language
)
3937 yyerror("Language already defined");
3938 yyval
.lvc
= yyvsp
[-1].lvc
;
3939 yyvsp
[-1].lvc
->language
= yyvsp
[0].lan
;
3944 #line 1747 "./parser.y"
3947 yywarning("CHARACTERISTICS not supported in 16-bit mode");
3948 if(yyvsp
[-1].lvc
->characts
)
3949 yyerror("Characteristics already defined");
3950 yyval
.lvc
= yyvsp
[-1].lvc
;
3951 yyvsp
[-1].lvc
->characts
= yyvsp
[0].chars
;
3956 #line 1755 "./parser.y"
3959 yywarning("VERSION not supported in 16-bit mode");
3960 if(yyvsp
[-1].lvc
->version
)
3961 yyerror("Version already defined");
3962 yyval
.lvc
= yyvsp
[-1].lvc
;
3963 yyvsp
[-1].lvc
->version
= yyvsp
[0].ver
;
3968 #line 1773 "./parser.y"
3969 { yyval
.lan
= new_language(yyvsp
[-2].num
, yyvsp
[0].num
);
3970 if (get_language_codepage(yyvsp
[-2].num
, yyvsp
[0].num
) == -1)
3971 yyerror( "Language %04x is not supported", (yyvsp
[0].num
<<10) + yyvsp
[-2].num
);
3976 #line 1780 "./parser.y"
3977 { yyval
.chars
= new_characts(yyvsp
[0].num
); }
3981 #line 1784 "./parser.y"
3982 { yyval
.ver
= new_version(yyvsp
[0].num
); }
3986 #line 1788 "./parser.y"
3990 yyvsp
[-1].raw
->lvc
= *(yyvsp
[-3].lvc
);
3991 free(yyvsp
[-3].lvc
);
3994 if(!yyvsp
[-1].raw
->lvc
.language
)
3995 yyvsp
[-1].raw
->lvc
.language
= dup_language(currentlanguage
);
3997 yyval
.raw
= yyvsp
[-1].raw
;
4002 #line 1803 "./parser.y"
4003 { yyval
.raw
= yyvsp
[0].raw
; }
4007 #line 1804 "./parser.y"
4008 { yyval
.raw
= int2raw_data(yyvsp
[0].num
); }
4012 #line 1805 "./parser.y"
4013 { yyval
.raw
= int2raw_data(-(yyvsp
[0].num
)); }
4017 #line 1806 "./parser.y"
4018 { yyval
.raw
= long2raw_data(yyvsp
[0].num
); }
4022 #line 1807 "./parser.y"
4023 { yyval
.raw
= long2raw_data(-(yyvsp
[0].num
)); }
4027 #line 1808 "./parser.y"
4028 { yyval
.raw
= str2raw_data(yyvsp
[0].str
); }
4032 #line 1809 "./parser.y"
4033 { yyval
.raw
= merge_raw_data(yyvsp
[-2].raw
, yyvsp
[0].raw
); free(yyvsp
[0].raw
->data
); free(yyvsp
[0].raw
); }
4037 #line 1810 "./parser.y"
4038 { yyval
.raw
= merge_raw_data_int(yyvsp
[-2].raw
, yyvsp
[0].num
); }
4042 #line 1811 "./parser.y"
4043 { yyval
.raw
= merge_raw_data_int(yyvsp
[-3].raw
, -(yyvsp
[0].num
)); }
4047 #line 1812 "./parser.y"
4048 { yyval
.raw
= merge_raw_data_long(yyvsp
[-2].raw
, yyvsp
[0].num
); }
4052 #line 1813 "./parser.y"
4053 { yyval
.raw
= merge_raw_data_long(yyvsp
[-3].raw
, -(yyvsp
[0].num
)); }
4057 #line 1814 "./parser.y"
4058 { yyval
.raw
= merge_raw_data_str(yyvsp
[-2].raw
, yyvsp
[0].str
); }
4062 #line 1818 "./parser.y"
4063 { yyval
.raw
= load_file(yyvsp
[0].str
,dup_language(currentlanguage
)); }
4067 #line 1819 "./parser.y"
4068 { yyval
.raw
= yyvsp
[0].raw
; }
4072 #line 1826 "./parser.y"
4077 #line 1827 "./parser.y"
4078 { yyval
.iptr
= new_int(yyvsp
[0].num
); }
4082 #line 1831 "./parser.y"
4083 { yyval
.num
= (yyvsp
[0].num
); }
4087 #line 1834 "./parser.y"
4088 { yyval
.num
= (yyvsp
[-2].num
) + (yyvsp
[0].num
); }
4092 #line 1835 "./parser.y"
4093 { yyval
.num
= (yyvsp
[-2].num
) - (yyvsp
[0].num
); }
4097 #line 1836 "./parser.y"
4098 { yyval
.num
= (yyvsp
[-2].num
) | (yyvsp
[0].num
); }
4102 #line 1837 "./parser.y"
4103 { yyval
.num
= (yyvsp
[-2].num
) & (yyvsp
[0].num
); }
4107 #line 1838 "./parser.y"
4108 { yyval
.num
= (yyvsp
[-2].num
) * (yyvsp
[0].num
); }
4112 #line 1839 "./parser.y"
4113 { yyval
.num
= (yyvsp
[-2].num
) / (yyvsp
[0].num
); }
4117 #line 1840 "./parser.y"
4118 { yyval
.num
= (yyvsp
[-2].num
) ^ (yyvsp
[0].num
); }
4122 #line 1841 "./parser.y"
4123 { yyval
.num
= ~(yyvsp
[0].num
); }
4127 #line 1842 "./parser.y"
4128 { yyval
.num
= -(yyvsp
[0].num
); }
4132 #line 1843 "./parser.y"
4133 { yyval
.num
= yyvsp
[0].num
; }
4137 #line 1844 "./parser.y"
4138 { yyval
.num
= yyvsp
[-1].num
; }
4142 #line 1845 "./parser.y"
4143 { yyval
.num
= yyvsp
[0].num
; }
4147 #line 1849 "./parser.y"
4148 { yyval
.num
= (yyvsp
[0].num
); }
4152 #line 1850 "./parser.y"
4153 { yyval
.num
= ~(yyvsp
[0].num
); }
4157 #line 1853 "./parser.y"
4158 { yyval
.num
= yyvsp
[0].num
; }
4162 #line 1854 "./parser.y"
4163 { yyval
.num
= yyvsp
[0].num
; }
4169 /* Line 1000 of yacc.c. */
4170 #line 4171 "parser.tab.c"
4176 YY_STACK_PRINT (yyss
, yyssp
);
4181 /* Now `shift' the result of the reduction. Determine what state
4182 that goes to, based on the state we popped back to and the rule
4183 number reduced by. */
4187 yystate
= yypgoto
[yyn
- YYNTOKENS
] + *yyssp
;
4188 if (0 <= yystate
&& yystate
<= YYLAST
&& yycheck
[yystate
] == *yyssp
)
4189 yystate
= yytable
[yystate
];
4191 yystate
= yydefgoto
[yyn
- YYNTOKENS
];
4196 /*------------------------------------.
4197 | yyerrlab -- here on detecting error |
4198 `------------------------------------*/
4200 /* If not already recovering from an error, report this error. */
4205 yyn
= yypact
[yystate
];
4207 if (YYPACT_NINF
< yyn
&& yyn
< YYLAST
)
4209 YYSIZE_T yysize
= 0;
4210 int yytype
= YYTRANSLATE (yychar
);
4211 const char* yyprefix
;
4215 /* Start YYX at -YYN if negative to avoid negative indexes in
4217 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
4219 /* Stay within bounds of both yycheck and yytname. */
4220 int yychecklim
= YYLAST
- yyn
;
4221 int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
4224 yyprefix
= ", expecting ";
4225 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
4226 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
4228 yysize
+= yystrlen (yyprefix
) + yystrlen (yytname
[yyx
]);
4236 yysize
+= (sizeof ("syntax error, unexpected ")
4237 + yystrlen (yytname
[yytype
]));
4238 yymsg
= (char *) YYSTACK_ALLOC (yysize
);
4241 char *yyp
= yystpcpy (yymsg
, "syntax error, unexpected ");
4242 yyp
= yystpcpy (yyp
, yytname
[yytype
]);
4246 yyprefix
= ", expecting ";
4247 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
4248 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
4250 yyp
= yystpcpy (yyp
, yyprefix
);
4251 yyp
= yystpcpy (yyp
, yytname
[yyx
]);
4256 YYSTACK_FREE (yymsg
);
4259 yyerror ("syntax error; also virtual memory exhausted");
4262 #endif /* YYERROR_VERBOSE */
4263 yyerror ("syntax error");
4268 if (yyerrstatus
== 3)
4270 /* If just tried and failed to reuse lookahead token after an
4271 error, discard it. */
4273 if (yychar
<= YYEOF
)
4275 /* If at end of input, pop the error token,
4276 then the rest of the stack, then return failure. */
4277 if (yychar
== YYEOF
)
4283 YYDSYMPRINTF ("Error: popping", yystos
[*yyssp
], yyvsp
, yylsp
);
4284 yydestruct (yystos
[*yyssp
], yyvsp
);
4289 YYDSYMPRINTF ("Error: discarding", yytoken
, &yylval
, &yylloc
);
4290 yydestruct (yytoken
, &yylval
);
4296 /* Else will try to reuse lookahead token after shifting the error
4301 /*---------------------------------------------------.
4302 | yyerrorlab -- error raised explicitly by YYERROR. |
4303 `---------------------------------------------------*/
4307 /* Pacify GCC when the user code never invokes YYERROR and the label
4308 yyerrorlab therefore never appears in user code. */
4319 /*-------------------------------------------------------------.
4320 | yyerrlab1 -- common code for both syntax error and YYERROR. |
4321 `-------------------------------------------------------------*/
4323 yyerrstatus
= 3; /* Each real token shifted decrements this. */
4327 yyn
= yypact
[yystate
];
4328 if (yyn
!= YYPACT_NINF
)
4331 if (0 <= yyn
&& yyn
<= YYLAST
&& yycheck
[yyn
] == YYTERROR
)
4339 /* Pop the current state because it cannot handle the error token. */
4343 YYDSYMPRINTF ("Error: popping", yystos
[*yyssp
], yyvsp
, yylsp
);
4344 yydestruct (yystos
[yystate
], yyvsp
);
4347 YY_STACK_PRINT (yyss
, yyssp
);
4353 YYDPRINTF ((stderr
, "Shifting error token, "));
4362 /*-------------------------------------.
4363 | yyacceptlab -- YYACCEPT comes here. |
4364 `-------------------------------------*/
4369 /*-----------------------------------.
4370 | yyabortlab -- YYABORT comes here. |
4371 `-----------------------------------*/
4377 /*----------------------------------------------.
4378 | yyoverflowlab -- parser overflow comes here. |
4379 `----------------------------------------------*/
4381 yyerror ("parser stack overflow");
4389 YYSTACK_FREE (yyss
);
4395 #line 1857 "./parser.y"
4397 /* Dialog specific functions */
4398 static dialog_t
*dialog_style(style_t
* st
, dialog_t
*dlg
)
4400 assert(dlg
!= NULL
);
4401 if(dlg
->style
== NULL
)
4403 dlg
->style
= new_style(0,0);
4408 yywarning("Style already defined, or-ing together");
4412 dlg
->style
->or_mask
= 0;
4413 dlg
->style
->and_mask
= 0;
4415 dlg
->style
->or_mask
|= st
->or_mask
;
4416 dlg
->style
->and_mask
|= st
->and_mask
;
4417 dlg
->gotstyle
= TRUE
;
4422 static dialog_t
*dialog_exstyle(style_t
*st
, dialog_t
*dlg
)
4424 assert(dlg
!= NULL
);
4425 if(dlg
->exstyle
== NULL
)
4427 dlg
->exstyle
= new_style(0,0);
4432 yywarning("ExStyle already defined, or-ing together");
4436 dlg
->exstyle
->or_mask
= 0;
4437 dlg
->exstyle
->and_mask
= 0;
4439 dlg
->exstyle
->or_mask
|= st
->or_mask
;
4440 dlg
->exstyle
->and_mask
|= st
->and_mask
;
4441 dlg
->gotexstyle
= TRUE
;
4446 static dialog_t
*dialog_caption(string_t
*s
, dialog_t
*dlg
)
4448 assert(dlg
!= NULL
);
4450 yyerror("Caption already defined");
4455 static dialog_t
*dialog_font(font_id_t
*f
, dialog_t
*dlg
)
4457 assert(dlg
!= NULL
);
4459 yyerror("Font already defined");
4464 static dialog_t
*dialog_class(name_id_t
*n
, dialog_t
*dlg
)
4466 assert(dlg
!= NULL
);
4468 yyerror("Class already defined");
4473 static dialog_t
*dialog_menu(name_id_t
*m
, dialog_t
*dlg
)
4475 assert(dlg
!= NULL
);
4477 yyerror("Menu already defined");
4482 static dialog_t
*dialog_language(language_t
*l
, dialog_t
*dlg
)
4484 assert(dlg
!= NULL
);
4485 if(dlg
->lvc
.language
)
4486 yyerror("Language already defined");
4487 dlg
->lvc
.language
= l
;
4491 static dialog_t
*dialog_characteristics(characts_t
*c
, dialog_t
*dlg
)
4493 assert(dlg
!= NULL
);
4494 if(dlg
->lvc
.characts
)
4495 yyerror("Characteristics already defined");
4496 dlg
->lvc
.characts
= c
;
4500 static dialog_t
*dialog_version(version_t
*v
, dialog_t
*dlg
)
4502 assert(dlg
!= NULL
);
4503 if(dlg
->lvc
.version
)
4504 yyerror("Version already defined");
4505 dlg
->lvc
.version
= v
;
4509 /* Controls specific functions */
4510 static control_t
*ins_ctrl(int type
, int special_style
, control_t
*ctrl
, control_t
*prev
)
4512 /* Hm... this seems to be jammed in at all time... */
4513 int defaultstyle
= WS_CHILD
| WS_VISIBLE
;
4515 assert(ctrl
!= NULL
);
4523 ctrl
->ctlclass
= new_name_id();
4524 ctrl
->ctlclass
->type
= name_ord
;
4525 ctrl
->ctlclass
->name
.i_name
= type
;
4531 if(special_style
!= BS_GROUPBOX
&& special_style
!= BS_RADIOBUTTON
)
4532 defaultstyle
|= WS_TABSTOP
;
4535 defaultstyle
|= WS_TABSTOP
| WS_BORDER
;
4538 defaultstyle
|= LBS_NOTIFY
| WS_BORDER
;
4541 if (!(ctrl
->style
->or_mask
& (CBS_SIMPLE
| CBS_DROPDOWN
| CBS_DROPDOWNLIST
)))
4542 defaultstyle
|= CBS_SIMPLE
;
4545 if(special_style
== SS_CENTER
|| special_style
== SS_LEFT
|| special_style
== SS_RIGHT
)
4546 defaultstyle
|= WS_GROUP
;
4550 if(!ctrl
->gotstyle
) /* Handle default style setting */
4555 defaultstyle
|= ES_LEFT
;
4558 defaultstyle
|= LBS_NOTIFY
;
4561 defaultstyle
|= CBS_SIMPLE
| WS_TABSTOP
;
4564 defaultstyle
|= SBS_HORZ
;
4567 switch(special_style
)
4570 case BS_DEFPUSHBUTTON
:
4572 /* case BS_PUSHBOX: */
4573 case BS_AUTORADIOBUTTON
:
4576 case BS_AUTOCHECKBOX
:
4577 defaultstyle
|= WS_TABSTOP
;
4580 yywarning("Unknown default button control-style 0x%08x", special_style
);
4582 case BS_RADIOBUTTON
:
4588 switch(special_style
)
4593 defaultstyle
|= WS_GROUP
;
4595 case SS_ICON
: /* Special case */
4598 yywarning("Unknown default static control-style 0x%08x", special_style
);
4602 case -1: /* Generic control */
4606 yyerror("Internal error (report this): Got weird control type 0x%08x", type
);
4610 /* The SS_ICON flag is always forced in for icon controls */
4611 if(type
== CT_STATIC
&& special_style
== SS_ICON
)
4612 defaultstyle
|= SS_ICON
;
4614 if (!ctrl
->gotstyle
)
4615 ctrl
->style
= new_style(0,0);
4617 /* combine all styles */
4618 ctrl
->style
->or_mask
= ctrl
->style
->or_mask
| defaultstyle
| special_style
;
4619 ctrl
->gotstyle
= TRUE
;
4621 /* combine with NOT mask */
4624 ctrl
->style
->or_mask
&= ~(ctrl
->style
->and_mask
);
4625 ctrl
->style
->and_mask
= 0;
4627 if (ctrl
->gotexstyle
)
4629 ctrl
->exstyle
->or_mask
&= ~(ctrl
->exstyle
->and_mask
);
4630 ctrl
->exstyle
->and_mask
= 0;
4635 static name_id_t
*convert_ctlclass(name_id_t
*cls
)
4640 if(cls
->type
== name_ord
)
4642 assert(cls
->type
== name_str
);
4643 if(cls
->type
== str_unicode
)
4645 yyerror("Don't yet support unicode class comparison");
4648 cc
= cls
->name
.s_name
->str
.cstr
;
4650 if(!strcasecmp("BUTTON", cc
))
4652 else if(!strcasecmp("COMBOBOX", cc
))
4653 iclass
= CT_COMBOBOX
;
4654 else if(!strcasecmp("LISTBOX", cc
))
4655 iclass
= CT_LISTBOX
;
4656 else if(!strcasecmp("EDIT", cc
))
4658 else if(!strcasecmp("STATIC", cc
))
4660 else if(!strcasecmp("SCROLLBAR", cc
))
4661 iclass
= CT_SCROLLBAR
;
4663 return cls
; /* No default, return user controlclass */
4665 free(cls
->name
.s_name
->str
.cstr
);
4666 free(cls
->name
.s_name
);
4667 cls
->type
= name_ord
;
4668 cls
->name
.i_name
= iclass
;
4672 /* DialogEx specific functions */
4673 static dialogex_t
*dialogex_style(style_t
* st
, dialogex_t
*dlg
)
4675 assert(dlg
!= NULL
);
4676 if(dlg
->style
== NULL
)
4678 dlg
->style
= new_style(0,0);
4683 yywarning("Style already defined, or-ing together");
4687 dlg
->style
->or_mask
= 0;
4688 dlg
->style
->and_mask
= 0;
4690 dlg
->style
->or_mask
|= st
->or_mask
;
4691 dlg
->style
->and_mask
|= st
->and_mask
;
4692 dlg
->gotstyle
= TRUE
;
4697 static dialogex_t
*dialogex_exstyle(style_t
* st
, dialogex_t
*dlg
)
4699 assert(dlg
!= NULL
);
4700 if(dlg
->exstyle
== NULL
)
4702 dlg
->exstyle
= new_style(0,0);
4707 yywarning("ExStyle already defined, or-ing together");
4711 dlg
->exstyle
->or_mask
= 0;
4712 dlg
->exstyle
->and_mask
= 0;
4714 dlg
->exstyle
->or_mask
|= st
->or_mask
;
4715 dlg
->exstyle
->and_mask
|= st
->and_mask
;
4716 dlg
->gotexstyle
= TRUE
;
4721 static dialogex_t
*dialogex_caption(string_t
*s
, dialogex_t
*dlg
)
4723 assert(dlg
!= NULL
);
4725 yyerror("Caption already defined");
4730 static dialogex_t
*dialogex_font(font_id_t
*f
, dialogex_t
*dlg
)
4732 assert(dlg
!= NULL
);
4734 yyerror("Font already defined");
4739 static dialogex_t
*dialogex_class(name_id_t
*n
, dialogex_t
*dlg
)
4741 assert(dlg
!= NULL
);
4743 yyerror("Class already defined");
4748 static dialogex_t
*dialogex_menu(name_id_t
*m
, dialogex_t
*dlg
)
4750 assert(dlg
!= NULL
);
4752 yyerror("Menu already defined");
4757 static dialogex_t
*dialogex_language(language_t
*l
, dialogex_t
*dlg
)
4759 assert(dlg
!= NULL
);
4760 if(dlg
->lvc
.language
)
4761 yyerror("Language already defined");
4762 dlg
->lvc
.language
= l
;
4766 static dialogex_t
*dialogex_characteristics(characts_t
*c
, dialogex_t
*dlg
)
4768 assert(dlg
!= NULL
);
4769 if(dlg
->lvc
.characts
)
4770 yyerror("Characteristics already defined");
4771 dlg
->lvc
.characts
= c
;
4775 static dialogex_t
*dialogex_version(version_t
*v
, dialogex_t
*dlg
)
4777 assert(dlg
!= NULL
);
4778 if(dlg
->lvc
.version
)
4779 yyerror("Version already defined");
4780 dlg
->lvc
.version
= v
;
4784 /* Accelerator specific functions */
4785 static event_t
*add_event(int key
, int id
, int flags
, event_t
*prev
)
4787 event_t
*ev
= new_event();
4789 if((flags
& (WRC_AF_VIRTKEY
| WRC_AF_ASCII
)) == (WRC_AF_VIRTKEY
| WRC_AF_ASCII
))
4790 yyerror("Cannot use both ASCII and VIRTKEY");
4794 ev
->flags
= flags
& ~WRC_AF_ASCII
;
4801 static event_t
*add_string_event(string_t
*key
, int id
, int flags
, event_t
*prev
)
4803 int keycode
= 0, keysym
= 0;
4804 event_t
*ev
= new_event();
4806 if(key
->type
== str_char
)
4807 keysym
= key
->str
.cstr
[0];
4809 keysym
= key
->str
.wstr
[0];
4811 if((flags
& WRC_AF_VIRTKEY
) && (!isupper(keysym
& 0xff) && !isdigit(keysym
& 0xff)))
4812 yyerror("VIRTKEY code is not equal to ascii value");
4814 if(keysym
== '^' && (flags
& WRC_AF_CONTROL
) != 0)
4816 yyerror("Cannot use both '^' and CONTROL modifier");
4818 else if(keysym
== '^')
4820 if(key
->type
== str_char
)
4821 keycode
= toupper(key
->str
.cstr
[1]) - '@';
4823 keycode
= toupper(key
->str
.wstr
[1]) - '@';
4825 yyerror("Control-code out of range");
4831 ev
->flags
= flags
& ~WRC_AF_ASCII
;
4838 /* MenuEx specific functions */
4839 static itemex_opt_t
*new_itemex_opt(int id
, int type
, int state
, int helpid
)
4841 itemex_opt_t
*opt
= (itemex_opt_t
*)xmalloc(sizeof(itemex_opt_t
));
4845 opt
->helpid
= helpid
;
4849 /* Raw data functions */
4850 static raw_data_t
*load_file(string_t
*filename
, language_t
*lang
)
4856 int codepage
= get_language_codepage(lang
->id
, lang
->sub
);
4858 /* FIXME: we may want to use utf-8 here */
4859 if (codepage
<= 0 && filename
->type
!= str_char
)
4860 yyerror("Cannot convert filename to ASCII string");
4861 name
= convert_string( filename
, str_char
, codepage
);
4862 if (!(path
= wpp_find_include(name
->str
.cstr
, 1)))
4863 yyerror("Cannot open file %s", name
->str
.cstr
);
4864 if (!(fp
= fopen( path
, "rb" )))
4865 yyerror("Cannot open file %s", name
->str
.cstr
);
4867 rd
= new_raw_data();
4868 fseek(fp
, 0, SEEK_END
);
4869 rd
->size
= ftell(fp
);
4870 fseek(fp
, 0, SEEK_SET
);
4873 rd
->data
= (char *)xmalloc(rd
->size
);
4874 fread(rd
->data
, rd
->size
, 1, fp
);
4876 else rd
->data
= NULL
;
4878 rd
->lvc
.language
= lang
;
4883 static raw_data_t
*int2raw_data(int i
)
4887 if( ( i
>= 0 && (int)((unsigned short)i
) != i
) ||
4888 ( i
< 0 && (int)((short)i
) != i
) )
4889 yywarning("Integer constant out of 16bit range (%d), truncated to %d\n", i
, (short)i
);
4891 rd
= new_raw_data();
4892 rd
->size
= sizeof(short);
4893 rd
->data
= (char *)xmalloc(rd
->size
);
4896 #ifdef WORDS_BIGENDIAN
4900 rd
->data
[0] = HIBYTE(i
);
4901 rd
->data
[1] = LOBYTE(i
);
4904 #ifndef WORDS_BIGENDIAN
4908 rd
->data
[1] = HIBYTE(i
);
4909 rd
->data
[0] = LOBYTE(i
);
4915 static raw_data_t
*long2raw_data(int i
)
4918 rd
= new_raw_data();
4919 rd
->size
= sizeof(int);
4920 rd
->data
= (char *)xmalloc(rd
->size
);
4923 #ifdef WORDS_BIGENDIAN
4927 rd
->data
[0] = HIBYTE(HIWORD(i
));
4928 rd
->data
[1] = LOBYTE(HIWORD(i
));
4929 rd
->data
[2] = HIBYTE(LOWORD(i
));
4930 rd
->data
[3] = LOBYTE(LOWORD(i
));
4933 #ifndef WORDS_BIGENDIAN
4937 rd
->data
[3] = HIBYTE(HIWORD(i
));
4938 rd
->data
[2] = LOBYTE(HIWORD(i
));
4939 rd
->data
[1] = HIBYTE(LOWORD(i
));
4940 rd
->data
[0] = LOBYTE(LOWORD(i
));
4946 static raw_data_t
*str2raw_data(string_t
*str
)
4949 rd
= new_raw_data();
4950 rd
->size
= str
->size
* (str
->type
== str_char
? 1 : 2);
4951 rd
->data
= (char *)xmalloc(rd
->size
);
4952 if(str
->type
== str_char
)
4953 memcpy(rd
->data
, str
->str
.cstr
, rd
->size
);
4954 else if(str
->type
== str_unicode
)
4959 #ifdef WORDS_BIGENDIAN
4963 for(i
= 0; i
< str
->size
; i
++)
4965 rd
->data
[2*i
+ 0] = HIBYTE((WORD
)str
->str
.wstr
[i
]);
4966 rd
->data
[2*i
+ 1] = LOBYTE((WORD
)str
->str
.wstr
[i
]);
4969 #ifndef WORDS_BIGENDIAN
4973 for(i
= 0; i
< str
->size
; i
++)
4975 rd
->data
[2*i
+ 1] = HIBYTE((WORD
)str
->str
.wstr
[i
]);
4976 rd
->data
[2*i
+ 0] = LOBYTE((WORD
)str
->str
.wstr
[i
]);
4982 internal_error(__FILE__
, __LINE__
, "Invalid stringtype");
4986 static raw_data_t
*merge_raw_data(raw_data_t
*r1
, raw_data_t
*r2
)
4988 r1
->data
= xrealloc(r1
->data
, r1
->size
+ r2
->size
);
4989 memcpy(r1
->data
+ r1
->size
, r2
->data
, r2
->size
);
4990 r1
->size
+= r2
->size
;
4994 static raw_data_t
*merge_raw_data_int(raw_data_t
*r1
, int i
)
4996 raw_data_t
*t
= int2raw_data(i
);
4997 merge_raw_data(r1
, t
);
5003 static raw_data_t
*merge_raw_data_long(raw_data_t
*r1
, int i
)
5005 raw_data_t
*t
= long2raw_data(i
);
5006 merge_raw_data(r1
, t
);
5012 static raw_data_t
*merge_raw_data_str(raw_data_t
*r1
, string_t
*str
)
5014 raw_data_t
*t
= str2raw_data(str
);
5015 merge_raw_data(r1
, t
);
5021 /* Function the go back in a list to get the head */
5022 static menu_item_t
*get_item_head(menu_item_t
*p
)
5031 static menuex_item_t
*get_itemex_head(menuex_item_t
*p
)
5040 static resource_t
*get_resource_head(resource_t
*p
)
5049 static ver_block_t
*get_ver_block_head(ver_block_t
*p
)
5058 static ver_value_t
*get_ver_value_head(ver_value_t
*p
)
5067 static control_t
*get_control_head(control_t
*p
)
5076 static event_t
*get_event_head(event_t
*p
)
5085 /* Find a stringtable with given language */
5086 static stringtable_t
*find_stringtable(lvc_t
*lvc
)
5090 assert(lvc
!= NULL
);
5093 lvc
->language
= dup_language(currentlanguage
);
5095 for(stt
= sttres
; stt
; stt
= stt
->next
)
5097 if(stt
->lvc
.language
->id
== lvc
->language
->id
5098 && stt
->lvc
.language
->sub
== lvc
->language
->sub
)
5100 /* Found a table with the same language */
5101 /* The version and characteristics are now handled
5102 * in the generation of the individual stringtables.
5103 * This enables localized analysis.
5104 if((stt->lvc.version && lvc->version && *(stt->lvc.version) != *(lvc->version))
5105 || (!stt->lvc.version && lvc->version)
5106 || (stt->lvc.version && !lvc->version))
5107 yywarning("Stringtable's versions are not the same, using first definition");
5109 if((stt->lvc.characts && lvc->characts && *(stt->lvc.characts) != *(lvc->characts))
5110 || (!stt->lvc.characts && lvc->characts)
5111 || (stt->lvc.characts && !lvc->characts))
5112 yywarning("Stringtable's characteristics are not the same, using first definition");
5120 /* qsort sorting function for string table entries */
5121 #define STE(p) ((const stt_entry_t *)(p))
5122 static int sort_stt_entry(const void *e1
, const void *e2
)
5124 return STE(e1
)->id
- STE(e2
)->id
;
5128 static resource_t
*build_stt_resources(stringtable_t
*stthead
)
5131 stringtable_t
*newstt
;
5133 resource_t
*rsclist
= NULL
;
5134 resource_t
*rsctail
= NULL
;
5139 characts_t
*characts
;
5145 /* For all languages defined */
5146 for(stt
= stthead
; stt
; stt
= stt
->next
)
5148 assert(stt
->nentries
> 0);
5150 /* Sort the entries */
5151 if(stt
->nentries
> 1)
5152 qsort(stt
->entries
, stt
->nentries
, sizeof(stt
->entries
[0]), sort_stt_entry
);
5154 for(i
= 0; i
< stt
->nentries
; )
5156 newstt
= new_stringtable(&stt
->lvc
);
5157 newstt
->entries
= (stt_entry_t
*)xmalloc(16 * sizeof(stt_entry_t
));
5158 newstt
->nentries
= 16;
5159 newstt
->idbase
= stt
->entries
[i
].id
& ~0xf;
5160 for(j
= 0; j
< 16 && i
< stt
->nentries
; j
++)
5162 if(stt
->entries
[i
].id
- newstt
->idbase
== j
)
5164 newstt
->entries
[j
] = stt
->entries
[i
];
5172 /* Check individual memory options and get
5173 * the first characteristics/version
5175 for(j
= 0; j
< 16; j
++)
5177 if(!newstt
->entries
[j
].str
)
5179 andsum
&= newstt
->entries
[j
].memopt
;
5180 orsum
|= newstt
->entries
[j
].memopt
;
5182 characts
= newstt
->entries
[j
].characts
;
5184 version
= newstt
->entries
[j
].version
;
5188 warning("Stringtable's memory options are not equal (idbase: %d)", newstt
->idbase
);
5190 /* Check version and characteristics */
5191 for(j
= 0; j
< 16; j
++)
5194 && newstt
->entries
[j
].characts
5195 && *newstt
->entries
[j
].characts
!= *characts
)
5196 warning("Stringtable's characteristics are not the same (idbase: %d)", newstt
->idbase
);
5198 && newstt
->entries
[j
].version
5199 && *newstt
->entries
[j
].version
!= *version
)
5200 warning("Stringtable's versions are not the same (idbase: %d)", newstt
->idbase
);
5202 rsc
= new_resource(res_stt
, newstt
, newstt
->memopt
, newstt
->lvc
.language
);
5203 rsc
->name
= new_name_id();
5204 rsc
->name
->type
= name_ord
;
5205 rsc
->name
->name
.i_name
= (newstt
->idbase
>> 4) + 1;
5206 rsc
->memopt
= andsum
; /* Set to least common denominator */
5207 newstt
->memopt
= andsum
;
5208 newstt
->lvc
.characts
= characts
;
5209 newstt
->lvc
.version
= version
;
5217 rsctail
->next
= rsc
;
5218 rsc
->prev
= rsctail
;
5227 static toolbar_item_t
*ins_tlbr_button(toolbar_item_t
*prev
, toolbar_item_t
*idrec
)
5236 static toolbar_item_t
*get_tlbr_buttons_head(toolbar_item_t
*p
, int *nitems
)
5255 static string_t
*make_filename(string_t
*str
)
5257 if(str
->type
== str_char
)
5261 /* Remove escaped backslash and convert to forward */
5262 for(cptr
= str
->str
.cstr
; (cptr
= strchr(cptr
, '\\')) != NULL
; cptr
++)
5266 memmove(cptr
, cptr
+1, strlen(cptr
));
5276 /* Remove escaped backslash and convert to forward */
5277 for(wptr
= str
->str
.wstr
; (wptr
= strchrW(wptr
, '\\')) != NULL
; wptr
++)
5281 memmove(wptr
, wptr
+1, strlenW(wptr
));
5291 * Process all resources to extract fonts and build
5292 * a fontdir resource.
5294 * Note: MS' resource compiler (build 1472) does not
5295 * handle font resources with different languages.
5296 * The fontdir is generated in the last active language
5297 * and font identifiers must be unique across the entire
5299 * This is not logical considering the localization
5300 * constraints of all other resource types. MS has,
5301 * most probably, never testet localized fonts. However,
5302 * using fontresources is rare, so it might not occur
5303 * in normal applications.
5304 * Wine does require better localization because a lot
5305 * of languages are coded into the same executable.
5306 * Therefore, I will generate fontdirs for *each*
5307 * localized set of fonts.
5309 static resource_t
*build_fontdir(resource_t
**fnt
, int nfnt
)
5311 static int once
= 0;
5314 warning("Need to parse fonts, not yet implemented (fnt: %p, nfnt: %d)", fnt
, nfnt
);
5320 static resource_t
*build_fontdirs(resource_t
*tail
)
5323 resource_t
*lst
= NULL
;
5324 resource_t
**fnt
= NULL
; /* List of all fonts */
5326 resource_t
**fnd
= NULL
; /* List of all fontdirs */
5328 resource_t
**lanfnt
= NULL
;
5335 nid
.type
= name_str
;
5336 nid
.name
.s_name
= &str
;
5337 str
.type
= str_char
;
5338 str
.str
.cstr
= xstrdup("FONTDIR");
5341 /* Extract all fonts and fontdirs */
5342 for(rsc
= tail
; rsc
; rsc
= rsc
->prev
)
5344 if(rsc
->type
== res_fnt
)
5347 fnt
= xrealloc(fnt
, nfnt
* sizeof(*fnt
));
5350 else if(rsc
->type
== res_fntdir
)
5353 fnd
= xrealloc(fnd
, nfnd
* sizeof(*fnd
));
5358 /* Verify the name of the present fontdirs */
5359 for(i
= 0; i
< nfnd
; i
++)
5361 if(compare_name_id(&nid
, fnd
[i
]->name
))
5363 warning("User supplied FONTDIR entry has an invalid name '%s', ignored",
5364 get_nameid_str(fnd
[i
]->name
));
5373 warning("Found %d FONTDIR entries without any fonts present", nfnd
);
5378 lanfnt
= xmalloc(nfnt
* sizeof(*lanfnt
));
5380 /* Get all fonts covered by fontdirs */
5381 for(i
= 0; i
< nfnd
; i
++)
5389 for(j
= 0; j
< nfnt
; j
++)
5393 if(fnt
[j
]->lan
->id
== fnd
[i
]->lan
->id
&& fnt
[j
]->lan
->sub
== fnd
[i
]->lan
->sub
)
5395 lanfnt
[nlanfnt
] = fnt
[j
];
5401 cnt
= *(WORD
*)fnd
[i
]->res
.fnd
->data
->data
;
5404 else if(nlanfnt
== BYTESWAP_WORD(cnt
))
5407 error("FONTDIR for language %d,%d has wrong count (%d, expected %d)",
5408 fnd
[i
]->lan
->id
, fnd
[i
]->lan
->sub
, cnt
, nlanfnt
);
5409 #ifdef WORDS_BIGENDIAN
5410 if((byteorder
== WRC_BO_LITTLE
&& !isswapped
) || (byteorder
!= WRC_BO_LITTLE
&& isswapped
))
5412 if((byteorder
== WRC_BO_BIG
&& !isswapped
) || (byteorder
!= WRC_BO_BIG
&& isswapped
))
5415 internal_error(__FILE__
, __LINE__
, "User supplied FONTDIR needs byteswapping");
5419 /* We now have fonts left where we need to make a fontdir resource */
5420 for(i
= fntleft
= 0; i
< nfnt
; i
++)
5427 /* Get fonts of same language in lanfnt[] */
5428 for(i
= nlanfnt
= 0; i
< nfnt
; i
++)
5435 lanfnt
[nlanfnt
] = fnt
[i
];
5440 else if(fnt
[i
]->lan
->id
== lanfnt
[0]->lan
->id
&& fnt
[i
]->lan
->sub
== lanfnt
[0]->lan
->sub
)
5444 /* and build a fontdir */
5445 rsc
= build_fontdir(lanfnt
, nlanfnt
);
5468 * This gets invoked to determine whether the next resource
5469 * is to be of a standard-type (e.g. bitmaps etc.), or should
5470 * be a user-type resource. This function is required because
5471 * there is the _possibility_ of a lookahead token in the
5472 * parser, which is generated from the "expr" state in the
5475 * The general resource format is:
5476 * <identifier> <type> <flags> <resourcebody>
5478 * The <identifier> can either be tIDENT or "expr". The latter
5479 * will always generate a lookahead, which is the <type> of the
5480 * resource to parse. Otherwise, we need to get a new token from
5481 * the scanner to determine the next step.
5483 * The problem arrises when <type> is numerical. This case should
5484 * map onto default resource-types and be parsed as such instead
5485 * of being mapped onto user-type resources.
5487 * The trick lies in the fact that yacc (bison) doesn't care about
5488 * intermediate changes of the lookahead while reducing a rule. We
5489 * simply replace the lookahead with a token that will result in
5490 * a shift to the appropriate rule for the specific resource-type.
5492 static int rsrcid_to_token(int lookahead
)
5495 const char *type
= "?";
5497 /* Get a token if we don't have one yet */
5498 if(lookahead
== YYEMPTY
)
5501 /* Only numbers are possibly interesting */
5531 case WRC_RT_FONTDIR
:
5539 case WRC_RT_MESSAGETABLE
:
5540 type
= "MESSAGETABLE";
5541 token
= tMESSAGETABLE
;
5543 case WRC_RT_DLGINIT
:
5547 case WRC_RT_ACCELERATOR
:
5548 type
= "ACCELERATOR";
5549 token
= tACCELERATORS
;
5559 case WRC_RT_VERSION
:
5561 token
= tVERSIONINFO
;
5563 case WRC_RT_TOOLBAR
:
5573 type
= "STRINGTABLE";
5576 case WRC_RT_ANICURSOR
:
5577 case WRC_RT_ANIICON
:
5578 case WRC_RT_GROUP_CURSOR
:
5579 case WRC_RT_GROUP_ICON
:
5580 yywarning("Usertype uses reserved type ID %d, which is auto-generated", yylval
.num
);
5583 case WRC_RT_DLGINCLUDE
:
5584 case WRC_RT_PLUGPLAY
:
5586 yywarning("Usertype uses reserved type ID %d, which is not supported by wrc yet", yylval
.num
);