6 Commits
0.1.2 ... 0.2.1

Author SHA1 Message Date
Joachim Nilsson
b935808b7d Minix editline v0.2.1
=====================

Fix Debian batch mode reader, read_redirected(), which is activated
when input comes from a file rather than a tty.  

The implementation of read_redirected() did not support lines longer
than 64 chars.  It tried to realloc(), but goofed up and instead
truncated all the first 64 chars.  The result was that each read
line only contained the reminder of a a division with 64... :-)
2008-06-09 22:55:13 +02:00
Joachim Nilsson
64cc1b5325 Minix editline v0.2.0
=====================

This marks the inclusion of the first set of Debian patches
and a fully working testit on an ARM Xscale target machine.
2008-06-09 21:40:41 +02:00
Joachim Nilsson
f7b2ea938d Check for tcgetattr() to enable HAVE_TCGETATTR in sysunix.c this seems
to work better on embedded targets running off the initial console.

Also, first merge of patches from Debian.  This part holds all of the
sysunix.c changes and some 8-bit patches and SIGSTP patches in the
editline.c file.
2008-06-09 21:37:01 +02:00
Joachim Nilsson
9a94fc9d4d Minix editline v0.1.4
=====================

Last bugfix of include/editline.h did the trick -- now it's all good!
2008-06-09 00:36:59 +02:00
Joachim Nilsson
cab8f18472 Fix return type of rl_reset_terminal() 2008-06-09 00:30:45 +02:00
Joachim Nilsson
06a7f578d5 Minix editline v0.1.3
=====================

Fix another build warning for Arm cross-gcc, which actually was v4.1.2
This time getpid() was missing unistd.h, but kill() was also missing 
signal.h.  Added test for signal.h, but left out unistd.h since we
already define SYS_UNIX -- which we should really check for instead...

The rest are cosmetic prototype or automake/autoconf fixes.
2008-06-09 00:17:48 +02:00
16 changed files with 137 additions and 41 deletions

View File

