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:: 2010-03-16#$
15   $Rev: 11311 $
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_0-9]*)?
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\.FORCE\>
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