stas Thu Jan 18 03:42:09 2001 EDT
Added files:
/php4/ext/readline README.libedit
Modified files:
/php4/ext/readline config.m4 php_readline.h readline.c
Log:
Libedit readline replacement support
# Comments are very welcome!
Index: php4/ext/readline/config.m4
diff -u php4/ext/readline/config.m4:1.8 php4/ext/readline/config.m4:1.9
--- php4/ext/readline/config.m4:1.8 Mon May 1 21:26:48 2000
+++ php4/ext/readline/config.m4 Thu Jan 18 03:42:09 2001
@@ -1,7 +1,9 @@
-dnl $Id: config.m4,v 1.8 2000/05/02 04:26:48 sas Exp $
+dnl $Id: config.m4,v 1.9 2001/01/18 11:42:09 stas Exp $
dnl config.m4 for extension readline
dnl don't forget to call PHP_EXTENSION(readline)
+PHP_ARG_WITH(libedit,for libedit readline replacement,
+[ --with-libedit[=DIR] Include libedit readline replacement.])
PHP_ARG_WITH(readline,for readline support,
[ --with-readline[=DIR] Include readline support. DIR is the readline
@@ -32,3 +34,28 @@
AC_DEFINE(HAVE_LIBREADLINE, 1, [ ])
PHP_EXTENSION(readline, $ext_shared)
fi
+
+if test "$PHP_LIBEDIT" != "no"; then
+ for i in /usr/local /usr $PHP_LIBEDIT; do
+ if test -f $i/include/readline/readline.h; then
+ LIBEDIT_DIR=$i
+ fi
+ done
+
+ if test -z "$LIBEDIT_DIR"; then
+ AC_MSG_ERROR(Please reinstall libedit - I cannot find readline.h)
+ fi
+ AC_ADD_INCLUDE($LIBEDIT_DIR/include)
+
+ AC_CHECK_LIB(ncurses, tgetent, [
+ AC_ADD_LIBRARY_WITH_PATH(ncurses,,READLINE__SHARED_LIBADD)],[
+ AC_CHECK_LIB(termcap, tgetent, [
+ AC_ADD_LIBRARY_WITH_PATH(termcap,,READLINE_SHARED_LIBADD)])
+ ])
+
+ AC_ADD_LIBRARY_WITH_PATH(edit, $LIBEDIT_DIR/lib, READLINE_SHARED_LIBADD)
+ PHP_SUBST(READLINE_SHARED_LIBADD)
+
+ AC_DEFINE(HAVE_LIBEDIT, 1, [ ])
+ PHP_EXTENSION(readline, $ext_shared)
+fi
\ No newline at end of file
Index: php4/ext/readline/php_readline.h
diff -u php4/ext/readline/php_readline.h:1.8 php4/ext/readline/php_readline.h:1.9
--- php4/ext/readline/php_readline.h:1.8 Sun Oct 29 01:14:53 2000
+++ php4/ext/readline/php_readline.h Thu Jan 18 03:42:09 2001
@@ -16,12 +16,12 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_readline.h,v 1.8 2000/10/29 09:14:53 thies Exp $ */
+/* $Id: php_readline.h,v 1.9 2001/01/18 11:42:09 stas Exp $ */
#ifndef PHP_READLINE_H
#define PHP_READLINE_H
-#if HAVE_LIBREADLINE
+#if HAVE_LIBREADLINE || HAVE_LIBEDIT
#ifdef ZTS
#warning Readline module will *NEVER* be thread-safe
#endif
Index: php4/ext/readline/readline.c
diff -u php4/ext/readline/readline.c:1.16 php4/ext/readline/readline.c:1.17
--- php4/ext/readline/readline.c:1.16 Sun Oct 29 01:14:53 2000
+++ php4/ext/readline/readline.c Thu Jan 18 03:42:09 2001
@@ -16,17 +16,19 @@
+----------------------------------------------------------------------+
*/
-/* $Id: readline.c,v 1.16 2000/10/29 09:14:53 thies Exp $ */
+/* $Id: readline.c,v 1.17 2001/01/18 11:42:09 stas Exp $ */
/* {{{ includes & prototypes */
#include "php.h"
#include "php_readline.h"
-#if HAVE_LIBREADLINE
+#if HAVE_LIBREADLINE || HAVE_LIBEDIT
#include <readline/readline.h>
+#ifndef HAVE_LIBEDIT
#include <readline/history.h>
+#endif
PHP_FUNCTION(readline);
PHP_FUNCTION(readline_add_history);
@@ -51,7 +53,11 @@
PHP_FE(readline_info, NULL)
PHP_FE(readline_add_history, NULL)
PHP_FE(readline_clear_history, NULL)
+#ifdef HAVE_READLINE
PHP_FE(readline_list_history, NULL)
+#else
+ PHP_FALIAS(readline_list_history, warn_not_available, NULL)
+#endif
PHP_FE(readline_read_history, NULL)
PHP_FE(readline_write_history, NULL)
PHP_FE(readline_completion_function,NULL)
@@ -137,15 +143,17 @@
add_assoc_string(return_value,"line_buffer",SAFE_STRING(rl_line_buffer),1);
add_assoc_long(return_value,"point",rl_point);
add_assoc_long(return_value,"end",rl_end);
+#ifdef HAVE_READLINE
add_assoc_long(return_value,"mark",rl_mark);
add_assoc_long(return_value,"done",rl_done);
add_assoc_long(return_value,"pending_input",rl_pending_input);
+ add_assoc_string(return_value,"prompt",SAFE_STRING(rl_prompt),1);
+
+add_assoc_string(return_value,"terminal_name",SAFE_STRING(rl_terminal_name),1);
+#endif
#if HAVE_ERASE_EMPTY_LINE
add_assoc_long(return_value,"erase_empty_line",rl_erase_empty_line);
#endif
- add_assoc_string(return_value,"prompt",SAFE_STRING(rl_prompt),1);
add_assoc_string(return_value,"library_version",SAFE_STRING(rl_library_version),1);
-
add_assoc_string(return_value,"terminal_name",SAFE_STRING(rl_terminal_name),1);
add_assoc_string(return_value,"readline_name",SAFE_STRING(rl_readline_name),1);
} else {
convert_to_string_ex(what);
@@ -162,6 +170,7 @@
RETVAL_LONG(rl_point);
} else if (! strcasecmp((*what)->value.str.val,"end")) {
RETVAL_LONG(rl_end);
+#ifdef HAVE_READLINE
} else if (! strcasecmp((*what)->value.str.val,"mark")) {
RETVAL_LONG(rl_mark);
} else if (! strcasecmp((*what)->value.str.val,"done")) {
@@ -178,6 +187,11 @@
rl_pending_input = (*value)->value.str.val[0];
}
RETVAL_LONG(oldval);
+ } else if (! strcasecmp((*what)->value.str.val,"prompt")) {
+ RETVAL_STRING(SAFE_STRING(rl_prompt),1);
+ } else if (! strcasecmp((*what)->value.str.val,"terminal_name")) {
+ RETVAL_STRING(SAFE_STRING(rl_terminal_name),1);
+#endif
#if HAVE_ERASE_EMPTY_LINE
} else if (! strcasecmp((*what)->value.str.val,"erase_empty_line")) {
oldval = rl_erase_empty_line;
@@ -187,12 +201,8 @@
}
RETVAL_LONG(oldval);
#endif
- } else if (! strcasecmp((*what)->value.str.val,"prompt")) {
- RETVAL_STRING(SAFE_STRING(rl_prompt),1);
} else if (! strcasecmp((*what)->value.str.val,"library_version")) {
RETVAL_STRING(SAFE_STRING(rl_library_version),1);
- } else if (! strcasecmp((*what)->value.str.val,"terminal_name")) {
- RETVAL_STRING(SAFE_STRING(rl_terminal_name),1);
} else if (! strcasecmp((*what)->value.str.val,"readline_name")) {
oldstr = rl_readline_name;
if (ac == 2) {
@@ -242,6 +252,7 @@
/* }}} */
/* {{{ proto array readline_list_history(void)
Lists the history */
+#ifdef HAVE_READLINE
PHP_FUNCTION(readline_list_history)
{
HIST_ENTRY **history;
@@ -262,7 +273,7 @@
}
}
}
-
+#endif
/* }}} */
/* {{{ proto int readline_read_history([string filename] [, int from] [,int to])
Reads the history */
Index: php4/ext/readline/README.libedit
+++ php4/ext/readline/README.libedit
This library can be built with libedit - non-GPL drop-in readline replacement.
Libedit can be obtained from http://sourceforge.net/projects/libedit/
It is taken from NetBSD (http://www.netbsd.org/) CVS repository and modified
to work as stand-alone library.
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]