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., 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA. */
#include <config.h>
#include "getline.h"
-#include <assert.h>
+#include "error.h"
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include "alloc.h"
+#include "command.h"
#include "error.h"
#include "filename.h"
#include "lexer.h"
int getl_mode;
int getl_prompt;
+#if HAVE_LIBREADLINE
+#include <readline/readline.h>
+#endif
+
#if HAVE_LIBHISTORY
static char *history_file;
#endif /* no readline/history.h */
#endif /* -lhistory */
+
extern struct cmd_set cmd;
static struct string getl_include_path;
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
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.
{
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);
}
}
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;
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;
}
}
}
- 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));
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;
default:
assert (0);
+ abort ();
}
line = readline (prompt);
#endif
ds_clear (&getl_buf);
- ds_concat (&getl_buf, line);
+ ds_puts (&getl_buf, line);
return 1;
}
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))