From: John Darrington Date: Sat, 20 Jan 2007 07:09:13 +0000 (+0000) Subject: Added syntax-string-source.[ch] X-Git-Tag: v0.6.0~582 X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e6ab905e28e6759c1f475bf47eaca92ee2c49334;p=pspp-builds.git Added syntax-string-source.[ch] --- diff --git a/src/language/syntax-string-source.c b/src/language/syntax-string-source.c new file mode 100644 index 00000000..85478bf7 --- /dev/null +++ b/src/language/syntax-string-source.c @@ -0,0 +1,125 @@ +/* + PSPPIRE --- A Graphical User Interface for PSPP + Copyright (C) 2007 Free Software Foundation + + 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. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ + + +#include +#include +#include +#include + +#include + +#include "syntax-string-source.h" + +struct syntax_string_source + { + struct getl_interface parent; + struct string buffer; + size_t posn; + }; + + +static bool +always_false (const struct getl_interface *i UNUSED) +{ + return false; +} + +/* Returns the name of the source */ +static const char * +name (const struct getl_interface *i UNUSED) +{ + return NULL; +} + + +/* Returns the location within the source */ +static int +location (const struct getl_interface *i UNUSED) +{ + return -1; +} + + +static void +close (struct getl_interface *i ) +{ + struct syntax_string_source *sss = (struct syntax_string_source *) i; + + ds_destroy (&sss->buffer); + + free (sss); +} + + + +static bool +read_single_line (struct getl_interface *i, + struct string *line, + enum getl_syntax *syntax_rules UNUSED) +{ + struct syntax_string_source *sss = (struct syntax_string_source *) i; + + size_t next; + + if ( sss->posn == -1) + return false; + + next = ss_find_char (ds_substr (&sss->buffer, + sss->posn, -1), '\n'); + + ds_assign_substring (line, + ds_substr (&sss->buffer, + sss->posn, + next) + ); + + if ( next != -1 ) + sss->posn += next + 1; /* + 1 to skip newline */ + else + sss->posn = -1; /* End of file encountered */ + + return true; +} + +struct getl_interface * +create_syntax_string_source (const char *format, ...) +{ + va_list args; + + struct syntax_string_source *sss = xzalloc (sizeof *sss); + + sss->posn = 0; + + ds_init_empty (&sss->buffer); + + va_start (args, format); + ds_put_vformat (&sss->buffer, format, args); + va_end (args); + + sss->parent.interactive = always_false; + sss->parent.close = close; + sss->parent.read = read_single_line; + + sss->parent.name = name; + sss->parent.location = location; + + + return (struct getl_interface *) sss; +} diff --git a/src/language/syntax-string-source.h b/src/language/syntax-string-source.h new file mode 100644 index 00000000..58742bc6 --- /dev/null +++ b/src/language/syntax-string-source.h @@ -0,0 +1,29 @@ +/* + PSPPIRE --- A Graphical User Interface for PSPP + Copyright (C) 2007 Free Software Foundation + + 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. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ + +#ifndef SYNTAX_STRING_SOURCE_H +#define SYNTAX_STRING_SOURCE_H + +struct getl_interface; + +struct getl_interface * +create_syntax_string_source (const char *fmt, ...); + + +#endif