diff options
author | Guido van Rossum <guido@python.org> | 1997-08-05 21:28:12 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1997-08-05 21:28:12 (GMT) |
commit | 717c6f95bebcd4693781e25bae3f7f9900cece07 (patch) | |
tree | f3b1fd83aefb00388794b5e97d4edda88e746ca0 /Parser/myreadline.c | |
parent | 0969d362751bd779fc6618d70ddd6c76e8cbc12c (diff) | |
download | cpython-717c6f95bebcd4693781e25bae3f7f9900cece07.zip cpython-717c6f95bebcd4693781e25bae3f7f9900cece07.tar.gz cpython-717c6f95bebcd4693781e25bae3f7f9900cece07.tar.bz2 |
Move GNU readline interface to ../Modules/readline.c.
Add Py_input_hook (used by _tkinter and perhaps Gist).
Diffstat (limited to 'Parser/myreadline.c')
-rw-r--r-- | Parser/myreadline.c | 81 |
1 files changed, 3 insertions, 78 deletions
diff --git a/Parser/myreadline.c b/Parser/myreadline.c index f9c3706..37ee902 100644 --- a/Parser/myreadline.c +++ b/Parser/myreadline.c @@ -51,79 +51,7 @@ PERFORMANCE OF THIS SOFTWARE. #include "mymalloc.h" #include "intrcheck.h" - -#ifdef WITH_READLINE - -extern char *readline(); -extern int rl_initialize(); -extern int rl_insert(); -extern int rl_bind_key(); -extern void add_history(); -extern char *rl_readline_name; - -#include <setjmp.h> -#include <signal.h> - -static jmp_buf jbuf; - -/* ARGSUSED */ -static RETSIGTYPE -onintr(sig) - int sig; -{ - longjmp(jbuf, 1); -} - -void -PyOS_ReadlineInit() -{ - static int been_here; - if (!been_here) { - /* Force rebind of TAB to insert-tab */ - rl_readline_name = "python"; - rl_initialize(); - rl_bind_key('\t', rl_insert); - been_here++; - } -} - -char * -PyOS_GnuReadline(prompt) - char *prompt; -{ - int n; - char *p; - RETSIGTYPE (*old_inthandler)(); - PyOS_ReadlineInit(); - old_inthandler = signal(SIGINT, onintr); - if (setjmp(jbuf)) { -#ifdef HAVE_SIGRELSE - /* This seems necessary on SunOS 4.1 (Rasmus Hahn) */ - sigrelse(SIGINT); -#endif - signal(SIGINT, old_inthandler); - return NULL; - } - p = readline(prompt); - signal(SIGINT, old_inthandler); - if (p == NULL) { - p = malloc(1); - if (p != NULL) - *p = '\0'; - return p; - } - n = strlen(p); - if (n > 0) - add_history(p); - if ((p = realloc(p, n+2)) != NULL) { - p[n] = '\n'; - p[n+1] = '\0'; - } - return p; -} - -#endif /* !WITH_READLINE */ - +int (*Py_input_hook)() = NULL; /* This function restarts a fgets() after an EINTR error occurred except if PyOS_InterruptOccurred() returns true. */ @@ -136,6 +64,8 @@ my_fgets(buf, len, fp) { char *p; for (;;) { + if (Py_input_hook != NULL) + (void)(Py_input_hook)(); errno = 0; p = fgets(buf, len, fp); if (p != NULL) @@ -221,11 +151,6 @@ PyOS_Readline(prompt) char *prompt; { if (PyOS_ReadlineFunctionPointer == NULL) { -#ifdef WITH_READLINE - if (isatty(fileno(stdin))) - PyOS_ReadlineFunctionPointer = PyOS_GnuReadline; - else -#endif PyOS_ReadlineFunctionPointer = PyOS_StdioReadline; } return (*PyOS_ReadlineFunctionPointer)(prompt); |