/* PSPP - computes sample statistics.
Copyright (C) 1997-9, 2000 Free Software Foundation, Inc.
- Written by Ben Pfaff <blp@gnu.org>.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
#endif /* HAVE_READLINE */
-struct readln_source
+struct readln_source
{
struct getl_interface parent ;
#if HAVE_READLINE
rl_basic_word_break_characters = "\n";
-#ifdef unix
+ using_history ();
+ stifle_history (500);
if (history_file == NULL)
{
- history_file = tilde_expand ("~/.pspp_history");
- using_history ();
- read_history (history_file);
- stifle_history (500);
+ const char *home_dir = getenv ("HOME");
+ if (home_dir != NULL)
+ {
+ history_file = xasprintf ("%s/.pspp_history", home_dir);
+ read_history (history_file);
+ }
}
#endif
-#endif
}
/* Close getl. */
{
initialised = false;
-#if HAVE_READLINE && unix
+#if HAVE_READLINE
if (history_file != NULL && false == get_testing_mode() )
write_history (history_file);
clear_history ();
"conditions.\nThere is ABSOLUTELY NO WARRANTY for PSPP; type \"show "
"warranty.\" for details.\n", stdout);
puts (stat_version);
-
-#if HAVE_READLINE && unix
- if (history_file == NULL)
- {
- history_file = tilde_expand ("~/.pspp_history");
- using_history ();
- read_history (history_file);
- stifle_history (500);
- }
-#endif
+ readln_initialize ();
}
-
-
-
-
-
/* Gets a line from the user and stores it into LINE.
Prompts the user with PROMPT.
Returns true if successful, false at end of file.
#if HAVE_READLINE
char *string;
#endif
-
+
assert (initialised);
reset_msg_count ();
string = readline (prompt);
if (string == NULL)
return false;
- else
+ else
{
if (string[0])
add_history (string);
ds_assign_cstr (line, string);
free (string);
- return true;
+ return true;
}
#else
fputs (prompt, stdout);
fflush (stdout);
- if (ds_read_line (line, stdin))
+ if (ds_read_line (line, stdin))
{
ds_chomp (line, '\n');
return true;
static char **
complete_command_name (const char *text, int start, int end UNUSED)
{
- if (start == 0)
+ if (start == 0)
{
/* Complete command name at start of line. */
- return rl_completion_matches (text, command_generator);
+ return rl_completion_matches (text, command_generator);
}
- else
+ else
{
/* Otherwise don't do any completion. */
rl_attempted_completion_over = 1;
- return NULL;
+ return NULL;
}
}
dont_complete (const char *text UNUSED, int start UNUSED, int end UNUSED)
{
rl_attempted_completion_over = 1;
- return NULL;
+ return NULL;
}
/* If STATE is 0, returns the first command name matching TEXT.
Otherwise, returns the next command name matching TEXT.
Returns a null pointer when no matches are left. */
static char *
-command_generator (const char *text, int state)
-{
+command_generator (const char *text, int state)
+{
static const struct command *cmd;
const char *name;