This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
On Fri, 2006-11-24 at 14:17 +0000, Nick Clifton wrote:
> 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 ?
It doesn't, as you would expect by reading the code. It just accepts all
upper 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);
> }
Your code submission is greatly appreciated :-)
The strcasecmp line needs to compare against yytext, not s. That hasn't
gotten a value yet. Otherwise it appears to work just fine.
I've edited the source and will test some more, then I'll send you the
working patch.
Ok ?
Danny
> > 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]*"\"" {
> >
--
Danny Backx ; danny.backx - at - scarlet.be ; http://danny.backx.info
Attachment:
signature.asc
Description: This is a digitally signed message part
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |