diff options
author | Luke Shumaker <LukeShu@sbcglobal.net> | 2009-09-12 14:54:36 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2015-06-26 00:30:15 -0600 |
commit | 069d217aaa49e9dc285a264d2dce7eeb554a84e2 (patch) | |
tree | 7befe16917783cf7c87dd1bbbb3054ed3e62c5df /wrapper/plugin-parse.h | |
parent | 3ddffd0e4e0fde82dc7f3b8b6233ba24b5b184ef (diff) |
I'm getting tirede of working on this
Diffstat (limited to 'wrapper/plugin-parse.h')
-rw-r--r-- | wrapper/plugin-parse.h | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/wrapper/plugin-parse.h b/wrapper/plugin-parse.h new file mode 100644 index 0000000..c75b1fe --- /dev/null +++ b/wrapper/plugin-parse.h @@ -0,0 +1,143 @@ +/* wrapper/plugin-parse.c -- parse rvs plugin config files + system depends: <stdio.h> <error.h> + Copyright (C) 2009 Luke Shumaker + + This file is part of rvs. + + rvs 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, or (at your + option) any later version. + + rvs is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with rvs; see the file COPYING. + If not, write to the Free Software Foundation, + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ +#ifndef FILE_plugin_parse_h_SEEN +#define FILE_plugin_parse_h_SEEN + +#include <stdio.h> +#include <error.h> /* only used in `plugin_parse_escape' for `error' */ + +#include "rvs.h" +#include "plugins.h" + +void +plugin_parse_comment (FILE *file) +{ + char c; + while ( (c=getc(file)) != EOF ) { + if ( c == '\n' ) { + ungetc (c, file); + break; + } + } +} + +char +plugin_parse_escape(FILE *file) +{ + char c=getc(file); + switch (c) { + case 'n': + c = '\n'; + case '\\': + case '#': + case ':': + break; + default: + error(EXIT_FAILURE,0,"syntax error"); + break; + } + return c; +} + +char * +plugin_parse_depend (FILE *file) +{ + size_t nbytes = 10; + char *string = (char *)xmalloc(nbytes); + string[0]='\0'; + + char c[2] = " \0"; + char *cs = (char *)&c; + while ( (c[0]=getc(file)) != EOF ) { + if (c[0] == '\n') { + ungetc (c[0], file); + break; + } else { + switch (c[0]) { + case '\\': + c[0]=plugin_parse_escape(file); + stradds(&nbytes,&string,cs); + break; + case '#': + plugin_parse_comment(file); + break; + default: + stradds(&nbytes,&string,cs); + break; + } + } + } + return string; +} + +struct plugin_command * +plugin_parse (FILE *file) +{ + struct plugin_command *command=plugin_mk_command(); + + size_t nbytes = 10; + char *string = (char *)xmalloc(nbytes); + string[0]='\0'; + + char c[2] = " \0"; + char *cs = (char *)&c; + + if ( (c[0]=getc(file)) == EOF ) + return NULL; + else + ungetc (c[0], file); + + while ( (c[0]=getc(file)) != EOF ) { + if (c[0] == '\n') { + if (strlen(string)==0) { + xfree(command); + xfree(string); + command=plugin_parse(file); + } else { + command->name=string; + command->next=plugin_parse(file); + } + break; + } else { + switch (c[0]) { + case '\\': + c[0]=plugin_parse_escape(file); + stradds(&nbytes,&string,cs); + break; + case '#': + plugin_parse_comment(file); + break; + case ':': + command->depends=plugin_parse_depend( + file); + break; + default: + stradds(&nbytes,&string,cs); + break; + } + } + } + return command; +} + +#endif + |