%{ #include #include #include #ifdef __cplusplus extern "C" { int yylex(void); } #endif #include "igdbg.yacc.h" #undef YY_INPUT #define YY_INPUT(b,r,ms) (r = my_yyinput(b,ms)) #define min(a,b) ((a)>(b)?b:a) extern YYSTYPE yylval; extern char *cmd_buf,*cmd_ptr,*cmd_end; static int my_yyinput(char *buf, int max_size); %} %% [\t ] ; /* ignore whitespace */ \n ; /* ignore enter */ exit | quit | help | verbose | dumppci | pipe | plane | port | fifo | overlay | onscreen | fence | stolen { yylval.string=strdup(yytext); return CMDHDR0; } regread | irq | estatus | cstatus | dumppgtt | dumpstat | inl { yylval.string=strdup(yytext); return CMDHDR1; } kkflip | regwrite | dumpcmd | dumpgtt | dumpfb | dumpfbl | msgread { yylval.string=strdup(yytext); return CMDHDR2; } fillfb | fillfbl | dumpring | msgwrite { yylval.string=strdup(yytext); return CMDHDR3; } pciread { yylval.string=strdup(yytext); return CMDHDR4; } pciwrite { yylval.string=strdup(yytext); return CMDHDR5; } [A-Za-z_][A-Za-z0-9_\.]* | \.[A-Za-z_0-9][A-Za-z0-9_\.]* { yylval.string=strdup(yytext); return FILENAME; } ([0-9]+)|(0x[a-fA-F0-9]+) { yylval.expr = strtoul(yytext,NULL,0);return NUMBER;} \<\< return LSHIFT; \>\> return RSHIFT; . return *yytext; %% static int my_yyinput(char *buf, int max_size) { int n = min(max_size, cmd_end - cmd_ptr); if (n>0) { memcpy(buf,cmd_ptr,n); cmd_ptr += n; } return n; }