diff options
Diffstat (limited to 'TVout/fbset/modes.l')
-rw-r--r-- | TVout/fbset/modes.l | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/TVout/fbset/modes.l b/TVout/fbset/modes.l new file mode 100644 index 0000000000..426eb5c1be --- /dev/null +++ b/TVout/fbset/modes.l @@ -0,0 +1,136 @@ + +/* + * Linux Frame Buffer Device Configuration + * + * © Copyright 1995-1998 by Geert Uytterhoeven + * (Geert.Uytterhoeven@cs.kuleuven.ac.be) + * + * -------------------------------------------------------------------------- + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of the Linux + * distribution for more details. + */ + + +%{ + +#define YYSTYPE long + +#include <string.h> +#include <stdlib.h> + +#include "fbset.h" +#include "modes.tab.h" + +struct keyword { + const char *name; + int token; + int value; +}; + +static struct keyword keywords[] = { + { "mode", MODE, 0 }, + { "geometry", GEOMETRY, 0 }, + { "timings", TIMINGS, 0 }, + { "hsync", HSYNC, 0 }, + { "vsync", VSYNC, 0 }, + { "csync", CSYNC, 0 }, + { "gsync", GSYNC, 0 }, + { "extsync", EXTSYNC, 0 }, + { "bcast", BCAST, 0 }, + { "laced", LACED, 0 }, + { "double", DOUBLE, 0 }, + { "rgba", RGBA, 0 }, + { "nonstd", NONSTD, 0 }, + { "accel", ACCEL, 0 }, + { "grayscale", GRAYSCALE, 0 }, + { "endmode", ENDMODE, 0 }, + { "low", POLARITY, LOW }, + { "high", POLARITY, HIGH }, + { "false", BOOLEAN, FALSE }, + { "true", BOOLEAN, TRUE }, + { "", -1, 0 } +}; + +int line = 1; + + +void yyerror(const char *s) +{ + Die("%s:%d: %s\n", Opt_modedb, line, s); +} + + +int yywrap(void) +{ + return 1; +} + + +static int FindToken(const char *s) +{ + int i; + + for (i = 0; keywords[i].token > 0; i++) + if (!strcasecmp(s, keywords[i].name)) { + yylval = keywords[i].value; + return keywords[i].token; + } + Die("%s:%d: Unknown keyword `%s'\n", Opt_modedb, line, s); +} + + +static const char *CopyString(const char *s) +{ + int len; + char *s2; + + len = strlen(s)-2; + if (!(s2 = malloc(len+1))) + Die("No memory\n"); + strncpy(s2, s+1, len); + s2[len] = '\0'; + return s2; +} + + +%} + +keyword [a-zA-Z][a-zA-Z0-9]* +number [0-9]* +string \"[^\"\n]*\" +comment \#([^\n]*) +space [ \t]+ +junk . + +%% + +{keyword} { + return FindToken(yytext); + } + +{number} { + yylval = strtoul(yytext, NULL, 0); + return NUMBER; + } + +{string} { + yylval = (unsigned long)CopyString(yytext); + return STRING; + } + +{comment}$ break; + +{space} break; + +\n { + line++; + break; + } + +{junk} { + Die("%s:%d: Invalid token `%s'\n", Opt_modedb, line, yytext); + } + +%% |