1 %{
2 /*---------------------------------------------------------------------------*
3 Project: TwlSDK - tools - makelcf
4 File: tlcf.l
5
6 Copyright 2003-2008 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:: 2008-09-18#$
15 $Rev: 8573 $
16 $Author: okubata_ryoma $
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_OBJ \<STATIC\.OBJECT{sec}{mod}\>
82 F_S_OBJS \<FOREACH\.STATIC\.OBJECTS{sec}{flt}\>
83 E_S_OBJS \<END\.STATIC\.OBJECTS{sec}{flt}\>
84 FOR_STATIC_OBJS_1 ^{st}{F_S_OBJS}{ed}
85 FOR_STATIC_OBJS_2 {F_S_OBJS}
86 END_STATIC_OBJS_1 ^{st}{E_S_OBJS}{ed}
87 END_STATIC_OBJS_2 {E_S_OBJS}
88
89 STATIC_LIB \<STATIC\.LIBRARY{sec}{mod}\>
90 F_S_LIBS \<FOREACH\.STATIC\.LIBRARIES{sec}{flt}\>
91 E_S_LIBS \<END\.STATIC\.LIBRARIES{sec}{flt}\>
92 FOR_STATIC_LIBS_1 ^{st}{F_S_LIBS}{ed}
93 FOR_STATIC_LIBS_2 {F_S_LIBS}
94 END_STATIC_LIBS_1 ^{st}{E_S_LIBS}{ed}
95 END_STATIC_LIBS_2 {E_S_LIBS}
96
97 STATIC_SYM \<STATIC\.SEARCHSYMBOL\>
98 F_S_SYMS \<FOREACH\.STATIC\.SEARCHSYMBOLS\>
99 E_S_SYMS \<END\.STATIC\.SEARCHSYMBOLS\>
100 FOR_STATIC_SYMS_1 ^{st}{F_S_SYMS}{ed}
101 FOR_STATIC_SYMS_2 {F_S_SYMS}
102 END_STATIC_SYMS_1 ^{st}{E_S_SYMS}{ed}
103 END_STATIC_SYMS_2 {E_S_SYMS}
104
105 F_ATLS \<FOREACH\.AUTOLOADS{sec}{flt}\>
106 E_ATLS \<END\.AUTOLOADS{sec}{flt}\>
107 FOR_AUTOLOADS_1 ^{st}{F_ATLS}{ed}
108 FOR_AUTOLOADS_2 {F_ATLS}
109 END_AUTOLOADS_1 ^{st}{E_ATLS}{ed}
110 END_AUTOLOADS_2 {E_ATLS}
111
112 AUTOLOAD_OBJ \<AUTOLOAD\.OBJECT{sec}{mod}\>
113 F_A_OBJS \<FOREACH\.AUTOLOAD\.OBJECTS{sec}{flt}\>
114 E_A_OBJS \<END\.AUTOLOAD\.OBJECTS{sec}{flt}\>
115 FOR_AUTOLOAD_OBJS_1 ^{st}{F_A_OBJS}{ed}
116 FOR_AUTOLOAD_OBJS_2 {F_A_OBJS}
117 END_AUTOLOAD_OBJS_1 ^{st}{E_A_OBJS}{ed}
118 END_AUTOLOAD_OBJS_2 {E_A_OBJS}
119
120 AUTOLOAD_LIB \<AUTOLOAD\.LIBRARY{sec}{mod}\>
121 F_A_LIBS \<FOREACH\.AUTOLOAD\.LIBRARIES{sec}{flt}\>
122 E_A_LIBS \<END\.AUTOLOAD\.LIBRARIES{sec}{flt}\>
123 FOR_AUTOLOAD_LIBS_1 ^{st}{F_A_LIBS}{ed}
124 FOR_AUTOLOAD_LIBS_2 {F_A_LIBS}
125 END_AUTOLOAD_LIBS_1 ^{st}{E_A_LIBS}{ed}
126 END_AUTOLOAD_LIBS_2 {E_A_LIBS}
127
128 AUTOLOAD_SYM \<AUTOLOAD\.SEARCHSYMBOL\>
129 F_A_SYMS \<FOREACH\.AUTOLOAD\.SEARCHSYMBOLS\>
130 E_A_SYMS \<END\.AUTOLOAD\.SEARCHSYMBOLS\>
131 FOR_AUTOLOAD_SYMS_1 ^{st}{F_A_SYMS}{ed}
132 FOR_AUTOLOAD_SYMS_2 {F_A_SYMS}
133 END_AUTOLOAD_SYMS_1 ^{st}{E_A_SYMS}{ed}
134 END_AUTOLOAD_SYMS_2 {E_A_SYMS}
135
136 F_OVLS \<FOREACH\.OVERLAYS{sec}{flt}\>
137 E_OVLS \<END\.OVERLAYS{sec}{flt}\>
138 FOR_OVERLAYS_1 ^{st}{F_OVLS}{ed}
139 FOR_OVERLAYS_2 {F_OVLS}
140 END_OVERLAYS_1 ^{st}{E_OVLS}{ed}
141 END_OVERLAYS_2 {E_OVLS}
142
143 OVERLAY_OBJ \<OVERLAY\.OBJECT{sec}{mod}\>
144 F_O_OBJS \<FOREACH\.OVERLAY\.OBJECTS{sec}{flt}\>
145 E_O_OBJS \<END\.OVERLAY\.OBJECTS{sec}{flt}\>
146 FOR_OVERLAY_OBJS_1 ^{st}{F_O_OBJS}{ed}
147 FOR_OVERLAY_OBJS_2 {F_O_OBJS}
148 END_OVERLAY_OBJS_1 ^{st}{E_O_OBJS}{ed}
149 END_OVERLAY_OBJS_2 {E_O_OBJS}
150
151 OVERLAY_LIB \<OVERLAY\.LIBRARY{sec}{mod}\>
152 F_O_LIBS \<FOREACH\.OVERLAY\.LIBRARIES{sec}{flt}\>
153 E_O_LIBS \<END\.OVERLAY\.LIBRARIES{sec}{flt}\>
154 FOR_OVERLAY_LIBS_1 ^{st}{F_O_LIBS}{ed}
155 FOR_OVERLAY_LIBS_2 {F_O_LIBS}
156 END_OVERLAY_LIBS_1 ^{st}{E_O_LIBS}{ed}
157 END_OVERLAY_LIBS_2 {E_O_LIBS}
158
159 OVERLAY_SYM \<OVERLAY\.SEARCHSYMBOL\>
160 F_O_SYMS \<FOREACH\.OVERLAY\.SEARCHSYMBOLS\>
161 E_O_SYMS \<END\.OVERLAY\.SEARCHSYMBOLS\>
162 FOR_OVERLAY_SYMS_1 ^{st}{F_O_SYMS}{ed}
163 FOR_OVERLAY_SYMS_2 {F_O_SYMS}
164 END_OVERLAY_SYMS_1 ^{st}{E_O_SYMS}{ed}
165 END_OVERLAY_SYMS_2 {E_O_SYMS}
166
167 F_LTDATLS \<FOREACH\.LTDAUTOLOADS{sec}{flt}\>
168 E_LTDATLS \<END\.LTDAUTOLOADS{sec}{flt}\>
169 FOR_LTDAUTOLOADS_1 ^{st}{F_LTDATLS}{ed}
170 FOR_LTDAUTOLOADS_2 {F_LTDATLS}
171 END_LTDAUTOLOADS_1 ^{st}{E_LTDATLS}{ed}
172 END_LTDAUTOLOADS_2 {E_LTDATLS}
173
174 LTDAUTOLOAD_OBJ \<LTDAUTOLOAD\.OBJECT{sec}{mod}\>
175 F_LA_OBJS \<FOREACH\.LTDAUTOLOAD\.OBJECTS{sec}{flt}\>
176 E_LA_OBJS \<END\.LTDAUTOLOAD\.OBJECTS{sec}{flt}\>
177 FOR_LTDAUTOLOAD_OBJS_1 ^{st}{F_LA_OBJS}{ed}
178 FOR_LTDAUTOLOAD_OBJS_2 {F_LA_OBJS}
179 END_LTDAUTOLOAD_OBJS_1 ^{st}{E_LA_OBJS}{ed}
180 END_LTDAUTOLOAD_OBJS_2 {E_LA_OBJS}
181
182 LTDAUTOLOAD_LIB \<LTDAUTOLOAD\.LIBRARY{sec}{mod}\>
183 F_LA_LIBS \<FOREACH\.LTDAUTOLOAD\.LIBRARIES{sec}{flt}\>
184 E_LA_LIBS \<END\.LTDAUTOLOAD\.LIBRARIES{sec}{flt}\>
185 FOR_LTDAUTOLOAD_LIBS_1 ^{st}{F_LA_LIBS}{ed}
186 FOR_LTDAUTOLOAD_LIBS_2 {F_LA_LIBS}
187 END_LTDAUTOLOAD_LIBS_1 ^{st}{E_LA_LIBS}{ed}
188 END_LTDAUTOLOAD_LIBS_2 {E_LA_LIBS}
189
190 LTDAUTOLOAD_SYM \<LTDAUTOLOAD\.SEARCHSYMBOL\>
191 F_LA_SYMS \<FOREACH\.LTDAUTOLOAD\.SEARCHSYMBOLS\>
192 E_LA_SYMS \<END\.LTDAUTOLOAD\.SEARCHSYMBOLS\>
193 FOR_LTDAUTOLOAD_SYMS_1 ^{st}{F_LA_SYMS}{ed}
194 FOR_LTDAUTOLOAD_SYMS_2 {F_LA_SYMS}
195 END_LTDAUTOLOAD_SYMS_1 ^{st}{E_LA_SYMS}{ed}
196 END_LTDAUTOLOAD_SYMS_2 {E_LA_SYMS}
197
198 F_LTDOVLS \<FOREACH\.LTDOVERLAYS{sec}{flt}\>
199 E_LTDOVLS \<END\.LTDOVERLAYS{sec}{flt}\>
200 FOR_LTDOVERLAYS_1 ^{st}{F_LTDOVLS}{ed}
201 FOR_LTDOVERLAYS_2 {F_LTDOVLS}
202 END_LTDOVERLAYS_1 ^{st}{E_LTDOVLS}{ed}
203 END_LTDOVERLAYS_2 {E_LTDOVLS}
204
205 LTDOVERLAY_OBJ \<LTDOVERLAY\.OBJECT{sec}{mod}\>
206 F_LO_OBJS \<FOREACH\.LTDOVERLAY\.OBJECTS{sec}{flt}\>
207 E_LO_OBJS \<END\.LTDOVERLAY\.OBJECTS{sec}{flt}\>
208 FOR_LTDOVERLAY_OBJS_1 ^{st}{F_LO_OBJS}{ed}
209 FOR_LTDOVERLAY_OBJS_2 {F_LO_OBJS}
210 END_LTDOVERLAY_OBJS_1 ^{st}{E_LO_OBJS}{ed}
211 END_LTDOVERLAY_OBJS_2 {E_LO_OBJS}
212
213 LTDOVERLAY_LIB \<LTDOVERLAY\.LIBRARY{sec}{mod}\>
214 F_LO_LIBS \<FOREACH\.LTDOVERLAY\.LIBRARIES{sec}{flt}\>
215 E_LO_LIBS \<END\.LTDOVERLAY\.LIBRARIES{sec}{flt}\>
216 FOR_LTDOVERLAY_LIBS_1 ^{st}{F_LO_LIBS}{ed}
217 FOR_LTDOVERLAY_LIBS_2 {F_LO_LIBS}
218 END_LTDOVERLAY_LIBS_1 ^{st}{E_LO_LIBS}{ed}
219 END_LTDOVERLAY_LIBS_2 {E_LO_LIBS}
220
221 LTDOVERLAY_SYM \<LTDOVERLAY\.SEARCHSYMBOL\>
222 F_LO_SYMS \<FOREACH\.LTDOVERLAY\.SEARCHSYMBOLS\>
223 E_LO_SYMS \<END\.LTDOVERLAY\.SEARCHSYMBOLS\>
224 FOR_LTDOVERLAY_SYMS_1 ^{st}{F_LO_SYMS}{ed}
225 FOR_LTDOVERLAY_SYMS_2 {F_LO_SYMS}
226 END_LTDOVERLAY_SYMS_1 ^{st}{E_LO_SYMS}{ed}
227 END_LTDOVERLAY_SYMS_2 {E_LO_SYMS}
228
229
230 %x IFCOND1
231 %x IFCOND2
232 %x IFCOND3
233 %option pointer
234 %option yylineno
235 %option noyywrap
236 %%
237
238 //===========================================================================
239 // LCF TOKENS
240 //===========================================================================
241
242 \<IF\. { BEGIN IFCOND1; RETURN(tIF_OPEN); }
243 <IFCOND1>{identifier} { BEGIN IFCOND2; tlcf_yylval.string = strdup(tlcf_yytext); RETURN(tIF_ID); }
244 <IFCOND2>{equation} { BEGIN IFCOND3; tlcf_yylval.string = strdup(tlcf_yytext); RETURN(tIF_COMP); }
245 <IFCOND3>{value} { tlcf_yylval.string = strdup(tlcf_yytext); RETURN(tIF_VALUE); }
246 <IFCOND3>\> { BEGIN INITIAL; RETURN(tIF_CLOSE); }
247 \<ELSE\> { RETURN(tIF_ELSE); }
248 \<ENDIF\> { RETURN(tIF_ENDIF); }
249
250 \<STATIC\.NAME\> { RETURN(tSTATIC_NAME); }
251 \<STATIC\.ADDRESS\> { RETURN(tSTATIC_ADDRESS); }
252 \<STATIC\.STACKSIZE\> { RETURN(tSTATIC_STACKSIZE); }
253 \<STATIC\.IRQSTACKSIZE\> { RETURN(tSTATIC_IRQSTACKSIZE); }
254
255 {STATIC_OBJ} { tlcf_yylval.string = getSection(NULL); RETURN(tSTATIC_OBJECT); }
256 {FOR_STATIC_OBJS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_STATIC_OBJECTS); }
257 {FOR_STATIC_OBJS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_STATIC_OBJECTS); }
258 {END_STATIC_OBJS_1} { RETURN(tEND_STATIC_OBJECTS); }
259 {END_STATIC_OBJS_2} { RETURN(tEND_STATIC_OBJECTS); }
260
261 {STATIC_LIB} { tlcf_yylval.string = getSection(NULL); RETURN(tSTATIC_LIBRARY); }
262 {FOR_STATIC_LIBS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_STATIC_LIBRARIES); }
263 {FOR_STATIC_LIBS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_STATIC_LIBRARIES); }
264 {END_STATIC_LIBS_1} { RETURN(tEND_STATIC_LIBRARIES); }
265 {END_STATIC_LIBS_2} { RETURN(tEND_STATIC_LIBRARIES); }
266
267 {STATIC_SYM} { RETURN(tSTATIC_SEARCHSYMBOL); }
268 {FOR_STATIC_SYMS_1} { RETURN(tFOREACH_STATIC_SEARCHSYMBOLS); }
269 {FOR_STATIC_SYMS_2} { RETURN(tFOREACH_STATIC_SEARCHSYMBOLS); }
270 {END_STATIC_SYMS_1} { RETURN(tEND_STATIC_SEARCHSYMBOLS); }
271 {END_STATIC_SYMS_2} { RETURN(tEND_STATIC_SEARCHSYMBOLS); }
272
273 \<AUTOLOAD\.ID\> { RETURN(tAUTOLOAD_ID); }
274 \<AUTOLOAD\.NAME\> { RETURN(tAUTOLOAD_NAME); }
275 \<AUTOLOAD\.ADDRESS\> { RETURN(tAUTOLOAD_ADDRESS); }
276 \<NUMBER\.AUTOLOADS\> { RETURN(tNUMBER_AUTOLOADS); }
277
278 {FOR_AUTOLOADS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_AUTOLOADS); }
279 {FOR_AUTOLOADS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_AUTOLOADS); }
280 {END_AUTOLOADS_1} { RETURN(tEND_AUTOLOADS); }
281 {END_AUTOLOADS_2} { RETURN(tEND_AUTOLOADS); }
282
283 {AUTOLOAD_OBJ} { tlcf_yylval.string = getSection(NULL); RETURN(tAUTOLOAD_OBJECT); }
284 {FOR_AUTOLOAD_OBJS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_AUTOLOAD_OBJECTS); }
285 {FOR_AUTOLOAD_OBJS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_AUTOLOAD_OBJECTS); }
286 {END_AUTOLOAD_OBJS_1} { RETURN(tEND_AUTOLOAD_OBJECTS); }
287 {END_AUTOLOAD_OBJS_2} { RETURN(tEND_AUTOLOAD_OBJECTS); }
288
289 {AUTOLOAD_LIB} { tlcf_yylval.string = getSection(NULL); RETURN(tAUTOLOAD_LIBRARY); }
290 {FOR_AUTOLOAD_LIBS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_AUTOLOAD_LIBRARIES); }
291 {FOR_AUTOLOAD_LIBS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_AUTOLOAD_LIBRARIES); }
292 {END_AUTOLOAD_LIBS_1} { RETURN(tEND_AUTOLOAD_LIBRARIES); }
293 {END_AUTOLOAD_LIBS_2} { RETURN(tEND_AUTOLOAD_LIBRARIES); }
294
295 {AUTOLOAD_SYM} { RETURN(tAUTOLOAD_SEARCHSYMBOL); }
296 {FOR_AUTOLOAD_SYMS_1} { RETURN(tFOREACH_AUTOLOAD_SEARCHSYMBOLS); }
297 {FOR_AUTOLOAD_SYMS_2} { RETURN(tFOREACH_AUTOLOAD_SEARCHSYMBOLS); }
298 {END_AUTOLOAD_SYMS_1} { RETURN(tEND_AUTOLOAD_SEARCHSYMBOLS); }
299 {END_AUTOLOAD_SYMS_2} { RETURN(tEND_AUTOLOAD_SEARCHSYMBOLS); }
300
301 \<OVERLAY\.ID\> { RETURN(tOVERLAY_ID); }
302 \<OVERLAY\.NAME\> { RETURN(tOVERLAY_NAME); }
303 \<OVERLAY\.GROUP\> { RETURN(tOVERLAY_GROUP); }
304 \<OVERLAY\.ADDRESS\> { RETURN(tOVERLAY_ADDRESS); }
305 \<NUMBER\.OVERLAYS\> { RETURN(tNUMBER_OVERLAYS); }
306 \<NUMBER_OVERLAYS\> { RETURN(tNUMBER_OVERLAYS); }
307
308 {FOR_OVERLAYS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_OVERLAYS); }
309 {FOR_OVERLAYS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_OVERLAYS); }
310 {END_OVERLAYS_1} { RETURN(tEND_OVERLAYS); }
311 {END_OVERLAYS_2} { RETURN(tEND_OVERLAYS); }
312
313 {OVERLAY_OBJ} { tlcf_yylval.string = getSection(NULL); RETURN(tOVERLAY_OBJECT); }
314 {FOR_OVERLAY_OBJS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_OVERLAY_OBJECTS); }
315 {FOR_OVERLAY_OBJS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_OVERLAY_OBJECTS); }
316 {END_OVERLAY_OBJS_1} { RETURN(tEND_OVERLAY_OBJECTS); }
317 {END_OVERLAY_OBJS_2} { RETURN(tEND_OVERLAY_OBJECTS); }
318
319 {OVERLAY_LIB} { tlcf_yylval.string = getSection(NULL); RETURN(tOVERLAY_LIBRARY); }
320 {FOR_OVERLAY_LIBS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_OVERLAY_LIBRARIES); }
321 {FOR_OVERLAY_LIBS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_OVERLAY_LIBRARIES); }
322 {END_OVERLAY_LIBS_1} { RETURN(tEND_OVERLAY_LIBRARIES); }
323 {END_OVERLAY_LIBS_2} { RETURN(tEND_OVERLAY_LIBRARIES); }
324
325 {OVERLAY_SYM} { RETURN(tOVERLAY_SEARCHSYMBOL); }
326 {FOR_OVERLAY_SYMS_1} { RETURN(tFOREACH_OVERLAY_SEARCHSYMBOLS); }
327 {FOR_OVERLAY_SYMS_2} { RETURN(tFOREACH_OVERLAY_SEARCHSYMBOLS); }
328 {END_OVERLAY_SYMS_1} { RETURN(tEND_OVERLAY_SEARCHSYMBOLS); }
329 {END_OVERLAY_SYMS_2} { RETURN(tEND_OVERLAY_SEARCHSYMBOLS); }
330
331 \<LTDAUTOLOAD\.ID\> { RETURN(tLTDAUTOLOAD_ID); }
332 \<LTDAUTOLOAD\.NAME\> { RETURN(tLTDAUTOLOAD_NAME); }
333 \<LTDAUTOLOAD\.ADDRESS\> { RETURN(tLTDAUTOLOAD_ADDRESS); }
334 \<NUMBER\.LTDAUTOLOADS\> { RETURN(tNUMBER_LTDAUTOLOADS); }
335
336 {FOR_LTDAUTOLOADS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDAUTOLOADS); }
337 {FOR_LTDAUTOLOADS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDAUTOLOADS); }
338 {END_LTDAUTOLOADS_1} { RETURN(tEND_LTDAUTOLOADS); }
339 {END_LTDAUTOLOADS_2} { RETURN(tEND_LTDAUTOLOADS); }
340
341 {LTDAUTOLOAD_OBJ} { tlcf_yylval.string = getSection(NULL); RETURN(tLTDAUTOLOAD_OBJECT); }
342 {FOR_LTDAUTOLOAD_OBJS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDAUTOLOAD_OBJECTS); }
343 {FOR_LTDAUTOLOAD_OBJS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDAUTOLOAD_OBJECTS); }
344 {END_LTDAUTOLOAD_OBJS_1} { RETURN(tEND_LTDAUTOLOAD_OBJECTS); }
345 {END_LTDAUTOLOAD_OBJS_2} { RETURN(tEND_LTDAUTOLOAD_OBJECTS); }
346
347 {LTDAUTOLOAD_LIB} { tlcf_yylval.string = getSection(NULL); RETURN(tLTDAUTOLOAD_LIBRARY); }
348 {FOR_LTDAUTOLOAD_LIBS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDAUTOLOAD_LIBRARIES); }
349 {FOR_LTDAUTOLOAD_LIBS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDAUTOLOAD_LIBRARIES); }
350 {END_LTDAUTOLOAD_LIBS_1} { RETURN(tEND_LTDAUTOLOAD_LIBRARIES); }
351 {END_LTDAUTOLOAD_LIBS_2} { RETURN(tEND_LTDAUTOLOAD_LIBRARIES); }
352
353 {LTDAUTOLOAD_SYM} { RETURN(tLTDAUTOLOAD_SEARCHSYMBOL); }
354 {FOR_LTDAUTOLOAD_SYMS_1} { RETURN(tFOREACH_LTDAUTOLOAD_SEARCHSYMBOLS); }
355 {FOR_LTDAUTOLOAD_SYMS_2} { RETURN(tFOREACH_LTDAUTOLOAD_SEARCHSYMBOLS); }
356 {END_LTDAUTOLOAD_SYMS_1} { RETURN(tEND_LTDAUTOLOAD_SEARCHSYMBOLS); }
357 {END_LTDAUTOLOAD_SYMS_2} { RETURN(tEND_LTDAUTOLOAD_SEARCHSYMBOLS); }
358
359 \<LTDOVERLAY\.ID\> { RETURN(tLTDOVERLAY_ID); }
360 \<LTDOVERLAY\.NAME\> { RETURN(tLTDOVERLAY_NAME); }
361 \<LTDOVERLAY\.GROUP\> { RETURN(tLTDOVERLAY_GROUP); }
362 \<LTDOVERLAY\.ADDRESS\> { RETURN(tLTDOVERLAY_ADDRESS); }
363 \<NUMBER\.LTDOVERLAYS\> { RETURN(tNUMBER_LTDOVERLAYS); }
364 \<NUMBER_LTDOVERLAYS\> { RETURN(tNUMBER_LTDOVERLAYS); }
365
366 {FOR_LTDOVERLAYS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDOVERLAYS); }
367 {FOR_LTDOVERLAYS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDOVERLAYS); }
368 {END_LTDOVERLAYS_1} { RETURN(tEND_LTDOVERLAYS); }
369 {END_LTDOVERLAYS_2} { RETURN(tEND_LTDOVERLAYS); }
370
371 {LTDOVERLAY_OBJ} { tlcf_yylval.string = getSection(NULL); RETURN(tLTDOVERLAY_OBJECT); }
372 {FOR_LTDOVERLAY_OBJS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDOVERLAY_OBJECTS); }
373 {FOR_LTDOVERLAY_OBJS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDOVERLAY_OBJECTS); }
374 {END_LTDOVERLAY_OBJS_1} { RETURN(tEND_LTDOVERLAY_OBJECTS); }
375 {END_LTDOVERLAY_OBJS_2} { RETURN(tEND_LTDOVERLAY_OBJECTS); }
376
377 {LTDOVERLAY_LIB} { tlcf_yylval.string = getSection(NULL); RETURN(tLTDOVERLAY_LIBRARY); }
378 {FOR_LTDOVERLAY_LIBS_1} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDOVERLAY_LIBRARIES); }
379 {FOR_LTDOVERLAY_LIBS_2} { tlcf_yylval.string = getSection("=*"); RETURN(tFOREACH_LTDOVERLAY_LIBRARIES); }
380 {END_LTDOVERLAY_LIBS_1} { RETURN(tEND_LTDOVERLAY_LIBRARIES); }
381 {END_LTDOVERLAY_LIBS_2} { RETURN(tEND_LTDOVERLAY_LIBRARIES); }
382
383 {LTDOVERLAY_SYM} { RETURN(tLTDOVERLAY_SEARCHSYMBOL); }
384 {FOR_LTDOVERLAY_SYMS_1} { RETURN(tFOREACH_LTDOVERLAY_SEARCHSYMBOLS); }
385 {FOR_LTDOVERLAY_SYMS_2} { RETURN(tFOREACH_LTDOVERLAY_SEARCHSYMBOLS); }
386 {END_LTDOVERLAY_SYMS_1} { RETURN(tEND_LTDOVERLAY_SEARCHSYMBOLS); }
387 {END_LTDOVERLAY_SYMS_2} { RETURN(tEND_LTDOVERLAY_SEARCHSYMBOLS); }
388
389 \<PROPERTY\.OVERLAYDEFS\> { RETURN(tPROPERTY_OVERLAYDEFS); }
390 \<PROPERTY\.OVERLAYTABLE\> { RETURN(tPROPERTY_OVERLAYTABLE); }
391 \<PROPERTY\.LTDOVERLAYDEFS\> { RETURN(tPROPERTY_LTDOVERLAYDEFS); }
392 \<PROPERTY\.LTDOVERLAYTABLE\> { RETURN(tPROPERTY_LTDOVERLAYTABLE); }
393 \<PROPERTY\.SUR?FFIX\> { RETURN(tPROPERTY_SUFFIX); }
394 \<PROPERTY\.FLXSUR?FFIX\> { RETURN(tPROPERTY_FLXSUFFIX); }
395 \<PROPERTY\.LTDSUR?FFIX\> { RETURN(tPROPERTY_LTDSUFFIX); }
396
397 [^<\n]*\n? |
398 \< {
399 tlcf_yylval.string = strdup(tlcf_yytext);
400 RETURN(tSTRING);
401 }
402
403 . { RETURN(tlcf_yytext[0]); }
404
405 %%
406
407 /*============================================================================
408 * PARSE TLCF FILE
409 */
410 int ParseTlcfFile( const char* filename )
411 {
412 FILE *fp;
413 int result;
414
415 if ( NULL == ( fp = fopen( filename, "r" ) ) )
416 {
417 fprintf( stderr, "Cannot open %s\n", filename );
418 return 2;
419 }
420
421 tlcf_yyin = fp;
422 result = tlcf_yyparse();
423 fclose( fp );
424
425 if ( GetLoopStackLevel( ) > 0 )
426 {
427 tlcf_yyerror( "Unmatched foreach-end pair" );
428 return 1;
429 }
430
431 return result ? 1 : 0;
432 }
433