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]

Re: Windres problem with Boling book example


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]