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

26
configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # 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>. # Report bugs to <joachim@vmlinux.org>.
# #
@@ -574,8 +574,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package. # Identity of this package.
PACKAGE_NAME='Minix editline' PACKAGE_NAME='Minix editline'
PACKAGE_TARNAME='minix-editline' PACKAGE_TARNAME='minix-editline'
PACKAGE_VERSION='0.1.2' PACKAGE_VERSION='0.2.1'
PACKAGE_STRING='Minix editline 0.1.2' PACKAGE_STRING='Minix editline 0.2.1'
PACKAGE_BUGREPORT='joachim@vmlinux.org' PACKAGE_BUGREPORT='joachim@vmlinux.org'
ac_unique_file="src/editline.c" 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. # 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. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF 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]... Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1274,7 +1274,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in 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 esac
cat <<\_ACEOF cat <<\_ACEOF
@@ -1358,7 +1358,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
Minix editline configure 0.1.2 Minix editline configure 0.2.1
generated by GNU Autoconf 2.61 generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 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 This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. 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 generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@ $ $0 $@
@@ -2067,7 +2067,7 @@ fi
# Define the identity of the package. # Define the identity of the package.
PACKAGE='minix-editline' PACKAGE='minix-editline'
VERSION='0.1.2' VERSION='0.2.1'
cat >>confdefs.h <<_ACEOF 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 do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` 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 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 do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ echo "$as_me:$LINENO: checking for $ac_func" >&5 { 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 # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" 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 generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
@@ -5433,7 +5435,7 @@ Report bugs to <bug-autoconf@gnu.org>."
_ACEOF _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\ 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, configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" 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. # Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61) 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_SRCDIR([src/editline.c])
AC_CONFIG_HEADER([config.h]) AC_CONFIG_HEADER([config.h])
@@ -20,7 +20,7 @@ AC_HEADER_DIRENT
AC_HEADER_STDC AC_HEADER_STDC
# Check for malloc.h instead of AC_FUNC_MALLOC/REALLOC AIX and others # Check for malloc.h instead of AC_FUNC_MALLOC/REALLOC AIX and others
# mess up the traditional malloc check. # 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. # Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STAT AC_HEADER_STAT
@@ -38,6 +38,6 @@ AC_PROG_GCC_TRADITIONAL
#AC_FUNC_MALLOC #AC_FUNC_MALLOC
#AC_FUNC_REALLOC #AC_FUNC_REALLOC
AC_FUNC_STAT 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) 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 LDADD = $(top_builddir)/src/libedit.a
AM_CFLAGS = -I$(top_srcdir)/src AM_CFLAGS = -I$(top_srcdir)/src

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -20,6 +20,8 @@
#define META(x) ((x) | 0x80) #define META(x) ((x) | 0x80)
#define ISMETA(x) ((x) & 0x80) #define ISMETA(x) ((x) & 0x80)
#define UNMETA(x) ((x) & 0x7F) #define UNMETA(x) ((x) & 0x7F)
#define MAPSIZE 33
#define METAMAPSIZE 17
#if !defined(HIST_SIZE) #if !defined(HIST_SIZE)
#define HIST_SIZE 20 #define HIST_SIZE 20
#endif /* !defined(HIST_SIZE) */ #endif /* !defined(HIST_SIZE) */
@@ -63,6 +65,9 @@ int rl_erase;
int rl_intr; int rl_intr;
int rl_kill; int rl_kill;
int rl_quit; int rl_quit;
#if defined(DO_SIGTSTP)
int rl_susp;
#endif /* defined(DO_SIGTSTP) */
STATIC CHAR NIL[] = ""; STATIC CHAR NIL[] = "";
STATIC CONST CHAR *Input = NIL; STATIC CONST CHAR *Input = NIL;
@@ -80,8 +85,8 @@ STATIC int Point;
STATIC int PushBack; STATIC int PushBack;
STATIC int Pushed; STATIC int Pushed;
STATIC int Signal; STATIC int Signal;
FORWARD KEYMAP Map[33]; FORWARD KEYMAP Map[MAPSIZE];
FORWARD KEYMAP MetaMap[17]; FORWARD KEYMAP MetaMap[METAMAPSIZE];
STATIC SIZE_T Length; STATIC SIZE_T Length;
STATIC SIZE_T ScreenCount; STATIC SIZE_T ScreenCount;
STATIC SIZE_T ScreenSize; STATIC SIZE_T ScreenSize;
@@ -90,18 +95,17 @@ STATIC int TTYwidth;
STATIC int TTYrows; STATIC int TTYrows;
/* Display print 8-bit chars as `M-x' or as the actual 8-bit char? */ /* 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. ** Declarations.
*/ */
STATIC CHAR *editinput(); STATIC CHAR *editinput();
extern int read();
extern int write();
#if defined(USE_TERMCAP) #if defined(USE_TERMCAP)
extern char *getenv(); extern char *getenv();
extern char *tgetstr(); extern char *tgetstr();
extern int tgetent(); extern int tgetent();
extern int tgetnum();
#endif /* defined(USE_TERMCAP) */ #endif /* defined(USE_TERMCAP) */
/* /*
@@ -119,7 +123,7 @@ TTYflush()
STATIC void STATIC void
TTYput(c) TTYput(c)
CHAR c; CONST CHAR c;
{ {
Screen[ScreenCount] = c; Screen[ScreenCount] = c;
if (++ScreenCount >= ScreenSize - 1) { if (++ScreenCount >= ScreenSize - 1) {
@@ -864,12 +868,16 @@ emacs(c)
STATUS s; STATUS s;
KEYMAP *kp; 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; OldPoint = Point;
if (rl_meta_chars && ISMETA(c)) { if (rl_meta_chars && ISMETA(c)) {
Pushed = 1; Pushed = 1;
PushBack = UNMETA(c); PushBack = UNMETA(c);
return meta(); return meta();
} }
#endif /* Debian patch removal. */
for (kp = Map; kp->Function; kp++) for (kp = Map; kp->Function; kp++)
if (kp->Key == c) if (kp->Key == c)
break; break;
@@ -884,7 +892,7 @@ STATIC STATUS
TTYspecial(c) TTYspecial(c)
unsigned int c; unsigned int c;
{ {
if (ISMETA(c)) if (rl_meta_chars && ISMETA(c))
return CSdispatch; return CSdispatch;
if (c == rl_erase || c == DEL) if (c == rl_erase || c == DEL)
@@ -907,6 +915,12 @@ TTYspecial(c)
Signal = SIGQUIT; Signal = SIGQUIT;
return CSeof; return CSeof;
} }
#if defined(DO_SIGTSTP)
if (c == rl_susp) {
Signal = SIGTSTP;
return CSsignal;
}
#endif /* defined(DO_SIGTSTP) */
return CSdispatch; return CSdispatch;
} }
@@ -973,6 +987,39 @@ hist_add(p)
H.Pos = H.Size - 1; 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. ** For compatibility with FSF readline.
*/ */
@@ -995,6 +1042,11 @@ readline(prompt)
CHAR *line; CHAR *line;
int s; int s;
if (!isatty(0)) {
TTYflush();
return read_redirected();
}
if (Line == NULL) { if (Line == NULL) {
Length = MEM_INC; Length = MEM_INC;
if ((Line = NEW(CHAR, Length)) == NULL) if ((Line = NEW(CHAR, Length)) == NULL)
@@ -1119,7 +1171,7 @@ find_word()
} }
STATIC STATUS STATIC STATUS
c_possible() c_possible(void)
{ {
CHAR **av; CHAR **av;
CHAR *word; CHAR *word;
@@ -1140,7 +1192,7 @@ c_possible()
} }
STATIC STATUS STATIC STATUS
c_complete() c_complete(void)
{ {
CHAR *p, *q; CHAR *p, *q;
CHAR *word, *new; CHAR *word, *new;

View File

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

View File

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

View File

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