1 %{
2 /*---------------------------------------------------------------------------*
3 Project: TwlSDK - tools - makelcf
4 File: tlcf.l
5
6 Copyright 2003-2009 Nintendo. All rights reserved.
7
8 These coded instructions, statements, and computer programs contain
9 proprietary information of Nintendo of America Inc. and/or Nintendo
10 Company Ltd., and are protected by Federal copyright law. They may
11 not be disclosed to third parties or copied or duplicated in any form,
12 in whole or in part, without the prior written consent of Nintendo.
13
14 $Date:: 2009-11-11#$
15 $Rev: 11140 $
16 $Author: kitase_hirotake $
17 *---------------------------------------------------------------------------*/
18 #include <stdio.h>
19 #include <string.h>
20 #include "makelcf.h"
21 #include "tlcf.tab.h"
22
23 #define RETURN(x) { debug_printf( "%s [%s]\n", #x, tlcf_yytext ); return(x); }
24
25 BOOL GetLoopStackLevel( void );
26
tlcf_yyerror(const char * str)27 void tlcf_yyerror( const char* str )
28 {
29 if ( tlcf_yytext[0] >= ' ' )
30 {
31 fprintf( stderr, "makelcf: line %d: %s \'%s\'\n", tlcf_yylineno, str, tlcf_yytext );
32 }
33 else
34 {
35 fprintf( stderr, "makelcf: line %d: %s\n", tlcf_yylineno, str );
36 }
37 }
38
getSection(const char * default_section)39 static char* getSection( const char* default_section )
40 {
41 char* head = NULL;
42 char* p;
43
44 for ( p = tlcf_yytext; *p; p ++ )
45 {
46 switch ( *p )
47 {
48 case '=':
49 case ':':
50 if ( !head )
51 {
52 head = p;
53 }
54 break;
55
56 case '>':
57 if ( head )
58 {
59 *p = '\0';
60 return strdup( head );
61 }
62 break;
63
64 default:
65 break;
66 }
67 }
68 return default_section ? strdup( default_section ) : NULL;
69 }
70
71 %}
72 st [ \t]*
73 ed [ \t]*\r?\n
74 sec (=[.a-zA-Z]*)?
75 mod (:[htre])?
76 flt (:[f])?
77 identifier [A-Za-z_][A-Za-z_0-9]*
78 equation (==|!=|\.EQ\.|\.NE\.|\.GT\.|\.GE\.|\.LT\.|\.LE\.)
79 value [^>\n]*
80
81 STATIC_CRT0_OBJ \<STATIC\.CRT0\.OBJECT{sec}\>
82
83 STATIC_OBJ \<STATIC\.OBJECT{sec}{mod}\>
84 F_S_OBJS \<FOREACH\.STATIC\.OBJECTS{sec}{flt}\>
85 E_S_OBJS \<END\.STATIC\.OBJECTS{sec}{flt}\>
86 FOR_STATIC_OBJS_1 ^{st}{F_S_OBJS}{ed}
87 FOR_STATIC_OBJS_2 {F_S_OBJS}
88 END_STATIC_OBJS_1 ^{st}{E_S_OBJS}{ed}
89 END_STATIC_OBJS_2 {E_S_OBJS}
90
91 STATIC_LIB \<STATIC\.LIBRARY{sec}{mod}\>
92 F_S_LIBS \<FOREACH\.STATIC\.LIBRARIES{sec}{flt}\>
93 E_S_LIBS \<END\.STATIC\.LIBRARIES{sec}{flt}\>
94 FOR_STATIC_LIBS_1 ^{st}{F_S_LIBS}{ed}
95 FOR_STATIC_LIBS_2 {F_S_LIBS}
96 END_STATIC_LIBS_1 ^{st}{E_S_LIBS}{ed}
97 END_STATIC_LIBS_2 {E_S_LIBS}
98
99 STATIC_SYM \<STATIC\.SEARCHSYMBOL\>
100 F_S_SYMS \<FOREACH\.STATIC\.SEARCHSYMBOLS\>
101 E_S_SYMS \<END\.STATIC\.SEARCHSYMBOLS\>
102 FOR_STATIC_SYMS_1 ^{st}{F_S_SYMS}{ed}
103 FOR_STATIC_SYMS_2 {F_S_SYMS}
104 END_STATIC_SYMS_1 ^{st}{E_S_SYMS}{ed}
105 END_STATIC_SYMS_2 {E_S_SYMS}
106
107 STATIC_FOR \<STATIC\.FORCE\>
108 F_S_FORS \<FOREACH\.STATIC\.FORCES\>
109 E_S_FORS \<END\.STATIC\.FORCES\>
110 FOR_STATIC_FORS_1 ^{st}{F_S_FORS}{ed}
111 FOR_STATIC_FORS_2 {F_S_FORS}
112 END_STATIC_FORS_1 ^{st}{E_S_FORS}{ed}
113 END_STATIC_FORS_2 {E_S_FORS}
114
115 F_ATLS \<FOREACH\.AUTOLOADS{sec}{flt}\>
116 E_ATLS \<END\.AUTOLOADS{sec}{flt}\>
117 FOR_AUTOLOADS_1 ^{st}{F_ATLS}{ed}
118 FOR_AUTOLOADS_2 {F_ATLS}
119 END_AUTOLOADS_1 ^{st}{E_ATLS}{ed}
120 END_AUTOLOADS_2 {E_ATLS}
121
122 AUTOLOAD_OBJ \<AUTOLOAD\.OBJECT{sec}{mod}\>
123 F_A_OBJS \<FOREACH\.AUTOLOAD\.OBJECTS{sec}{flt}\>
124 E_A_OBJS \<END\.AUTOLOAD\.OBJECTS{sec}{flt}\>
125 FOR_AUTOLOAD_OBJS_1 ^{st}{F_A_OBJS}{ed}
126 FOR_AUTOLOAD_OBJS_2 {F_A_OBJS}
127 END_AUTOLOAD_OBJS_1 ^{st}{E_A_OBJS}{ed}
128 END_AUTOLOAD_OBJS_2 {E_A_OBJS}
129
130 AUTOLOAD_LIB \<AUTOLOAD\.LIBRARY{sec}{mod}\>
131 F_A_LIBS \<FOREACH\.AUTOLOAD\.LIBRARIES{sec}{flt}\>
132 E_A_LIBS \<END\.AUTOLOAD\.LIBRARIES{sec}{flt}\>
133 FOR_AUTOLOAD_LIBS_1 ^{st}{F_A_LIBS}{ed}
134 FOR_AUTOLOAD_LIBS_2 {F_A_LIBS}
135 END_AUTOLOAD_LIBS_1 ^{st}{E_A_LIBS}{ed}
136 END_AUTOLOAD_LIBS_2 {E_A_LIBS}
137
138 AUTOLOAD_SYM \<AUTOLOAD\.SEARCHSYMBOL\>
139 F_A_SYMS \<FOREACH\.AUTOLOAD\.SEARCHSYMBOLS\>
140 E_A_SYMS \<END\.AUTOLOAD\.SEARCHSYMBOLS\>
141 FOR_AUTOLOAD_SYMS_1 ^{st}{F_A_SYMS}{ed}
142 FOR_AUTOLOAD_SYMS_2 {F_A_SYMS}
143 END_AUTOLOAD_SYMS_1 ^{st}{E_A_SYMS}{ed}
144 END_AUTOLOAD_SYMS_2 {E_A_SYMS}
145
146 AUTOLOAD_FOR \<AUTOLOAD\.FORCE\>
147 F_A_FORS \<FOREACH\.AUTOLOAD\.FORCES\>
148 E_A_FORS \<END\.AUTOLOAD\.FORCES\>
149 FOR_AUTOLOAD_FORS_1 ^{st}{F_A_FORS}{ed}
150 FOR_AUTOLOAD_FORS_2 {F_A_FORS}
151 END_AUTOLOAD_FORS_1 ^{st}{E_A_FORS}{ed}
152 END_AUTOLOAD_FORS_2 {E_A_FORS}
153
154 F_OVLS \<FOREACH\.OVERLAYS{sec}{flt}\>
155 E_OVLS \<END\.OVERLAYS{sec}{flt}\>
156 FOR_OVERLAYS_1 ^{st}{F_OVLS}{ed}
157 FOR_OVERLAYS_2 {F_OVLS}
158 END_OVERLAYS_1 ^{st}{E_OVLS}{ed}
159 END_OVERLAYS_2 {E_OVLS}
160
161 OVERLAY_OBJ \<OVERLAY\.OBJECT{sec}{mod}\>
162 F_O_OBJS \<FOREACH\.OVERLAY\.OBJECTS{sec}{flt}\>
163 E_O_OBJS \<END\.OVERLAY\.OBJECTS{sec}{flt}\>
164 FOR_OVERLAY_OBJS_1 ^{st}{F_O_OBJS}{ed}
165 FOR_OVERLAY_OBJS_2 {F_O_OBJS}
166 END_OVERLAY_OBJS_1 ^{st}{E_O_OBJS}{ed}
167 END_OVERLAY_OBJS_2 {E_O_OBJS}
168
169 OVERLAY_LIB \<OVERLAY\.LIBRARY{sec}{mod}\>
170 F_O_LIBS \<FOREACH\.OVERLAY\.LIBRARIES{sec}{flt}\>
171 E_O_LIBS \<END\.OVERLAY\.LIBRARIES{sec}{flt}\>
172 FOR_OVERLAY_LIBS_1 ^{st}{F_O_LIBS}{ed}
173 FOR_OVERLAY_LIBS_2 {F_O_LIBS}
174 END_OVERLAY_LIBS_1 ^{st}{E_O_LIBS}{ed}
175 END_OVERLAY_LIBS_2 {E_O_LIBS}
176
177 OVERLAY_SYM \<OVERLAY\.SEARCHSYMBOL\>
178 F_O_SYMS \<FOREACH\.OVERLAY\.SEARCHSYMBOLS\>
179 E_O_SYMS \<END\.OVERLAY\.SEARCHSYMBOLS\>
180 FOR_OVERLAY_SYMS_1 ^{st}{F_O_SYMS}{ed}
181 FOR_OVERLAY_SYMS_2 {F_O_SYMS}
182 END_OVERLAY_SYMS_1 ^{st}{E_O_SYMS}{ed}
183 END_OVERLAY_SYMS_2 {E_O_SYMS}
184
185 OVERLAY_FOR \<OVERLAY\.FOR\>
186 F_O_FORS \<FOREACH\.OVERLAY\.FORCES\>
187 E_O_FORS \<END\.OVERLAY\.FORCES\>
188 FOR_OVERLAY_FORS_1 ^{st}{F_O_FORS}{ed}
189 FOR_OVERLAY_FORS_2 {F_O_FORS}
190 END_OVERLAY_FORS_1 ^{st}{E_O_FORS}{ed}
191 END_OVERLAY_FORS_2 {E_O_FORS}
192
193 F_LTDATLS \<FOREACH\.LTDAUTOLOADS{sec}{flt}\>
194 E_LTDATLS \<END\.LTDAUTOLOADS{sec}{flt}\>
195 FOR_LTDAUTOLOADS_1 ^{st}{F_LTDATLS}{ed}
196 FOR_LTDAUTOLOADS_2 {F_LTDATLS}
197 END_LTDAUTOLOADS_1 ^{st}{E_LTDATLS}{ed}
198 END_LTDAUTOLOADS_2 {E_LTDATLS}
199
200 LTDAUTOLOAD_OBJ \<LTDAUTOLOAD\.OBJECT{sec}{mod}\>
201 F_LA_OBJS \<FOREACH\.LTDAUTOLOAD\.OBJECTS{sec}{flt}\>
202 E_LA_OBJS \<END\.LTDAUTOLOAD\.OBJECTS{sec}{flt}\>
203 FOR_LTDAUTOLOAD_OBJS_1 ^{st}{F_LA_OBJS}{ed}
204 FOR_LTDAUTOLOAD_OBJS_2 {F_LA_OBJS}
205 END_LTDAUTOLOAD_OBJS_1 ^{st}{E_LA_OBJS}{ed}
206 END_LTDAUTOLOAD_OBJS_2 {E_LA_OBJS}
207
208 LTDAUTOLOAD_LIB \<LTDAUTOLOAD\.LIBRARY{sec}{mod}\>
209 F_LA_LIBS \<FOREACH\.LTDAUTOLOAD\.LIBRARIES{sec}{flt}\>
210 E_LA_LIBS \<END\.LTDAUTOLOAD\.LIBRARIES{sec}{flt}\>
211 FOR_LTDAUTOLOAD_LIBS_1 ^{st}{F_LA_LIBS}{ed}
212 FOR_LTDAUTOLOAD_LIBS_2 {F_LA_LIBS}
213 END_LTDAUTOLOAD_LIBS_1 ^{st}{E_LA_LIBS}{ed}
214 END_LTDAUTOLOAD_LIBS_2 {E_LA_LIBS}
215
216 LTDAUTOLOAD_SYM \<LTDAUTOLOAD\.SEARCHSYMBOL\>
217 F_LA_SYMS \<FOREACH\.LTDAUTOLOAD\.SEARCHSYMBOLS\>
218 E_LA_SYMS \<END\.LTDAUTOLOAD\.SEARCHSYMBOLS\>
219 FOR_LTDAUTOLOAD_SYMS_1 ^{st}{F_LA_SYMS}{ed}
220 FOR_LTDAUTOLOAD_SYMS_2 {F_LA_SYMS}
221 END_LTDAUTOLOAD_SYMS_1 ^{st}{E_LA_SYMS}{ed}
222 END_LTDAUTOLOAD_SYMS_2 {E_LA_SYMS}
223
224 LTDAUTOLOAD_FOR \<LTDAUTOLOAD\.FORCE\>
225 F_LA_FORS \<FOREACH\.LTDAUTOLOAD\.FORCES\>
226 E_LA_FORS \<END\.LTDAUTOLOAD\.FORCES\>
227 FOR_LTDAUTOLOAD_FORS_1 ^{st}{F_LA_FORS}{ed}
228 FOR_LTDAUTOLOAD_FORS_2 {F_LA_FORS}
229 END_LTDAUTOLOAD_FORS_1 ^{st}{E_LA_FORS}{ed}
230 END_LTDAUTOLOAD_FORS_2 {E_LA_FORS}
231
232 F_LTDOVLS \<FOREACH\.LTDOVERLAYS{sec}{flt}\>
233 E_LTDOVLS \<END\.LTDOVERLAYS{sec}{flt}\>
234 FOR_LTDOVERLAYS_1 ^{st}{F_LTDOVLS}{ed}
235 FOR_LTDOVERLAYS_2 {F_LTDOVLS}
236 END_LTDOVERLAYS_1 ^{st}{E_LTDOVLS}{ed}
237 END_LTDOVERLAYS_2 {E_LTDOVLS}
238
239 LTDOVERLAY_OBJ \<LTDOVERLAY\.OBJECT{sec}{mod}\>
240 F_LO_OBJS \<FOREACH\.LTDOVERLAY\.OBJECTS{sec}{flt}\>
241 E_LO_OBJS \<END\.LTDOVERLAY\.OBJECTS{sec}{flt}\>
242 FOR_LTDOVERLAY_OBJS_1 ^{st}{F_LO_OBJS}{ed}
243 FOR_LTDOVERLAY_OBJS_2 {F_LO_OBJS}
244 END_LTDOVERLAY_OBJS_1 ^{st}{E_LO_OBJS}{ed}
245 END_LTDOVERLAY_OBJS_2 {E_LO_OBJS}
246
247 LTDOVERLAY_LIB \<LTDOVERLAY\.LIBRARY{sec}{mod}\>
248 F_LO_LIBS \<FOREACH\.LTDOVERLAY\.LIBRARIES{sec}{flt}\>
249 E_LO_LIBS \<END\.LTDOVERLAY\.LIBRARIES{sec}{flt}\>
250 FOR_LTDOVERLAY_LIBS_1 ^{st}{F_LO_LIBS}{ed}
251 FOR_LTDOVERLAY_LIBS_2 {F_LO_LIBS}
252 END_LTDOVERLAY_LIBS_1 ^{st}{E_LO_LIBS}{ed}
253 END_LTDOVERLAY_LIBS_2 {E_LO_LIBS}
254
255 LTDOVERLAY_SYM \<LTDOVERLAY\.SEARCHSYMBOL\>
256 F_LO_SYMS \<FOREACH\.LTDOVERLAY\.SEARCHSYMBOLS\>
257 E_LO_SYMS \<END\.LTDOVERLAY\.SEARCHSYMBOLS\>
258 FOR_LTDOVERLAY_SYMS_1 ^{st}{F_LO_SYMS}{ed}
259 FOR_LTDOVERLAY_SYMS_2 {F_LO_SYMS}
260 END_LTDOVERLAY_SYMS_1 ^{st}{E_LO_SYMS}{ed}
261 END_LTDOVERLAY_SYMS_2 {E_LO_SYMS}
262
263 LTDOVERLAY_FOR \<LTDOVERLAY\.FORCE\>
264 F_LO_FORS \<FOREACH\.LTDOVERLAY\.FORCES\>
265 E_LO_FORS \<END\.LTDOVERLAY\.FORCES\>
266 FOR_LTDOVERLAY_FORS_1 ^{st}{F_LO_FORS}{ed}
267 FOR_LTDOVERLAY_FORS_2 {F_LO_FORS}
268 END_LTDOVERLAY_FORS_1 ^{st}{E_LO_FORS}{ed}
269 END_LTDOVERLAY_FORS_2 {E_LO_FORS}
270
271
272 %x IFCOND1
273 %x IFCOND2
274 %x IFCOND3
275 %option pointer
276 %option yylineno
277 %option noyywrap
278 %%
279
280 //===========================================================================
281 // LCF TOKENS
282 //===========================================================================
283
284 \<IF\. { BEGIN IFCOND1; RETURN(tIF_OPEN); }
285 <IFCOND1>{identifier} { BEGIN IFCOND2; tlcf_yylval.string = strdup(tlcf_yytext); RETURN(tIF_ID); }
286 <IFCOND2>{equation} { BEGIN IFCOND3; tlcf_yylval.string = strdup(tlcf_yytext); RETURN(tIF_COMP); }
287 <IFCOND3>{value} { tlcf_yylval.string = strdup(tlcf_yytext); RETURN(tIF_VALUE); }
288 <IFCOND3>\> { BEGIN INITIAL; RETURN(tIF_CLOSE); }
289 \<ELSE\> { RETURN(tIF_ELSE); }
290 \<ENDIF\> { RETURN(tIF_ENDIF); }
291
292 \<STATIC\.NAME\> { RETURN(tSTATIC_NAME); }
293 \<STATIC\.ADDRESS\> { RETURN(tSTATIC_ADDRESS); }
294 \<STATIC\.STACKSIZE\> { RETURN(tSTATIC_STACKSIZE); }
295 \<STATIC\.IRQSTACKSIZE\> { RETURN(tSTATIC_IRQSTACKSIZE); }
296
297 {STATIC_CRT0_OBJ} { tlcf_yylval.string = getSection("=*"); RETURN(tSTATIC_CRT0_OBJECT); }
298
299 {STATIC_OBJ} { tlcf_yylval.string = getSection(NULL); RETURN(tSTATIC_OBJECT); }
300 {FOR_STATIC_OBJS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_STATIC_OBJECTS); }
301 {FOR_STATIC_OBJS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_STATIC_OBJECTS); }
302 {END_STATIC_OBJS_1} { RETURN(tEND_STATIC_OBJECTS); }
303 {END_STATIC_OBJS_2} { RETURN(tEND_STATIC_OBJECTS); }
304
305 {STATIC_LIB} { tlcf_yylval.string = getSection(NULL); RETURN(tSTATIC_LIBRARY); }
306 {FOR_STATIC_LIBS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_STATIC_LIBRARIES); }
307 {FOR_STATIC_LIBS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_STATIC_LIBRARIES); }
308 {END_STATIC_LIBS_1} { RETURN(tEND_STATIC_LIBRARIES); }
309 {END_STATIC_LIBS_2} { RETURN(tEND_STATIC_LIBRARIES); }
310
311 {STATIC_SYM} { RETURN(tSTATIC_SEARCHSYMBOL); }
312 {FOR_STATIC_SYMS_1} { RETURN(tFOREACH_STATIC_SEARCHSYMBOLS); }
313 {FOR_STATIC_SYMS_2} { RETURN(tFOREACH_STATIC_SEARCHSYMBOLS); }
314 {END_STATIC_SYMS_1} { RETURN(tEND_STATIC_SEARCHSYMBOLS); }
315 {END_STATIC_SYMS_2} { RETURN(tEND_STATIC_SEARCHSYMBOLS); }
316
317 {STATIC_FOR} { RETURN(tSTATIC_FORCE); }
318 {FOR_STATIC_FORS_1} { RETURN(tFOREACH_STATIC_FORCES); }
319 {FOR_STATIC_FORS_2} { RETURN(tFOREACH_STATIC_FORCES); }
320 {END_STATIC_FORS_1} { RETURN(tEND_STATIC_FORCES); }
321 {END_STATIC_FORS_2} { RETURN(tEND_STATIC_FORCES); }
322
323 \<AUTOLOAD\.ID\> { RETURN(tAUTOLOAD_ID); }
324 \<AUTOLOAD\.NAME\> { RETURN(tAUTOLOAD_NAME); }
325 \<AUTOLOAD\.ADDRESS\> { RETURN(tAUTOLOAD_ADDRESS); }
326 \<NUMBER\.AUTOLOADS\> { RETURN(tNUMBER_AUTOLOADS); }
327
328 {FOR_AUTOLOADS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_AUTOLOADS); }
329 {FOR_AUTOLOADS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_AUTOLOADS); }
330 {END_AUTOLOADS_1} { RETURN(tEND_AUTOLOADS); }
331 {END_AUTOLOADS_2} { RETURN(tEND_AUTOLOADS); }
332
333 {AUTOLOAD_OBJ} { tlcf_yylval.string = getSection(NULL); RETURN(tAUTOLOAD_OBJECT); }
334 {FOR_AUTOLOAD_OBJS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_AUTOLOAD_OBJECTS); }
335 {FOR_AUTOLOAD_OBJS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_AUTOLOAD_OBJECTS); }
336 {END_AUTOLOAD_OBJS_1} { RETURN(tEND_AUTOLOAD_OBJECTS); }
337 {END_AUTOLOAD_OBJS_2} { RETURN(tEND_AUTOLOAD_OBJECTS); }
338
339 {AUTOLOAD_LIB} { tlcf_yylval.string = getSection(NULL); RETURN(tAUTOLOAD_LIBRARY); }
340 {FOR_AUTOLOAD_LIBS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_AUTOLOAD_LIBRARIES); }
341 {FOR_AUTOLOAD_LIBS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_AUTOLOAD_LIBRARIES); }
342 {END_AUTOLOAD_LIBS_1} { RETURN(tEND_AUTOLOAD_LIBRARIES); }
343 {END_AUTOLOAD_LIBS_2} { RETURN(tEND_AUTOLOAD_LIBRARIES); }
344
345 {AUTOLOAD_SYM} { RETURN(tAUTOLOAD_SEARCHSYMBOL); }
346 {FOR_AUTOLOAD_SYMS_1} { RETURN(tFOREACH_AUTOLOAD_SEARCHSYMBOLS); }
347 {FOR_AUTOLOAD_SYMS_2} { RETURN(tFOREACH_AUTOLOAD_SEARCHSYMBOLS); }
348 {END_AUTOLOAD_SYMS_1} { RETURN(tEND_AUTOLOAD_SEARCHSYMBOLS); }
349 {END_AUTOLOAD_SYMS_2} { RETURN(tEND_AUTOLOAD_SEARCHSYMBOLS); }
350
351 {AUTOLOAD_FOR} { RETURN(tAUTOLOAD_FORCE); }
352 {FOR_AUTOLOAD_FORS_1} { RETURN(tFOREACH_AUTOLOAD_FORCES); }
353 {FOR_AUTOLOAD_FORS_2} { RETURN(tFOREACH_AUTOLOAD_FORCES); }
354 {END_AUTOLOAD_FORS_1} { RETURN(tEND_AUTOLOAD_FORCES); }
355 {END_AUTOLOAD_FORS_2} { RETURN(tEND_AUTOLOAD_FORCES); }
356
357 \<OVERLAY\.ID\> { RETURN(tOVERLAY_ID); }
358 \<OVERLAY\.NAME\> { RETURN(tOVERLAY_NAME); }
359 \<OVERLAY\.GROUP\> { RETURN(tOVERLAY_GROUP); }
360 \<OVERLAY\.ADDRESS\> { RETURN(tOVERLAY_ADDRESS); }
361 \<OVERLAY\.COMPRESS\> { RETURN(tOVERLAY_COMPRESS); }
362 \<NUMBER\.OVERLAYS\> { RETURN(tNUMBER_OVERLAYS); }
363 \<NUMBER_OVERLAYS\> { RETURN(tNUMBER_OVERLAYS); }
364
365 {FOR_OVERLAYS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_OVERLAYS); }
366 {FOR_OVERLAYS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_OVERLAYS); }
367 {END_OVERLAYS_1} { RETURN(tEND_OVERLAYS); }
368 {END_OVERLAYS_2} { RETURN(tEND_OVERLAYS); }
369
370 {OVERLAY_OBJ} { tlcf_yylval.string = getSection(NULL); RETURN(tOVERLAY_OBJECT); }
371 {FOR_OVERLAY_OBJS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_OVERLAY_OBJECTS); }
372 {FOR_OVERLAY_OBJS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_OVERLAY_OBJECTS); }
373 {END_OVERLAY_OBJS_1} { RETURN(tEND_OVERLAY_OBJECTS); }
374 {END_OVERLAY_OBJS_2} { RETURN(tEND_OVERLAY_OBJECTS); }
375
376 {OVERLAY_LIB} { tlcf_yylval.string = getSection(NULL); RETURN(tOVERLAY_LIBRARY); }
377 {FOR_OVERLAY_LIBS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_OVERLAY_LIBRARIES); }
378 {FOR_OVERLAY_LIBS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_OVERLAY_LIBRARIES); }
379 {END_OVERLAY_LIBS_1} { RETURN(tEND_OVERLAY_LIBRARIES); }
380 {END_OVERLAY_LIBS_2} { RETURN(tEND_OVERLAY_LIBRARIES); }
381
382 {OVERLAY_SYM} { RETURN(tOVERLAY_SEARCHSYMBOL); }
383 {FOR_OVERLAY_SYMS_1} { RETURN(tFOREACH_OVERLAY_SEARCHSYMBOLS); }
384 {FOR_OVERLAY_SYMS_2} { RETURN(tFOREACH_OVERLAY_SEARCHSYMBOLS); }
385 {END_OVERLAY_SYMS_1} { RETURN(tEND_OVERLAY_SEARCHSYMBOLS); }
386 {END_OVERLAY_SYMS_2} { RETURN(tEND_OVERLAY_SEARCHSYMBOLS); }
387
388 {OVERLAY_FOR} { RETURN(tOVERLAY_FORCE); }
389 {FOR_OVERLAY_FORS_1} { RETURN(tFOREACH_OVERLAY_FORCES); }
390 {FOR_OVERLAY_FORS_2} { RETURN(tFOREACH_OVERLAY_FORCES); }
391 {END_OVERLAY_FORS_1} { RETURN(tEND_OVERLAY_FORCES); }
392 {END_OVERLAY_FORS_2} { RETURN(tEND_OVERLAY_FORCES); }
393
394 \<LTDAUTOLOAD\.ID\> { RETURN(tLTDAUTOLOAD_ID); }
395 \<LTDAUTOLOAD\.NAME\> { RETURN(tLTDAUTOLOAD_NAME); }
396 \<LTDAUTOLOAD\.ADDRESS\> { RETURN(tLTDAUTOLOAD_ADDRESS); }
397 \<NUMBER\.LTDAUTOLOADS\> { RETURN(tNUMBER_LTDAUTOLOADS); }
398
399 {FOR_LTDAUTOLOADS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDAUTOLOADS); }
400 {FOR_LTDAUTOLOADS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDAUTOLOADS); }
401 {END_LTDAUTOLOADS_1} { RETURN(tEND_LTDAUTOLOADS); }
402 {END_LTDAUTOLOADS_2} { RETURN(tEND_LTDAUTOLOADS); }
403
404 {LTDAUTOLOAD_OBJ} { tlcf_yylval.string = getSection(NULL); RETURN(tLTDAUTOLOAD_OBJECT); }
405 {FOR_LTDAUTOLOAD_OBJS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDAUTOLOAD_OBJECTS); }
406 {FOR_LTDAUTOLOAD_OBJS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDAUTOLOAD_OBJECTS); }
407 {END_LTDAUTOLOAD_OBJS_1} { RETURN(tEND_LTDAUTOLOAD_OBJECTS); }
408 {END_LTDAUTOLOAD_OBJS_2} { RETURN(tEND_LTDAUTOLOAD_OBJECTS); }
409
410 {LTDAUTOLOAD_LIB} { tlcf_yylval.string = getSection(NULL); RETURN(tLTDAUTOLOAD_LIBRARY); }
411 {FOR_LTDAUTOLOAD_LIBS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDAUTOLOAD_LIBRARIES); }
412 {FOR_LTDAUTOLOAD_LIBS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDAUTOLOAD_LIBRARIES); }
413 {END_LTDAUTOLOAD_LIBS_1} { RETURN(tEND_LTDAUTOLOAD_LIBRARIES); }
414 {END_LTDAUTOLOAD_LIBS_2} { RETURN(tEND_LTDAUTOLOAD_LIBRARIES); }
415
416 {LTDAUTOLOAD_SYM} { RETURN(tLTDAUTOLOAD_SEARCHSYMBOL); }
417 {FOR_LTDAUTOLOAD_SYMS_1} { RETURN(tFOREACH_LTDAUTOLOAD_SEARCHSYMBOLS); }
418 {FOR_LTDAUTOLOAD_SYMS_2} { RETURN(tFOREACH_LTDAUTOLOAD_SEARCHSYMBOLS); }
419 {END_LTDAUTOLOAD_SYMS_1} { RETURN(tEND_LTDAUTOLOAD_SEARCHSYMBOLS); }
420 {END_LTDAUTOLOAD_SYMS_2} { RETURN(tEND_LTDAUTOLOAD_SEARCHSYMBOLS); }
421
422 {LTDAUTOLOAD_FOR} { RETURN(tLTDAUTOLOAD_FORCE); }
423 {FOR_LTDAUTOLOAD_FORS_1} { RETURN(tFOREACH_LTDAUTOLOAD_FORCES); }
424 {FOR_LTDAUTOLOAD_FORS_2} { RETURN(tFOREACH_LTDAUTOLOAD_FORCES); }
425 {END_LTDAUTOLOAD_FORS_1} { RETURN(tEND_LTDAUTOLOAD_FORCES); }
426 {END_LTDAUTOLOAD_FORS_2} { RETURN(tEND_LTDAUTOLOAD_FORCES); }
427
428 \<LTDOVERLAY\.ID\> { RETURN(tLTDOVERLAY_ID); }
429 \<LTDOVERLAY\.NAME\> { RETURN(tLTDOVERLAY_NAME); }
430 \<LTDOVERLAY\.GROUP\> { RETURN(tLTDOVERLAY_GROUP); }
431 \<LTDOVERLAY\.ADDRESS\> { RETURN(tLTDOVERLAY_ADDRESS); }
432 \<LTDOVERLAY\.COMPRESS\> { RETURN(tLTDOVERLAY_COMPRESS); }
433 \<NUMBER\.LTDOVERLAYS\> { RETURN(tNUMBER_LTDOVERLAYS); }
434 \<NUMBER_LTDOVERLAYS\> { RETURN(tNUMBER_LTDOVERLAYS); }
435
436 {FOR_LTDOVERLAYS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDOVERLAYS); }
437 {FOR_LTDOVERLAYS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDOVERLAYS); }
438 {END_LTDOVERLAYS_1} { RETURN(tEND_LTDOVERLAYS); }
439 {END_LTDOVERLAYS_2} { RETURN(tEND_LTDOVERLAYS); }
440
441 {LTDOVERLAY_OBJ} { tlcf_yylval.string = getSection(NULL); RETURN(tLTDOVERLAY_OBJECT); }
442 {FOR_LTDOVERLAY_OBJS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDOVERLAY_OBJECTS); }
443 {FOR_LTDOVERLAY_OBJS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDOVERLAY_OBJECTS); }
444 {END_LTDOVERLAY_OBJS_1} { RETURN(tEND_LTDOVERLAY_OBJECTS); }
445 {END_LTDOVERLAY_OBJS_2} { RETURN(tEND_LTDOVERLAY_OBJECTS); }
446
447 {LTDOVERLAY_LIB} { tlcf_yylval.string = getSection(NULL); RETURN(tLTDOVERLAY_LIBRARY); }
448 {FOR_LTDOVERLAY_LIBS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDOVERLAY_LIBRARIES); }
449 {FOR_LTDOVERLAY_LIBS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDOVERLAY_LIBRARIES); }
450 {END_LTDOVERLAY_LIBS_1} { RETURN(tEND_LTDOVERLAY_LIBRARIES); }
451 {END_LTDOVERLAY_LIBS_2} { RETURN(tEND_LTDOVERLAY_LIBRARIES); }
452
453 {LTDOVERLAY_SYM} { RETURN(tLTDOVERLAY_SEARCHSYMBOL); }
454 {FOR_LTDOVERLAY_SYMS_1} { RETURN(tFOREACH_LTDOVERLAY_SEARCHSYMBOLS); }
455 {FOR_LTDOVERLAY_SYMS_2} { RETURN(tFOREACH_LTDOVERLAY_SEARCHSYMBOLS); }
456 {END_LTDOVERLAY_SYMS_1} { RETURN(tEND_LTDOVERLAY_SEARCHSYMBOLS); }
457 {END_LTDOVERLAY_SYMS_2} { RETURN(tEND_LTDOVERLAY_SEARCHSYMBOLS); }
458
459 {LTDOVERLAY_FOR} { RETURN(tLTDOVERLAY_FORCE); }
460 {FOR_LTDOVERLAY_FORS_1} { RETURN(tFOREACH_LTDOVERLAY_FORCES); }
461 {FOR_LTDOVERLAY_FORS_2} { RETURN(tFOREACH_LTDOVERLAY_FORCES); }
462 {END_LTDOVERLAY_FORS_1} { RETURN(tEND_LTDOVERLAY_FORCES); }
463 {END_LTDOVERLAY_FORS_2} { RETURN(tEND_LTDOVERLAY_FORCES); }
464
465 \<PROPERTY\.OVERLAYDEFS\> { RETURN(tPROPERTY_OVERLAYDEFS); }
466 \<PROPERTY\.OVERLAYTABLE\> { RETURN(tPROPERTY_OVERLAYTABLE); }
467 \<PROPERTY\.LTDOVERLAYDEFS\> { RETURN(tPROPERTY_LTDOVERLAYDEFS); }
468 \<PROPERTY\.LTDOVERLAYTABLE\> { RETURN(tPROPERTY_LTDOVERLAYTABLE); }
469 \<PROPERTY\.SUR?FFIX\> { RETURN(tPROPERTY_SUFFIX); }
470 \<PROPERTY\.FLXSUR?FFIX\> { RETURN(tPROPERTY_FLXSUFFIX); }
471 \<PROPERTY\.LTDSUR?FFIX\> { RETURN(tPROPERTY_LTDSUFFIX); }
472
473 [^<\n]*\n? |
474 \< {
475 tlcf_yylval.string = strdup(tlcf_yytext);
476 RETURN(tSTRING);
477 }
478
479 . { RETURN(tlcf_yytext[0]); }
480
481 %%
482
483 /*============================================================================
484 * PARSE TLCF FILE
485 */
486 int ParseTlcfFile( const char* filename )
487 {
488 FILE *fp;
489 int result;
490
491 if ( NULL == ( fp = fopen( filename, "r" ) ) )
492 {
493 fprintf( stderr, "Cannot open %s\n", filename );
494 return 2;
495 }
496
497 tlcf_yyin = fp;
498 result = tlcf_yyparse();
499 fclose( fp );
500
501 if ( GetLoopStackLevel( ) > 0 )
502 {
503 tlcf_yyerror( "Unmatched foreach-end pair" );
504 return 1;
505 }
506
507 return result ? 1 : 0;
508 }
509