X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fterminal%2Fread-line.c;h=72171ae785d964b7a2cf9146886a844e4e4a06f4;hb=b0edc00b3466899dab038e27452125315c859b37;hp=05b6150f85fdd4dd78be4ba2343054bd14e4d258;hpb=8381768f3394a907c621cb9acbb77b83f5cd4875;p=pspp diff --git a/src/ui/terminal/read-line.c b/src/ui/terminal/read-line.c index 05b6150f85..72171ae785 100644 --- a/src/ui/terminal/read-line.c +++ b/src/ui/terminal/read-line.c @@ -1,6 +1,5 @@ /* PSPP - computes sample statistics. Copyright (C) 1997-9, 2000 Free Software Foundation, Inc. - Written by Ben Pfaff . This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -52,7 +51,7 @@ static char **dont_complete (const char *, int, int); #endif /* HAVE_READLINE */ -struct readln_source +struct readln_source { struct getl_interface parent ; @@ -71,16 +70,18 @@ readln_initialize (void) #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. */ @@ -89,7 +90,7 @@ readln_uninitialize (void) { initialised = false; -#if HAVE_READLINE && unix +#if HAVE_READLINE if (history_file != NULL && false == get_testing_mode() ) write_history (history_file); clear_history (); @@ -128,23 +129,9 @@ welcome (void) "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. @@ -156,7 +143,7 @@ readln_read (struct string *line, enum prompt_style style) #if HAVE_READLINE char *string; #endif - + assert (initialised); reset_msg_count (); @@ -170,18 +157,18 @@ readln_read (struct string *line, enum prompt_style style) 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; @@ -223,16 +210,16 @@ static char *command_generator (const char *text, int state); 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; } } @@ -241,15 +228,15 @@ static char ** 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;