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] | |
I've attached the patch.
As I already said this uses the sample code that Nick wrote. I ended up
making two changes to it :
- fix the small bug
- extend the lex pattern so more characters stop a keyword
I've run eight of the Boling book example through this. I can get most
of them to process correctly; after finding more literals that we don't
yet have in our include files. (Our project is in the process of
building up some of the include files, see
http://cegcc.sourceforge.net). That doesn't interfere with whether these
files are processed correctly though.
A couple of the files I tried don't process yet, but the original
windres behaves in the same way, so I am confident that this behaviour
is unrelated to this patch.
One remark: windres is rather bad at describing the syntax errors it
reports; it basically says something like
arm-wince-mingw32ce-windres: gapishow.rc:82: syntax error
without further explanation. I've not tried to address this.
A proposed ChangeLog entry, if this patch is accepted :
2006-11-27 Danny Backx <dannybackx@users.sourceforge.net>
* binutils/rclex.l : Accept keywords in lower and mixed case,
not just upper case. Based on code by Nick Clifton.
-- Danny
On Sat, 2006-11-25 at 11:22 +0100, Danny Backx wrote:
> On Sat, 2006-11-25 at 09:24 +0000, Nick Clifton wrote:
> > Hi Dave,
> >
> > >>>> 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.
> > >
> > > I think it could reasonably be inferred that Nick meant to ask after
> > > windows' rc.exe and windres was a slip of the finger, no?
> >
> > It was. Doh!
> >
> > So - Danny - how does rc.exe behave ?
>
> This required kicking my kids off the Windows PC :-)
>
> I've built the chap06/dlgdemo application with evc 4, and it did that
> flawlessly. Then I tweaked some of the "discardable" keywords so they
> contain mixed case as you asked. The resulting rc file contains lines
> such as shown here :
>
> dannypc: {41} fgrep -i disc *.rc
> ID_MENU MENU DISCARDABLE
> ID_BTNPAGE DIALOG disCARdable 0, 0, 125, 90
> ID_EDITPAGE DIALOG DisCarDable 0, 0, 80, 80
> ID_LISTPAGE DIALOG discardable 0, 0, 125, 80
> ID_STATPAGE DIALOG discardable 0, 0, 130, 80
> <cut>
>
> evc4 still managed to build the code.
>
> I was inclined to reply before doing this, because the Boling book is
> published by Microsoft Press. All of the examples in there are certain
> to compile. But now we have more info: it supports mixed case keywords.
>
> Danny
--
Danny Backx ; danny.backx - at - scarlet.be ; http://danny.backx.info
Index: binutils/binutils/rclex.l
===================================================================
--- binutils/binutils/rclex.l (revision 819)
+++ binutils/binutils/rclex.l (working copy)
@@ -77,82 +77,104 @@
%%
-"BEGIN" { MAYBE_RETURN (BEG); }
+[A-Za-z][^ ,\t\r\n();,]* {
+ char *s;
+ int i;
+
+ struct {
+ char *word;
+ int token;
+ } keywords[] = {
+ { "BEGIN", BEG },
+ { "END", END },
+ { "ACCELERATORS", ACCELERATORS },
+ { "VIRTKEY", VIRTKEY },
+ { "ASCII", ASCII },
+ { "NOINVERT", NOINVERT },
+ { "SHIFT", SHIFT },
+ { "CONTROL", CONTROL },
+ { "ALT", ALT },
+ { "BITMAP", BITMAP },
+ { "CURSOR", CURSOR },
+ { "DIALOG", DIALOG },
+ { "DIALOGEX", DIALOGEX },
+ { "EXSTYLE", EXSTYLE },
+ { "CAPTION", CAPTION },
+ { "CLASS", CLASS },
+ { "STYLE", STYLE },
+ { "AUTO3STATE", AUTO3STATE },
+ { "AUTOCHECKBOX", AUTOCHECKBOX },
+ { "AUTORADIOBUTTON", AUTORADIOBUTTON },
+ { "CHECKBOX", CHECKBOX },
+ { "COMBOBOX", COMBOBOX },
+ { "CTEXT", CTEXT },
+ { "DEFPUSHBUTTON", DEFPUSHBUTTON },
+ { "EDITTEXT", EDITTEXT },
+ { "GROUPBOX", GROUPBOX },
+ { "LISTBOX", LISTBOX },
+ { "LTEXT", LTEXT },
+ { "PUSHBOX", PUSHBOX },
+ { "PUSHBUTTON", PUSHBUTTON },
+ { "RADIOBUTTON", RADIOBUTTON },
+ { "RTEXT", RTEXT },
+ { "SCROLLBAR", SCROLLBAR },
+ { "STATE3", STATE3 },
+ { "USERBUTTON", USERBUTTON },
+ { "BEDIT", BEDIT },
+ { "HEDIT", HEDIT },
+ { "IEDIT", IEDIT },
+ { "FONT", FONT },
+ { "ICON", ICON },
+ { "LANGUAGE", LANGUAGE },
+ { "CHARACTERISTICS", CHARACTERISTICS },
+ { "VERSION", VERSIONK },
+ { "MENU", MENU },
+ { "MENUEX", MENUEX },
+ { "MENUITEM", MENUITEM },
+ { "SEPARATOR", SEPARATOR },
+ { "POPUP", POPUP },
+ { "CHECKED", CHECKED },
+ { "GRAYED", GRAYED },
+ { "HELP", HELP },
+ { "INACTIVE", INACTIVE },
+ { "MENUBARBREAK", MENUBARBREAK },
+ { "MENUBREAK", MENUBREAK },
+ { "MESSAGETABLE", MESSAGETABLE },
+ { "RCDATA", RCDATA },
+ { "STRINGTABLE", STRINGTABLE },
+ { "VERSIONINFO", VERSIONINFO },
+ { "FILEVERSION", FILEVERSION },
+ { "PRODUCTVERSION", PRODUCTVERSION },
+ { "FILEFLAGSMASK", FILEFLAGSMASK },
+ { "FILEFLAGS", FILEFLAGS },
+ { "FILEOS", FILEOS },
+ { "FILETYPE", FILETYPE },
+ { "FILESUBTYPE", FILESUBTYPE },
+ { "VALUE", VALUE },
+ { "MOVEABLE", MOVEABLE },
+ { "FIXED", FIXED },
+ { "PURE", PURE },
+ { "IMPURE", IMPURE },
+ { "PRELOAD", PRELOAD },
+ { "LOADONCALL", LOADONCALL },
+ { "DISCARDABLE", DISCARDABLE },
+ { "NOT", NOT },
+ { NULL, STRING }
+ };
+
+ s = get_string (strlen (yytext) + 1);
+ for (i=0; keywords[i].word != NULL; i++)
+ if (strcasecmp (keywords[i].word, yytext) == 0)
+ break;
+ if (keywords[i].word == 0) {
+ strcpy (s, yytext);
+ yylval.s = s;
+ }
+ MAYBE_RETURN (keywords[i].token);
+}
+
"{" { MAYBE_RETURN (BEG); }
-"END" { MAYBE_RETURN (END); }
"}" { MAYBE_RETURN (END); }
-"ACCELERATORS" { MAYBE_RETURN (ACCELERATORS); }
-"VIRTKEY" { MAYBE_RETURN (VIRTKEY); }
-"ASCII" { MAYBE_RETURN (ASCII); }
-"NOINVERT" { MAYBE_RETURN (NOINVERT); }
-"SHIFT" { MAYBE_RETURN (SHIFT); }
-"CONTROL" { MAYBE_RETURN (CONTROL); }
-"ALT" { MAYBE_RETURN (ALT); }
-"BITMAP" { MAYBE_RETURN (BITMAP); }
-"CURSOR" { MAYBE_RETURN (CURSOR); }
-"DIALOG" { MAYBE_RETURN (DIALOG); }
-"DIALOGEX" { MAYBE_RETURN (DIALOGEX); }
-"EXSTYLE" { MAYBE_RETURN (EXSTYLE); }
-"CAPTION" { MAYBE_RETURN (CAPTION); }
-"CLASS" { MAYBE_RETURN (CLASS); }
-"STYLE" { MAYBE_RETURN (STYLE); }
-"AUTO3STATE" { MAYBE_RETURN (AUTO3STATE); }
-"AUTOCHECKBOX" { MAYBE_RETURN (AUTOCHECKBOX); }
-"AUTORADIOBUTTON" { MAYBE_RETURN (AUTORADIOBUTTON); }
-"CHECKBOX" { MAYBE_RETURN (CHECKBOX); }
-"COMBOBOX" { MAYBE_RETURN (COMBOBOX); }
-"CTEXT" { MAYBE_RETURN (CTEXT); }
-"DEFPUSHBUTTON" { MAYBE_RETURN (DEFPUSHBUTTON); }
-"EDITTEXT" { MAYBE_RETURN (EDITTEXT); }
-"GROUPBOX" { MAYBE_RETURN (GROUPBOX); }
-"LISTBOX" { MAYBE_RETURN (LISTBOX); }
-"LTEXT" { MAYBE_RETURN (LTEXT); }
-"PUSHBOX" { MAYBE_RETURN (PUSHBOX); }
-"PUSHBUTTON" { MAYBE_RETURN (PUSHBUTTON); }
-"RADIOBUTTON" { MAYBE_RETURN (RADIOBUTTON); }
-"RTEXT" { MAYBE_RETURN (RTEXT); }
-"SCROLLBAR" { MAYBE_RETURN (SCROLLBAR); }
-"STATE3" { MAYBE_RETURN (STATE3); }
-"USERBUTTON" { MAYBE_RETURN (USERBUTTON); }
-"BEDIT" { MAYBE_RETURN (BEDIT); }
-"HEDIT" { MAYBE_RETURN (HEDIT); }
-"IEDIT" { MAYBE_RETURN (IEDIT); }
-"FONT" { MAYBE_RETURN (FONT); }
-"ICON" { MAYBE_RETURN (ICON); }
-"LANGUAGE" { MAYBE_RETURN (LANGUAGE); }
-"CHARACTERISTICS" { MAYBE_RETURN (CHARACTERISTICS); }
-"VERSION" { MAYBE_RETURN (VERSIONK); }
-"MENU" { MAYBE_RETURN (MENU); }
-"MENUEX" { MAYBE_RETURN (MENUEX); }
-"MENUITEM" { MAYBE_RETURN (MENUITEM); }
-"SEPARATOR" { MAYBE_RETURN (SEPARATOR); }
-"POPUP" { MAYBE_RETURN (POPUP); }
-"CHECKED" { MAYBE_RETURN (CHECKED); }
-"GRAYED" { MAYBE_RETURN (GRAYED); }
-"HELP" { MAYBE_RETURN (HELP); }
-"INACTIVE" { MAYBE_RETURN (INACTIVE); }
-"MENUBARBREAK" { MAYBE_RETURN (MENUBARBREAK); }
-"MENUBREAK" { MAYBE_RETURN (MENUBREAK); }
-"MESSAGETABLE" { MAYBE_RETURN (MESSAGETABLE); }
-"RCDATA" { MAYBE_RETURN (RCDATA); }
-"STRINGTABLE" { MAYBE_RETURN (STRINGTABLE); }
-"VERSIONINFO" { MAYBE_RETURN (VERSIONINFO); }
-"FILEVERSION" { MAYBE_RETURN (FILEVERSION); }
-"PRODUCTVERSION" { MAYBE_RETURN (PRODUCTVERSION); }
-"FILEFLAGSMASK" { MAYBE_RETURN (FILEFLAGSMASK); }
-"FILEFLAGS" { MAYBE_RETURN (FILEFLAGS); }
-"FILEOS" { MAYBE_RETURN (FILEOS); }
-"FILETYPE" { MAYBE_RETURN (FILETYPE); }
-"FILESUBTYPE" { MAYBE_RETURN (FILESUBTYPE); }
-"VALUE" { MAYBE_RETURN (VALUE); }
-"MOVEABLE" { MAYBE_RETURN (MOVEABLE); }
-"FIXED" { MAYBE_RETURN (FIXED); }
-"PURE" { MAYBE_RETURN (PURE); }
-"IMPURE" { MAYBE_RETURN (IMPURE); }
-"PRELOAD" { MAYBE_RETURN (PRELOAD); }
-"LOADONCALL" { MAYBE_RETURN (LOADONCALL); }
-"DISCARDABLE" { MAYBE_RETURN (DISCARDABLE); }
-"NOT" { MAYBE_RETURN (NOT); }
"BLOCK"[ \t\n]*"\""[^\#\n]*"\"" {
char *s, *send;
@@ -217,21 +239,6 @@
}
}
-[A-Za-z][^ ,\t\r\n]* {
- char *s;
-
- /* I rejected comma in a string in order to
- handle VIRTKEY, CONTROL in an accelerator
- resource. This means that an unquoted
- file name can not contain a comma. I
- don't know what rc permits. */
-
- s = get_string (strlen (yytext) + 1);
- strcpy (s, yytext);
- yylval.s = s;
- MAYBE_RETURN (STRING);
- }
-
[\n] { ++rc_lineno; }
[ \t\r]+ { /* ignore whitespace */ }
. { MAYBE_RETURN (*yytext); }
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] |