@@ -22,6 +22,9 @@
/* Define to 1 if you have the <sgtty.h> header file. */
#undef HAVE_SGTTY_H
/* Define to 1 if you have the <signal.h> header file. */
#undef HAVE_SIGNAL_H
/* Define to 1 if `stat' has the bug that it succeeds when given the
zero-length file name argument. */
#undef HAVE_STAT_EMPTY_STRING_BUG
@@ -61,6 +64,9 @@
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the `tcgetattr' function. */
#undef HAVE_TCGETATTR
/* Define to 1 if you have the <termios.h> header file. */
#undef HAVE_TERMIOS_H

26
configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.61 for Minix editline 0.1.2.
# Generated by GNU Autoconf 2.61 for Minix editline 0.2.1.
#
# Report bugs to <joachim@vmlinux.org>.
#
@@ -574,8 +574,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='Minix editline'
PACKAGE_TARNAME='minix-editline'
PACKAGE_VERSION='0.1.2'
PACKAGE_STRING='Minix editline 0.1.2'
PACKAGE_VERSION='0.2.1'
PACKAGE_STRING='Minix editline 0.2.1'
PACKAGE_BUGREPORT='joachim@vmlinux.org'
ac_unique_file="src/editline.c"
@@ -1208,7 +1208,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures Minix editline 0.1.2 to adapt to many kinds of systems.
\`configure' configures Minix editline 0.2.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1274,7 +1274,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of Minix editline 0.1.2:";;
short | recursive ) echo "Configuration of Minix editline 0.2.1:";;
esac
cat <<\_ACEOF
@@ -1358,7 +1358,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
Minix editline configure 0.1.2
Minix editline configure 0.2.1
generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1372,7 +1372,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by Minix editline $as_me 0.1.2, which was
It was created by Minix editline $as_me 0.2.1, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
@@ -2067,7 +2067,7 @@ fi
# Define the identity of the package.
PACKAGE='minix-editline'
VERSION='0.1.2'
VERSION='0.2.1'
cat >>confdefs.h <<_ACEOF
@@ -4290,7 +4290,8 @@ done
for ac_header in malloc.h sgtty.h stdlib.h string.h termio.h termios.h
for ac_header in malloc.h signal.h sgtty.h stdlib.h string.h termio.h termios.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -4874,7 +4875,8 @@ fi
for ac_func in strchr strdup strrchr
for ac_func in strchr strdup strrchr tcgetattr
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -5380,7 +5382,7 @@ exec 6>&1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by Minix editline $as_me 0.1.2, which was
This file was extended by Minix editline $as_me 0.2.1, which was
generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -5433,7 +5435,7 @@ Report bugs to <bug-autoconf@gnu.org>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
Minix editline config.status 0.1.2
Minix editline config.status 0.2.1
configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"

View File

@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
AC_INIT(Minix editline, 0.1.2, joachim@vmlinux.org)
AC_INIT(Minix editline, 0.2.1, joachim@vmlinux.org)
AC_CONFIG_SRCDIR([src/editline.c])
AC_CONFIG_HEADER([config.h])
@@ -20,7 +20,7 @@ AC_HEADER_DIRENT
AC_HEADER_STDC
# Check for malloc.h instead of AC_FUNC_MALLOC/REALLOC AIX and others
# mess up the traditional malloc check.
AC_CHECK_HEADERS([malloc.h sgtty.h stdlib.h string.h termio.h termios.h])
AC_CHECK_HEADERS([malloc.h signal.h sgtty.h stdlib.h string.h termio.h termios.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STAT
@@ -38,6 +38,6 @@ AC_PROG_GCC_TRADITIONAL
#AC_FUNC_MALLOC
#AC_FUNC_REALLOC
AC_FUNC_STAT
AC_CHECK_FUNCS([strchr strdup strrchr])
AC_CHECK_FUNCS([strchr strdup strrchr tcgetattr])
AC_OUTPUT(Makefile src/Makefile include/Makefile man/Makefile examples/Makefile)

View File

@@ -1,3 +1,5 @@
AUTOMAKE_OPTIONS = foreign
LDADD = $(top_builddir)/src/libedit.a
AM_CFLAGS = -I$(top_srcdir)/src

View File

@@ -142,6 +142,7 @@ sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = foreign
LDADD = $(top_builddir)/src/libedit.a
AM_CFLAGS = -I$(top_srcdir)/src
testit_SOURCES = testit.c
@@ -158,9 +159,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu examples/Makefile
$(AUTOMAKE) --foreign examples/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \

View File

@@ -1,2 +1,4 @@
AUTOMAKE_OPTIONS = foreign
library_includedir=$(includedir)
library_include_HEADERS = editline.h

View File

@@ -139,6 +139,7 @@ sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = foreign
library_includedir = $(includedir)
library_include_HEADERS = editline.h
all: all-am
@@ -153,9 +154,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu include/Makefile
$(AUTOMAKE) --foreign include/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \

View File

@@ -5,7 +5,7 @@
/*
** For compatibility with FSF readline.
*/
extern rl_reset_terminal(char *p);
extern void rl_reset_terminal(char *p);
extern void rl_initialize(void);
extern char *readline(const char *prompt);

View File

@@ -1,2 +1,4 @@
AUTOMAKE_OPTIONS = foreign
man3_MANS = editline.3
dist_man_MANS = $(man3_MANS)

View File

@@ -131,6 +131,7 @@ sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = foreign
man3_MANS = editline.3
dist_man_MANS = $(man3_MANS)
all: all-am
@@ -145,9 +146,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu man/Makefile
$(AUTOMAKE) --foreign man/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \

View File

@@ -1,3 +1,5 @@
AUTOMAKE_OPTIONS = foreign
lib_LIBRARIES = libedit.a
libedit_a_SOURCES = editline.c editline.h complete.c sysunix.c unix.h

View File

@@ -152,6 +152,7 @@ sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = foreign
lib_LIBRARIES = libedit.a
libedit_a_SOURCES = editline.c editline.h complete.c sysunix.c unix.h
all: all-am
@@ -167,9 +168,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu src/Makefile
$(AUTOMAKE) --foreign src/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \

View File

@@ -20,6 +20,8 @@
#define META(x) ((x) | 0x80)
#define ISMETA(x) ((x) & 0x80)
#define UNMETA(x) ((x) & 0x7F)
#define MAPSIZE 33
#define METAMAPSIZE 17
#if !defined(HIST_SIZE)
#define HIST_SIZE 20
#endif /* !defined(HIST_SIZE) */
@@ -63,6 +65,9 @@ int rl_erase;
int rl_intr;
int rl_kill;
int rl_quit;
#if defined(DO_SIGTSTP)
int rl_susp;
#endif /* defined(DO_SIGTSTP) */
STATIC CHAR NIL[] = "";
STATIC CONST CHAR *Input = NIL;
@@ -80,8 +85,8 @@ STATIC int Point;
STATIC int PushBack;
STATIC int Pushed;
STATIC int Signal;
FORWARD KEYMAP Map[33];
FORWARD KEYMAP MetaMap[17];
FORWARD KEYMAP Map[MAPSIZE];
FORWARD KEYMAP MetaMap[METAMAPSIZE];
STATIC SIZE_T Length;
STATIC SIZE_T ScreenCount;
STATIC SIZE_T ScreenSize;
@@ -90,18 +95,17 @@ STATIC int TTYwidth;
STATIC int TTYrows;
/* Display print 8-bit chars as `M-x' or as the actual 8-bit char? */
int rl_meta_chars = 0;
int rl_meta_chars = 1;
/*
** Declarations.
*/
STATIC CHAR *editinput();
extern int read();
extern int write();
#if defined(USE_TERMCAP)
extern char *getenv();
extern char *tgetstr();
extern int tgetent();
extern int tgetnum();
#endif /* defined(USE_TERMCAP) */
/*
@@ -119,7 +123,7 @@ TTYflush()
STATIC void
TTYput(c)
CHAR c;
CONST CHAR c;
{
Screen[ScreenCount] = c;
if (++ScreenCount >= ScreenSize - 1) {
@@ -864,12 +868,16 @@ emacs(c)
STATUS s;
KEYMAP *kp;
#if 0 /* Debian patch removes this to be able to handle 8-bit input */
/* This test makes it impossible to enter eight-bit characters when
* meta-char mode is enabled. */
OldPoint = Point;
if (rl_meta_chars && ISMETA(c)) {
Pushed = 1;
PushBack = UNMETA(c);
return meta();
}
#endif /* Debian patch removal. */
for (kp = Map; kp->Function; kp++)
if (kp->Key == c)
break;
@@ -884,7 +892,7 @@ STATIC STATUS
TTYspecial(c)
unsigned int c;
{
if (ISMETA(c))
if (rl_meta_chars && ISMETA(c))
return CSdispatch;
if (c == rl_erase || c == DEL)
@@ -907,6 +915,12 @@ TTYspecial(c)
Signal = SIGQUIT;
return CSeof;
}
#if defined(DO_SIGTSTP)
if (c == rl_susp) {
Signal = SIGTSTP;
return CSsignal;
}
#endif /* defined(DO_SIGTSTP) */
return CSdispatch;
}
@@ -973,6 +987,39 @@ hist_add(p)
H.Pos = H.Size - 1;
}
STATIC char *
read_redirected(void)
{
int size = MEM_INC;
char *p;
char *line;
char *end;
p = line = NEW(char, size);
end = p + size;
while (1) {
if (p == end) {
int oldpos = end - line;
size += MEM_INC;
p = RENEW(line, char, size);
end = p + size;
p += oldpos; /* Continue where we left off... */
}
if (read(0, p, 1) <= 0) {
/* Ignore "incomplete" lines at EOF, just like we do for a tty. */
free(line);
return NULL;
}
if (*p == '\n')
break;
p++;
}
*p = '\0';
return line;
}
/*
** For compatibility with FSF readline.
*/
@@ -995,6 +1042,11 @@ readline(prompt)
CHAR *line;
int s;
if (!isatty(0)) {
TTYflush();
return read_redirected();
}
if (Line == NULL) {
Length = MEM_INC;
if ((Line = NEW(CHAR, Length)) == NULL)
@@ -1119,7 +1171,7 @@ find_word()
}
STATIC STATUS
c_possible()
c_possible(void)
{
CHAR **av;
CHAR *word;
@@ -1140,7 +1192,7 @@ c_possible()
}
STATIC STATUS
c_complete()
c_complete(void)
{
CHAR *p, *q;
CHAR *word, *new;

View File

@@ -16,6 +16,9 @@
#ifdef HAVE_DIRENT_H
#include <dirent.h>
#endif
#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif
#ifdef SYS_UNIX
#include "unix.h"
#endif /* defined(SYS_UNIX) */
@@ -64,8 +67,11 @@ extern int rl_erase;
extern int rl_intr;
extern int rl_kill;
extern int rl_quit;
#if defined(DO_SIGTSTP)
extern int rl_susp;
#endif /* defined(DO_SIGTSTP) */
extern char *rl_complete();
extern int rl_list_possib();
extern int rl_list_possib(char *pathname, char ***avp);
extern void rl_ttyset();
extern void rl_add_slash();
@@ -78,6 +84,7 @@ extern char *strcat();
extern char *strchr();
extern char *strrchr();
extern char *strcpy();
extern char *strdup();
extern int strcmp();
extern int strlen();
extern int strncmp();

View File

@@ -15,19 +15,22 @@ rl_ttyset(Reset)
struct termios new;
if (Reset == 0) {
(void)tcgetattr(0, &old);
if (tcgetattr(0, &old) < 0) perror("tcgetattr");
rl_erase = old.c_cc[VERASE];
rl_kill = old.c_cc[VKILL];
rl_eof = old.c_cc[VEOF];
rl_intr = old.c_cc[VINTR];
rl_quit = old.c_cc[VQUIT];
#if defined(DO_SIGTSTP)
rl_susp = old.c_cc[VSUSP];
#endif /* defined(DO_SIGTSTP) */
new = old;
new.c_lflag &= ~(ECHO | ICANON | ISIG | IEXTEN);
new.c_iflag &= ~(ICRNL);
new.c_lflag &= ~(ECHO | ICANON | ISIG);
new.c_iflag &= ~(ISTRIP | INPCK);
new.c_cc[VMIN] = 1;
new.c_cc[VTIME] = 0;
(void)tcsetattr(0, TCSADRAIN, &new);
if (tcsetattr(0, TCSADRAIN, &new) < 0) perror("tcsetattr");
}
else
(void)tcsetattr(0, TCSADRAIN, &old);
@@ -51,11 +54,13 @@ rl_ttyset(Reset)
rl_eof = old.c_cc[VEOF];
rl_intr = old.c_cc[VINTR];
rl_quit = old.c_cc[VQUIT];
#if defined(DO_SIGTSTP)
rl_susp = old.c_cc[VSUSP];
#endif /* defined(DO_SIGTSTP) */
new = old;
new.c_cc[VINTR] = -1;
new.c_cc[VQUIT] = -1;
new.c_lflag &= ~(ECHO | ICANON);
new.c_lflag &= ~(ECHO | ICANON | ISIG);
new.c_iflag &= ~(ISTRIP | INPCK);
new.c_cc[VMIN] = 1;
new.c_cc[VTIME] = 0;
(void)ioctl(0, TCSETAW, &new);
@@ -75,6 +80,9 @@ rl_ttyset(Reset)
static struct tchars old_tchars;
struct sgttyb new_sgttyb;
struct tchars new_tchars;
#if defined(DO_SIGTSTP)
struct ltchars old_ltchars;
#endif /* defined(DO_SIGTSTP) */
if (Reset == 0) {
(void)ioctl(0, TIOCGETP, &old_sgttyb);
@@ -86,9 +94,17 @@ rl_ttyset(Reset)
rl_intr = old_tchars.t_intrc;
rl_quit = old_tchars.t_quitc;
#if defined(DO_SIGTSTP)
(void)ioctl(0, TIOCGLTC, &old_ltchars);
rl_susp = old_ltchars.t_suspc;
#endif /* defined(DO_SIGTSTP) */
new_sgttyb = old_sgttyb;
new_sgttyb.sg_flags &= ~ECHO;
new_sgttyb.sg_flags |= RAW;
#if defined(PASS8)
new_sgttyb.sg_flags |= PASS8;
#endif /* defined(PASS8) */
(void)ioctl(0, TIOCSETP, &new_sgttyb);
new_tchars = old_tchars;

View File

@@ -8,6 +8,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#if defined(USE_DIRENT)
#include <dirent.h>