X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fline-buffer.c;h=0dcb70f94952bab00fdd98cf09db83f02d729d6e;hb=0fa141762183890ebd139ccd9264f08db9011539;hp=45d265ddcac1681fa9d33a972b560668ea6c434c;hpb=8444d8d47de5e5f8d076b6f43f73c2c29494031e;p=pspp-builds.git diff --git a/src/language/line-buffer.c b/src/language/line-buffer.c index 45d265dd..0dcb70f9 100644 --- a/src/language/line-buffer.c +++ b/src/language/line-buffer.c @@ -18,21 +18,26 @@ 02110-1301, USA. */ #include + #include -#include + #include #include #include -#include + +#include +#include +#include #include -#include -#include #include -#include +#include +#include +#include +#include #include -#include -#include +#include #include +#include #include "gettext.h" #define _(msgid) gettext (msgid) @@ -45,7 +50,7 @@ struct getl_source struct getl_source *next; /* Next file in list. */ /* Current location. */ - char *fn; /* Filename. */ + char *fn; /* File name. */ int ln; /* Line number. */ enum getl_source_type @@ -81,7 +86,7 @@ struct getl_source function; /* INTERACTIVE. */ - bool (*interactive) (struct string *line, const char *prompt); + bool (*interactive) (struct string *line, enum getl_prompt_style); } u; @@ -93,24 +98,24 @@ static struct getl_source *last_source; static struct string getl_include_path; -struct string getl_buf; static void close_source (void); static void init_prompts (void); static void uninit_prompts (void); -static const char *get_prompt (void); +static enum getl_prompt_style get_prompt_style (void); + /* Initialize getl. */ void getl_initialize (void) { - ds_create (&getl_include_path, - fn_getenv_default ("STAT_INCLUDE_PATH", include_path)); - ds_init (&getl_buf, 256); + ds_init_cstr (&getl_include_path, + fn_getenv_default ("STAT_INCLUDE_PATH", include_path)); init_prompts (); } + /* Delete everything from the include path. */ void getl_clear_include_path (void) @@ -123,9 +128,9 @@ void getl_add_include_dir (const char *path) { if (ds_length (&getl_include_path)) - ds_putc (&getl_include_path, PATH_DELIMITER); + ds_put_char (&getl_include_path, ':'); - ds_puts (&getl_include_path, path); + ds_put_cstr (&getl_include_path, path); } /* Appends source S to the list of source files. */ @@ -210,7 +215,7 @@ create_function_source (bool (*read) (struct string *line, /* Creates an interactive source with the given FUNCTION. */ static struct getl_source * create_interactive_source (bool (*function) (struct string *line, - const char *prompt)) + enum getl_prompt_style)) { struct getl_source *s = xmalloc (sizeof *s); s->fn = NULL; @@ -228,15 +233,15 @@ getl_append_syntax_file (const char *fn) append_source (create_syntax_file_source (fn)); } -/* Inserts the given file with filename FN into the current file after - the current line. */ +/* Inserts the given file with name FN into the current file + after the current line. */ void getl_include_syntax_file (const char *fn) { if (cur_source != NULL) { - char *found_fn = fn_search_path (fn, ds_c_str (&getl_include_path), - fn_dirname (cur_source->fn)); + char *found_fn = fn_search_path (fn, ds_cstr (&getl_include_path), + fn_dir_name (cur_source->fn)); if (found_fn != NULL) { include_source (create_syntax_file_source (found_fn)); @@ -293,7 +298,7 @@ getl_include_function (bool (*read) (struct string *line, obtained or false at end of file. */ void getl_append_interactive (bool (*function) (struct string *line, - const char *prompt)) + enum getl_prompt_style)) { append_source (create_interactive_source (function)); } @@ -372,7 +377,8 @@ getl_location (const char **fn, int *ln) } /* File locator stack. */ -static const struct file_locator **file_loc; +static const struct msg_locator **file_loc; + static int nfile_loc, mfile_loc; /* Close getl. */ @@ -381,7 +387,6 @@ getl_uninitialize (void) { while (cur_source != NULL) close_source (); - ds_destroy (&getl_buf); ds_destroy (&getl_include_path); free(file_loc); file_loc = NULL; @@ -394,7 +399,7 @@ getl_uninitialize (void) /* Pushes F onto the stack of file locations. */ void -err_push_file_locator (const struct file_locator *f) +msg_push_msg_locator (const struct msg_locator *loc) { if (nfile_loc >= mfile_loc) { @@ -406,28 +411,28 @@ err_push_file_locator (const struct file_locator *f) file_loc = xnrealloc (file_loc, mfile_loc, sizeof *file_loc); } - file_loc[nfile_loc++] = f; + file_loc[nfile_loc++] = loc; } /* Pops F off the stack of file locations. Argument F is only used for verification that that is actually the item on top of the stack. */ void -err_pop_file_locator (const struct file_locator *f) +msg_pop_msg_locator (const struct msg_locator *loc) { - assert (nfile_loc >= 0 && file_loc[nfile_loc - 1] == f); + assert (nfile_loc >= 0 && file_loc[nfile_loc - 1] == loc); nfile_loc--; } -/* Puts the current file and line number in F, or NULL and -1 if +/* Puts the current file and line number into LOC, or NULL and -1 if none. */ void -err_location (struct file_locator *f) +get_msg_location (struct msg_locator *loc) { if (nfile_loc) - *f = *file_loc[nfile_loc - 1]; + *loc = *file_loc[nfile_loc - 1]; else - getl_location (&f->filename, &f->line_number); + getl_location (&loc->file_name, &loc->line_number); } /* Reads a line from syntax file source S into LINE. @@ -438,7 +443,7 @@ read_syntax_file (struct string *line, struct getl_source *s) /* Open file, if not yet opened. */ if (s->u.syntax_file == NULL) { - msg (VM (1), _("%s: Opening as syntax file."), s->fn); + verbose_msg (1, _("opening \"%s\" as syntax file"), s->fn); s->u.syntax_file = fn_open (s->fn, "r"); if (s->u.syntax_file == NULL) @@ -453,7 +458,7 @@ read_syntax_file (struct string *line, struct getl_source *s) do { s->ln++; - if (!ds_gets (line, s->u.syntax_file)) + if (!ds_read_line (line, s->u.syntax_file)) { if (ferror (s->u.syntax_file)) msg (ME, _("Reading `%s': %s."), s->fn, strerror (errno)); @@ -461,11 +466,11 @@ read_syntax_file (struct string *line, struct getl_source *s) } ds_chomp (line, '\n'); } - while (s->ln == 1 && !memcmp (ds_c_str (line), "#!", 2)); + while (s->ln == 1 && !memcmp (ds_cstr (line), "#!", 2)); /* Echo to listing file, if configured to do so. */ if (get_echo ()) - tab_output_text (TAB_LEFT | TAB_FIX, ds_c_str (line)); + tab_output_text (TAB_LEFT | TAB_FIX, ds_cstr (line)); return true; } @@ -485,10 +490,10 @@ read_line_from_source (struct string *line, struct getl_source *s) case FUNCTION: return s->u.function.read (line, &s->fn, &s->ln, s->u.function.aux); case INTERACTIVE: - return s->u.interactive (line, get_prompt ()); + return s->u.interactive (line, get_prompt_style ()); } - abort (); + NOT_REACHED (); } /* Reads a single line into LINE. @@ -496,7 +501,7 @@ read_line_from_source (struct string *line, struct getl_source *s) If INTERACTIVE is non-null, then when true is returned *INTERACTIVE will be set to true if the line was obtained interactively, false otherwise. */ -static bool +bool do_read_line (struct string *line, bool *interactive) { while (cur_source != NULL) @@ -519,16 +524,6 @@ do_read_line (struct string *line, bool *interactive) return false; } -/* Reads a single line into getl_buf. - Returns true when a line has been read, false at end of input. - If INTERACTIVE is non-null, then when true is returned - *INTERACTIVE will be set to true if the line was obtained - interactively, false otherwise. */ -bool -getl_read_line (bool *interactive) -{ - return do_read_line (&getl_buf, interactive); -} /* Current prompts in each style. */ static char *prompts[GETL_PROMPT_CNT]; @@ -585,8 +580,8 @@ getl_set_prompt_style (enum getl_prompt_style style) } /* Returns the current prompt. */ -static const char * -get_prompt (void) +static enum getl_prompt_style +get_prompt_style (void) { - return prompts[current_style]; + return current_style; }