Module Name:    src
Committed By:   christos
Date:           Thu Dec 31 15:58:26 UTC 2009

Modified Files:
        src/lib/libedit: Makefile editline.3 el.c el.h eln.c histedit.h
            prompt.c read.c

Log Message:
- Document and enable wide character support.
- Fix read function compatibility.


To generate a diff of this commit:
cvs rdiff -u -r1.39 -r1.40 src/lib/libedit/Makefile
cvs rdiff -u -r1.70 -r1.71 src/lib/libedit/editline.3
cvs rdiff -u -r1.57 -r1.58 src/lib/libedit/el.c
cvs rdiff -u -r1.20 -r1.21 src/lib/libedit/el.h
cvs rdiff -u -r1.2 -r1.3 src/lib/libedit/eln.c
cvs rdiff -u -r1.43 -r1.44 src/lib/libedit/histedit.h
cvs rdiff -u -r1.17 -r1.18 src/lib/libedit/prompt.c
cvs rdiff -u -r1.53 -r1.54 src/lib/libedit/read.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libedit/Makefile
diff -u src/lib/libedit/Makefile:1.39 src/lib/libedit/Makefile:1.40
--- src/lib/libedit/Makefile:1.39	Wed Dec 30 18:54:52 2009
+++ src/lib/libedit/Makefile	Thu Dec 31 10:58:26 2009
@@ -1,9 +1,9 @@
-#	$NetBSD: Makefile,v 1.39 2009/12/30 23:54:52 christos Exp $
+#	$NetBSD: Makefile,v 1.40 2009/12/31 15:58:26 christos Exp $
 #	@(#)Makefile	8.1 (Berkeley) 6/4/93
 
 USE_SHLIBDIR=	yes
 
-WIDECHAR ?= no
+WIDECHAR ?= yes
 WARNS=	4
 LIB=	edit
 
@@ -26,12 +26,13 @@
 	editline.3 tok_line.3 editline.3 tok_str.3
 
 # For speed and debugging
-SRCS=   ${OSRCS} readline.c tokenizer.c history.c
+#SRCS=   ${OSRCS} readline.c tokenizer.c history.c
 # For protection
-#SRCS=	editline.c readline.c tokenizer.c history.c
+SRCS=	editline.c readline.c tokenizer.c history.c
 
 .if ${WIDECHAR} == "yes"
-SRCS += tokenizern.c historyn.c eln.c
+OSRCS += eln.c
+SRCS += tokenizern.c historyn.c
 CLEANFILES+=tokenizern.c.tmp tokenizern.c historyn.c.tmp historyn.c
 CPPFLAGS+=-DWIDECHAR
 .endif

Index: src/lib/libedit/editline.3
diff -u src/lib/libedit/editline.3:1.70 src/lib/libedit/editline.3:1.71
--- src/lib/libedit/editline.3:1.70	Sun Jul  5 17:55:24 2009
+++ src/lib/libedit/editline.3	Thu Dec 31 10:58:26 2009
@@ -1,4 +1,4 @@
-.\"	$NetBSD: editline.3,v 1.70 2009/07/05 21:55:24 perry Exp $
+.\"	$NetBSD: editline.3,v 1.71 2009/12/31 15:58:26 christos Exp $
 .\"
 .\" Copyright (c) 1997-2003 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -26,7 +26,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd July 5, 2009
+.Dd December 31, 2009
 .Dt EDITLINE 3
 .Os
 .Sh NAME
@@ -35,24 +35,41 @@
 .Nm el_end ,
 .Nm el_reset ,
 .Nm el_gets ,
+.Nm el_wgets ,
 .Nm el_getc ,
+.Nm el_wgetc ,
 .Nm el_push ,
+.Nm el_wpush ,
 .Nm el_parse ,
+.Nm el_wparse ,
 .Nm el_set ,
+.Nm el_wset ,
 .Nm el_get ,
+.Nm el_wget ,
 .Nm el_source ,
 .Nm el_resize ,
 .Nm el_line ,
