%option noinput
%option nounput
%{
+ #include "menu.h"
#include "parser.h"
+ #include "hexfile.h"
+
+#undef YY_INPUT
+#define YY_INPUT(buf,result,max_size) result = menu_get_input(buf, max_size);
+
%}
+
+digit [0-9]
+alpha [a-fA-F]
+hextail ({digit}|{alpha}){1,8}
+hex1 0[xX]{hextail}
+hex2 ${hextail}
+
%%
-[0-9]+ { yylval = atoi(yytext); return NUMBER;}
+{hex1} { yylval.number = asciihex2int(yytext); return NUMBER; }
+{hex2} { yylval.number = asciihex2int(&yytext[1]); return NUMBER; }
+[0-9]+ { yylval.number = atoi(yytext); return NUMBER; }
[h?] return TOK_HELP;
sb return TOK_SB;
rb return TOK_RB;
dp return TOK_DP;
dr return TOK_DR;
r return TOK_RUN;
-pc return TOK_PC;
-all return TOK_ALL;
-me return TOK_MOD_EXT;
-mi return TOK_MOD_INT;
-mp return TOK_MOD_PROG;
-mr return TOK_MOD_REG;
q return TOK_QUIT;
s return TOK_STEP;
u return TOK_UNASM;
+we return TOK_MOD_EXT;
+wi return TOK_MOD_INT;
+wp return TOK_MOD_PROG;
+wr return TOK_MOD_REG;
z return TOK_RST;
zt return TOK_RST_TIMER;
+all return TOK_ALL;
+[a-z0-9]+ { yylval.string = strdup(yytext); return WORD; }
[\n] return TOK_ENTER;
[ \t]+ { /* ignore whitespace */ }
-. { return yytext[0];}
+. { return yytext[0]; }
%%