X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgetline.c;h=0b7d4b6df1161a7047e249f430dcd1aab01f53e6;hb=843e8862e77bcc2813a944b6feb524ea6cc2ab6a;hp=b9f0a1d5b4c4b41f51397c95964ef031e284a409;hpb=205ac3afa4c2b19c85819d8695abf3975bb11807;p=pspp-builds.git diff --git a/src/getline.c b/src/getline.c index b9f0a1d5..0b7d4b6d 100644 --- a/src/getline.c +++ b/src/getline.c @@ -24,6 +24,7 @@ #include #include #include "alloc.h" +#include "command.h" #include "error.h" #include "filename.h" #include "lexer.h" @@ -43,6 +44,10 @@ int getl_welcomed; int getl_mode; int getl_prompt; +#if HAVE_LIBREADLINE +#include +#endif + #if HAVE_LIBHISTORY static char *history_file; @@ -57,6 +62,7 @@ extern int write_history (char *); #endif /* no readline/history.h */ #endif /* -lhistory */ + extern struct cmd_set cmd; static struct string getl_include_path; @@ -72,19 +78,25 @@ static int read_console (void); void getl_initialize (void) { - ds_create (NULL, &getl_include_path, + ds_create (&getl_include_path, fn_getenv_default ("STAT_INCLUDE_PATH", include_path)); - ds_init (NULL, &getl_buf, 256); + ds_init (&getl_buf, 256); +#if HAVE_LIBREADLINE + rl_completion_entry_function = pspp_completion_function; +#endif } /* Close getline. */ void getl_uninitialize (void) { + getl_close_all(); #if HAVE_LIBHISTORY && defined (unix) if (history_file) write_history (history_file); #endif + ds_destroy (&getl_buf); + ds_destroy (&getl_include_path); } /* Returns a string that represents the directory that the syntax file @@ -109,9 +121,9 @@ void getl_add_include_dir (const char *path) { if (ds_length (&getl_include_path)) - ds_putchar (&getl_include_path, PATH_DELIMITER); + ds_putc (&getl_include_path, PATH_DELIMITER); - ds_concat (&getl_include_path, path); + ds_puts (&getl_include_path, path); } /* Adds FN to the tail end of the list of script files to execute. @@ -154,7 +166,7 @@ getl_include (const char *fn) { char *cur_dir = getl_get_current_directory (); - real_fn = fn_search_path (fn, ds_value (&getl_include_path), cur_dir); + real_fn = fn_search_path (fn, ds_c_str (&getl_include_path), cur_dir); free (cur_dir); } @@ -273,7 +285,7 @@ handle_line_buffer (void) } while (s->cur_line == NULL); - ds_concat_buffer (&getl_buf, s->cur_line->line, s->cur_line->len); + ds_concat (&getl_buf, s->cur_line->line, s->cur_line->len); /* Advance pointers. */ s->cur_line = s->cur_line->next; @@ -309,7 +321,7 @@ getl_read_line (void) perform_DO_REPEAT_substitutions (); if (getl_head->print) tab_output_text (TAB_LEFT | TAT_FIX | TAT_PRINTF, "+%s", - ds_value (&getl_buf)); + ds_c_str (&getl_buf)); return 1; } @@ -326,7 +338,7 @@ getl_read_line (void) } } - if (!ds_getline (&getl_buf, s->f)) + if (!ds_gets (&getl_buf, s->f)) { if (ferror (s->f)) msg (ME, _("Reading `%s': %s."), s->fn, strerror (errno)); @@ -337,13 +349,13 @@ getl_read_line (void) ds_truncate (&getl_buf, ds_length (&getl_buf) - 1); if (get_echo()) - tab_output_text (TAB_LEFT | TAT_FIX, ds_value (&getl_buf)); + tab_output_text (TAB_LEFT | TAT_FIX, ds_c_str (&getl_buf)); getl_head->ln++; /* Allows shebang invocation: `#! /usr/local/bin/pspp'. */ - if (ds_value (&getl_buf)[0] == '#' - && ds_value (&getl_buf)[1] == '!') + if (ds_c_str (&getl_buf)[0] == '#' + && ds_c_str (&getl_buf)[1] == '!') continue; return 1; @@ -451,6 +463,7 @@ read_console (void) default: assert (0); + abort (); } line = readline (prompt); @@ -463,7 +476,7 @@ read_console (void) #endif ds_clear (&getl_buf); - ds_concat (&getl_buf, line); + ds_puts (&getl_buf, line); return 1; } @@ -476,7 +489,7 @@ read_console (void) fputs (getl_prompt ? get_cprompt() : get_prompt(), stdout); ds_clear (&getl_buf); - if (ds_getline (&getl_buf, stdin)) + if (ds_gets (&getl_buf, stdin)) return 1; if (ferror (stdin))