Mercurial > hg > xemacs-beta
diff netinstall/inilex.l @ 448:3078fd1074e8 r21-2-39
Import from CVS: tag r21-2-39
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:38:25 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/netinstall/inilex.l Mon Aug 13 11:38:25 2007 +0200 @@ -0,0 +1,119 @@ +%{ +/* + * Copyright (c) 2000, Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * A copy of the GNU General Public License can be found at + * http://www.gnu.org/ + * + * Written by DJ Delorie <dj@cygnus.com> + * + */ + +/* tokenize the setup.ini files. We parse a string which we've + previously downloaded. The program must call ini_init() to specify + that string. */ + +#include "win32.h" +#include <string.h> +#include <stdlib.h> + +#include "ini.h" +#include "iniparse.h" + +#define YY_INPUT(buf,result,max_size) { result = ini_getchar(buf, max_size); } + +static int ini_getchar(char *buf, int max_size); +static void ignore_line (); + +%} + +/*%option debug */ +%option noyywrap +%option yylineno +%option never-interactive + +STR [a-zA-Z0-9_./-]+ + +%% + +\"[^"]*\" { yylval = strdup (yytext+1); + yylval[strlen (yylval)-1] = 0; + return STRING; } + +"setup-timestamp:" return SETUP_TIMESTAMP; +"setup-version:" return SETUP_VERSION; +"version:" return VERSION; +"install:" return INSTALL; +"type:" return TYPE; +"source:" return SOURCE; +"sdesc:" return SDESC; +"ldesc:" return LDESC; + +^{STR}":" ignore_line (); + +"[curr]" return T_CURR; +"[test]" return T_TEST; +"[exp]" return T_TEST; +"[prev]" return T_PREV; +"["{STR}"]" return T_UNKNOWN; + +{STR} { yylval = strdup (yytext); + return STRING; } + +[ \t\r]+ /* do nothing */ + +"#".*\n /* ignore comments */ + +\n { return yytext[0]; } +. { return yytext[0]; } + +%% + +static char *input_string = 0; +static char *end_input_string; + +void +ini_init(char *string) +{ + input_string = string; + end_input_string = input_string + strlen(input_string); +} + +static int +ini_getchar(char *buf, int max_size) +{ + if (input_string) + { + int avail = end_input_string - input_string; + if (avail == 0) + { + input_string = end_input_string = 0; + return 0; + } + if (avail > max_size) + avail = max_size; + memcpy(buf, input_string, avail); + input_string += avail; + return avail; + } + else + return 0; +} + +static void +ignore_line () +{ + char c; + while (c = input ()) + { + if (c == EOF) + return; + if (c == '\n') + return; + } +}