# HG changeset patch # User Michael Goffioul # Date 1373077541 14400 # Node ID c2864508b524fb17a2c76c2706ab5654f0ab7ee2 # Parent 21f598a028ece812f84a855fbe658ee3d25843c5 [MSVC] enable readline compilation diff -r 21f598a028ec -r c2864508b524 dist-files.mk --- a/dist-files.mk Fri Jul 05 22:24:48 2013 -0400 +++ b/dist-files.mk Fri Jul 05 22:25:41 2013 -0400 @@ -293,6 +293,7 @@ msvc-nettle-1.patch \ msvc-ncurses-1.patch \ msvc-qhull-1.patch \ + msvc-readline-1.patch \ msvc-suitesparse-1.patch \ msvc-tiff-1.patch \ msys-bash.mk \ diff -r 21f598a028ec -r c2864508b524 src/msvc-readline-1.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/msvc-readline-1.patch Fri Jul 05 22:25:41 2013 -0400 @@ -0,0 +1,1619 @@ +diff -ur readline-6.2-orig/bind.c readline-6.2-new/bind.c +--- readline-6.2-orig/bind.c 2011-02-11 10:50:09 -0500 ++++ readline-6.2-new/bind.c 2013-07-05 21:41:35 -0400 +@@ -65,7 +65,7 @@ + #include "rlshell.h" + #include "xmalloc.h" + +-#if !defined (strchr) && !defined (__STDC__) ++#if !defined (strchr) && !defined (__STDC__) && !defined (_MSC_VER) + extern char *strchr (), *strrchr (); + #endif /* !strchr && !__STDC__ */ + +diff -ur readline-6.2-orig/complete.c readline-6.2-new/complete.c +--- readline-6.2-orig/complete.c 2011-01-16 15:32:57 -0500 ++++ readline-6.2-new/complete.c 2013-07-05 21:41:35 -0400 +@@ -64,7 +64,7 @@ + #include "xmalloc.h" + #include "rlprivate.h" + +-#ifdef __STDC__ ++#if defined (__STDC__) || defined (_MSC_VER) + typedef int QSFUNC (const void *, const void *); + #else + typedef int QSFUNC (); +diff -ur readline-6.2-orig/config.h.in readline-6.2-new/config.h.in +--- readline-6.2-orig/config.h.in 2009-03-10 10:57:45 -0400 ++++ readline-6.2-new/config.h.in 2013-07-05 21:41:35 -0400 +@@ -259,7 +259,7 @@ + # define TERMIOS_MISSING + #endif + +-#if defined (__STDC__) && defined (HAVE_STDARG_H) ++#if (defined (__STDC__) || defined (_MSC_VER)) && defined (HAVE_STDARG_H) + # define PREFER_STDARG + # define USE_VARARGS + #else +diff -ur readline-6.2-orig/display.c readline-6.2-new/display.c +--- readline-6.2-orig/display.c 2013-07-05 21:40:58 -0400 ++++ readline-6.2-new/display.c 2013-07-05 21:55:45 -0400 +@@ -60,7 +60,7 @@ + #define hStdout GetStdHandle(STD_OUTPUT_HANDLE) + #endif + +-#if !defined (strchr) && !defined (__STDC__) ++#if !defined (strchr) && !defined (__STDC__) && !defined (_MSC_VER) + extern char *strchr (), *strrchr (); + #endif /* !strchr && !__STDC__ */ + +diff -ur readline-6.2-orig/examples/Makefile.in readline-6.2-new/examples/Makefile.in +--- readline-6.2-orig/examples/Makefile.in 2010-12-28 15:55:32 -0500 ++++ readline-6.2-new/examples/Makefile.in 2013-07-05 21:41:36 -0400 +@@ -96,13 +96,13 @@ + -rmdir $(DESTDIR)$(installdir) + + rl$(EXEEXT): rl.o $(READLINE_LIB) +- $(PURIFY) $(CC) $(LDFLAGS) -o $@ rl.o $(READLINE_LIB) $(TERMCAP_LIB) ++ $(PURIFY) $(CC) $(LDFLAGS) -o $@ rl.o $(READLINE_LIB) $(TERMCAP_LIB) -lgetopt + + rlcat$(EXEEXT): rlcat.o $(READLINE_LIB) +- $(PURIFY) $(CC) $(LDFLAGS) -o $@ rlcat.o $(READLINE_LIB) $(TERMCAP_LIB) ++ $(PURIFY) $(CC) $(LDFLAGS) -o $@ rlcat.o $(READLINE_LIB) $(TERMCAP_LIB) -lgetopt + + rlevent$(EXEEXT): rlevent.o $(READLINE_LIB) +- $(PURIFY) $(CC) $(LDFLAGS) -o $@ rlevent.o $(READLINE_LIB) $(TERMCAP_LIB) ++ $(PURIFY) $(CC) $(LDFLAGS) -o $@ rlevent.o $(READLINE_LIB) $(TERMCAP_LIB) -lgetopt + + fileman$(EXEEXT): fileman.o $(READLINE_LIB) + $(PURIFY) $(CC) $(LDFLAGS) -o $@ fileman.o $(READLINE_LIB) $(TERMCAP_LIB) +diff -ur readline-6.2-orig/examples/fileman.c readline-6.2-new/examples/fileman.c +--- readline-6.2-orig/examples/fileman.c 2009-01-04 14:32:33 -0500 ++++ readline-6.2-new/examples/fileman.c 2013-07-05 21:41:36 -0400 +@@ -248,6 +248,8 @@ + + /* Tell the completer that we want a crack first. */ + rl_attempted_completion_function = fileman_completion; ++ ++ return 0; + } + + /* Attempt to complete on the contents of TEXT. START and END bound the +@@ -470,6 +472,8 @@ + fprintf (stderr, + "%s: Too dangerous for me to distribute. Write it yourself.\n", + caller); ++ ++ return 0; + } + + /* Return non-zero if ARG is a valid argument for CALLER, else print +diff -ur readline-6.2-orig/examples/rlevent.c readline-6.2-new/examples/rlevent.c +--- readline-6.2-orig/examples/rlevent.c 2009-01-06 12:04:26 -0500 ++++ readline-6.2-new/examples/rlevent.c 2013-07-05 21:41:36 -0400 +@@ -50,10 +50,16 @@ + extern int optind; + extern char *optarg; + +-#if !defined (strchr) && !defined (__STDC__) ++#if !defined (strchr) && !defined (__STDC__) && !defined (_MSC_VER) + extern char *strrchr(); + #endif + ++#ifdef _MSC_VER ++# define WIN32_LEAN_AND_MEAN ++# include ++# define sleep(x) Sleep((x)*1000) ++#endif ++ + static char *progname; + static char *deftext; + +diff -ur readline-6.2-orig/funmap.c readline-6.2-new/funmap.c +--- readline-6.2-orig/funmap.c 2010-05-30 18:32:37 -0400 ++++ readline-6.2-new/funmap.c 2013-07-05 21:41:36 -0400 +@@ -40,7 +40,7 @@ + + #include "xmalloc.h" + +-#ifdef __STDC__ ++#if defined (__STDC__) || defined (_MSC_VER) + typedef int QSFUNC (const void *, const void *); + #else + typedef int QSFUNC (); +diff -ur readline-6.2-orig/histlib.h readline-6.2-new/histlib.h +--- readline-6.2-orig/histlib.h 2009-01-04 14:32:33 -0500 ++++ readline-6.2-new/histlib.h 2013-07-05 21:41:36 -0400 +@@ -51,7 +51,7 @@ + #endif + + #ifndef member +-# ifndef strchr ++# if !defined (strchr) && !defined (_MSC_VER) + extern char *strchr (); + # endif + #define member(c, s) ((c) ? ((char *)strchr ((s), (c)) != (char *)NULL) : 0) +diff -ur readline-6.2-orig/history.c readline-6.2-new/history.c +--- readline-6.2-orig/history.c 2010-07-25 17:39:41 -0400 ++++ readline-6.2-new/history.c 2013-07-05 21:41:36 -0400 +@@ -248,6 +248,9 @@ + + t = (time_t) time ((time_t *)0); + #if defined (HAVE_VSNPRINTF) /* assume snprintf if vsnprintf exists */ ++# if defined (_MSC_VER) && !defined (snprintf) ++# define snprintf _snprintf ++# endif + snprintf (ts, sizeof (ts) - 1, "X%lu", (unsigned long) t); + #else + sprintf (ts, "X%lu", (unsigned long) t); +diff -ur readline-6.2-orig/history.h readline-6.2-new/history.h +--- readline-6.2-orig/history.h 2009-01-04 14:32:33 -0500 ++++ readline-6.2-new/history.h 2013-07-05 21:41:36 -0400 +@@ -68,93 +68,93 @@ + + /* Begin a session in which the history functions might be used. This + just initializes the interactive variables. */ +-extern void using_history PARAMS((void)); ++READLINE_API void using_history PARAMS((void)); + + /* Return the current HISTORY_STATE of the history. */ +-extern HISTORY_STATE *history_get_history_state PARAMS((void)); ++READLINE_API HISTORY_STATE *history_get_history_state PARAMS((void)); + + /* Set the state of the current history array to STATE. */ +-extern void history_set_history_state PARAMS((HISTORY_STATE *)); ++READLINE_API void history_set_history_state PARAMS((HISTORY_STATE *)); + + /* Manage the history list. */ + + /* Place STRING at the end of the history list. + The associated data field (if any) is set to NULL. */ +-extern void add_history PARAMS((const char *)); ++READLINE_API void add_history PARAMS((const char *)); + + /* Change the timestamp associated with the most recent history entry to + STRING. */ +-extern void add_history_time PARAMS((const char *)); ++READLINE_API void add_history_time PARAMS((const char *)); + + /* A reasonably useless function, only here for completeness. WHICH + is the magic number that tells us which element to delete. The + elements are numbered from 0. */ +-extern HIST_ENTRY *remove_history PARAMS((int)); ++READLINE_API HIST_ENTRY *remove_history PARAMS((int)); + + /* Free the history entry H and return any application-specific data + associated with it. */ +-extern histdata_t free_history_entry PARAMS((HIST_ENTRY *)); ++READLINE_API histdata_t free_history_entry PARAMS((HIST_ENTRY *)); + + /* Make the history entry at WHICH have LINE and DATA. This returns + the old entry so you can dispose of the data. In the case of an + invalid WHICH, a NULL pointer is returned. */ +-extern HIST_ENTRY *replace_history_entry PARAMS((int, const char *, histdata_t)); ++READLINE_API HIST_ENTRY *replace_history_entry PARAMS((int, const char *, histdata_t)); + + /* Clear the history list and start over. */ +-extern void clear_history PARAMS((void)); ++READLINE_API void clear_history PARAMS((void)); + + /* Stifle the history list, remembering only MAX number of entries. */ +-extern void stifle_history PARAMS((int)); ++READLINE_API void stifle_history PARAMS((int)); + + /* Stop stifling the history. This returns the previous amount the + history was stifled by. The value is positive if the history was + stifled, negative if it wasn't. */ +-extern int unstifle_history PARAMS((void)); ++READLINE_API int unstifle_history PARAMS((void)); + + /* Return 1 if the history is stifled, 0 if it is not. */ +-extern int history_is_stifled PARAMS((void)); ++READLINE_API int history_is_stifled PARAMS((void)); + + /* Information about the history list. */ + + /* Return a NULL terminated array of HIST_ENTRY which is the current input + history. Element 0 of this list is the beginning of time. If there + is no history, return NULL. */ +-extern HIST_ENTRY **history_list PARAMS((void)); ++READLINE_API HIST_ENTRY **history_list PARAMS((void)); + + /* Returns the number which says what history element we are now + looking at. */ +-extern int where_history PARAMS((void)); ++READLINE_API int where_history PARAMS((void)); + + /* Return the history entry at the current position, as determined by + history_offset. If there is no entry there, return a NULL pointer. */ +-extern HIST_ENTRY *current_history PARAMS((void)); ++READLINE_API HIST_ENTRY *current_history PARAMS((void)); + + /* Return the history entry which is logically at OFFSET in the history + array. OFFSET is relative to history_base. */ +-extern HIST_ENTRY *history_get PARAMS((int)); ++READLINE_API HIST_ENTRY *history_get PARAMS((int)); + + /* Return the timestamp associated with the HIST_ENTRY * passed as an + argument */ +-extern time_t history_get_time PARAMS((HIST_ENTRY *)); ++READLINE_API time_t history_get_time PARAMS((HIST_ENTRY *)); + + /* Return the number of bytes that the primary history entries are using. + This just adds up the lengths of the_history->lines. */ +-extern int history_total_bytes PARAMS((void)); ++READLINE_API int history_total_bytes PARAMS((void)); + + /* Moving around the history list. */ + + /* Set the position in the history list to POS. */ +-extern int history_set_pos PARAMS((int)); ++READLINE_API int history_set_pos PARAMS((int)); + + /* Back up history_offset to the previous history entry, and return + a pointer to that entry. If there is no previous entry, return + a NULL pointer. */ +-extern HIST_ENTRY *previous_history PARAMS((void)); ++READLINE_API HIST_ENTRY *previous_history PARAMS((void)); + + /* Move history_offset forward to the next item in the input_history, + and return the a pointer to that entry. If there is no next entry, + return a NULL pointer. */ +-extern HIST_ENTRY *next_history PARAMS((void)); ++READLINE_API HIST_ENTRY *next_history PARAMS((void)); + + /* Searching the history list. */ + +@@ -164,45 +164,45 @@ + current_history () is the history entry, and the value of this function + is the offset in the line of that history entry that the string was + found in. Otherwise, nothing is changed, and a -1 is returned. */ +-extern int history_search PARAMS((const char *, int)); ++READLINE_API int history_search PARAMS((const char *, int)); + + /* Search the history for STRING, starting at history_offset. + The search is anchored: matching lines must begin with string. + DIRECTION is as in history_search(). */ +-extern int history_search_prefix PARAMS((const char *, int)); ++READLINE_API int history_search_prefix PARAMS((const char *, int)); + + /* Search for STRING in the history list, starting at POS, an + absolute index into the list. DIR, if negative, says to search + backwards from POS, else forwards. + Returns the absolute index of the history element where STRING + was found, or -1 otherwise. */ +-extern int history_search_pos PARAMS((const char *, int, int)); ++READLINE_API int history_search_pos PARAMS((const char *, int, int)); + + /* Managing the history file. */ + + /* Add the contents of FILENAME to the history list, a line at a time. + If FILENAME is NULL, then read from ~/.history. Returns 0 if + successful, or errno if not. */ +-extern int read_history PARAMS((const char *)); ++READLINE_API int read_history PARAMS((const char *)); + + /* Read a range of lines from FILENAME, adding them to the history list. + Start reading at the FROM'th line and end at the TO'th. If FROM + is zero, start at the beginning. If TO is less than FROM, read + until the end of the file. If FILENAME is NULL, then read from + ~/.history. Returns 0 if successful, or errno if not. */ +-extern int read_history_range PARAMS((const char *, int, int)); ++READLINE_API int read_history_range PARAMS((const char *, int, int)); + + /* Write the current history to FILENAME. If FILENAME is NULL, + then write the history list to ~/.history. Values returned + are as in read_history (). */ +-extern int write_history PARAMS((const char *)); ++READLINE_API int write_history PARAMS((const char *)); + + /* Append NELEMENT entries to FILENAME. The entries appended are from + the end of the list minus NELEMENTs up to the end of the list. */ +-extern int append_history PARAMS((int, const char *)); ++READLINE_API int append_history PARAMS((int, const char *)); + + /* Truncate the history file, leaving only the last NLINES lines. */ +-extern int history_truncate_file PARAMS((const char *, int)); ++READLINE_API int history_truncate_file PARAMS((const char *, int)); + + /* History expansion. */ + +@@ -218,12 +218,12 @@ + + If an error ocurred in expansion, then OUTPUT contains a descriptive + error message. */ +-extern int history_expand PARAMS((char *, char **)); ++READLINE_API int history_expand PARAMS((char *, char **)); + + /* Extract a string segment consisting of the FIRST through LAST + arguments present in STRING. Arguments are broken up as in + the shell. */ +-extern char *history_arg_extract PARAMS((int, int, const char *)); ++READLINE_API char *history_arg_extract PARAMS((int, int, const char *)); + + /* Return the text of the history event beginning at the current + offset into STRING. Pass STRING with *INDEX equal to the +@@ -231,33 +231,33 @@ + DELIMITING_QUOTE is a character that is allowed to end the string + specification for what to search for in addition to the normal + characters `:', ` ', `\t', `\n', and sometimes `?'. */ +-extern char *get_history_event PARAMS((const char *, int *, int)); ++READLINE_API char *get_history_event PARAMS((const char *, int *, int)); + + /* Return an array of tokens, much as the shell might. The tokens are + parsed out of STRING. */ +-extern char **history_tokenize PARAMS((const char *)); ++READLINE_API char **history_tokenize PARAMS((const char *)); + + /* Exported history variables. */ +-extern int history_base; +-extern int history_length; +-extern int history_max_entries; +-extern char history_expansion_char; +-extern char history_subst_char; +-extern char *history_word_delimiters; +-extern char history_comment_char; +-extern char *history_no_expand_chars; +-extern char *history_search_delimiter_chars; +-extern int history_quotes_inhibit_expansion; ++READLINE_API int history_base; ++READLINE_API int history_length; ++READLINE_API int history_max_entries; ++READLINE_API char history_expansion_char; ++READLINE_API char history_subst_char; ++READLINE_API char *history_word_delimiters; ++READLINE_API char history_comment_char; ++READLINE_API char *history_no_expand_chars; ++READLINE_API char *history_search_delimiter_chars; ++READLINE_API int history_quotes_inhibit_expansion; + +-extern int history_write_timestamps; ++READLINE_API int history_write_timestamps; + + /* Backwards compatibility */ +-extern int max_input_history; ++READLINE_API int max_input_history; + + /* If set, this function is called to decide whether or not a particular + history expansion should be treated as a special case for the calling + application and not expanded. */ +-extern rl_linebuf_func_t *history_inhibit_expansion_function; ++READLINE_API rl_linebuf_func_t *history_inhibit_expansion_function; + + #ifdef __cplusplus + } +diff -ur readline-6.2-orig/keymaps.h readline-6.2-new/keymaps.h +--- readline-6.2-orig/keymaps.h 2010-07-06 21:27:26 -0400 ++++ readline-6.2-new/keymaps.h 2013-07-05 21:41:36 -0400 +@@ -60,35 +60,35 @@ + #define ISKMAP 1 + #define ISMACR 2 + +-extern KEYMAP_ENTRY_ARRAY emacs_standard_keymap, emacs_meta_keymap, emacs_ctlx_keymap; +-extern KEYMAP_ENTRY_ARRAY vi_insertion_keymap, vi_movement_keymap; ++READLINE_API KEYMAP_ENTRY_ARRAY emacs_standard_keymap, emacs_meta_keymap, emacs_ctlx_keymap; ++READLINE_API KEYMAP_ENTRY_ARRAY vi_insertion_keymap, vi_movement_keymap; + + /* Return a new, empty keymap. + Free it with free() when you are done. */ +-extern Keymap rl_make_bare_keymap PARAMS((void)); ++READLINE_API Keymap rl_make_bare_keymap PARAMS((void)); + + /* Return a new keymap which is a copy of MAP. */ +-extern Keymap rl_copy_keymap PARAMS((Keymap)); ++READLINE_API Keymap rl_copy_keymap PARAMS((Keymap)); + + /* Return a new keymap with the printing characters bound to rl_insert, + the lowercase Meta characters bound to run their equivalents, and + the Meta digits bound to produce numeric arguments. */ +-extern Keymap rl_make_keymap PARAMS((void)); ++READLINE_API Keymap rl_make_keymap PARAMS((void)); + + /* Free the storage associated with a keymap. */ +-extern void rl_discard_keymap PARAMS((Keymap)); ++READLINE_API void rl_discard_keymap PARAMS((Keymap)); + + /* These functions actually appear in bind.c */ + + /* Return the keymap corresponding to a given name. Names look like + `emacs' or `emacs-meta' or `vi-insert'. */ +-extern Keymap rl_get_keymap_by_name PARAMS((const char *)); ++READLINE_API Keymap rl_get_keymap_by_name PARAMS((const char *)); + + /* Return the current keymap. */ +-extern Keymap rl_get_keymap PARAMS((void)); ++READLINE_API Keymap rl_get_keymap PARAMS((void)); + + /* Set the current keymap to MAP. */ +-extern void rl_set_keymap PARAMS((Keymap)); ++READLINE_API void rl_set_keymap PARAMS((Keymap)); + + #ifdef __cplusplus + } +diff -ur readline-6.2-orig/parens.c readline-6.2-new/parens.c +--- readline-6.2-orig/parens.c 2009-04-19 13:12:06 -0400 ++++ readline-6.2-new/parens.c 2013-07-05 21:41:36 -0400 +@@ -46,7 +46,7 @@ + # include + #endif /* !HAVE_STRING_H */ + +-#if !defined (strchr) && !defined (__STDC__) ++#if !defined (strchr) && !defined (__STDC__) && !defined (_MSC_VER) + extern char *strchr (), *strrchr (); + #endif /* !strchr && !__STDC__ */ + +diff -ur readline-6.2-orig/readline.h readline-6.2-new/readline.h +--- readline-6.2-orig/readline.h 2011-01-16 15:33:09 -0500 ++++ readline-6.2-new/readline.h 2013-07-05 21:41:36 -0400 +@@ -62,7 +62,7 @@ + } UNDO_LIST; + + /* The current undo list for RL_LINE_BUFFER. */ +-extern UNDO_LIST *rl_undo_list; ++READLINE_API UNDO_LIST *rl_undo_list; + + /* The data structure for mapping textual names to code addresses. */ + typedef struct _funmap { +@@ -70,7 +70,7 @@ + rl_command_func_t *function; + } FUNMAP; + +-extern FUNMAP **funmap; ++READLINE_API FUNMAP **funmap; + + /* **************************************************************** */ + /* */ +@@ -79,199 +79,199 @@ + /* **************************************************************** */ + + /* Bindable commands for numeric arguments. */ +-extern int rl_digit_argument PARAMS((int, int)); +-extern int rl_universal_argument PARAMS((int, int)); ++READLINE_API int rl_digit_argument PARAMS((int, int)); ++READLINE_API int rl_universal_argument PARAMS((int, int)); + + /* Bindable commands for moving the cursor. */ +-extern int rl_forward_byte PARAMS((int, int)); +-extern int rl_forward_char PARAMS((int, int)); +-extern int rl_forward PARAMS((int, int)); +-extern int rl_backward_byte PARAMS((int, int)); +-extern int rl_backward_char PARAMS((int, int)); +-extern int rl_backward PARAMS((int, int)); +-extern int rl_beg_of_line PARAMS((int, int)); +-extern int rl_end_of_line PARAMS((int, int)); +-extern int rl_forward_word PARAMS((int, int)); +-extern int rl_backward_word PARAMS((int, int)); +-extern int rl_refresh_line PARAMS((int, int)); +-extern int rl_clear_screen PARAMS((int, int)); +-extern int rl_skip_csi_sequence PARAMS((int, int)); +-extern int rl_arrow_keys PARAMS((int, int)); ++READLINE_API int rl_forward_byte PARAMS((int, int)); ++READLINE_API int rl_forward_char PARAMS((int, int)); ++READLINE_API int rl_forward PARAMS((int, int)); ++READLINE_API int rl_backward_byte PARAMS((int, int)); ++READLINE_API int rl_backward_char PARAMS((int, int)); ++READLINE_API int rl_backward PARAMS((int, int)); ++READLINE_API int rl_beg_of_line PARAMS((int, int)); ++READLINE_API int rl_end_of_line PARAMS((int, int)); ++READLINE_API int rl_forward_word PARAMS((int, int)); ++READLINE_API int rl_backward_word PARAMS((int, int)); ++READLINE_API int rl_refresh_line PARAMS((int, int)); ++READLINE_API int rl_clear_screen PARAMS((int, int)); ++READLINE_API int rl_skip_csi_sequence PARAMS((int, int)); ++READLINE_API int rl_arrow_keys PARAMS((int, int)); + + /* Bindable commands for inserting and deleting text. */ +-extern int rl_insert PARAMS((int, int)); +-extern int rl_quoted_insert PARAMS((int, int)); +-extern int rl_tab_insert PARAMS((int, int)); +-extern int rl_newline PARAMS((int, int)); +-extern int rl_do_lowercase_version PARAMS((int, int)); +-extern int rl_rubout PARAMS((int, int)); +-extern int rl_delete PARAMS((int, int)); +-extern int rl_rubout_or_delete PARAMS((int, int)); +-extern int rl_delete_horizontal_space PARAMS((int, int)); +-extern int rl_delete_or_show_completions PARAMS((int, int)); +-extern int rl_insert_comment PARAMS((int, int)); ++READLINE_API int rl_insert PARAMS((int, int)); ++READLINE_API int rl_quoted_insert PARAMS((int, int)); ++READLINE_API int rl_tab_insert PARAMS((int, int)); ++READLINE_API int rl_newline PARAMS((int, int)); ++READLINE_API int rl_do_lowercase_version PARAMS((int, int)); ++READLINE_API int rl_rubout PARAMS((int, int)); ++READLINE_API int rl_delete PARAMS((int, int)); ++READLINE_API int rl_rubout_or_delete PARAMS((int, int)); ++READLINE_API int rl_delete_horizontal_space PARAMS((int, int)); ++READLINE_API int rl_delete_or_show_completions PARAMS((int, int)); ++READLINE_API int rl_insert_comment PARAMS((int, int)); + + /* Bindable commands for changing case. */ +-extern int rl_upcase_word PARAMS((int, int)); +-extern int rl_downcase_word PARAMS((int, int)); +-extern int rl_capitalize_word PARAMS((int, int)); ++READLINE_API int rl_upcase_word PARAMS((int, int)); ++READLINE_API int rl_downcase_word PARAMS((int, int)); ++READLINE_API int rl_capitalize_word PARAMS((int, int)); + + /* Bindable commands for transposing characters and words. */ +-extern int rl_transpose_words PARAMS((int, int)); +-extern int rl_transpose_chars PARAMS((int, int)); ++READLINE_API int rl_transpose_words PARAMS((int, int)); ++READLINE_API int rl_transpose_chars PARAMS((int, int)); + + /* Bindable commands for searching within a line. */ +-extern int rl_char_search PARAMS((int, int)); +-extern int rl_backward_char_search PARAMS((int, int)); ++READLINE_API int rl_char_search PARAMS((int, int)); ++READLINE_API int rl_backward_char_search PARAMS((int, int)); + + /* Bindable commands for readline's interface to the command history. */ +-extern int rl_beginning_of_history PARAMS((int, int)); +-extern int rl_end_of_history PARAMS((int, int)); +-extern int rl_get_next_history PARAMS((int, int)); +-extern int rl_get_previous_history PARAMS((int, int)); ++READLINE_API int rl_beginning_of_history PARAMS((int, int)); ++READLINE_API int rl_end_of_history PARAMS((int, int)); ++READLINE_API int rl_get_next_history PARAMS((int, int)); ++READLINE_API int rl_get_previous_history PARAMS((int, int)); + + /* Bindable commands for managing the mark and region. */ +-extern int rl_set_mark PARAMS((int, int)); +-extern int rl_exchange_point_and_mark PARAMS((int, int)); ++READLINE_API int rl_set_mark PARAMS((int, int)); ++READLINE_API int rl_exchange_point_and_mark PARAMS((int, int)); + + /* Bindable commands to set the editing mode (emacs or vi). */ +-extern int rl_vi_editing_mode PARAMS((int, int)); +-extern int rl_emacs_editing_mode PARAMS((int, int)); ++READLINE_API int rl_vi_editing_mode PARAMS((int, int)); ++READLINE_API int rl_emacs_editing_mode PARAMS((int, int)); + + /* Bindable commands to change the insert mode (insert or overwrite) */ +-extern int rl_overwrite_mode PARAMS((int, int)); ++READLINE_API int rl_overwrite_mode PARAMS((int, int)); + + /* Bindable commands for managing key bindings. */ +-extern int rl_re_read_init_file PARAMS((int, int)); +-extern int rl_dump_functions PARAMS((int, int)); +-extern int rl_dump_macros PARAMS((int, int)); +-extern int rl_dump_variables PARAMS((int, int)); ++READLINE_API int rl_re_read_init_file PARAMS((int, int)); ++READLINE_API int rl_dump_functions PARAMS((int, int)); ++READLINE_API int rl_dump_macros PARAMS((int, int)); ++READLINE_API int rl_dump_variables PARAMS((int, int)); + + /* Bindable commands for word completion. */ +-extern int rl_complete PARAMS((int, int)); +-extern int rl_possible_completions PARAMS((int, int)); +-extern int rl_insert_completions PARAMS((int, int)); +-extern int rl_old_menu_complete PARAMS((int, int)); +-extern int rl_menu_complete PARAMS((int, int)); +-extern int rl_backward_menu_complete PARAMS((int, int)); ++READLINE_API int rl_complete PARAMS((int, int)); ++READLINE_API int rl_possible_completions PARAMS((int, int)); ++READLINE_API int rl_insert_completions PARAMS((int, int)); ++READLINE_API int rl_old_menu_complete PARAMS((int, int)); ++READLINE_API int rl_menu_complete PARAMS((int, int)); ++READLINE_API int rl_backward_menu_complete PARAMS((int, int)); + + /* Bindable commands for killing and yanking text, and managing the kill ring. */ +-extern int rl_kill_word PARAMS((int, int)); +-extern int rl_backward_kill_word PARAMS((int, int)); +-extern int rl_kill_line PARAMS((int, int)); +-extern int rl_backward_kill_line PARAMS((int, int)); +-extern int rl_kill_full_line PARAMS((int, int)); +-extern int rl_unix_word_rubout PARAMS((int, int)); +-extern int rl_unix_filename_rubout PARAMS((int, int)); +-extern int rl_unix_line_discard PARAMS((int, int)); +-extern int rl_copy_region_to_kill PARAMS((int, int)); +-extern int rl_kill_region PARAMS((int, int)); +-extern int rl_copy_forward_word PARAMS((int, int)); +-extern int rl_copy_backward_word PARAMS((int, int)); +-extern int rl_yank PARAMS((int, int)); +-extern int rl_yank_pop PARAMS((int, int)); +-extern int rl_yank_nth_arg PARAMS((int, int)); +-extern int rl_yank_last_arg PARAMS((int, int)); ++READLINE_API int rl_kill_word PARAMS((int, int)); ++READLINE_API int rl_backward_kill_word PARAMS((int, int)); ++READLINE_API int rl_kill_line PARAMS((int, int)); ++READLINE_API int rl_backward_kill_line PARAMS((int, int)); ++READLINE_API int rl_kill_full_line PARAMS((int, int)); ++READLINE_API int rl_unix_word_rubout PARAMS((int, int)); ++READLINE_API int rl_unix_filename_rubout PARAMS((int, int)); ++READLINE_API int rl_unix_line_discard PARAMS((int, int)); ++READLINE_API int rl_copy_region_to_kill PARAMS((int, int)); ++READLINE_API int rl_kill_region PARAMS((int, int)); ++READLINE_API int rl_copy_forward_word PARAMS((int, int)); ++READLINE_API int rl_copy_backward_word PARAMS((int, int)); ++READLINE_API int rl_yank PARAMS((int, int)); ++READLINE_API int rl_yank_pop PARAMS((int, int)); ++READLINE_API int rl_yank_nth_arg PARAMS((int, int)); ++READLINE_API int rl_yank_last_arg PARAMS((int, int)); + /* Not available unless __CYGWIN__ is defined. */ + #ifdef __CYGWIN__ +-extern int rl_paste_from_clipboard PARAMS((int, int)); ++READLINE_API int rl_paste_from_clipboard PARAMS((int, int)); + #endif + + /* Bindable commands for incremental searching. */ +-extern int rl_reverse_search_history PARAMS((int, int)); +-extern int rl_forward_search_history PARAMS((int, int)); ++READLINE_API int rl_reverse_search_history PARAMS((int, int)); ++READLINE_API int rl_forward_search_history PARAMS((int, int)); + + /* Bindable keyboard macro commands. */ +-extern int rl_start_kbd_macro PARAMS((int, int)); +-extern int rl_end_kbd_macro PARAMS((int, int)); +-extern int rl_call_last_kbd_macro PARAMS((int, int)); ++READLINE_API int rl_start_kbd_macro PARAMS((int, int)); ++READLINE_API int rl_end_kbd_macro PARAMS((int, int)); ++READLINE_API int rl_call_last_kbd_macro PARAMS((int, int)); + + /* Bindable undo commands. */ +-extern int rl_revert_line PARAMS((int, int)); +-extern int rl_undo_command PARAMS((int, int)); ++READLINE_API int rl_revert_line PARAMS((int, int)); ++READLINE_API int rl_undo_command PARAMS((int, int)); + + /* Bindable tilde expansion commands. */ +-extern int rl_tilde_expand PARAMS((int, int)); ++READLINE_API int rl_tilde_expand PARAMS((int, int)); + + /* Bindable terminal control commands. */ +-extern int rl_restart_output PARAMS((int, int)); +-extern int rl_stop_output PARAMS((int, int)); ++READLINE_API int rl_restart_output PARAMS((int, int)); ++READLINE_API int rl_stop_output PARAMS((int, int)); + + /* Miscellaneous bindable commands. */ +-extern int rl_abort PARAMS((int, int)); +-extern int rl_tty_status PARAMS((int, int)); ++READLINE_API int rl_abort PARAMS((int, int)); ++READLINE_API int rl_tty_status PARAMS((int, int)); + + /* Bindable commands for incremental and non-incremental history searching. */ +-extern int rl_history_search_forward PARAMS((int, int)); +-extern int rl_history_search_backward PARAMS((int, int)); +-extern int rl_noninc_forward_search PARAMS((int, int)); +-extern int rl_noninc_reverse_search PARAMS((int, int)); +-extern int rl_noninc_forward_search_again PARAMS((int, int)); +-extern int rl_noninc_reverse_search_again PARAMS((int, int)); ++READLINE_API int rl_history_search_forward PARAMS((int, int)); ++READLINE_API int rl_history_search_backward PARAMS((int, int)); ++READLINE_API int rl_noninc_forward_search PARAMS((int, int)); ++READLINE_API int rl_noninc_reverse_search PARAMS((int, int)); ++READLINE_API int rl_noninc_forward_search_again PARAMS((int, int)); ++READLINE_API int rl_noninc_reverse_search_again PARAMS((int, int)); + + /* Bindable command used when inserting a matching close character. */ +-extern int rl_insert_close PARAMS((int, int)); ++READLINE_API int rl_insert_close PARAMS((int, int)); + + /* Not available unless READLINE_CALLBACKS is defined. */ +-extern void rl_callback_handler_install PARAMS((const char *, rl_vcpfunc_t *)); +-extern void rl_callback_read_char PARAMS((void)); +-extern void rl_callback_handler_remove PARAMS((void)); ++READLINE_API void rl_callback_handler_install PARAMS((const char *, rl_vcpfunc_t *)); ++READLINE_API void rl_callback_read_char PARAMS((void)); ++READLINE_API void rl_callback_handler_remove PARAMS((void)); + + /* Things for vi mode. Not available unless readline is compiled -DVI_MODE. */ + /* VI-mode bindable commands. */ +-extern int rl_vi_redo PARAMS((int, int)); +-extern int rl_vi_undo PARAMS((int, int)); +-extern int rl_vi_yank_arg PARAMS((int, int)); +-extern int rl_vi_fetch_history PARAMS((int, int)); +-extern int rl_vi_search_again PARAMS((int, int)); +-extern int rl_vi_search PARAMS((int, int)); +-extern int rl_vi_complete PARAMS((int, int)); +-extern int rl_vi_tilde_expand PARAMS((int, int)); +-extern int rl_vi_prev_word PARAMS((int, int)); +-extern int rl_vi_next_word PARAMS((int, int)); +-extern int rl_vi_end_word PARAMS((int, int)); +-extern int rl_vi_insert_beg PARAMS((int, int)); +-extern int rl_vi_append_mode PARAMS((int, int)); +-extern int rl_vi_append_eol PARAMS((int, int)); +-extern int rl_vi_eof_maybe PARAMS((int, int)); +-extern int rl_vi_insertion_mode PARAMS((int, int)); +-extern int rl_vi_insert_mode PARAMS((int, int)); +-extern int rl_vi_movement_mode PARAMS((int, int)); +-extern int rl_vi_arg_digit PARAMS((int, int)); +-extern int rl_vi_change_case PARAMS((int, int)); +-extern int rl_vi_put PARAMS((int, int)); +-extern int rl_vi_column PARAMS((int, int)); +-extern int rl_vi_delete_to PARAMS((int, int)); +-extern int rl_vi_change_to PARAMS((int, int)); +-extern int rl_vi_yank_to PARAMS((int, int)); +-extern int rl_vi_rubout PARAMS((int, int)); +-extern int rl_vi_delete PARAMS((int, int)); +-extern int rl_vi_back_to_indent PARAMS((int, int)); +-extern int rl_vi_first_print PARAMS((int, int)); +-extern int rl_vi_char_search PARAMS((int, int)); +-extern int rl_vi_match PARAMS((int, int)); +-extern int rl_vi_change_char PARAMS((int, int)); +-extern int rl_vi_subst PARAMS((int, int)); +-extern int rl_vi_overstrike PARAMS((int, int)); +-extern int rl_vi_overstrike_delete PARAMS((int, int)); +-extern int rl_vi_replace PARAMS((int, int)); +-extern int rl_vi_set_mark PARAMS((int, int)); +-extern int rl_vi_goto_mark PARAMS((int, int)); ++READLINE_API int rl_vi_redo PARAMS((int, int)); ++READLINE_API int rl_vi_undo PARAMS((int, int)); ++READLINE_API int rl_vi_yank_arg PARAMS((int, int)); ++READLINE_API int rl_vi_fetch_history PARAMS((int, int)); ++READLINE_API int rl_vi_search_again PARAMS((int, int)); ++READLINE_API int rl_vi_search PARAMS((int, int)); ++READLINE_API int rl_vi_complete PARAMS((int, int)); ++READLINE_API int rl_vi_tilde_expand PARAMS((int, int)); ++READLINE_API int rl_vi_prev_word PARAMS((int, int)); ++READLINE_API int rl_vi_next_word PARAMS((int, int)); ++READLINE_API int rl_vi_end_word PARAMS((int, int)); ++READLINE_API int rl_vi_insert_beg PARAMS((int, int)); ++READLINE_API int rl_vi_append_mode PARAMS((int, int)); ++READLINE_API int rl_vi_append_eol PARAMS((int, int)); ++READLINE_API int rl_vi_eof_maybe PARAMS((int, int)); ++READLINE_API int rl_vi_insertion_mode PARAMS((int, int)); ++READLINE_API int rl_vi_insert_mode PARAMS((int, int)); ++READLINE_API int rl_vi_movement_mode PARAMS((int, int)); ++READLINE_API int rl_vi_arg_digit PARAMS((int, int)); ++READLINE_API int rl_vi_change_case PARAMS((int, int)); ++READLINE_API int rl_vi_put PARAMS((int, int)); ++READLINE_API int rl_vi_column PARAMS((int, int)); ++READLINE_API int rl_vi_delete_to PARAMS((int, int)); ++READLINE_API int rl_vi_change_to PARAMS((int, int)); ++READLINE_API int rl_vi_yank_to PARAMS((int, int)); ++READLINE_API int rl_vi_rubout PARAMS((int, int)); ++READLINE_API int rl_vi_delete PARAMS((int, int)); ++READLINE_API int rl_vi_back_to_indent PARAMS((int, int)); ++READLINE_API int rl_vi_first_print PARAMS((int, int)); ++READLINE_API int rl_vi_char_search PARAMS((int, int)); ++READLINE_API int rl_vi_match PARAMS((int, int)); ++READLINE_API int rl_vi_change_char PARAMS((int, int)); ++READLINE_API int rl_vi_subst PARAMS((int, int)); ++READLINE_API int rl_vi_overstrike PARAMS((int, int)); ++READLINE_API int rl_vi_overstrike_delete PARAMS((int, int)); ++READLINE_API int rl_vi_replace PARAMS((int, int)); ++READLINE_API int rl_vi_set_mark PARAMS((int, int)); ++READLINE_API int rl_vi_goto_mark PARAMS((int, int)); + + /* VI-mode utility functions. */ +-extern int rl_vi_check PARAMS((void)); +-extern int rl_vi_domove PARAMS((int, int *)); +-extern int rl_vi_bracktype PARAMS((int)); ++READLINE_API int rl_vi_check PARAMS((void)); ++READLINE_API int rl_vi_domove PARAMS((int, int *)); ++READLINE_API int rl_vi_bracktype PARAMS((int)); + +-extern void rl_vi_start_inserting PARAMS((int, int, int)); ++READLINE_API void rl_vi_start_inserting PARAMS((int, int, int)); + + /* VI-mode pseudo-bindable commands, used as utility functions. */ +-extern int rl_vi_fWord PARAMS((int, int)); +-extern int rl_vi_bWord PARAMS((int, int)); +-extern int rl_vi_eWord PARAMS((int, int)); +-extern int rl_vi_fword PARAMS((int, int)); +-extern int rl_vi_bword PARAMS((int, int)); +-extern int rl_vi_eword PARAMS((int, int)); ++READLINE_API int rl_vi_fWord PARAMS((int, int)); ++READLINE_API int rl_vi_bWord PARAMS((int, int)); ++READLINE_API int rl_vi_eWord PARAMS((int, int)); ++READLINE_API int rl_vi_fword PARAMS((int, int)); ++READLINE_API int rl_vi_bword PARAMS((int, int)); ++READLINE_API int rl_vi_eword PARAMS((int, int)); + + /* **************************************************************** */ + /* */ +@@ -281,190 +281,190 @@ + + /* Readline functions. */ + /* Read a line of input. Prompt with PROMPT. A NULL PROMPT means none. */ +-extern char *readline PARAMS((const char *)); ++READLINE_API char *readline PARAMS((const char *)); + +-extern int rl_set_prompt PARAMS((const char *)); +-extern int rl_expand_prompt PARAMS((char *)); ++READLINE_API int rl_set_prompt PARAMS((const char *)); ++READLINE_API int rl_expand_prompt PARAMS((char *)); + +-extern int rl_initialize PARAMS((void)); ++READLINE_API int rl_initialize PARAMS((void)); + + /* Undocumented; unused by readline */ +-extern int rl_discard_argument PARAMS((void)); ++READLINE_API int rl_discard_argument PARAMS((void)); + + /* Utility functions to bind keys to readline commands. */ +-extern int rl_add_defun PARAMS((const char *, rl_command_func_t *, int)); +-extern int rl_bind_key PARAMS((int, rl_command_func_t *)); +-extern int rl_bind_key_in_map PARAMS((int, rl_command_func_t *, Keymap)); +-extern int rl_unbind_key PARAMS((int)); +-extern int rl_unbind_key_in_map PARAMS((int, Keymap)); +-extern int rl_bind_key_if_unbound PARAMS((int, rl_command_func_t *)); +-extern int rl_bind_key_if_unbound_in_map PARAMS((int, rl_command_func_t *, Keymap)); +-extern int rl_unbind_function_in_map PARAMS((rl_command_func_t *, Keymap)); +-extern int rl_unbind_command_in_map PARAMS((const char *, Keymap)); +-extern int rl_bind_keyseq PARAMS((const char *, rl_command_func_t *)); +-extern int rl_bind_keyseq_in_map PARAMS((const char *, rl_command_func_t *, Keymap)); +-extern int rl_bind_keyseq_if_unbound PARAMS((const char *, rl_command_func_t *)); +-extern int rl_bind_keyseq_if_unbound_in_map PARAMS((const char *, rl_command_func_t *, Keymap)); +-extern int rl_generic_bind PARAMS((int, const char *, char *, Keymap)); ++READLINE_API int rl_add_defun PARAMS((const char *, rl_command_func_t *, int)); ++READLINE_API int rl_bind_key PARAMS((int, rl_command_func_t *)); ++READLINE_API int rl_bind_key_in_map PARAMS((int, rl_command_func_t *, Keymap)); ++READLINE_API int rl_unbind_key PARAMS((int)); ++READLINE_API int rl_unbind_key_in_map PARAMS((int, Keymap)); ++READLINE_API int rl_bind_key_if_unbound PARAMS((int, rl_command_func_t *)); ++READLINE_API int rl_bind_key_if_unbound_in_map PARAMS((int, rl_command_func_t *, Keymap)); ++READLINE_API int rl_unbind_function_in_map PARAMS((rl_command_func_t *, Keymap)); ++READLINE_API int rl_unbind_command_in_map PARAMS((const char *, Keymap)); ++READLINE_API int rl_bind_keyseq PARAMS((const char *, rl_command_func_t *)); ++READLINE_API int rl_bind_keyseq_in_map PARAMS((const char *, rl_command_func_t *, Keymap)); ++READLINE_API int rl_bind_keyseq_if_unbound PARAMS((const char *, rl_command_func_t *)); ++READLINE_API int rl_bind_keyseq_if_unbound_in_map PARAMS((const char *, rl_command_func_t *, Keymap)); ++READLINE_API int rl_generic_bind PARAMS((int, const char *, char *, Keymap)); + +-extern char *rl_variable_value PARAMS((const char *)); +-extern int rl_variable_bind PARAMS((const char *, const char *)); ++READLINE_API char *rl_variable_value PARAMS((const char *)); ++READLINE_API int rl_variable_bind PARAMS((const char *, const char *)); + + /* Backwards compatibility, use rl_bind_keyseq_in_map instead. */ +-extern int rl_set_key PARAMS((const char *, rl_command_func_t *, Keymap)); ++READLINE_API int rl_set_key PARAMS((const char *, rl_command_func_t *, Keymap)); + + /* Backwards compatibility, use rl_generic_bind instead. */ +-extern int rl_macro_bind PARAMS((const char *, const char *, Keymap)); ++READLINE_API int rl_macro_bind PARAMS((const char *, const char *, Keymap)); + + /* Undocumented in the texinfo manual; not really useful to programs. */ +-extern int rl_translate_keyseq PARAMS((const char *, char *, int *)); +-extern char *rl_untranslate_keyseq PARAMS((int)); ++READLINE_API int rl_translate_keyseq PARAMS((const char *, char *, int *)); ++READLINE_API char *rl_untranslate_keyseq PARAMS((int)); + +-extern rl_command_func_t *rl_named_function PARAMS((const char *)); +-extern rl_command_func_t *rl_function_of_keyseq PARAMS((const char *, Keymap, int *)); ++READLINE_API rl_command_func_t *rl_named_function PARAMS((const char *)); ++READLINE_API rl_command_func_t *rl_function_of_keyseq PARAMS((const char *, Keymap, int *)); + +-extern void rl_list_funmap_names PARAMS((void)); +-extern char **rl_invoking_keyseqs_in_map PARAMS((rl_command_func_t *, Keymap)); +-extern char **rl_invoking_keyseqs PARAMS((rl_command_func_t *)); ++READLINE_API void rl_list_funmap_names PARAMS((void)); ++READLINE_API char **rl_invoking_keyseqs_in_map PARAMS((rl_command_func_t *, Keymap)); ++READLINE_API char **rl_invoking_keyseqs PARAMS((rl_command_func_t *)); + +-extern void rl_function_dumper PARAMS((int)); +-extern void rl_macro_dumper PARAMS((int)); +-extern void rl_variable_dumper PARAMS((int)); ++READLINE_API void rl_function_dumper PARAMS((int)); ++READLINE_API void rl_macro_dumper PARAMS((int)); ++READLINE_API void rl_variable_dumper PARAMS((int)); + +-extern int rl_read_init_file PARAMS((const char *)); +-extern int rl_parse_and_bind PARAMS((char *)); ++READLINE_API int rl_read_init_file PARAMS((const char *)); ++READLINE_API int rl_parse_and_bind PARAMS((char *)); + + /* Functions for manipulating keymaps. */ +-extern Keymap rl_make_bare_keymap PARAMS((void)); +-extern Keymap rl_copy_keymap PARAMS((Keymap)); +-extern Keymap rl_make_keymap PARAMS((void)); +-extern void rl_discard_keymap PARAMS((Keymap)); +- +-extern Keymap rl_get_keymap_by_name PARAMS((const char *)); +-extern char *rl_get_keymap_name PARAMS((Keymap)); +-extern void rl_set_keymap PARAMS((Keymap)); +-extern Keymap rl_get_keymap PARAMS((void)); ++READLINE_API Keymap rl_make_bare_keymap PARAMS((void)); ++READLINE_API Keymap rl_copy_keymap PARAMS((Keymap)); ++READLINE_API Keymap rl_make_keymap PARAMS((void)); ++READLINE_API void rl_discard_keymap PARAMS((Keymap)); ++ ++READLINE_API Keymap rl_get_keymap_by_name PARAMS((const char *)); ++READLINE_API char *rl_get_keymap_name PARAMS((Keymap)); ++READLINE_API void rl_set_keymap PARAMS((Keymap)); ++READLINE_API Keymap rl_get_keymap PARAMS((void)); + /* Undocumented; used internally only. */ +-extern void rl_set_keymap_from_edit_mode PARAMS((void)); +-extern char *rl_get_keymap_name_from_edit_mode PARAMS((void)); ++READLINE_API void rl_set_keymap_from_edit_mode PARAMS((void)); ++READLINE_API char *rl_get_keymap_name_from_edit_mode PARAMS((void)); + + /* Functions for manipulating the funmap, which maps command names to functions. */ +-extern int rl_add_funmap_entry PARAMS((const char *, rl_command_func_t *)); +-extern const char **rl_funmap_names PARAMS((void)); ++READLINE_API int rl_add_funmap_entry PARAMS((const char *, rl_command_func_t *)); ++READLINE_API const char **rl_funmap_names PARAMS((void)); + /* Undocumented, only used internally -- there is only one funmap, and this + function may be called only once. */ +-extern void rl_initialize_funmap PARAMS((void)); ++READLINE_API void rl_initialize_funmap PARAMS((void)); + + /* Utility functions for managing keyboard macros. */ +-extern void rl_push_macro_input PARAMS((char *)); ++READLINE_API void rl_push_macro_input PARAMS((char *)); + + /* Functions for undoing, from undo.c */ +-extern void rl_add_undo PARAMS((enum undo_code, int, int, char *)); +-extern void rl_free_undo_list PARAMS((void)); +-extern int rl_do_undo PARAMS((void)); +-extern int rl_begin_undo_group PARAMS((void)); +-extern int rl_end_undo_group PARAMS((void)); +-extern int rl_modifying PARAMS((int, int)); ++READLINE_API void rl_add_undo PARAMS((enum undo_code, int, int, char *)); ++READLINE_API void rl_free_undo_list PARAMS((void)); ++READLINE_API int rl_do_undo PARAMS((void)); ++READLINE_API int rl_begin_undo_group PARAMS((void)); ++READLINE_API int rl_end_undo_group PARAMS((void)); ++READLINE_API int rl_modifying PARAMS((int, int)); + + /* Functions for redisplay. */ +-extern void rl_redisplay PARAMS((void)); +-extern int rl_on_new_line PARAMS((void)); +-extern int rl_on_new_line_with_prompt PARAMS((void)); +-extern int rl_forced_update_display PARAMS((void)); +-extern int rl_clear_message PARAMS((void)); +-extern int rl_reset_line_state PARAMS((void)); +-extern int rl_crlf PARAMS((void)); ++READLINE_API void rl_redisplay PARAMS((void)); ++READLINE_API int rl_on_new_line PARAMS((void)); ++READLINE_API int rl_on_new_line_with_prompt PARAMS((void)); ++READLINE_API int rl_forced_update_display PARAMS((void)); ++READLINE_API int rl_clear_message PARAMS((void)); ++READLINE_API int rl_reset_line_state PARAMS((void)); ++READLINE_API int rl_crlf PARAMS((void)); + + #if defined (USE_VARARGS) && defined (PREFER_STDARG) +-extern int rl_message (const char *, ...) __attribute__((__format__ (printf, 1, 2))); ++READLINE_API int rl_message (const char *, ...) __attribute__((__format__ (printf, 1, 2))); + #else +-extern int rl_message (); ++READLINE_API int rl_message (); + #endif + +-extern int rl_show_char PARAMS((int)); ++READLINE_API int rl_show_char PARAMS((int)); + + /* Undocumented in texinfo manual. */ +-extern int rl_character_len PARAMS((int, int)); ++READLINE_API int rl_character_len PARAMS((int, int)); + + /* Save and restore internal prompt redisplay information. */ +-extern void rl_save_prompt PARAMS((void)); +-extern void rl_restore_prompt PARAMS((void)); ++READLINE_API void rl_save_prompt PARAMS((void)); ++READLINE_API void rl_restore_prompt PARAMS((void)); + + /* Modifying text. */ +-extern void rl_replace_line PARAMS((const char *, int)); +-extern int rl_insert_text PARAMS((const char *)); +-extern int rl_delete_text PARAMS((int, int)); +-extern int rl_kill_text PARAMS((int, int)); +-extern char *rl_copy_text PARAMS((int, int)); ++READLINE_API void rl_replace_line PARAMS((const char *, int)); ++READLINE_API int rl_insert_text PARAMS((const char *)); ++READLINE_API int rl_delete_text PARAMS((int, int)); ++READLINE_API int rl_kill_text PARAMS((int, int)); ++READLINE_API char *rl_copy_text PARAMS((int, int)); + + /* Terminal and tty mode management. */ +-extern void rl_prep_terminal PARAMS((int)); +-extern void rl_deprep_terminal PARAMS((void)); +-extern void rl_tty_set_default_bindings PARAMS((Keymap)); +-extern void rl_tty_unset_default_bindings PARAMS((Keymap)); +- +-extern int rl_reset_terminal PARAMS((const char *)); +-extern void rl_resize_terminal PARAMS((void)); +-extern void rl_set_screen_size PARAMS((int, int)); +-extern void rl_get_screen_size PARAMS((int *, int *)); +-extern void rl_reset_screen_size PARAMS((void)); ++READLINE_API void rl_prep_terminal PARAMS((int)); ++READLINE_API void rl_deprep_terminal PARAMS((void)); ++READLINE_API void rl_tty_set_default_bindings PARAMS((Keymap)); ++READLINE_API void rl_tty_unset_default_bindings PARAMS((Keymap)); ++ ++READLINE_API int rl_reset_terminal PARAMS((const char *)); ++READLINE_API void rl_resize_terminal PARAMS((void)); ++READLINE_API void rl_set_screen_size PARAMS((int, int)); ++READLINE_API void rl_get_screen_size PARAMS((int *, int *)); ++READLINE_API void rl_reset_screen_size PARAMS((void)); + +-extern char *rl_get_termcap PARAMS((const char *)); ++READLINE_API char *rl_get_termcap PARAMS((const char *)); + + /* Functions for character input. */ +-extern int rl_stuff_char PARAMS((int)); +-extern int rl_execute_next PARAMS((int)); +-extern int rl_clear_pending_input PARAMS((void)); +-extern int rl_read_key PARAMS((void)); +-extern int rl_getc PARAMS((FILE *)); +-extern int rl_set_keyboard_input_timeout PARAMS((int)); ++READLINE_API int rl_stuff_char PARAMS((int)); ++READLINE_API int rl_execute_next PARAMS((int)); ++READLINE_API int rl_clear_pending_input PARAMS((void)); ++READLINE_API int rl_read_key PARAMS((void)); ++READLINE_API int rl_getc PARAMS((FILE *)); ++READLINE_API int rl_set_keyboard_input_timeout PARAMS((int)); + + /* `Public' utility functions . */ +-extern void rl_extend_line_buffer PARAMS((int)); +-extern int rl_ding PARAMS((void)); +-extern int rl_alphabetic PARAMS((int)); +-extern void rl_free PARAMS((void *)); ++READLINE_API void rl_extend_line_buffer PARAMS((int)); ++READLINE_API int rl_ding PARAMS((void)); ++READLINE_API int rl_alphabetic PARAMS((int)); ++READLINE_API void rl_free PARAMS((void *)); + + /* Readline signal handling, from signals.c */ +-extern int rl_set_signals PARAMS((void)); +-extern int rl_clear_signals PARAMS((void)); +-extern void rl_cleanup_after_signal PARAMS((void)); +-extern void rl_reset_after_signal PARAMS((void)); +-extern void rl_free_line_state PARAMS((void)); ++READLINE_API int rl_set_signals PARAMS((void)); ++READLINE_API int rl_clear_signals PARAMS((void)); ++READLINE_API void rl_cleanup_after_signal PARAMS((void)); ++READLINE_API void rl_reset_after_signal PARAMS((void)); ++READLINE_API void rl_free_line_state PARAMS((void)); + +-extern void rl_echo_signal_char PARAMS((int)); ++READLINE_API void rl_echo_signal_char PARAMS((int)); + +-extern int rl_set_paren_blink_timeout PARAMS((int)); ++READLINE_API int rl_set_paren_blink_timeout PARAMS((int)); + + /* Undocumented. */ +-extern int rl_maybe_save_line PARAMS((void)); +-extern int rl_maybe_unsave_line PARAMS((void)); +-extern int rl_maybe_replace_line PARAMS((void)); ++READLINE_API int rl_maybe_save_line PARAMS((void)); ++READLINE_API int rl_maybe_unsave_line PARAMS((void)); ++READLINE_API int rl_maybe_replace_line PARAMS((void)); + + /* Completion functions. */ +-extern int rl_complete_internal PARAMS((int)); +-extern void rl_display_match_list PARAMS((char **, int, int)); ++READLINE_API int rl_complete_internal PARAMS((int)); ++READLINE_API void rl_display_match_list PARAMS((char **, int, int)); + +-extern char **rl_completion_matches PARAMS((const char *, rl_compentry_func_t *)); +-extern char *rl_username_completion_function PARAMS((const char *, int)); +-extern char *rl_filename_completion_function PARAMS((const char *, int)); ++READLINE_API char **rl_completion_matches PARAMS((const char *, rl_compentry_func_t *)); ++READLINE_API char *rl_username_completion_function PARAMS((const char *, int)); ++READLINE_API char *rl_filename_completion_function PARAMS((const char *, int)); + +-extern int rl_completion_mode PARAMS((rl_command_func_t *)); ++READLINE_API int rl_completion_mode PARAMS((rl_command_func_t *)); + + #if 0 + /* Backwards compatibility (compat.c). These will go away sometime. */ +-extern void free_undo_list PARAMS((void)); +-extern int maybe_save_line PARAMS((void)); +-extern int maybe_unsave_line PARAMS((void)); +-extern int maybe_replace_line PARAMS((void)); +- +-extern int ding PARAMS((void)); +-extern int alphabetic PARAMS((int)); +-extern int crlf PARAMS((void)); +- +-extern char **completion_matches PARAMS((char *, rl_compentry_func_t *)); +-extern char *username_completion_function PARAMS((const char *, int)); +-extern char *filename_completion_function PARAMS((const char *, int)); ++READLINE_API void free_undo_list PARAMS((void)); ++READLINE_API int maybe_save_line PARAMS((void)); ++READLINE_API int maybe_unsave_line PARAMS((void)); ++READLINE_API int maybe_replace_line PARAMS((void)); ++ ++READLINE_API int ding PARAMS((void)); ++READLINE_API int alphabetic PARAMS((int)); ++READLINE_API int crlf PARAMS((void)); ++ ++READLINE_API char **completion_matches PARAMS((char *, rl_compentry_func_t *)); ++READLINE_API char *username_completion_function PARAMS((const char *, int)); ++READLINE_API char *filename_completion_function PARAMS((const char *, int)); + #endif + + /* **************************************************************** */ +@@ -474,144 +474,144 @@ + /* **************************************************************** */ + + /* The version of this incarnation of the readline library. */ +-extern const char *rl_library_version; /* e.g., "4.2" */ +-extern int rl_readline_version; /* e.g., 0x0402 */ ++READLINE_API const char *rl_library_version; /* e.g., "4.2" */ ++READLINE_API int rl_readline_version; /* e.g., 0x0402 */ + + /* True if this is real GNU readline. */ +-extern int rl_gnu_readline_p; ++READLINE_API int rl_gnu_readline_p; + + /* Flags word encapsulating the current readline state. */ +-extern int rl_readline_state; ++READLINE_API int rl_readline_state; + + /* Says which editing mode readline is currently using. 1 means emacs mode; + 0 means vi mode. */ +-extern int rl_editing_mode; ++READLINE_API int rl_editing_mode; + + /* Insert or overwrite mode for emacs mode. 1 means insert mode; 0 means + overwrite mode. Reset to insert mode on each input line. */ +-extern int rl_insert_mode; ++READLINE_API int rl_insert_mode; + + /* The name of the calling program. You should initialize this to + whatever was in argv[0]. It is used when parsing conditionals. */ +-extern const char *rl_readline_name; ++READLINE_API const char *rl_readline_name; + + /* The prompt readline uses. This is set from the argument to + readline (), and should not be assigned to directly. */ +-extern char *rl_prompt; ++READLINE_API char *rl_prompt; + + /* The prompt string that is actually displayed by rl_redisplay. Public so + applications can more easily supply their own redisplay functions. */ +-extern char *rl_display_prompt; ++READLINE_API char *rl_display_prompt; + + /* The line buffer that is in use. */ +-extern char *rl_line_buffer; ++READLINE_API char *rl_line_buffer; + + /* The location of point, and end. */ +-extern int rl_point; +-extern int rl_end; ++READLINE_API int rl_point; ++READLINE_API int rl_end; + + /* The mark, or saved cursor position. */ +-extern int rl_mark; ++READLINE_API int rl_mark; + + /* Flag to indicate that readline has finished with the current input + line and should return it. */ +-extern int rl_done; ++READLINE_API int rl_done; + + /* If set to a character value, that will be the next keystroke read. */ +-extern int rl_pending_input; ++READLINE_API int rl_pending_input; + + /* Non-zero if we called this function from _rl_dispatch(). It's present + so functions can find out whether they were called from a key binding + or directly from an application. */ +-extern int rl_dispatching; ++READLINE_API int rl_dispatching; + + /* Non-zero if the user typed a numeric argument before executing the + current function. */ +-extern int rl_explicit_arg; ++READLINE_API int rl_explicit_arg; + + /* The current value of the numeric argument specified by the user. */ +-extern int rl_numeric_arg; ++READLINE_API int rl_numeric_arg; + + /* The address of the last command function Readline executed. */ +-extern rl_command_func_t *rl_last_func; ++READLINE_API rl_command_func_t *rl_last_func; + + /* The name of the terminal to use. */ +-extern const char *rl_terminal_name; ++READLINE_API const char *rl_terminal_name; + + /* The input and output streams. */ +-extern FILE *rl_instream; +-extern FILE *rl_outstream; ++READLINE_API FILE *rl_instream; ++READLINE_API FILE *rl_outstream; + + /* If non-zero, Readline gives values of LINES and COLUMNS from the environment + greater precedence than values fetched from the kernel when computing the + screen dimensions. */ +-extern int rl_prefer_env_winsize; ++READLINE_API int rl_prefer_env_winsize; + + /* If non-zero, then this is the address of a function to call just + before readline_internal () prints the first prompt. */ +-extern rl_hook_func_t *rl_startup_hook; ++READLINE_API rl_hook_func_t *rl_startup_hook; + + /* If non-zero, this is the address of a function to call just before + readline_internal_setup () returns and readline_internal starts + reading input characters. */ +-extern rl_hook_func_t *rl_pre_input_hook; ++READLINE_API rl_hook_func_t *rl_pre_input_hook; + + /* The address of a function to call periodically while Readline is + awaiting character input, or NULL, for no event handling. */ +-extern rl_hook_func_t *rl_event_hook; ++READLINE_API rl_hook_func_t *rl_event_hook; + + /* The address of the function to call to fetch a character from the current + Readline input stream */ +-extern rl_getc_func_t *rl_getc_function; ++READLINE_API rl_getc_func_t *rl_getc_function; + +-extern rl_voidfunc_t *rl_redisplay_function; ++READLINE_API rl_voidfunc_t *rl_redisplay_function; + +-extern rl_vintfunc_t *rl_prep_term_function; +-extern rl_voidfunc_t *rl_deprep_term_function; ++READLINE_API rl_vintfunc_t *rl_prep_term_function; ++READLINE_API rl_voidfunc_t *rl_deprep_term_function; + + /* Dispatch variables. */ +-extern Keymap rl_executing_keymap; +-extern Keymap rl_binding_keymap; ++READLINE_API Keymap rl_executing_keymap; ++READLINE_API Keymap rl_binding_keymap; + + /* Display variables. */ + /* If non-zero, readline will erase the entire line, including any prompt, + if the only thing typed on an otherwise-blank line is something bound to + rl_newline. */ +-extern int rl_erase_empty_line; ++READLINE_API int rl_erase_empty_line; + + /* If non-zero, the application has already printed the prompt (rl_prompt) + before calling readline, so readline should not output it the first time + redisplay is done. */ +-extern int rl_already_prompted; ++READLINE_API int rl_already_prompted; + + /* A non-zero value means to read only this many characters rather than + up to a character bound to accept-line. */ +-extern int rl_num_chars_to_read; ++READLINE_API int rl_num_chars_to_read; + + /* The text of a currently-executing keyboard macro. */ +-extern char *rl_executing_macro; ++READLINE_API char *rl_executing_macro; + + /* Variables to control readline signal handling. */ + /* If non-zero, readline will install its own signal handlers for + SIGINT, SIGTERM, SIGQUIT, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU. */ +-extern int rl_catch_signals; ++READLINE_API int rl_catch_signals; + + /* If non-zero, readline will install a signal handler for SIGWINCH + that also attempts to call any calling application's SIGWINCH signal + handler. Note that the terminal is not cleaned up before the + application's signal handler is called; use rl_cleanup_after_signal() + to do that. */ +-extern int rl_catch_sigwinch; ++READLINE_API int rl_catch_sigwinch; + + /* Completion variables. */ + /* Pointer to the generator function for completion_matches (). + NULL means to use rl_filename_completion_function (), the default + filename completer. */ +-extern rl_compentry_func_t *rl_completion_entry_function; ++READLINE_API rl_compentry_func_t *rl_completion_entry_function; + + /* Optional generator for menu completion. Default is + rl_completion_entry_function (rl_filename_completion_function). */ +- extern rl_compentry_func_t *rl_menu_completion_entry_function; ++READLINE_API rl_compentry_func_t *rl_menu_completion_entry_function; + + /* If rl_ignore_some_completions_function is non-NULL it is the address + of a function to call after all of the possible matches have been +@@ -619,7 +619,7 @@ + The function is called with one argument; a NULL terminated array + of (char *). If your function removes any of the elements, they + must be free()'ed. */ +-extern rl_compignore_func_t *rl_ignore_some_completions_function; ++READLINE_API rl_compignore_func_t *rl_ignore_some_completions_function; + + /* Pointer to alternative function to create matches. + Function is called with TEXT, START, and END. +@@ -628,39 +628,39 @@ + If this function exists and returns NULL then call the value of + rl_completion_entry_function to try to match, otherwise use the + array of strings returned. */ +-extern rl_completion_func_t *rl_attempted_completion_function; ++READLINE_API rl_completion_func_t *rl_attempted_completion_function; + + /* The basic list of characters that signal a break between words for the + completer routine. The initial contents of this variable is what + breaks words in the shell, i.e. "n\"\\'`@$>". */ +-extern const char *rl_basic_word_break_characters; ++READLINE_API const char *rl_basic_word_break_characters; + + /* The list of characters that signal a break between words for + rl_complete_internal. The default list is the contents of + rl_basic_word_break_characters. */ +-extern /*const*/ char *rl_completer_word_break_characters; ++READLINE_API /*const*/ char *rl_completer_word_break_characters; + + /* Hook function to allow an application to set the completion word + break characters before readline breaks up the line. Allows + position-dependent word break characters. */ +-extern rl_cpvfunc_t *rl_completion_word_break_hook; ++READLINE_API rl_cpvfunc_t *rl_completion_word_break_hook; + + /* List of characters which can be used to quote a substring of the line. + Completion occurs on the entire substring, and within the substring + rl_completer_word_break_characters are treated as any other character, + unless they also appear within this list. */ +-extern const char *rl_completer_quote_characters; ++READLINE_API const char *rl_completer_quote_characters; + + /* List of quote characters which cause a word break. */ +-extern const char *rl_basic_quote_characters; ++READLINE_API const char *rl_basic_quote_characters; + + /* List of characters that need to be quoted in filenames by the completer. */ +-extern const char *rl_filename_quote_characters; ++READLINE_API const char *rl_filename_quote_characters; + + /* List of characters that are word break characters, but should be left + in TEXT when it is passed to the completion function. The shell uses + this to help determine what kind of completing to do. */ +-extern const char *rl_special_prefixes; ++READLINE_API const char *rl_special_prefixes; + + /* If non-zero, then this is the address of a function to call when + completing on a directory name. The function is called with +@@ -671,7 +671,7 @@ + the directory name pointer passed as an argument. If the directory + completion hook returns 0, it should not modify the directory name + pointer passed as an argument. */ +-extern rl_icppfunc_t *rl_directory_completion_hook; ++READLINE_API rl_icppfunc_t *rl_directory_completion_hook; + + /* If non-zero, this is the address of a function to call when completing + a directory name. This function takes the address of the directory name +@@ -684,7 +684,7 @@ + + I'm not happy with how this works yet, so it's undocumented. I'm trying + it in bash to see how well it goes. */ +-extern rl_icppfunc_t *rl_directory_rewrite_hook; ++READLINE_API rl_icppfunc_t *rl_directory_rewrite_hook; + + /* If non-zero, this is the address of a function to call when reading + directory entries from the filesystem for completion and comparing +@@ -695,7 +695,7 @@ + keyboard. The returned value is what is added to the list of + matches. The second argument is the length of the filename to be + converted. */ +-extern rl_dequote_func_t *rl_filename_rewrite_hook; ++READLINE_API rl_dequote_func_t *rl_filename_rewrite_hook; + + /* Backwards compatibility with previous versions of readline. */ + #define rl_symbolic_link_hook rl_directory_completion_hook +@@ -707,76 +707,76 @@ + where MATCHES is the array of strings that matched, NUM_MATCHES is the + number of strings in that array, and MAX_LENGTH is the length of the + longest string in that array. */ +-extern rl_compdisp_func_t *rl_completion_display_matches_hook; ++READLINE_API rl_compdisp_func_t *rl_completion_display_matches_hook; + + /* Non-zero means that the results of the matches are to be treated + as filenames. This is ALWAYS zero on entry, and can only be changed + within a completion entry finder function. */ +-extern int rl_filename_completion_desired; ++READLINE_API int rl_filename_completion_desired; + + /* Non-zero means that the results of the matches are to be quoted using + double quotes (or an application-specific quoting mechanism) if the + filename contains any characters in rl_word_break_chars. This is + ALWAYS non-zero on entry, and can only be changed within a completion + entry finder function. */ +-extern int rl_filename_quoting_desired; ++READLINE_API int rl_filename_quoting_desired; + + /* Set to a function to quote a filename in an application-specific fashion. + Called with the text to quote, the type of match found (single or multiple) + and a pointer to the quoting character to be used, which the function can + reset if desired. */ +-extern rl_quote_func_t *rl_filename_quoting_function; ++READLINE_API rl_quote_func_t *rl_filename_quoting_function; + + /* Function to call to remove quoting characters from a filename. Called + before completion is attempted, so the embedded quotes do not interfere + with matching names in the file system. */ +-extern rl_dequote_func_t *rl_filename_dequoting_function; ++READLINE_API rl_dequote_func_t *rl_filename_dequoting_function; + + /* Function to call to decide whether or not a word break character is + quoted. If a character is quoted, it does not break words for the + completer. */ +-extern rl_linebuf_func_t *rl_char_is_quoted_p; ++READLINE_API rl_linebuf_func_t *rl_char_is_quoted_p; + + /* Non-zero means to suppress normal filename completion after the + user-specified completion function has been called. */ +-extern int rl_attempted_completion_over; ++READLINE_API int rl_attempted_completion_over; + + /* Set to a character describing the type of completion being attempted by + rl_complete_internal; available for use by application completion + functions. */ +-extern int rl_completion_type; ++READLINE_API int rl_completion_type; + + /* Set to the last key used to invoke one of the completion functions */ +-extern int rl_completion_invoking_key; ++READLINE_API int rl_completion_invoking_key; + + /* Up to this many items will be displayed in response to a + possible-completions call. After that, we ask the user if she + is sure she wants to see them all. The default value is 100. */ +-extern int rl_completion_query_items; ++READLINE_API int rl_completion_query_items; + + /* Character appended to completed words when at the end of the line. The + default is a space. Nothing is added if this is '\0'. */ +-extern int rl_completion_append_character; ++READLINE_API int rl_completion_append_character; + + /* If set to non-zero by an application completion function, + rl_completion_append_character will not be appended. */ +-extern int rl_completion_suppress_append; ++READLINE_API int rl_completion_suppress_append; + + /* Set to any quote character readline thinks it finds before any application + completion function is called. */ +-extern int rl_completion_quote_character; ++READLINE_API int rl_completion_quote_character; + + /* Set to a non-zero value if readline found quoting anywhere in the word to + be completed; set before any application completion function is called. */ +-extern int rl_completion_found_quote; ++READLINE_API int rl_completion_found_quote; + + /* If non-zero, the completion functions don't append any closing quote. + This is set to 0 by rl_complete_internal and may be changed by an + application-specific completion function. */ +-extern int rl_completion_suppress_quote; ++READLINE_API int rl_completion_suppress_quote; + + /* If non-zero, readline will sort the completion matches. On by default. */ +-extern int rl_sort_completion_matches; ++READLINE_API int rl_sort_completion_matches; + + /* If non-zero, a slash will be appended to completed filenames that are + symbolic links to directory names, subject to the value of the +@@ -787,14 +787,14 @@ + rl_complete_internal before any application-specific completion + function is called, so without that function doing anything, the user's + preferences are honored. */ +-extern int rl_completion_mark_symlink_dirs; ++READLINE_API int rl_completion_mark_symlink_dirs; + + /* If non-zero, then disallow duplicates in the matches. */ +-extern int rl_ignore_completion_duplicates; ++READLINE_API int rl_ignore_completion_duplicates; + + /* If this is non-zero, completion is (temporarily) inhibited, and the + completion character will be inserted as any other. */ +-extern int rl_inhibit_completion; ++READLINE_API int rl_inhibit_completion; + + /* Input error; can be returned by (*rl_getc_function) if readline is reading + a top-level command (RL_ISSTATE (RL_STATE_READCMD)). */ +@@ -883,8 +883,8 @@ + char reserved[64]; + }; + +-extern int rl_save_state PARAMS((struct readline_state *)); +-extern int rl_restore_state PARAMS((struct readline_state *)); ++READLINE_API int rl_save_state PARAMS((struct readline_state *)); ++READLINE_API int rl_restore_state PARAMS((struct readline_state *)); + + #ifdef __cplusplus + } +diff -ur readline-6.2-orig/rldefs.h readline-6.2-new/rldefs.h +--- readline-6.2-orig/rldefs.h 2009-01-04 14:32:33 -0500 ++++ readline-6.2-new/rldefs.h 2013-07-05 21:41:36 -0400 +@@ -63,7 +63,7 @@ + # include + #endif /* !HAVE_STRING_H */ + +-#if !defined (strchr) && !defined (__STDC__) ++#if !defined (strchr) && !defined (__STDC__) && !defined(_MSC_VER) + extern char *strchr (), *strrchr (); + #endif /* !strchr && !__STDC__ */ + +diff -ur readline-6.2-orig/rlstdc.h readline-6.2-new/rlstdc.h +--- readline-6.2-orig/rlstdc.h 2009-01-04 14:32:33 -0500 ++++ readline-6.2-new/rlstdc.h 2013-07-05 21:41:36 -0400 +@@ -42,4 +42,14 @@ + # endif + #endif + ++#if defined (_MSC_VER) ++# if defined (READLINE_DLL) ++# define READLINE_API __declspec(dllexport) ++# else ++# define READLINE_API __declspec(dllimport) ++# endif ++#else ++# define READLINE_API extern ++#endif ++ + #endif /* !_RL_STDC_H_ */ +diff -ur readline-6.2-orig/support/shlib-install readline-6.2-new/support/shlib-install +--- readline-6.2-orig/support/shlib-install 2009-10-28 09:30:18 -0400 ++++ readline-6.2-new/support/shlib-install 2013-07-05 21:41:36 -0400 +@@ -75,8 +75,9 @@ + chmod 555 ${INSTALLDIR}/${LIBNAME} + fi ;; + cygwin*|mingw*) ++ VCLIBNAME=`echo ${LIBNAME} | sed -e 's,\.dll,\.lib,'` + IMPLIBNAME=`echo ${LIBNAME} \ +- | sed -e 's,^cyg,lib,' -e 's,[0-9]*.dll$,.dll.a,'` ++ | sed -e 's,^@@LIBRARY_PREFIX@@lib,,' -e 's,-[0-9]*@@LIBRARY_SUFFIX@@.dll$,.lib,'` + if [ -z "$uninstall" ]; then + ${echo} $RM ${BINDIR}/${LIBNAME}.${OLDSUFF} + if [ -f "$BINDIR/$LIBNAME" ]; then +@@ -84,7 +85,7 @@ + fi + ${echo} $MV ${INSTALLDIR}/${LIBNAME} ${BINDIR}/${LIBNAME} + ${echo} chmod a+x ${BINDIR}/${LIBNAME} +- ${echo} eval ${INSTALLPROG} ${LIBNAME}.a \ ++ ${echo} eval ${INSTALLPROG} ${VCLIBNAME} \ + ${INSTALLDIR}/${IMPLIBNAME} + else + ${echo} ${RM} ${BINDIR}/${LIBNAME} +diff -ur readline-6.2-orig/support/shobj-conf readline-6.2-new/support/shobj-conf +--- readline-6.2-orig/support/shobj-conf 2009-10-28 09:20:21 -0400 ++++ readline-6.2-new/support/shobj-conf 2013-07-05 21:41:36 -0400 +@@ -522,10 +522,12 @@ + + mingw*) + SHOBJ_LD='$(CC)' +- SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' ++ SHOBJ_LDFLAGS='-shared' ++ SHLIB_LIBPREF='@@LIBRARY_PREFIX@@lib' + SHLIB_LIBSUFF='dll' +- SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' ++ SHLIB_LIBVERSION='-$(SHLIB_DLLVERSION)@@LIBRARY_SUFFIX@@.$(SHLIB_LIBSUFF)' + SHLIB_LIBS='$(TERMCAP_LIB)' ++ SHOBJ_CFLAGS='-D__MINGW32__ -DREADLINE_DLL' + + SHLIB_DOT= + # For official cygwin releases, DLLVERSION will be defined in the +diff -ur readline-6.2-orig/util.c readline-6.2-new/util.c +--- readline-6.2-orig/util.c 2010-05-30 18:36:02 -0400 ++++ readline-6.2-new/util.c 2013-07-05 21:41:36 -0400 +@@ -389,7 +389,7 @@ + break; + s2++; + } +- while (--count != 0) ++ while (--count != 0); + + return (0); + } +diff -ur readline-6.2-orig/vi_mode.c readline-6.2-new/vi_mode.c +--- readline-6.2-orig/vi_mode.c 2010-11-20 19:51:39 -0500 ++++ readline-6.2-new/vi_mode.c 2013-07-05 21:41:36 -0400 +@@ -1006,7 +1006,7 @@ + { + _rl_vimotion_cxt *m; + +- m = xmalloc (sizeof (_rl_vimotion_cxt)); ++ m = (_rl_vimotion_cxt *) xmalloc (sizeof (_rl_vimotion_cxt)); + _rl_mvcxt_init (m, op, key); + return m; + } +diff -ur readline-6.2-orig/xmalloc.h readline-6.2-new/xmalloc.h +--- readline-6.2-orig/xmalloc.h 2009-01-04 14:32:34 -0500 ++++ readline-6.2-new/xmalloc.h 2013-07-05 21:41:36 -0400 +@@ -38,8 +38,8 @@ + + #endif /* !PTR_T */ + +-extern PTR_T xmalloc PARAMS((size_t)); +-extern PTR_T xrealloc PARAMS((void *, size_t)); +-extern void xfree PARAMS((void *)); ++READLINE_API PTR_T xmalloc PARAMS((size_t)); ++READLINE_API PTR_T xrealloc PARAMS((void *, size_t)); ++READLINE_API void xfree PARAMS((void *)); + + #endif /* _XMALLOC_H_ */ diff -r 21f598a028ec -r c2864508b524 src/readline-1-binding.patch --- a/src/readline-1-binding.patch Fri Jul 05 22:24:48 2013 -0400 +++ b/src/readline-1-binding.patch Fri Jul 05 22:25:41 2013 -0400 @@ -1,7 +1,7 @@ diff -uNr a/readline.c b/readline.c --- a/readline.c 2010-07-25 17:07:40.000000000 -0400 +++ b/readline.c 2013-04-17 20:38:42.637674309 -0400 -@@ -1154,11 +1159,19 @@ +@@ -1154,11 +1159,14 @@ rl_bind_keyseq_if_unbound ("\033OH", rl_beg_of_line); rl_bind_keyseq_if_unbound ("\033OF", rl_end_of_line); @@ -14,11 +14,6 @@ + rl_bind_keyseq_if_unbound ("\340G", rl_beg_of_line); + rl_bind_keyseq_if_unbound ("\340O", rl_end_of_line); + rl_bind_keyseq_if_unbound ("\340S", rl_delete); -+#endif -+ -+#ifdef _MSC_VER -+ rl_bind_keyseq_if_unbound ("\033[3~", rl_delete); -+ rl_bind_keyseq_if_unbound ("\033[X", _rl_update_terminal_size); #endif _rl_keymap = xkeymap; diff -r 21f598a028ec -r c2864508b524 src/readline.mk --- a/src/readline.mk Fri Jul 05 22:24:48 2013 -0400 +++ b/src/readline.mk Fri Jul 05 22:25:41 2013 -0400 @@ -26,6 +26,12 @@ define $(PKG)_BUILD $(SED) -i 's,^ *case SIGQUIT:.*,,' '$(1)/signals.c' $(SED) -i 's,^ *case SIGTSTP:.*,,' '$(1)/signals.c' + if test x$(MXE_SYSTEM) = xmsvc; then \ + for f in '$(1)/support/shlib-install' '$(1)/support/shobj-conf'; do \ + $(SED) -i -e 's/@@LIBRARY_PREFIX@@/$(LIBRARY_PREFIX)/g' \ + -e 's/@@LIBRARY_SUFFIX@@/$(LIBRARY_SUFFIX)/g' $$f; \ + done; \ + fi cd '$(1)' && ./configure \ $(CONFIGURE_CPPFLAGS) $(CONFIGURE_LDFLAGS) \ $(HOST_AND_BUILD_CONFIGURE_OPTIONS) \