Windres problem with Boling book example
Nick Clifton
nickc@redhat.com
Fri Nov 24 14:16:00 GMT 2006
Hi Danny,
> One of the examples in the Boling book has lines in the resource file
> that look like this :
>
> aboutbox DIALOG discardable 10, 10, 132, 40
> The problem is that binutils's windres appears to expect all the
> keywords such as DISCARDABLE to be in upper case.
Do you know if windres accepts mixed case keywords as well, eg
"DiScArDaBlE", or just either all-upper-case or all-lower-case ?
> A trivial fix for src/binutils/binutils/rclex.l is below. Obviously this
> fixes only that keyword, I'd expect all of them need to be treated in
> the same way.
It would probably be neater to move the keyword recognition code into
the string recognising code and to just use strcasecmp(). eg:
[A-Za-z][^ ,\t\r\n]* {
char * s;
int i;
struct { char * word; int token } keywords[] =
{
{ "BLOCK", BLOCK },
{ "DISCARDABLE", DISCARDABLE },
...
{ NULL, STRING }
};
s = get_string (strlen (yytext) + 1);
for (i = 0; keywords[i].word != NULL; i++)
if (strcasecmp (keywords[i].word, s) == 0)
break;
if (keywords[i].word == NULL)
{
strcpy (s, yytext);
yylval.s = s;
}
MAYBE_RETURN (keywords[i].token);
}
> This looks pretty lame, there must be a reason why this isn't
> implemented like this to begin with. Does anyone see a reason ?
The reason is probably that the syntax that the original coders had to
work with only showed upper case keywords.
> Thanks,
>
> Danny
>
> dannypc: {75} svn diff rclex.l
> Index: rclex.l
> ===================================================================
> --- rclex.l (revision 819)
> +++ rclex.l (working copy)
> @@ -151,7 +151,7 @@
> "IMPURE" { MAYBE_RETURN (IMPURE); }
> "PRELOAD" { MAYBE_RETURN (PRELOAD); }
> "LOADONCALL" { MAYBE_RETURN (LOADONCALL); }
> -"DISCARDABLE" { MAYBE_RETURN (DISCARDABLE); }
> +[dD][iI][sS][cC][aA][rR][dD][aA][bB][lL][eE] { MAYBE_RETURN
> (DISCARDABLE); }
> "NOT" { MAYBE_RETURN (NOT); }
>
> "BLOCK"[ \t\n]*"\""[^\#\n]*"\"" {
>
More information about the Binutils
mailing list