+.Nm el_wline ,
 .Nm el_insertstr ,
+.Nm el_winsertstr ,
 .Nm el_deletestr ,
+.Nm el_wdeletestr ,
 .Nm history_init ,
+.Nm history_winit ,
 .Nm history_end ,
+.Nm history_wend ,
 .Nm history ,
+.Nm historyw ,
 .Nm tok_init ,
+.Nm tok_winit ,
 .Nm tok_end ,
+.Nm tok_wend ,
 .Nm tok_reset ,
+.Nm tok_wreset ,
 .Nm tok_line ,
+.Nm tok_wline ,
 .Nm tok_str
+.Nm tok_wstr
 .Nd line editor, history and tokenization functions
 .Sh LIBRARY
 .Lb libedit
@@ -66,17 +83,29 @@
 .Fn el_reset "EditLine *e"
 .Ft const char *
 .Fn el_gets "EditLine *e" "int *count"
+.Ft const wchar_t *
+.Fn el_wgets "EditLine *e" "int *count"
 .Ft int
 .Fn el_getc "EditLine *e" "char *ch"
+.Ft int
+.Fn el_wgetc "EditLine *e" "wchar_t *ch"
 .Ft void
 .Fn el_push "EditLine *e" "const char *str"
+.Ft void
+.Fn el_wpush "EditLine *e" "const wchar_t *str"
 .Ft int
 .Fn el_parse "EditLine *e" "int argc" "const char *argv[]"
 .Ft int
+.Fn el_wparse "EditLine *e" "int argc" "const wchar_t *argv[]"
+.Ft int
 .Fn el_set "EditLine *e" "int op" "..."
 .Ft int
+.Fn el_wset "EditLine *e" "int op" "..."
+.Ft int
 .Fn el_get "EditLine *e" "int op" "..."
 .Ft int
+.Fn el_wget "EditLine *e" "int op" "..."
+.Ft int
 .Fn el_source "EditLine *e" "const char *file"
 .Ft void
 .Fn el_resize "EditLine *e"
@@ -84,24 +113,44 @@
 .Fn el_line "EditLine *e"
 .Ft int
 .Fn el_insertstr "EditLine *e" "const char *str"
+.Ft int
+.Fn el_winsertstr "EditLine *e" "const wchar_t *str"
 .Ft void
 .Fn el_deletestr "EditLine *e" "int count"
+.Ft void
+.Fn el_wdeletestr "EditLine *e" "int count"
 .Ft History *
 .Fn history_init
+.Ft HistoryW *
+.Fn history_winit
 .Ft void
 .Fn history_end "History *h"
+.Ft void
+.Fn history_wend "HistoryW *h"
 .Ft int
 .Fn history "History *h" "HistEvent *ev" "int op" "..."
+.Ft int
+.Fn historyw "HistoryW *h" "HistEventW *ev" "int op" "..."
 .Ft Tokenizer *
 .Fn tok_init "const char *IFS"
+.Ft TokenizerW *
+.Fn tok_winit "const wchar_t *IFS"
 .Ft void
 .Fn tok_end "Tokenizer *t"
 .Ft void
+.Fn tok_wend "TokenizerW *t"
+.Ft void
 .Fn tok_reset "Tokenizer *t"
+.Ft void
+.Fn tok_wreset "TokenizerW *t"
 .Ft int
 .Fn tok_line "Tokenizer *t" "const LineInfo *li" "int *argc" "const char **argv[]" "int *cursorc" "int *cursoro"
 .Ft int
+.Fn tok_wline "TokenizerW *t" "const LineInfoW *li" "int *argc" "const wchar_t **argv[]" "int *cursorc" "int *cursoro"
+.Ft int
 .Fn tok_str "Tokenizer *t" "const char *str" "int *argc" "const char **argv[]"
+.Ft int
+.Fn tok_wstr "TokenizerW *t" "const wchar_t *str" "int *argc" "const wchar_t **argv[]"
 .Sh DESCRIPTION
 The
 .Nm
@@ -124,6 +173,9 @@
 and freed by
 .Fn el_end .
 .Pp
+The wide character functions behave the same way as their narrow
+counterparts.
+.Pp
 The following functions are available:
 .Bl -tag -width 4n
 .It Fn el_init
@@ -809,6 +861,7 @@
 and
 .Dv EL_RPROMPT .
 Jaromir Dolecek implemented the readline emulation.
+Johny Mattsson implemented wide character support.
 .Sh BUGS
 At this time, it is the responsibility of the caller to
 check the result of the

Index: src/lib/libedit/el.c
diff -u src/lib/libedit/el.c:1.57 src/lib/libedit/el.c:1.58
--- src/lib/libedit/el.c:1.57	Wed Dec 30 18:54:52 2009
+++ src/lib/libedit/el.c	Thu Dec 31 10:58:26 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: el.c,v 1.57 2009/12/30 23:54:52 christos Exp $	*/
+/*	$NetBSD: el.c,v 1.58 2009/12/31 15:58:26 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)el.c	8.2 (Berkeley) 1/3/94";
 #else
-__RCSID("$NetBSD: el.c,v 1.57 2009/12/30 23:54:52 christos Exp $");
+__RCSID("$NetBSD: el.c,v 1.58 2009/12/31 15:58:26 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -282,6 +282,7 @@
 	{
 		el_rfunc_t rc = va_arg(ap, el_rfunc_t);
 		rv = el_read_setfn(el, rc);
+		el->el_flags &= ~NARROW_READ;
 		break;
 	}
 

Index: src/lib/libedit/el.h
diff -u src/lib/libedit/el.h:1.20 src/lib/libedit/el.h:1.21
--- src/lib/libedit/el.h:1.20	Wed Dec 30 18:54:52 2009
+++ src/lib/libedit/el.h	Thu Dec 31 10:58:26 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: el.h,v 1.20 2009/12/30 23:54:52 christos Exp $	*/
+/*	$NetBSD: el.h,v 1.21 2009/12/31 15:58:26 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -60,6 +60,7 @@
 #define	CHARSET_IS_UTF8 0x10
 #define	IGNORE_EXTCHARS 0x20            /* Ignore characters read > 0xff */
 #define	NARROW_HISTORY	0x40
+#define	NARROW_READ	0x80
 
 typedef int bool_t;			/* True or not			*/
 

Index: src/lib/libedit/eln.c
diff -u src/lib/libedit/eln.c:1.2 src/lib/libedit/eln.c:1.3
--- src/lib/libedit/eln.c:1.2	Wed Dec 30 18:54:52 2009
+++ src/lib/libedit/eln.c	Thu Dec 31 10:58:26 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: eln.c,v 1.2 2009/12/30 23:54:52 christos Exp $	*/
+/*	$NetBSD: eln.c,v 1.3 2009/12/31 15:58:26 christos Exp $	*/
 
 /*-
  * Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 #include "config.h"
 #if !defined(lint) && !defined(SCCSID)
-__RCSID("$NetBSD: eln.c,v 1.2 2009/12/30 23:54:52 christos Exp $");
+__RCSID("$NetBSD: eln.c,v 1.3 2009/12/31 15:58:26 christos Exp $");
 #endif /* not lint && not SCCSID */
 
 #include "histedit.h"
@@ -205,6 +205,7 @@
 	/* XXX: do we need to change el_rfunc_t? */
 	case EL_GETCFN:         /* el_rfunc_t */
 		ret = el_wset(el, op, va_arg(ap, el_rfunc_t));
+		el->el_flags |= NARROW_READ;
 		break;
 	case EL_CLIENTDATA:     /* void * */
 		ret = el_wset(el, op, va_arg(ap, void *));

Index: src/lib/libedit/histedit.h
diff -u src/lib/libedit/histedit.h:1.43 src/lib/libedit/histedit.h:1.44
--- src/lib/libedit/histedit.h:1.43	Wed Dec 30 18:54:52 2009
+++ src/lib/libedit/histedit.h	Thu Dec 31 10:58:26 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: histedit.h,v 1.43 2009/12/30 23:54:52 christos Exp $	*/
+/*	$NetBSD: histedit.h,v 1.44 2009/12/31 15:58:26 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -141,7 +141,7 @@
 				/* , el_func_t);		*/
 #define	EL_HIST		10	/* , hist_fun_t, const ptr_t);	      set     */
 #define	EL_EDITMODE	11	/* , int);			      set/get */
-#define	EL_RPROMPT	12	/* , promt_func);		      set/get */
+#define	EL_RPROMPT	12	/* , prompt_func);		      set/get */
 #define	EL_GETCFN	13	/* , el_rfunc_t);		      set/get */
 #define	EL_CLIENTDATA	14	/* , void *);			      set/get */
 #define	EL_UNBUFFERED	15	/* , int);			      set/get */
@@ -150,8 +150,8 @@
 #define	EL_GETFP	18	/* , int, FILE **);		          get */
 #define	EL_SETFP	19	/* , int, FILE *);		      set     */
 #define	EL_REFRESH	20	/* , void);			      set     */
-#define	EL_PROMPT_ESC	21	/* , promt_func, wchar_t);	      set/get */
-#define	EL_RPROMPT_ESC	22	/* , promt_func, wchar_t);	      set/get */
+#define	EL_PROMPT_ESC	21	/* , prompt_func, wchar_t);	      set/get */
+#define	EL_RPROMPT_ESC	22	/* , prompt_func, wchar_t);	      set/get */
 
 #define	EL_BUILTIN_GETCFN	(NULL)
 

Index: src/lib/libedit/prompt.c
diff -u src/lib/libedit/prompt.c:1.17 src/lib/libedit/prompt.c:1.18
--- src/lib/libedit/prompt.c:1.17	Wed Dec 30 17:37:40 2009
+++ src/lib/libedit/prompt.c	Thu Dec 31 10:58:26 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: prompt.c,v 1.17 2009/12/30 22:37:40 christos Exp $	*/
+/*	$NetBSD: prompt.c,v 1.18 2009/12/31 15:58:26 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)prompt.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: prompt.c,v 1.17 2009/12/30 22:37:40 christos Exp $");
+__RCSID("$NetBSD: prompt.c,v 1.18 2009/12/31 15:58:26 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -94,7 +94,7 @@
 	if (elp->p_wide)
 		p = (*elp->p_func)(el);
 	else
-		p = ct_decode_string((char *)(*elp->p_func)(el),
+		p = ct_decode_string((char *)(void *)(*elp->p_func)(el),
 		    &el->el_scratch);
 
 	for (; *p; p++) {

Index: src/lib/libedit/read.c
diff -u src/lib/libedit/read.c:1.53 src/lib/libedit/read.c:1.54
--- src/lib/libedit/read.c:1.53	Wed Dec 30 17:37:40 2009
+++ src/lib/libedit/read.c	Thu Dec 31 10:58:26 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: read.c,v 1.53 2009/12/30 22:37:40 christos Exp $	*/
+/*	$NetBSD: read.c,v 1.54 2009/12/31 15:58:26 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)read.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: read.c,v 1.53 2009/12/30 22:37:40 christos Exp $");
+__RCSID("$NetBSD: read.c,v 1.54 2009/12/31 15:58:26 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -418,6 +418,10 @@
 	(void) fprintf(el->el_errfile, "Reading a character\n");
 #endif /* DEBUG_READ */
 	num_read = (*el->el_read.read_char)(el, cp);
+#ifdef WIDECHAR
+	if (el->el_flags & NARROW_READ)
+		*cp = *(char *)(void *)cp;
+#endif
 #ifdef DEBUG_READ
 	(void) fprintf(el->el_errfile, "Got it %c\n", *cp);
 #endif /* DEBUG_READ */

Reply via email to