Initial import of v4.1
This commit is contained in:
parent
d48ce863c5
commit
152b411261
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/libreadline/dist/; revision=58310
@ -214,3 +214,126 @@ Makefile.in,{doc,examples,shlib}/Makefile.in
|
|||||||
- set SHELL from @MAKE_SHELL@
|
- set SHELL from @MAKE_SHELL@
|
||||||
|
|
||||||
[readline-4.0 released]
|
[readline-4.0 released]
|
||||||
|
|
||||||
|
3/11
|
||||||
|
----
|
||||||
|
doc/Makefile.in
|
||||||
|
- removed references to HTMLTOC, since separate HTML table-of-contents
|
||||||
|
files are no longer created
|
||||||
|
|
||||||
|
examples/Makefile.in
|
||||||
|
- remove `*.exe' in clean target for MS-DOS
|
||||||
|
|
||||||
|
Makefile.in
|
||||||
|
- make `readline' target depend on ./libreadline.a
|
||||||
|
- configure now substitutes TERMCAP_LIB into Makefile.in
|
||||||
|
- use ${TERMCAP_LIB} instead of -ltermcap in recipe for `readline'
|
||||||
|
- clean target now removes readline and readline.exe in case they
|
||||||
|
get built
|
||||||
|
|
||||||
|
configure.in
|
||||||
|
- use `pwd.exe' to set BUILD_DIR on MS-DOS DJGPP
|
||||||
|
|
||||||
|
3/15
|
||||||
|
----
|
||||||
|
support/shlib-install
|
||||||
|
- Irix 5.x and Irix 6.x should install shared libraries like Solaris 2
|
||||||
|
- changes for installing on hp-ux 1[01].x
|
||||||
|
|
||||||
|
3/23
|
||||||
|
----
|
||||||
|
configure.in
|
||||||
|
- make sure that the $CC argument to shobj-conf is quoted
|
||||||
|
|
||||||
|
4/8
|
||||||
|
---
|
||||||
|
|
||||||
|
xmalloc.h, rlprivate.h, rlshell.h
|
||||||
|
- new files
|
||||||
|
|
||||||
|
Makefile.in,shlib/Makefile.in
|
||||||
|
- add dependencies on xmalloc.h, rlshell.h
|
||||||
|
- add xmalloc.h, rlprivate.h, rlshell.h to list of header files
|
||||||
|
|
||||||
|
MANIFEST
|
||||||
|
- add xmalloc.h, rlprivate.h, rlshell.h
|
||||||
|
|
||||||
|
4/9
|
||||||
|
---
|
||||||
|
Makefile.in,shlib/Makefile.in
|
||||||
|
- add dependencies on rlprivate.h
|
||||||
|
|
||||||
|
4/13
|
||||||
|
----
|
||||||
|
doc/Makefile.in
|
||||||
|
- add variable, PSDVI, which is the desired resolution of the
|
||||||
|
generated postscript files. Set to 300 because I don't have
|
||||||
|
any 600-dpi printers
|
||||||
|
- set LANGUAGE= before calling makeinfo, so messages are in English
|
||||||
|
- add rluserman.{info,dvi,ps,html} to appropriate variables
|
||||||
|
- add rules to create rluserman.{info,dvi,ps,html}
|
||||||
|
- install and uninstall rluserman.info, but don't update the directory
|
||||||
|
file in $(infodir) yet
|
||||||
|
|
||||||
|
MANIFEST
|
||||||
|
- add doc/rluserman.{texinfo,info,dvi,ps,html}
|
||||||
|
|
||||||
|
4/30
|
||||||
|
----
|
||||||
|
configure.in
|
||||||
|
- updated library version to 4.1
|
||||||
|
|
||||||
|
5/3
|
||||||
|
---
|
||||||
|
configure.in
|
||||||
|
- SHLIB_MAJOR and SHLIB_MINOR shared library version numbers are
|
||||||
|
constructed from $LIBRARY_VERSION and substituted into Makefiles
|
||||||
|
|
||||||
|
5/5
|
||||||
|
---
|
||||||
|
support/shlib-install
|
||||||
|
- OSF/1 installs shared libraries like Solaris
|
||||||
|
|
||||||
|
Makefile.in
|
||||||
|
- broke the header file install and uninstall into two new targets:
|
||||||
|
install-headers and uninstall-headers
|
||||||
|
- install and uninstall depend on install-headers and uninstall-headers
|
||||||
|
respectively
|
||||||
|
- changed install-shared and uninstall-shared targets to depend on
|
||||||
|
install-headers and uninstall-headers, respectively, so users may
|
||||||
|
choose to install only the shared libraries. I'm not sure about
|
||||||
|
the uninstall one yet -- maybe it should check whether or not
|
||||||
|
the static libraries are installed and not remove the header files
|
||||||
|
if they are
|
||||||
|
|
||||||
|
9/3
|
||||||
|
---
|
||||||
|
configure.in, config.h.in
|
||||||
|
- added test for memmove (for later use)
|
||||||
|
- changed version to 4.1-beta1
|
||||||
|
|
||||||
|
9/13
|
||||||
|
----
|
||||||
|
examples/rlfe.c
|
||||||
|
- Per Bothner's `rlfe' readline front-end program
|
||||||
|
|
||||||
|
examples/Makefile.in
|
||||||
|
- added rules to build rlfe
|
||||||
|
|
||||||
|
9/21
|
||||||
|
----
|
||||||
|
support/shlib-install
|
||||||
|
- changes to handle FreeBSD-3.x elf or a.out shared libraries, which
|
||||||
|
have different semantics and need different naming conventions
|
||||||
|
|
||||||
|
1/24/2000
|
||||||
|
---------
|
||||||
|
doc/Makefile.in
|
||||||
|
- remove *.bt and *.bts on `make clean'
|
||||||
|
|
||||||
|
2/4
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
configure.in
|
||||||
|
- changed LIBVERSION to 4.1-beta5
|
||||||
|
@ -1,3 +1,111 @@
|
|||||||
|
This document details the changes between this version, readline-4.1,
|
||||||
|
and the previous version, readline-4.0.
|
||||||
|
|
||||||
|
1. Changes to Readline
|
||||||
|
|
||||||
|
a. Changed the HTML documents so that the table-of-contents is no longer
|
||||||
|
a separate file.
|
||||||
|
|
||||||
|
b. Changes to the shared object configuration for: Irix 5.x, Irix 6.x,
|
||||||
|
OSF/1.
|
||||||
|
|
||||||
|
c. The shared library major and minor versions are now constructed
|
||||||
|
automatically by configure and substituted into the makefiles.
|
||||||
|
|
||||||
|
d. It's now possible to install the shared libraries separately from the
|
||||||
|
static libraries.
|
||||||
|
|
||||||
|
e. The history library tries to truncate the history file only if it is a
|
||||||
|
regular file.
|
||||||
|
|
||||||
|
f. A bug that caused _rl_dispatch to address negative array indices on
|
||||||
|
systems with signed chars was fixed.
|
||||||
|
|
||||||
|
g. rl-yank-nth-arg now leaves the history position the same as when it was
|
||||||
|
called.
|
||||||
|
|
||||||
|
h. Changes to the completion code to handle MS-DOS drive-letter:pathname
|
||||||
|
filenames.
|
||||||
|
|
||||||
|
i. Completion is now case-insensitive by default on MS-DOS.
|
||||||
|
|
||||||
|
j. Fixes to the history file manipulation code for MS-DOS.
|
||||||
|
|
||||||
|
k. Readline attempts to bind the arrow keys to appropriate defaults on MS-DOS.
|
||||||
|
|
||||||
|
l. Some fixes were made to the redisplay code for better operation on MS-DOS.
|
||||||
|
|
||||||
|
m. The quoted-insert code will now insert tty special chars like ^C.
|
||||||
|
|
||||||
|
n. A bug was fixed that caused the display code to reference memory before
|
||||||
|
the start of the prompt string.
|
||||||
|
|
||||||
|
o. More support for __EMX__ (OS/2).
|
||||||
|
|
||||||
|
p. A bug was fixed in readline's signal handling that could cause infinite
|
||||||
|
recursion in signal handlers.
|
||||||
|
|
||||||
|
q. A bug was fixed that caused the point to be less than zero when rl_forward
|
||||||
|
was given a very large numeric argument.
|
||||||
|
|
||||||
|
r. The vi-mode code now gets characters via the application-settable value
|
||||||
|
of rl_getc_function rather than calling rl_getc directly.
|
||||||
|
|
||||||
|
s. The history file code now uses O_BINARY mode when reading and writing
|
||||||
|
the history file on cygwin32.
|
||||||
|
|
||||||
|
t. Fixed a bug in the redisplay code for lines with more than 256 line
|
||||||
|
breaks.
|
||||||
|
|
||||||
|
u. A bug was fixed which caused invisible character markers to not be
|
||||||
|
stripped from the prompt string if the terminal was in no-echo mode.
|
||||||
|
|
||||||
|
v. Readline no longer tries to get the variables it needs for redisplay
|
||||||
|
from the termcap entry if the calling application has specified its
|
||||||
|
own redisplay function. Readline treats the terminal as `dumb' in
|
||||||
|
this case.
|
||||||
|
|
||||||
|
w. Fixes to the SIGWINCH code so that a multiple-line prompt with escape
|
||||||
|
sequences is redrawn correctly.
|
||||||
|
|
||||||
|
x. Changes to the install and install-shared targets so that the libraries
|
||||||
|
and header files are installed separately.
|
||||||
|
|
||||||
|
2. New Features in Readline
|
||||||
|
|
||||||
|
a. A new Readline `user manual' is in doc/rluserman.texinfo.
|
||||||
|
|
||||||
|
b. Parentheses matching is now always compiled into readline, and enabled
|
||||||
|
or disabled when the value of the `blink-matching-paren' variable is
|
||||||
|
changed.
|
||||||
|
|
||||||
|
c. MS-DOS systems now use ~/_inputrc as the last-ditch inputrc filename.
|
||||||
|
|
||||||
|
d. MS-DOS systems now use ~/_history as the default history file.
|
||||||
|
|
||||||
|
e. history-search-{forward,backward} now leave the point at the end of the
|
||||||
|
line when the string to search for is empty, like
|
||||||
|
{reverse,forward}-search-history.
|
||||||
|
|
||||||
|
f. history-search-{forward,backward} now leave the last history line found
|
||||||
|
in the readline buffer if the second or subsequent search fails.
|
||||||
|
|
||||||
|
g. New function for use by applications: rl_on_new_line_with_prompt, used
|
||||||
|
when an application displays the prompt itself before calling readline().
|
||||||
|
|
||||||
|
h. New variable for use by applications: rl_already_prompted. An application
|
||||||
|
that displays the prompt itself before calling readline() must set this to
|
||||||
|
a non-zero value.
|
||||||
|
|
||||||
|
i. A new variable, rl_gnu_readline_p, always 1. The intent is that an
|
||||||
|
application can verify whether or not it is linked with the `real'
|
||||||
|
readline library or some substitute.
|
||||||
|
|
||||||
|
j. Per Bothner's `rlfe' (pronounced `Ralphie') readline front-end program
|
||||||
|
is included in the examples subdirectory, though it is not built
|
||||||
|
by default.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
This document details the changes between this version, readline-4.0,
|
This document details the changes between this version, readline-4.0,
|
||||||
and the previous version, readline-2.2.
|
and the previous version, readline-2.2.
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Version 2, June 1991
|
Version 2, June 1991
|
||||||
|
|
||||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA
|
59 Temple Place, Suite 330, Boston, MA 02111 USA
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found.
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
@ -11,8 +11,8 @@ MANIFEST f
|
|||||||
INSTALL f
|
INSTALL f
|
||||||
CHANGELOG f
|
CHANGELOG f
|
||||||
CHANGES f
|
CHANGES f
|
||||||
|
USAGE f
|
||||||
aclocal.m4 f
|
aclocal.m4 f
|
||||||
acconfig.h f
|
|
||||||
config.h.in f
|
config.h.in f
|
||||||
configure f
|
configure f
|
||||||
configure.in f
|
configure.in f
|
||||||
@ -28,11 +28,14 @@ posixstat.h f
|
|||||||
readline.h f
|
readline.h f
|
||||||
rlconf.h f
|
rlconf.h f
|
||||||
rldefs.h f
|
rldefs.h f
|
||||||
|
rlprivate.h f
|
||||||
|
rlshell.h f
|
||||||
rlstdc.h f
|
rlstdc.h f
|
||||||
rltty.h f
|
rltty.h f
|
||||||
rlwinsize.h f
|
rlwinsize.h f
|
||||||
tcap.h f
|
tcap.h f
|
||||||
tilde.h f
|
tilde.h f
|
||||||
|
xmalloc.h f
|
||||||
bind.c f
|
bind.c f
|
||||||
complete.c f
|
complete.c f
|
||||||
display.c f
|
display.c f
|
||||||
@ -77,6 +80,7 @@ doc/manvers.texinfo f
|
|||||||
doc/rlman.texinfo f
|
doc/rlman.texinfo f
|
||||||
doc/rltech.texinfo f
|
doc/rltech.texinfo f
|
||||||
doc/rluser.texinfo f
|
doc/rluser.texinfo f
|
||||||
|
doc/rluserman.texinfo f
|
||||||
doc/hist.texinfo f
|
doc/hist.texinfo f
|
||||||
doc/hstech.texinfo f
|
doc/hstech.texinfo f
|
||||||
doc/hsuser.texinfo f
|
doc/hsuser.texinfo f
|
||||||
@ -84,8 +88,10 @@ doc/readline.3 f
|
|||||||
doc/texi2dvi f
|
doc/texi2dvi f
|
||||||
doc/texi2html f
|
doc/texi2html f
|
||||||
examples/Makefile.in f
|
examples/Makefile.in f
|
||||||
|
examples/excallback.c f
|
||||||
examples/fileman.c f
|
examples/fileman.c f
|
||||||
examples/manexamp.c f
|
examples/manexamp.c f
|
||||||
|
examples/rlfe.c f
|
||||||
examples/rltest.c f
|
examples/rltest.c f
|
||||||
examples/rl.c f
|
examples/rl.c f
|
||||||
examples/rlversion.c f
|
examples/rlversion.c f
|
||||||
@ -94,10 +100,14 @@ examples/Inputrc f
|
|||||||
# formatted documentation, from MANIFEST.doc
|
# formatted documentation, from MANIFEST.doc
|
||||||
doc/readline.ps f
|
doc/readline.ps f
|
||||||
doc/history.ps f
|
doc/history.ps f
|
||||||
|
doc/rluserman.ps f
|
||||||
doc/readline.dvi f
|
doc/readline.dvi f
|
||||||
doc/history.dvi f
|
doc/history.dvi f
|
||||||
|
doc/rluserman.dvi f
|
||||||
doc/readline.info f
|
doc/readline.info f
|
||||||
doc/history.info f
|
doc/history.info f
|
||||||
|
doc/rluserman.info f
|
||||||
doc/readline.html f
|
doc/readline.html f
|
||||||
doc/history.html f
|
doc/history.html f
|
||||||
|
doc/rluserman.html f
|
||||||
doc/readline.0 f
|
doc/readline.0 f
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
|
||||||
RL_LIBRARY_VERSION = @LIBVERSION@
|
RL_LIBRARY_VERSION = @LIBVERSION@
|
||||||
RL_LIBRARY_NAME = readline
|
RL_LIBRARY_NAME = readline
|
||||||
|
|
||||||
@ -60,6 +60,8 @@ CPPFLAGS = @CPPFLAGS@
|
|||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
LOCAL_DEFS = @LOCAL_DEFS@
|
LOCAL_DEFS = @LOCAL_DEFS@
|
||||||
|
|
||||||
|
TERMCAP_LIB = @TERMCAP_LIB@
|
||||||
|
|
||||||
# For libraries which include headers from other libraries.
|
# For libraries which include headers from other libraries.
|
||||||
INCLUDES = -I. -I$(srcdir) -I$(includedir)
|
INCLUDES = -I. -I$(srcdir) -I$(includedir)
|
||||||
|
|
||||||
@ -88,7 +90,7 @@ CSOURCES = $(srcdir)/readline.c $(srcdir)/funmap.c $(srcdir)/keymaps.c \
|
|||||||
# The header files for this library.
|
# The header files for this library.
|
||||||
HSOURCES = readline.h rldefs.h chardefs.h keymaps.h history.h histlib.h \
|
HSOURCES = readline.h rldefs.h chardefs.h keymaps.h history.h histlib.h \
|
||||||
posixstat.h posixdir.h posixjmp.h tilde.h rlconf.h rltty.h \
|
posixstat.h posixdir.h posixjmp.h tilde.h rlconf.h rltty.h \
|
||||||
ansi_stdlib.h tcap.h rlstdc.h
|
ansi_stdlib.h tcap.h rlstdc.h xmalloc.h rlprivate.h rlshell.h
|
||||||
|
|
||||||
HISTOBJ = history.o histexpand.o histfile.o histsearch.o shell.o
|
HISTOBJ = history.o histexpand.o histfile.o histsearch.o shell.o
|
||||||
TILDEOBJ = tilde.o
|
TILDEOBJ = tilde.o
|
||||||
@ -115,6 +117,8 @@ INSTALLED_HEADERS = readline.h chardefs.h keymaps.h history.h tilde.h \
|
|||||||
|
|
||||||
all: static
|
all: static
|
||||||
|
|
||||||
|
everything: static shared examples
|
||||||
|
|
||||||
static: $(STATIC_LIBS)
|
static: $(STATIC_LIBS)
|
||||||
|
|
||||||
libreadline.a: $(OBJECTS)
|
libreadline.a: $(OBJECTS)
|
||||||
@ -127,8 +131,8 @@ libhistory.a: $(HISTOBJ) xmalloc.o
|
|||||||
$(AR) $(ARFLAGS) $@ $(HISTOBJ) xmalloc.o
|
$(AR) $(ARFLAGS) $@ $(HISTOBJ) xmalloc.o
|
||||||
-test -n "$(RANLIB)" && $(RANLIB) $@
|
-test -n "$(RANLIB)" && $(RANLIB) $@
|
||||||
|
|
||||||
readline: $(OBJECTS) readline.h rldefs.h chardefs.h
|
readline: $(OBJECTS) readline.h rldefs.h chardefs.h ./libreadline.a
|
||||||
$(CC) $(CCFLAGS) -o $@ ./examples/rl.c ./libreadline.a -ltermcap
|
$(CC) $(CCFLAGS) -o $@ ./examples/rl.c ./libreadline.a ${TERMCAP_LIB}
|
||||||
|
|
||||||
Makefile makefile: config.status $(srcdir)/Makefile.in
|
Makefile makefile: config.status $(srcdir)/Makefile.in
|
||||||
CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status
|
CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status
|
||||||
@ -147,8 +151,8 @@ stamp-h: config.status $(srcdir)/config.h.in
|
|||||||
CONFIG_FILES= CONFIG_HEADERS=config.h ./config.status
|
CONFIG_FILES= CONFIG_HEADERS=config.h ./config.status
|
||||||
echo > $@
|
echo > $@
|
||||||
|
|
||||||
$(srcdir)/configure: $(srcdir)/configure.in ## Comment-me-out in distribution
|
#$(srcdir)/configure: $(srcdir)/configure.in ## Comment-me-out in distribution
|
||||||
cd $(srcdir) && autoconf ## Comment-me-out in distribution
|
# cd $(srcdir) && autoconf ## Comment-me-out in distribution
|
||||||
|
|
||||||
|
|
||||||
shared: force
|
shared: force
|
||||||
@ -165,10 +169,18 @@ examples: force
|
|||||||
|
|
||||||
force:
|
force:
|
||||||
|
|
||||||
install: installdirs $(STATIC_LIBS)
|
install-headers: installdirs ${INSTALLED_HEADERS}
|
||||||
for f in ${INSTALLED_HEADERS}; do \
|
for f in ${INSTALLED_HEADERS}; do \
|
||||||
$(INSTALL_DATA) $(srcdir)/$$f $(includedir)/readline ; \
|
$(INSTALL_DATA) $(srcdir)/$$f $(includedir)/readline ; \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
uninstall-headers:
|
||||||
|
-test -n "$(includedir)" && cd $(includedir)/readline && \
|
||||||
|
${RM} ${INSTALLED_HEADERS}
|
||||||
|
|
||||||
|
maybe-uninstall-headers: uninstall-headers
|
||||||
|
|
||||||
|
install: installdirs $(STATIC_LIBS) install-headers
|
||||||
-$(MV) $(libdir)/libreadline.a $(libdir)/libreadline.old
|
-$(MV) $(libdir)/libreadline.a $(libdir)/libreadline.old
|
||||||
$(INSTALL_DATA) libreadline.a $(libdir)/libreadline.a
|
$(INSTALL_DATA) libreadline.a $(libdir)/libreadline.a
|
||||||
-test -n "$(RANLIB)" && $(RANLIB) -t $(libdir)/libreadline.a
|
-test -n "$(RANLIB)" && $(RANLIB) -t $(libdir)/libreadline.a
|
||||||
@ -184,16 +196,14 @@ installdirs: $(srcdir)/support/mkdirs
|
|||||||
-$(SHELL) $(srcdir)/support/mkdirs $(includedir) \
|
-$(SHELL) $(srcdir)/support/mkdirs $(includedir) \
|
||||||
$(includedir)/readline $(libdir) $(infodir) $(man3dir)
|
$(includedir)/readline $(libdir) $(infodir) $(man3dir)
|
||||||
|
|
||||||
uninstall:
|
uninstall: uninstall-headers
|
||||||
-test -n "$(includedir)" && cd $(includedir)/readline && \
|
|
||||||
${RM} ${INSTALLED_HEADERS}
|
|
||||||
-test -n "$(libdir)" && cd $(libdir) && \
|
-test -n "$(libdir)" && cd $(libdir) && \
|
||||||
${RM} libreadline.a libreadline.old libhistory.a libhistory.old $(SHARED_LIBS)
|
${RM} libreadline.a libreadline.old libhistory.a libhistory.old $(SHARED_LIBS)
|
||||||
|
|
||||||
install-shared: installdirs shared
|
install-shared: installdirs install-headers shared
|
||||||
-( cd shlib ; ${MAKE} ${MFLAGS} install )
|
-( cd shlib ; ${MAKE} ${MFLAGS} install )
|
||||||
|
|
||||||
uninstall-shared:
|
uninstall-shared: maybe-uninstall-headers
|
||||||
-( cd shlib; ${MAKE} ${MFLAGS} uninstall )
|
-( cd shlib; ${MAKE} ${MFLAGS} uninstall )
|
||||||
|
|
||||||
TAGS: force
|
TAGS: force
|
||||||
@ -204,6 +214,7 @@ tags: force
|
|||||||
|
|
||||||
clean: force
|
clean: force
|
||||||
$(RM) $(OBJECTS) $(STATIC_LIBS)
|
$(RM) $(OBJECTS) $(STATIC_LIBS)
|
||||||
|
$(RM) readline readline.exe
|
||||||
-( cd shlib && $(MAKE) $(MFLAGS) $@ )
|
-( cd shlib && $(MAKE) $(MFLAGS) $@ )
|
||||||
-( cd doc && $(MAKE) $(MFLAGS) $@ )
|
-( cd doc && $(MAKE) $(MFLAGS) $@ )
|
||||||
-( cd examples && $(MAKE) $(MFLAGS) $@ )
|
-( cd examples && $(MAKE) $(MFLAGS) $@ )
|
||||||
@ -231,7 +242,7 @@ installcheck:
|
|||||||
dist: force
|
dist: force
|
||||||
@echo Readline distributions are created using $(srcdir)/support/mkdist.
|
@echo Readline distributions are created using $(srcdir)/support/mkdist.
|
||||||
@echo Here is a sample of the necessary commands:
|
@echo Here is a sample of the necessary commands:
|
||||||
@echo bash $(srcdir)/support/mkdist -m $(srcdir)/MANIFEST -s $(srcdir) -r $(RL_LIBRARY_NAME)-$(RL_LIBRARY_VERSION)
|
@echo bash $(srcdir)/support/mkdist -m $(srcdir)/MANIFEST -s $(srcdir) -r $(RL_LIBRARY_NAME) $(RL_LIBRARY_VERSION)
|
||||||
@echo tar cf $(RL_LIBRARY_NAME)-${RL_LIBRARY_VERSION}.tar ${RL_LIBRARY_NAME}-$(RL_LIBRARY_VERSION)
|
@echo tar cf $(RL_LIBRARY_NAME)-${RL_LIBRARY_VERSION}.tar ${RL_LIBRARY_NAME}-$(RL_LIBRARY_VERSION)
|
||||||
@echo gzip $(RL_LIBRARY_NAME)-$(RL_LIBRARY_VERSION).tar
|
@echo gzip $(RL_LIBRARY_NAME)-$(RL_LIBRARY_VERSION).tar
|
||||||
|
|
||||||
@ -290,6 +301,8 @@ macro.o: readline.h keymaps.h chardefs.h tilde.h
|
|||||||
macro.o: history.h rlstdc.h
|
macro.o: history.h rlstdc.h
|
||||||
nls.o: ansi_stdlib.h
|
nls.o: ansi_stdlib.h
|
||||||
nls.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
|
nls.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h
|
||||||
|
nls.o: readline.h keymaps.h chardefs.h tilde.h
|
||||||
|
nls.o: history.h rlstdc.h
|
||||||
parens.o: rlconf.h
|
parens.o: rlconf.h
|
||||||
parens.o: ${BUILD_DIR}/config.h
|
parens.o: ${BUILD_DIR}/config.h
|
||||||
parens.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h
|
parens.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h
|
||||||
@ -328,6 +341,54 @@ vi_mode.o: history.h ansi_stdlib.h rlstdc.h
|
|||||||
xmalloc.o: ${BUILD_DIR}/config.h
|
xmalloc.o: ${BUILD_DIR}/config.h
|
||||||
xmalloc.o: ansi_stdlib.h
|
xmalloc.o: ansi_stdlib.h
|
||||||
|
|
||||||
|
bind.o: rlshell.h
|
||||||
|
histfile.o: rlshell.h
|
||||||
|
nls.o: rlshell.h
|
||||||
|
readline.o: rlshell.h
|
||||||
|
shell.o: rlshell.h
|
||||||
|
terminal.o: rlshell.h
|
||||||
|
histexpand.o: rlshell.h
|
||||||
|
|
||||||
|
bind.o: rlprivate.h
|
||||||
|
callback.o: rlprivate.h
|
||||||
|
complete.o: rlprivate.h
|
||||||
|
display.o: rlprivate.h
|
||||||
|
input.o: rlprivate.h
|
||||||
|
isearch.o: rlprivate.h
|
||||||
|
kill.o: rlprivate.h
|
||||||
|
macro.o: rlprivate.h
|
||||||
|
nls.o: rlprivate.h
|
||||||
|
parens.o: rlprivate.h
|
||||||
|
readline.o: rlprivate.h
|
||||||
|
rltty.o: rlprivate.h
|
||||||
|
search.o: rlprivate.h
|
||||||
|
signals.o: rlprivate.h
|
||||||
|
terminal.o: rlprivate.h
|
||||||
|
undo.o: rlprivate.h
|
||||||
|
util.o: rlprivate.h
|
||||||
|
vi_mode.o: rlprivate.h
|
||||||
|
|
||||||
|
bind.o: xmalloc.h
|
||||||
|
complete.o: xmalloc.h
|
||||||
|
display.o: xmalloc.h
|
||||||
|
funmap.o: xmalloc.h
|
||||||
|
histexpand.o: xmalloc.h
|
||||||
|
histfile.o: xmalloc.h
|
||||||
|
history.o: xmalloc.h
|
||||||
|
input.o: xmalloc.h
|
||||||
|
isearch.o: xmalloc.h
|
||||||
|
keymaps.o: xmalloc.h
|
||||||
|
kill.o: xmalloc.h
|
||||||
|
macro.o: xmalloc.h
|
||||||
|
readline.o: xmalloc.h
|
||||||
|
savestring.o: xmalloc.h
|
||||||
|
search.o: xmalloc.h
|
||||||
|
shell.o: xmalloc.h
|
||||||
|
tilde.o: xmalloc.h
|
||||||
|
tilde.o: xmalloc.h
|
||||||
|
util.o: xmalloc.h
|
||||||
|
vi_mode.o: xmalloc.h
|
||||||
|
|
||||||
readline.o: $(srcdir)/readline.c
|
readline.o: $(srcdir)/readline.c
|
||||||
vi_mode.o: $(srcdir)/vi_mode.c
|
vi_mode.o: $(srcdir)/vi_mode.c
|
||||||
funmap.o: $(srcdir)/funmap.c
|
funmap.o: $(srcdir)/funmap.c
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Introduction
|
Introduction
|
||||||
============
|
============
|
||||||
|
|
||||||
This is the Gnu Readline library, version 4.0.
|
This is the Gnu Readline library, version 4.1.
|
||||||
|
|
||||||
The Readline library provides a set of functions for use by applications
|
The Readline library provides a set of functions for use by applications
|
||||||
that allow users to edit command lines as they are typed in. Both
|
that allow users to edit command lines as they are typed in. Both
|
||||||
|
37
contrib/libreadline/USAGE
Normal file
37
contrib/libreadline/USAGE
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
From rms@gnu.org Thu Jul 22 20:37:55 1999
|
||||||
|
Flags: 10
|
||||||
|
Return-Path: rms@gnu.org
|
||||||
|
Received: from arthur.INS.CWRU.Edu (root@arthur.INS.CWRU.Edu [129.22.8.215]) by odin.INS.CWRU.Edu with ESMTP (8.8.6+cwru/CWRU-2.4-ins)
|
||||||
|
id UAA25349; Thu, 22 Jul 1999 20:37:54 -0400 (EDT) (from rms@gnu.org for <chet@odin.INS.CWRU.Edu>)
|
||||||
|
Received: from nike.ins.cwru.edu (root@nike.INS.CWRU.Edu [129.22.8.219]) by arthur.INS.CWRU.Edu with ESMTP (8.8.8+cwru/CWRU-3.6)
|
||||||
|
id UAA05311; Thu, 22 Jul 1999 20:37:51 -0400 (EDT) (from rms@gnu.org for <chet@po.cwru.edu>)
|
||||||
|
Received: from pele.santafe.edu (pele.santafe.edu [192.12.12.119]) by nike.ins.cwru.edu with ESMTP (8.8.7/CWRU-2.5-bsdi)
|
||||||
|
id UAA13350; Thu, 22 Jul 1999 20:37:50 -0400 (EDT) (from rms@gnu.org for <chet@nike.ins.cwru.edu>)
|
||||||
|
Received: from wijiji.santafe.edu (wijiji [192.12.12.5])
|
||||||
|
by pele.santafe.edu (8.9.1/8.9.1) with ESMTP id SAA10831
|
||||||
|
for <chet@nike.ins.cwru.edu>; Thu, 22 Jul 1999 18:37:47 -0600 (MDT)
|
||||||
|
Received: (from rms@localhost)
|
||||||
|
by wijiji.santafe.edu (8.9.1b+Sun/8.9.1) id SAA01089;
|
||||||
|
Thu, 22 Jul 1999 18:37:46 -0600 (MDT)
|
||||||
|
Date: Thu, 22 Jul 1999 18:37:46 -0600 (MDT)
|
||||||
|
Message-Id: <199907230037.SAA01089@wijiji.santafe.edu>
|
||||||
|
X-Authentication-Warning: wijiji.santafe.edu: rms set sender to rms@gnu.org using -f
|
||||||
|
From: Richard Stallman <rms@gnu.org>
|
||||||
|
To: chet@nike.ins.cwru.edu
|
||||||
|
Subject: Use of Readline
|
||||||
|
Reply-to: rms@gnu.org
|
||||||
|
|
||||||
|
I think Allbery's suggestion is a good one. So please add this text
|
||||||
|
in a suitable place. Please don't put it in the GPL itself; that
|
||||||
|
should be the same as the GPL everywhere else. Putting it in the
|
||||||
|
README and/or the documentation would be a good idea.
|
||||||
|
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
Our position on the use of Readline through a shared-library linking
|
||||||
|
mechanism is that there is no legal difference between shared-library
|
||||||
|
linking and static linking--either kind of linking combines various
|
||||||
|
modules into a single larger work. The conditions for using Readline
|
||||||
|
in a larger work are stated in section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
|
176
contrib/libreadline/aclocal.m4
vendored
176
contrib/libreadline/aclocal.m4
vendored
@ -316,13 +316,19 @@ AC_CACHE_VAL(bash_cv_opendir_not_robust,
|
|||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
int fd;
|
int fd, err;
|
||||||
unlink("/tmp/not_a_directory");
|
err = mkdir("/tmp/bash-aclocal", 0700);
|
||||||
fd = open("/tmp/not_a_directory", O_WRONLY|O_CREAT, 0666);
|
if (err < 0) {
|
||||||
|
perror("mkdir");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
unlink("/tmp/bash-aclocal/not_a_directory");
|
||||||
|
fd = open("/tmp/bash-aclocal/not_a_directory", O_WRONLY|O_CREAT|O_EXCL, 0666);
|
||||||
write(fd, "\n", 1);
|
write(fd, "\n", 1);
|
||||||
close(fd);
|
close(fd);
|
||||||
dir = opendir("/tmp/not_a_directory");
|
dir = opendir("/tmp/bash-aclocal/not_a_directory");
|
||||||
unlink("/tmp/not_a_directory");
|
unlink("/tmp/bash-aclocal/not_a_directory");
|
||||||
|
rmdir("/tmp/bash-aclocal");
|
||||||
exit (dir == 0);
|
exit (dir == 0);
|
||||||
}], bash_cv_opendir_not_robust=yes,bash_cv_opendir_not_robust=no,
|
}], bash_cv_opendir_not_robust=yes,bash_cv_opendir_not_robust=no,
|
||||||
[AC_MSG_WARN(cannot check opendir if cross compiling -- defaulting to no)
|
[AC_MSG_WARN(cannot check opendir if cross compiling -- defaulting to no)
|
||||||
@ -354,25 +360,59 @@ AC_DEFINE(VOID_SIGHANDLER)
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN(BASH_TYPE_INT32_T,
|
dnl
|
||||||
|
dnl A signed 16-bit integer quantity
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(BASH_TYPE_BITS16_T,
|
||||||
[
|
[
|
||||||
if test "$ac_cv_sizeof_int" = 4; then
|
if test "$ac_cv_sizeof_short" = 2; then
|
||||||
AC_CHECK_TYPE(int32_t, int)
|
AC_CHECK_TYPE(bits16_t, short)
|
||||||
elif test "$ac_cv_sizeof_long" = 4; then
|
elif test "$ac_cv_sizeof_char" = 2; then
|
||||||
AC_CHECK_TYPE(int32_t, long)
|
AC_CHECK_TYPE(bits16_t, char)
|
||||||
else
|
else
|
||||||
AC_CHECK_TYPE(int32_t, int)
|
AC_CHECK_TYPE(bits16_t, short)
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN(BASH_TYPE_U_INT32_T,
|
dnl
|
||||||
|
dnl An unsigned 16-bit integer quantity
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(BASH_TYPE_U_BITS16_T,
|
||||||
|
[
|
||||||
|
if test "$ac_cv_sizeof_short" = 2; then
|
||||||
|
AC_CHECK_TYPE(u_bits16_t, unsigned short)
|
||||||
|
elif test "$ac_cv_sizeof_char" = 2; then
|
||||||
|
AC_CHECK_TYPE(u_bits16_t, unsigned char)
|
||||||
|
else
|
||||||
|
AC_CHECK_TYPE(u_bits16_t, unsigned short)
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl A signed 32-bit integer quantity
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(BASH_TYPE_BITS32_T,
|
||||||
[
|
[
|
||||||
if test "$ac_cv_sizeof_int" = 4; then
|
if test "$ac_cv_sizeof_int" = 4; then
|
||||||
AC_CHECK_TYPE(u_int32_t, unsigned int)
|
AC_CHECK_TYPE(bits32_t, int)
|
||||||
elif test "$ac_cv_sizeof_long" = 4; then
|
elif test "$ac_cv_sizeof_long" = 4; then
|
||||||
AC_CHECK_TYPE(u_int32_t, unsigned long)
|
AC_CHECK_TYPE(bits32_t, long)
|
||||||
else
|
else
|
||||||
AC_CHECK_TYPE(u_int32_t, unsigned int)
|
AC_CHECK_TYPE(bits32_t, int)
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl An unsigned 32-bit integer quantity
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(BASH_TYPE_U_BITS32_T,
|
||||||
|
[
|
||||||
|
if test "$ac_cv_sizeof_int" = 4; then
|
||||||
|
AC_CHECK_TYPE(u_bits32_t, unsigned int)
|
||||||
|
elif test "$ac_cv_sizeof_long" = 4; then
|
||||||
|
AC_CHECK_TYPE(u_bits32_t, unsigned long)
|
||||||
|
else
|
||||||
|
AC_CHECK_TYPE(u_bits32_t, unsigned int)
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -387,6 +427,9 @@ else
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl A signed 64-bit quantity
|
||||||
|
dnl
|
||||||
AC_DEFUN(BASH_TYPE_BITS64_T,
|
AC_DEFUN(BASH_TYPE_BITS64_T,
|
||||||
[
|
[
|
||||||
if test "$ac_sv_sizeof_char_p" = 8; then
|
if test "$ac_sv_sizeof_char_p" = 8; then
|
||||||
@ -427,6 +470,20 @@ if test $bash_cv_func_lstat = yes; then
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
AC_DEFUN(BASH_FUNC_INET_ATON,
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([for inet_aton], bash_cv_func_inet_aton,
|
||||||
|
[AC_TRY_LINK([
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
struct in_addr ap;], [ inet_aton("127.0.0.1", &ap); ],
|
||||||
|
bash_cv_func_inet_aton=yes, bash_cv_func_inet_aton=no)])
|
||||||
|
if test $bash_cv_func_inet_aton = yes; then
|
||||||
|
AC_DEFINE(HAVE_INET_ATON)
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
AC_DEFUN(BASH_STRUCT_TERMIOS_LDISC,
|
AC_DEFUN(BASH_STRUCT_TERMIOS_LDISC,
|
||||||
[AC_MSG_CHECKING([for a c_line member of struct termios])
|
[AC_MSG_CHECKING([for a c_line member of struct termios])
|
||||||
AC_CACHE_VAL(bash_cv_termios_ldisc,
|
AC_CACHE_VAL(bash_cv_termios_ldisc,
|
||||||
@ -845,7 +902,7 @@ AC_CACHE_VAL(bash_cv_sys_named_pipes,
|
|||||||
/* Add more tests in here as appropriate. */
|
/* Add more tests in here as appropriate. */
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
int fd;
|
int fd, err;
|
||||||
|
|
||||||
#if defined (HAVE_MKFIFO)
|
#if defined (HAVE_MKFIFO)
|
||||||
exit (0);
|
exit (0);
|
||||||
@ -858,12 +915,19 @@ exit (1);
|
|||||||
#if defined (NeXT)
|
#if defined (NeXT)
|
||||||
exit (1);
|
exit (1);
|
||||||
#endif
|
#endif
|
||||||
|
err = mkdir("/tmp/bash-aclocal", 0700);
|
||||||
fd = mknod ("/tmp/sh-np-autoconf", 0666 | S_IFIFO, 0);
|
if (err < 0) {
|
||||||
if (fd == -1)
|
perror ("mkdir");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
fd = mknod ("/tmp/bash-aclocal/sh-np-autoconf", 0666 | S_IFIFO, 0);
|
||||||
|
if (fd == -1) {
|
||||||
|
rmdir ("/tmp/bash-aclocal");
|
||||||
exit (1);
|
exit (1);
|
||||||
|
}
|
||||||
close(fd);
|
close(fd);
|
||||||
unlink ("/tmp/sh-np-autoconf");
|
unlink ("/tmp/bash-aclocal/sh-np-autoconf");
|
||||||
|
rmdir ("/tmp/bash-aclocal");
|
||||||
exit(0);
|
exit(0);
|
||||||
}], bash_cv_sys_named_pipes=present, bash_cv_sys_named_pipes=missing,
|
}], bash_cv_sys_named_pipes=present, bash_cv_sys_named_pipes=missing,
|
||||||
[AC_MSG_WARN(cannot check for named pipes if cross-compiling -- defaulting to missing)
|
[AC_MSG_WARN(cannot check for named pipes if cross-compiling -- defaulting to missing)
|
||||||
@ -1037,12 +1101,32 @@ elif test $bash_cv_dev_fd = "whacky"; then
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
AC_DEFUN(BASH_CHECK_DEV_STDIN,
|
||||||
|
[AC_MSG_CHECKING(whether /dev/stdin stdout stderr are available)
|
||||||
|
AC_CACHE_VAL(bash_cv_dev_stdin,
|
||||||
|
[if test -d /dev/fd && test -r /dev/stdin; then
|
||||||
|
bash_cv_dev_stdin=present
|
||||||
|
elif test -d /proc/self/fd && test -r /dev/stdin; then
|
||||||
|
bash_cv_dev_stdin=present
|
||||||
|
else
|
||||||
|
bash_cv_dev_stdin=absent
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
AC_MSG_RESULT($bash_cv_dev_stdin)
|
||||||
|
if test $bash_cv_dev_stdin = "present"; then
|
||||||
|
AC_DEFINE(HAVE_DEV_STDIN)
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Check for the presence of getpeername (the only networking function
|
dnl Check for the presence of getpeername in libsocket.
|
||||||
dnl bash currently requires) in libsocket. If libsocket is present,
|
dnl If libsocket is present, check for libnsl and add it to LIBS if
|
||||||
dnl check for libnsl and add it to LIBS if it's there, since most
|
dnl it's there, since most systems with libsocket require linking
|
||||||
dnl systems with libsocket require linking with libnsl as well.
|
dnl with libnsl as well. This should only be called if getpeername
|
||||||
dnl This should only be called if getpeername was not found in libc.
|
dnl was not found in libc.
|
||||||
|
dnl
|
||||||
|
dnl NOTE: IF WE FIND GETPEERNAME, WE ASSUME THAT WE HAVE BIND/CONNECT
|
||||||
|
dnl AS WELL
|
||||||
dnl
|
dnl
|
||||||
AC_DEFUN(BASH_CHECK_SOCKLIB,
|
AC_DEFUN(BASH_CHECK_SOCKLIB,
|
||||||
[
|
[
|
||||||
@ -1084,6 +1168,32 @@ if test $bash_cv_have_socklib = yes; then
|
|||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl This needs BASH_CHECK_SOCKLIB, but since that's not called on every
|
||||||
|
dnl system, we can't use AC_PREREQ
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(BASH_FUNC_GETHOSTBYNAME,
|
||||||
|
[if test "X$bash_cv_have_gethostbyname" = "X"; then
|
||||||
|
_bash_needmsg=yes
|
||||||
|
else
|
||||||
|
AC_MSG_CHECKING(for gethostbyname in socket library)
|
||||||
|
_bash_needmsg=
|
||||||
|
fi
|
||||||
|
AC_CACHE_VAL(bash_cv_have_gethostbyname,
|
||||||
|
[AC_TRY_LINK([#include <netdb.h>],
|
||||||
|
[ struct hostent *hp;
|
||||||
|
hp = gethostbyname("localhost");
|
||||||
|
], bash_cv_have_gethostbyname=yes, bash_cv_have_gethostbyname=no)]
|
||||||
|
)
|
||||||
|
if test "X$_bash_needmsg" = Xyes; then
|
||||||
|
AC_MSG_CHECKING(for gethostbyname in socket library)
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT($bash_cv_have_gethostbyname)
|
||||||
|
if test "$bash_cv_have_gethostbyname" = yes; then
|
||||||
|
AC_DEFINE(HAVE_GETHOSTBYNAME)
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
AC_DEFUN(BASH_DEFAULT_MAIL_DIR,
|
AC_DEFUN(BASH_DEFAULT_MAIL_DIR,
|
||||||
[AC_MSG_CHECKING(for default mail directory)
|
[AC_MSG_CHECKING(for default mail directory)
|
||||||
AC_CACHE_VAL(bash_cv_mail_dir,
|
AC_CACHE_VAL(bash_cv_mail_dir,
|
||||||
@ -1299,3 +1409,19 @@ switch (0) case 0: case (sizeof (off_t) <= 4):;
|
|||||||
if test $bash_cv_off_t_64 = yes; then
|
if test $bash_cv_off_t_64 = yes; then
|
||||||
AC_DEFINE(HAVE_OFF_T_64)
|
AC_DEFINE(HAVE_OFF_T_64)
|
||||||
fi])
|
fi])
|
||||||
|
|
||||||
|
AC_DEFUN(BASH_STRUCT_TIMEVAL,
|
||||||
|
[AC_MSG_CHECKING(for struct timeval in sys/time.h and time.h)
|
||||||
|
AC_CACHE_VAL(bash_cv_struct_timeval,
|
||||||
|
[
|
||||||
|
AC_EGREP_HEADER(struct timeval, sys/time.h,
|
||||||
|
bash_cv_struct_timeval=yes,
|
||||||
|
AC_EGREP_HEADER(struct timeval, time.h,
|
||||||
|
bash_cv_struct_timeval=yes,
|
||||||
|
bash_cv_struct_timeval=no))
|
||||||
|
])
|
||||||
|
AC_MSG_RESULT($bash_cv_struct_timeval)
|
||||||
|
if test $bash_cv_struct_timeval = yes; then
|
||||||
|
AC_DEFINE(HAVE_TIMEVAL)
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
You should have received a copy of the GNU General Public License along
|
||||||
with Bash; see the file COPYING. If not, write to the Free Software
|
with Bash; see the file COPYING. If not, write to the Free Software
|
||||||
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#if !defined (_STDLIB_H_)
|
#if !defined (_STDLIB_H_)
|
||||||
#define _STDLIB_H_ 1
|
#define _STDLIB_H_ 1
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -42,7 +42,6 @@
|
|||||||
# include "ansi_stdlib.h"
|
# include "ansi_stdlib.h"
|
||||||
#endif /* HAVE_STDLIB_H */
|
#endif /* HAVE_STDLIB_H */
|
||||||
|
|
||||||
#include <signal.h>
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#if !defined (errno)
|
#if !defined (errno)
|
||||||
@ -58,61 +57,25 @@ extern int errno;
|
|||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
|
#include "rlprivate.h"
|
||||||
|
#include "rlshell.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
#if !defined (strchr) && !defined (__STDC__)
|
#if !defined (strchr) && !defined (__STDC__)
|
||||||
extern char *strchr (), *strrchr ();
|
extern char *strchr (), *strrchr ();
|
||||||
#endif /* !strchr && !__STDC__ */
|
#endif /* !strchr && !__STDC__ */
|
||||||
|
|
||||||
extern int _rl_horizontal_scroll_mode;
|
|
||||||
extern int _rl_mark_modified_lines;
|
|
||||||
extern int _rl_bell_preference;
|
|
||||||
extern int _rl_meta_flag;
|
|
||||||
extern int _rl_convert_meta_chars_to_ascii;
|
|
||||||
extern int _rl_output_meta_chars;
|
|
||||||
extern int _rl_complete_show_all;
|
|
||||||
extern int _rl_complete_mark_directories;
|
|
||||||
extern int _rl_print_completions_horizontally;
|
|
||||||
extern int _rl_completion_case_fold;
|
|
||||||
extern int _rl_enable_keypad;
|
|
||||||
#if defined (PAREN_MATCHING)
|
|
||||||
extern int rl_blink_matching_paren;
|
|
||||||
#endif /* PAREN_MATCHING */
|
|
||||||
#if defined (VISIBLE_STATS)
|
|
||||||
extern int rl_visible_stats;
|
|
||||||
#endif /* VISIBLE_STATS */
|
|
||||||
extern int rl_complete_with_tilde_expansion;
|
|
||||||
extern int rl_completion_query_items;
|
|
||||||
extern int rl_inhibit_completion;
|
|
||||||
extern char *_rl_comment_begin;
|
|
||||||
extern unsigned char *_rl_isearch_terminators;
|
|
||||||
|
|
||||||
extern int rl_explicit_arg;
|
|
||||||
extern int rl_editing_mode;
|
|
||||||
extern unsigned char _rl_parsing_conditionalized_out;
|
|
||||||
extern Keymap _rl_keymap;
|
|
||||||
|
|
||||||
extern char *possible_control_prefixes[], *possible_meta_prefixes[];
|
|
||||||
|
|
||||||
/* Functions imported from funmap.c */
|
|
||||||
extern char **rl_funmap_names ();
|
|
||||||
extern int rl_add_funmap_entry ();
|
|
||||||
|
|
||||||
/* Functions imported from util.c */
|
|
||||||
extern char *_rl_strindex ();
|
|
||||||
|
|
||||||
/* Functions imported from shell.c */
|
|
||||||
extern char *get_env_value ();
|
|
||||||
|
|
||||||
/* Variables exported by this file. */
|
/* Variables exported by this file. */
|
||||||
Keymap rl_binding_keymap;
|
Keymap rl_binding_keymap;
|
||||||
|
|
||||||
/* Forward declarations */
|
static int _rl_read_init_file __P((char *, int));
|
||||||
void rl_set_keymap_from_edit_mode ();
|
static int glean_key_from_name __P((char *));
|
||||||
|
static int substring_member_of_array __P((char *, char **));
|
||||||
|
|
||||||
static int _rl_read_init_file ();
|
static int currently_reading_init_file;
|
||||||
static int glean_key_from_name ();
|
|
||||||
static int substring_member_of_array ();
|
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
/* used only in this file */
|
||||||
|
static int _rl_prefer_visible_bell = 1;
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
@ -677,9 +640,16 @@ _rl_read_file (filename, sizep)
|
|||||||
return ((char *)NULL);
|
return ((char *)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
buffer[file_size] = '\0';
|
buffer[file_size] = '\0';
|
||||||
if (sizep)
|
if (sizep)
|
||||||
*sizep = file_size;
|
*sizep = file_size;
|
||||||
|
#else
|
||||||
|
buffer[i] = '\0';
|
||||||
|
if (sizep)
|
||||||
|
*sizep = i;
|
||||||
|
#endif
|
||||||
|
|
||||||
return (buffer);
|
return (buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -718,6 +688,11 @@ rl_read_init_file (filename)
|
|||||||
if (*filename == 0)
|
if (*filename == 0)
|
||||||
filename = DEFAULT_INPUTRC;
|
filename = DEFAULT_INPUTRC;
|
||||||
|
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
if (_rl_read_init_file (filename, 0) == 0)
|
||||||
|
return 0;
|
||||||
|
filename = "~/_inputrc";
|
||||||
|
#endif
|
||||||
return (_rl_read_init_file (filename, 0));
|
return (_rl_read_init_file (filename, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -746,6 +721,8 @@ _rl_read_init_file (filename, include_level)
|
|||||||
last_readline_init_file = savestring (filename);
|
last_readline_init_file = savestring (filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
currently_reading_init_file = 1;
|
||||||
|
|
||||||
/* Loop over the lines in the file. Lines that start with `#' are
|
/* Loop over the lines in the file. Lines that start with `#' are
|
||||||
comments; all other lines are commands for readline initialization. */
|
comments; all other lines are commands for readline initialization. */
|
||||||
current_readline_init_lineno = 1;
|
current_readline_init_lineno = 1;
|
||||||
@ -756,6 +733,12 @@ _rl_read_init_file (filename, include_level)
|
|||||||
/* Find the end of this line. */
|
/* Find the end of this line. */
|
||||||
for (i = 0; line + i != end && line[i] != '\n'; i++);
|
for (i = 0; line + i != end && line[i] != '\n'; i++);
|
||||||
|
|
||||||
|
#if defined (__CYGWIN32__)
|
||||||
|
/* ``Be liberal in what you accept.'' */
|
||||||
|
if (line[i] == '\n' && line[i-1] == '\r')
|
||||||
|
line[i - 1] = '\0';
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Mark end of line. */
|
/* Mark end of line. */
|
||||||
line[i] = '\0';
|
line[i] = '\0';
|
||||||
|
|
||||||
@ -776,6 +759,7 @@ _rl_read_init_file (filename, include_level)
|
|||||||
}
|
}
|
||||||
|
|
||||||
free (buffer);
|
free (buffer);
|
||||||
|
currently_reading_init_file = 0;
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -783,9 +767,11 @@ static void
|
|||||||
_rl_init_file_error (msg)
|
_rl_init_file_error (msg)
|
||||||
char *msg;
|
char *msg;
|
||||||
{
|
{
|
||||||
fprintf (stderr, "readline: %s: line %d: %s\n", current_readline_init_file,
|
if (currently_reading_init_file)
|
||||||
current_readline_init_lineno,
|
fprintf (stderr, "readline: %s: line %d: %s\n", current_readline_init_file,
|
||||||
msg);
|
current_readline_init_lineno, msg);
|
||||||
|
else
|
||||||
|
fprintf (stderr, "readline: %s\n", msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
@ -1232,154 +1218,273 @@ rl_parse_and_bind (string)
|
|||||||
have one of two values; either "On" or 1 for truth, or "Off" or 0 for
|
have one of two values; either "On" or 1 for truth, or "Off" or 0 for
|
||||||
false. */
|
false. */
|
||||||
|
|
||||||
|
#define V_SPECIAL 0x1
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
char *name;
|
char *name;
|
||||||
int *value;
|
int *value;
|
||||||
|
int flags;
|
||||||
} boolean_varlist [] = {
|
} boolean_varlist [] = {
|
||||||
#if defined (PAREN_MATCHING)
|
{ "blink-matching-paren", &rl_blink_matching_paren, V_SPECIAL },
|
||||||
{ "blink-matching-paren", &rl_blink_matching_paren },
|
{ "completion-ignore-case", &_rl_completion_case_fold, 0 },
|
||||||
#endif
|
{ "convert-meta", &_rl_convert_meta_chars_to_ascii, 0 },
|
||||||
{ "completion-ignore-case", &_rl_completion_case_fold },
|
{ "disable-completion", &rl_inhibit_completion, 0 },
|
||||||
{ "convert-meta", &_rl_convert_meta_chars_to_ascii },
|
{ "enable-keypad", &_rl_enable_keypad, 0 },
|
||||||
{ "disable-completion", &rl_inhibit_completion },
|
{ "expand-tilde", &rl_complete_with_tilde_expansion, 0 },
|
||||||
{ "enable-keypad", &_rl_enable_keypad },
|
{ "horizontal-scroll-mode", &_rl_horizontal_scroll_mode, 0 },
|
||||||
{ "expand-tilde", &rl_complete_with_tilde_expansion },
|
{ "input-meta", &_rl_meta_flag, 0 },
|
||||||
{ "horizontal-scroll-mode", &_rl_horizontal_scroll_mode },
|
{ "mark-directories", &_rl_complete_mark_directories, 0 },
|
||||||
{ "input-meta", &_rl_meta_flag },
|
{ "mark-modified-lines", &_rl_mark_modified_lines, 0 },
|
||||||
{ "mark-directories", &_rl_complete_mark_directories },
|
{ "meta-flag", &_rl_meta_flag, 0 },
|
||||||
{ "mark-modified-lines", &_rl_mark_modified_lines },
|
{ "output-meta", &_rl_output_meta_chars, 0 },
|
||||||
{ "meta-flag", &_rl_meta_flag },
|
{ "prefer-visible-bell", &_rl_prefer_visible_bell, V_SPECIAL },
|
||||||
{ "output-meta", &_rl_output_meta_chars },
|
{ "print-completions-horizontally", &_rl_print_completions_horizontally, 0 },
|
||||||
{ "print-completions-horizontally", &_rl_print_completions_horizontally },
|
{ "show-all-if-ambiguous", &_rl_complete_show_all, 0 },
|
||||||
{ "show-all-if-ambiguous", &_rl_complete_show_all },
|
|
||||||
#if defined (VISIBLE_STATS)
|
#if defined (VISIBLE_STATS)
|
||||||
{ "visible-stats", &rl_visible_stats },
|
{ "visible-stats", &rl_visible_stats, 0 },
|
||||||
#endif /* VISIBLE_STATS */
|
#endif /* VISIBLE_STATS */
|
||||||
{ (char *)NULL, (int *)NULL }
|
{ (char *)NULL, (int *)NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
find_boolean_var (name)
|
||||||
|
char *name;
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
|
||||||
|
for (i = 0; boolean_varlist[i].name; i++)
|
||||||
|
if (_rl_stricmp (name, boolean_varlist[i].name) == 0)
|
||||||
|
return i;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hooks for handling special boolean variables, where a
|
||||||
|
function needs to be called or another variable needs
|
||||||
|
to be changed when they're changed. */
|
||||||
|
static void
|
||||||
|
hack_special_boolean_var (i)
|
||||||
|
int i;
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
name = boolean_varlist[i].name;
|
||||||
|
|
||||||
|
if (_rl_stricmp (name, "blink-matching-paren") == 0)
|
||||||
|
_rl_enable_paren_matching (rl_blink_matching_paren);
|
||||||
|
else if (_rl_stricmp (name, "prefer-visible-bell") == 0)
|
||||||
|
{
|
||||||
|
if (_rl_prefer_visible_bell)
|
||||||
|
_rl_bell_preference = VISIBLE_BELL;
|
||||||
|
else
|
||||||
|
_rl_bell_preference = AUDIBLE_BELL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* These *must* correspond to the array indices for the appropriate
|
||||||
|
string variable. (Though they're not used right now.) */
|
||||||
|
#define V_BELLSTYLE 0
|
||||||
|
#define V_COMBEGIN 1
|
||||||
|
#define V_EDITMODE 2
|
||||||
|
#define V_ISRCHTERM 3
|
||||||
|
#define V_KEYMAP 4
|
||||||
|
|
||||||
|
#define V_STRING 1
|
||||||
|
#define V_INT 2
|
||||||
|
|
||||||
|
/* Forward declarations */
|
||||||
|
static int sv_bell_style __P((char *));
|
||||||
|
static int sv_combegin __P((char *));
|
||||||
|
static int sv_compquery __P((char *));
|
||||||
|
static int sv_editmode __P((char *));
|
||||||
|
static int sv_isrchterm __P((char *));
|
||||||
|
static int sv_keymap __P((char *));
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
char *name;
|
||||||
|
int flags;
|
||||||
|
Function *set_func;
|
||||||
|
} string_varlist[] = {
|
||||||
|
{ "bell-style", V_STRING, sv_bell_style },
|
||||||
|
{ "comment-begin", V_STRING, sv_combegin },
|
||||||
|
{ "completion-query-items", V_INT, sv_compquery },
|
||||||
|
{ "editing-mode", V_STRING, sv_editmode },
|
||||||
|
{ "isearch-terminators", V_STRING, sv_isrchterm },
|
||||||
|
{ "keymap", V_STRING, sv_keymap },
|
||||||
|
{ (char *)NULL, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
find_string_var (name)
|
||||||
|
char *name;
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
|
||||||
|
for (i = 0; string_varlist[i].name; i++)
|
||||||
|
if (_rl_stricmp (name, string_varlist[i].name) == 0)
|
||||||
|
return i;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* A boolean value that can appear in a `set variable' command is true if
|
||||||
|
the value is null or empty, `on' (case-insenstive), or "1". Any other
|
||||||
|
values result in 0 (false). */
|
||||||
|
static int
|
||||||
|
bool_to_int (value)
|
||||||
|
char *value;
|
||||||
|
{
|
||||||
|
return (value == 0 || *value == '\0' ||
|
||||||
|
(_rl_stricmp (value, "on") == 0) ||
|
||||||
|
(value[0] == '1' && value[1] == '\0'));
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
rl_variable_bind (name, value)
|
rl_variable_bind (name, value)
|
||||||
char *name, *value;
|
char *name, *value;
|
||||||
{
|
{
|
||||||
register int i;
|
register int i;
|
||||||
|
int v;
|
||||||
|
|
||||||
/* Check for simple variables first. */
|
/* Check for simple variables first. */
|
||||||
for (i = 0; boolean_varlist[i].name; i++)
|
i = find_boolean_var (name);
|
||||||
|
if (i >= 0)
|
||||||
{
|
{
|
||||||
if (_rl_stricmp (name, boolean_varlist[i].name) == 0)
|
*boolean_varlist[i].value = bool_to_int (value);
|
||||||
{
|
if (boolean_varlist[i].flags & V_SPECIAL)
|
||||||
/* A variable is TRUE if the "value" is "on", "1" or "". */
|
hack_special_boolean_var (i);
|
||||||
*boolean_varlist[i].value = *value == 0 ||
|
return 0;
|
||||||
_rl_stricmp (value, "on") == 0 ||
|
|
||||||
(value[0] == '1' && value[1] == '\0');
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Not a boolean variable, so check for specials. */
|
i = find_string_var (name);
|
||||||
|
|
||||||
/* Editing mode change? */
|
/* For the time being, unknown variable names or string names without a
|
||||||
if (_rl_stricmp (name, "editing-mode") == 0)
|
handler function are simply ignored. */
|
||||||
|
if (i < 0 || string_varlist[i].set_func == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
v = (*string_varlist[i].set_func) (value);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
sv_editmode (value)
|
||||||
|
char *value;
|
||||||
|
{
|
||||||
|
if (_rl_strnicmp (value, "vi", 2) == 0)
|
||||||
{
|
{
|
||||||
if (_rl_strnicmp (value, "vi", 2) == 0)
|
|
||||||
{
|
|
||||||
#if defined (VI_MODE)
|
#if defined (VI_MODE)
|
||||||
_rl_keymap = vi_insertion_keymap;
|
_rl_keymap = vi_insertion_keymap;
|
||||||
rl_editing_mode = vi_mode;
|
rl_editing_mode = vi_mode;
|
||||||
#endif /* VI_MODE */
|
#endif /* VI_MODE */
|
||||||
}
|
return 0;
|
||||||
else if (_rl_strnicmp (value, "emacs", 5) == 0)
|
|
||||||
{
|
|
||||||
_rl_keymap = emacs_standard_keymap;
|
|
||||||
rl_editing_mode = emacs_mode;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else if (_rl_strnicmp (value, "emacs", 5) == 0)
|
||||||
|
{
|
||||||
|
_rl_keymap = emacs_standard_keymap;
|
||||||
|
rl_editing_mode = emacs_mode;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Comment string change? */
|
static int
|
||||||
else if (_rl_stricmp (name, "comment-begin") == 0)
|
sv_combegin (value)
|
||||||
|
char *value;
|
||||||
|
{
|
||||||
|
if (value && *value)
|
||||||
{
|
{
|
||||||
if (*value)
|
FREE (_rl_comment_begin);
|
||||||
{
|
_rl_comment_begin = savestring (value);
|
||||||
if (_rl_comment_begin)
|
return 0;
|
||||||
free (_rl_comment_begin);
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
_rl_comment_begin = savestring (value);
|
static int
|
||||||
}
|
sv_compquery (value)
|
||||||
}
|
char *value;
|
||||||
else if (_rl_stricmp (name, "completion-query-items") == 0)
|
{
|
||||||
{
|
int nval = 100;
|
||||||
int nval = 100;
|
|
||||||
if (*value)
|
|
||||||
{
|
|
||||||
nval = atoi (value);
|
|
||||||
if (nval < 0)
|
|
||||||
nval = 0;
|
|
||||||
}
|
|
||||||
rl_completion_query_items = nval;
|
|
||||||
}
|
|
||||||
else if (_rl_stricmp (name, "keymap") == 0)
|
|
||||||
{
|
|
||||||
Keymap kmap;
|
|
||||||
kmap = rl_get_keymap_by_name (value);
|
|
||||||
if (kmap)
|
|
||||||
rl_set_keymap (kmap);
|
|
||||||
}
|
|
||||||
else if (_rl_stricmp (name, "bell-style") == 0)
|
|
||||||
{
|
|
||||||
if (!*value)
|
|
||||||
_rl_bell_preference = AUDIBLE_BELL;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (_rl_stricmp (value, "none") == 0 || _rl_stricmp (value, "off") == 0)
|
|
||||||
_rl_bell_preference = NO_BELL;
|
|
||||||
else if (_rl_stricmp (value, "audible") == 0 || _rl_stricmp (value, "on") == 0)
|
|
||||||
_rl_bell_preference = AUDIBLE_BELL;
|
|
||||||
else if (_rl_stricmp (value, "visible") == 0)
|
|
||||||
_rl_bell_preference = VISIBLE_BELL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (_rl_stricmp (name, "prefer-visible-bell") == 0)
|
|
||||||
{
|
|
||||||
/* Backwards compatibility. */
|
|
||||||
if (*value && (_rl_stricmp (value, "on") == 0 ||
|
|
||||||
(*value == '1' && !value[1])))
|
|
||||||
_rl_bell_preference = VISIBLE_BELL;
|
|
||||||
else
|
|
||||||
_rl_bell_preference = AUDIBLE_BELL;
|
|
||||||
}
|
|
||||||
else if (_rl_stricmp (name, "isearch-terminators") == 0)
|
|
||||||
{
|
|
||||||
/* Isolate the value and translate it into a character string. */
|
|
||||||
int beg, end;
|
|
||||||
char *v;
|
|
||||||
|
|
||||||
v = savestring (value);
|
if (value && *value)
|
||||||
FREE (_rl_isearch_terminators);
|
{
|
||||||
if (v[0] == '"' || v[0] == '\'')
|
nval = atoi (value);
|
||||||
{
|
if (nval < 0)
|
||||||
int delim = v[0];
|
nval = 0;
|
||||||
for (beg = end = 1; v[end] && v[end] != delim; end++)
|
|
||||||
;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (beg = end = 0; whitespace (v[end]) == 0; end++)
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
v[end] = '\0';
|
|
||||||
/* The value starts at v + beg. Translate it into a character string. */
|
|
||||||
_rl_isearch_terminators = (unsigned char *)xmalloc (2 * strlen (v) + 1);
|
|
||||||
rl_translate_keyseq (v + beg, _rl_isearch_terminators, &end);
|
|
||||||
_rl_isearch_terminators[end] = '\0';
|
|
||||||
free (v);
|
|
||||||
}
|
}
|
||||||
|
rl_completion_query_items = nval;
|
||||||
/* For the time being, unknown variable names are simply ignored. */
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
sv_keymap (value)
|
||||||
|
char *value;
|
||||||
|
{
|
||||||
|
Keymap kmap;
|
||||||
|
|
||||||
|
kmap = rl_get_keymap_by_name (value);
|
||||||
|
if (kmap)
|
||||||
|
{
|
||||||
|
rl_set_keymap (kmap);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _SET_BELL(v) do { _rl_bell_preference = v; return 0; } while (0)
|
||||||
|
|
||||||
|
static int
|
||||||
|
sv_bell_style (value)
|
||||||
|
char *value;
|
||||||
|
{
|
||||||
|
if (value == 0 || *value == '\0')
|
||||||
|
_SET_BELL (AUDIBLE_BELL);
|
||||||
|
else if (_rl_stricmp (value, "none") == 0 || _rl_stricmp (value, "off") == 0)
|
||||||
|
_SET_BELL (NO_BELL);
|
||||||
|
else if (_rl_stricmp (value, "audible") == 0 || _rl_stricmp (value, "on") == 0)
|
||||||
|
_SET_BELL (AUDIBLE_BELL);
|
||||||
|
else if (_rl_stricmp (value, "visible") == 0)
|
||||||
|
_SET_BELL (VISIBLE_BELL);
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#undef _SET_BELL
|
||||||
|
|
||||||
|
static int
|
||||||
|
sv_isrchterm (value)
|
||||||
|
char *value;
|
||||||
|
{
|
||||||
|
int beg, end, delim;
|
||||||
|
char *v;
|
||||||
|
|
||||||
|
if (value == 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* Isolate the value and translate it into a character string. */
|
||||||
|
v = savestring (value);
|
||||||
|
FREE (_rl_isearch_terminators);
|
||||||
|
if (v[0] == '"' || v[0] == '\'')
|
||||||
|
{
|
||||||
|
delim = v[0];
|
||||||
|
for (beg = end = 1; v[end] && v[end] != delim; end++)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (beg = end = 0; whitespace (v[end]) == 0; end++)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
v[end] = '\0';
|
||||||
|
|
||||||
|
/* The value starts at v + beg. Translate it into a character string. */
|
||||||
|
_rl_isearch_terminators = (unsigned char *)xmalloc (2 * strlen (v) + 1);
|
||||||
|
rl_translate_keyseq (v + beg, _rl_isearch_terminators, &end);
|
||||||
|
_rl_isearch_terminators[end] = '\0';
|
||||||
|
|
||||||
|
free (v);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Return the character which matches NAME.
|
/* Return the character which matches NAME.
|
||||||
For example, `Space' returns ' '. */
|
For example, `Space' returns ' '. */
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -35,15 +35,7 @@
|
|||||||
/* System-specific feature definitions and include files. */
|
/* System-specific feature definitions and include files. */
|
||||||
#include "rldefs.h"
|
#include "rldefs.h"
|
||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
|
#include "rlprivate.h"
|
||||||
extern void readline_internal_setup ();
|
|
||||||
extern char *readline_internal_teardown ();
|
|
||||||
extern int readline_internal_char ();
|
|
||||||
extern void _rl_init_line_state ();
|
|
||||||
|
|
||||||
extern int _rl_meta_flag;
|
|
||||||
extern char *rl_prompt;
|
|
||||||
extern int rl_visible_prompt_length;
|
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#ifndef _CHARDEFS_H_
|
#ifndef _CHARDEFS_H_
|
||||||
#define _CHARDEFS_H_
|
#define _CHARDEFS_H_
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -70,20 +70,14 @@ extern struct passwd *getpwent ();
|
|||||||
|
|
||||||
/* Some standard library routines. */
|
/* Some standard library routines. */
|
||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
#include "rlprivate.h"
|
||||||
|
|
||||||
extern char *tilde_expand ();
|
#ifdef __STDC__
|
||||||
extern char *rl_copy_text ();
|
typedef int QSFUNC (const void *, const void *);
|
||||||
extern void _rl_abort_internal ();
|
#else
|
||||||
extern int _rl_qsort_string_compare ();
|
typedef int QSFUNC ();
|
||||||
extern void _rl_replace_text ();
|
#endif
|
||||||
|
|
||||||
extern Function *rl_last_func;
|
|
||||||
extern int rl_editing_mode;
|
|
||||||
extern int screenwidth;
|
|
||||||
|
|
||||||
extern void _rl_move_vert ();
|
|
||||||
extern int _rl_vis_botlin;
|
|
||||||
extern int rl_display_fixed;
|
|
||||||
|
|
||||||
/* If non-zero, then this is the address of a function to call when
|
/* If non-zero, then this is the address of a function to call when
|
||||||
completing a word would normally display the list of possible matches.
|
completing a word would normally display the list of possible matches.
|
||||||
@ -95,27 +89,25 @@ extern int rl_display_fixed;
|
|||||||
VFunction *rl_completion_display_matches_hook = (VFunction *)NULL;
|
VFunction *rl_completion_display_matches_hook = (VFunction *)NULL;
|
||||||
|
|
||||||
/* Forward declarations for functions defined and used in this file. */
|
/* Forward declarations for functions defined and used in this file. */
|
||||||
char *filename_completion_function ();
|
char *filename_completion_function __P((char *, int));
|
||||||
char **completion_matches ();
|
char **completion_matches __P((char *, CPFunction *));
|
||||||
|
|
||||||
#if defined (VISIBLE_STATS)
|
#if defined (VISIBLE_STATS)
|
||||||
# if !defined (X_OK)
|
# if !defined (X_OK)
|
||||||
# define X_OK 1
|
# define X_OK 1
|
||||||
# endif
|
# endif
|
||||||
static int stat_char ();
|
static int stat_char __P((char *));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char *rl_quote_filename ();
|
static char *rl_quote_filename __P((char *, int, char *));
|
||||||
static char *rl_strpbrk ();
|
static char *rl_strpbrk __P((char *, char *));
|
||||||
|
|
||||||
static char **remove_duplicate_matches ();
|
static char **remove_duplicate_matches __P((char **));
|
||||||
static void insert_match ();
|
static void insert_match __P((char *, int, int, char *));
|
||||||
static int append_to_match ();
|
static int append_to_match __P((char *, int, int));
|
||||||
static void insert_all_matches ();
|
static void insert_all_matches __P((char **, int, char *));
|
||||||
static void display_matches ();
|
static void display_matches __P((char **));
|
||||||
static int compute_lcd_of_matches ();
|
static int compute_lcd_of_matches __P((char **, int, char *));
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
@ -136,7 +128,11 @@ int _rl_complete_mark_directories = 1;
|
|||||||
int _rl_print_completions_horizontally;
|
int _rl_print_completions_horizontally;
|
||||||
|
|
||||||
/* Non-zero means that case is not significant in filename completion. */
|
/* Non-zero means that case is not significant in filename completion. */
|
||||||
|
#if defined (__MSDOS__) && !defined (__DJGPP__)
|
||||||
|
int _rl_completion_case_fold = 1;
|
||||||
|
#else
|
||||||
int _rl_completion_case_fold;
|
int _rl_completion_case_fold;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Global variables available to applications using readline. */
|
/* Global variables available to applications using readline. */
|
||||||
|
|
||||||
@ -417,6 +413,10 @@ printable_part (pathname)
|
|||||||
char *temp;
|
char *temp;
|
||||||
|
|
||||||
temp = rl_filename_completion_desired ? strrchr (pathname, '/') : (char *)NULL;
|
temp = rl_filename_completion_desired ? strrchr (pathname, '/') : (char *)NULL;
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
if (rl_filename_completion_desired && temp == 0 && isalpha (pathname[0]) && pathname[1] == ':')
|
||||||
|
temp = pathname + 1;
|
||||||
|
#endif
|
||||||
return (temp ? ++temp : pathname);
|
return (temp ? ++temp : pathname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -477,7 +477,12 @@ print_filename (to_print, full_pathname)
|
|||||||
c = to_print[-1];
|
c = to_print[-1];
|
||||||
to_print[-1] = '\0';
|
to_print[-1] = '\0';
|
||||||
|
|
||||||
s = tilde_expand (full_pathname);
|
/* If setting the last slash in full_pathname to a NUL results in
|
||||||
|
full_pathname being the empty string, we are trying to complete
|
||||||
|
files in the root directory. If we pass a null string to the
|
||||||
|
bash directory completion hook, for example, it will expand it
|
||||||
|
to the current directory. We just want the `/'. */
|
||||||
|
s = tilde_expand (full_pathname && *full_pathname ? full_pathname : "/");
|
||||||
if (rl_directory_completion_hook)
|
if (rl_directory_completion_hook)
|
||||||
(*rl_directory_completion_hook) (&s);
|
(*rl_directory_completion_hook) (&s);
|
||||||
|
|
||||||
@ -627,25 +632,31 @@ find_completion_word (fp, dp)
|
|||||||
/* If there is an application-specific function to say whether or not
|
/* If there is an application-specific function to say whether or not
|
||||||
a character is quoted and we found a quote character, let that
|
a character is quoted and we found a quote character, let that
|
||||||
function decide whether or not a character is a word break, even
|
function decide whether or not a character is a word break, even
|
||||||
if it is found in rl_completer_word_break_characters. */
|
if it is found in rl_completer_word_break_characters. Don't bother
|
||||||
if (rl_char_is_quoted_p)
|
if we're at the end of the line, though. */
|
||||||
isbrk = (found_quote == 0 ||
|
if (scan)
|
||||||
(*rl_char_is_quoted_p) (rl_line_buffer, rl_point) == 0) &&
|
|
||||||
strchr (rl_completer_word_break_characters, scan) != 0;
|
|
||||||
else
|
|
||||||
isbrk = strchr (rl_completer_word_break_characters, scan) != 0;
|
|
||||||
|
|
||||||
if (isbrk)
|
|
||||||
{
|
{
|
||||||
/* If the character that caused the word break was a quoting
|
if (rl_char_is_quoted_p)
|
||||||
character, then remember it as the delimiter. */
|
isbrk = (found_quote == 0 ||
|
||||||
if (rl_basic_quote_characters && strchr (rl_basic_quote_characters, scan) && (end - rl_point) > 1)
|
(*rl_char_is_quoted_p) (rl_line_buffer, rl_point) == 0) &&
|
||||||
delimiter = scan;
|
strchr (rl_completer_word_break_characters, scan) != 0;
|
||||||
|
else
|
||||||
|
isbrk = strchr (rl_completer_word_break_characters, scan) != 0;
|
||||||
|
|
||||||
/* If the character isn't needed to determine something special
|
if (isbrk)
|
||||||
about what kind of completion to perform, then advance past it. */
|
{
|
||||||
if (rl_special_prefixes == 0 || strchr (rl_special_prefixes, scan) == 0)
|
/* If the character that caused the word break was a quoting
|
||||||
rl_point++;
|
character, then remember it as the delimiter. */
|
||||||
|
if (rl_basic_quote_characters &&
|
||||||
|
strchr (rl_basic_quote_characters, scan) &&
|
||||||
|
(end - rl_point) > 1)
|
||||||
|
delimiter = scan;
|
||||||
|
|
||||||
|
/* If the character isn't needed to determine something special
|
||||||
|
about what kind of completion to perform, then advance past it. */
|
||||||
|
if (rl_special_prefixes == 0 || strchr (rl_special_prefixes, scan) == 0)
|
||||||
|
rl_point++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fp)
|
if (fp)
|
||||||
@ -715,7 +726,7 @@ remove_duplicate_matches (matches)
|
|||||||
/* Sort the array without matches[0], since we need it to
|
/* Sort the array without matches[0], since we need it to
|
||||||
stay in place no matter what. */
|
stay in place no matter what. */
|
||||||
if (i)
|
if (i)
|
||||||
qsort (matches+1, i-1, sizeof (char *), _rl_qsort_string_compare);
|
qsort (matches+1, i-1, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare);
|
||||||
|
|
||||||
/* Remember the lowest common denominator for it may be unique. */
|
/* Remember the lowest common denominator for it may be unique. */
|
||||||
lowest_common = savestring (matches[0]);
|
lowest_common = savestring (matches[0]);
|
||||||
@ -908,7 +919,7 @@ rl_display_match_list (matches, len, max)
|
|||||||
|
|
||||||
/* Sort the items if they are not already sorted. */
|
/* Sort the items if they are not already sorted. */
|
||||||
if (rl_ignore_completion_duplicates == 0)
|
if (rl_ignore_completion_duplicates == 0)
|
||||||
qsort (matches + 1, len, sizeof (char *), _rl_qsort_string_compare);
|
qsort (matches + 1, len, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare);
|
||||||
|
|
||||||
crlf ();
|
crlf ();
|
||||||
|
|
||||||
@ -1407,9 +1418,9 @@ username_completion_function (text, state)
|
|||||||
char *text;
|
char *text;
|
||||||
int state;
|
int state;
|
||||||
{
|
{
|
||||||
#if defined (__GO32__) || defined (__WIN32__) || defined (__OPENNT)
|
#if defined (__WIN32__) || defined (__OPENNT)
|
||||||
return (char *)NULL;
|
return (char *)NULL;
|
||||||
#else /* !__GO32__ */
|
#else /* !__WIN32__ && !__OPENNT) */
|
||||||
static char *username = (char *)NULL;
|
static char *username = (char *)NULL;
|
||||||
static struct passwd *entry;
|
static struct passwd *entry;
|
||||||
static int namelen, first_char, first_char_loc;
|
static int namelen, first_char, first_char_loc;
|
||||||
@ -1452,7 +1463,7 @@ username_completion_function (text, state)
|
|||||||
|
|
||||||
return (value);
|
return (value);
|
||||||
}
|
}
|
||||||
#endif /* !__GO32__ */
|
#endif /* !__WIN32__ && !__OPENNT */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Okay, now we write the entry_function for filename completion. In the
|
/* Okay, now we write the entry_function for filename completion. In the
|
||||||
@ -1494,11 +1505,25 @@ filename_completion_function (text, state)
|
|||||||
|
|
||||||
temp = strrchr (dirname, '/');
|
temp = strrchr (dirname, '/');
|
||||||
|
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
/* special hack for //X/... */
|
||||||
|
if (dirname[0] == '/' && dirname[1] == '/' && isalpha (dirname[2]) && dirname[3] == '/')
|
||||||
|
temp = strrchr (dirname + 3, '/');
|
||||||
|
#endif
|
||||||
|
|
||||||
if (temp)
|
if (temp)
|
||||||
{
|
{
|
||||||
strcpy (filename, ++temp);
|
strcpy (filename, ++temp);
|
||||||
*temp = '\0';
|
*temp = '\0';
|
||||||
}
|
}
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
/* searches from current directory on the drive */
|
||||||
|
else if (isalpha (dirname[0]) && dirname[1] == ':')
|
||||||
|
{
|
||||||
|
strcpy (filename, dirname + 2);
|
||||||
|
dirname[2] = '\0';
|
||||||
|
}
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dirname[0] = '.';
|
dirname[0] = '.';
|
||||||
@ -1660,11 +1685,7 @@ rl_menu_complete (count, ignore)
|
|||||||
/* Clean up from previous call, if any. */
|
/* Clean up from previous call, if any. */
|
||||||
FREE (orig_text);
|
FREE (orig_text);
|
||||||
if (matches)
|
if (matches)
|
||||||
{
|
free_match_list (matches);
|
||||||
for (match_list_index = 0; matches[match_list_index]; match_list_index++)
|
|
||||||
free (matches[match_list_index]);
|
|
||||||
free (matches);
|
|
||||||
}
|
|
||||||
|
|
||||||
match_list_index = match_list_size = 0;
|
match_list_index = match_list_size = 0;
|
||||||
matches = (char **)NULL;
|
matches = (char **)NULL;
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
/* Define if you have the lstat function. */
|
/* Define if you have the lstat function. */
|
||||||
#undef HAVE_LSTAT
|
#undef HAVE_LSTAT
|
||||||
|
|
||||||
|
/* Define if you have the memmove function. */
|
||||||
|
#undef HAVE_MEMMOVE
|
||||||
|
|
||||||
/* Define if you have the putenv function. */
|
/* Define if you have the putenv function. */
|
||||||
#undef HAVE_PUTENV
|
#undef HAVE_PUTENV
|
||||||
|
|
||||||
|
403
contrib/libreadline/configure
vendored
403
contrib/libreadline/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -4,8 +4,8 @@ dnl
|
|||||||
dnl report bugs to chet@po.cwru.edu
|
dnl report bugs to chet@po.cwru.edu
|
||||||
dnl
|
dnl
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
AC_REVISION([for Readline 4.0, version 2.14, from autoconf version] AC_ACVERSION)
|
AC_REVISION([for Readline 4.1, version 2.22, from autoconf version] AC_ACVERSION)
|
||||||
LIBVERSION=4.0
|
LIBVERSION=4.1
|
||||||
|
|
||||||
AC_INIT(readline.h)
|
AC_INIT(readline.h)
|
||||||
AC_CONFIG_HEADER(config.h)
|
AC_CONFIG_HEADER(config.h)
|
||||||
@ -32,6 +32,7 @@ fi
|
|||||||
test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1
|
test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1
|
||||||
|
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
|
dnl AC_AIX
|
||||||
AC_MINIX
|
AC_MINIX
|
||||||
|
|
||||||
# If we're using gcc and the user hasn't specified CFLAGS, add -O to CFLAGS.
|
# If we're using gcc and the user hasn't specified CFLAGS, add -O to CFLAGS.
|
||||||
@ -53,7 +54,8 @@ AC_RETSIGTYPE
|
|||||||
AC_HEADER_STAT
|
AC_HEADER_STAT
|
||||||
AC_HEADER_DIRENT
|
AC_HEADER_DIRENT
|
||||||
|
|
||||||
AC_CHECK_FUNCS(strcasecmp select setenv putenv tcgetattr setlocale lstat)
|
AC_CHECK_FUNCS(lstat memmove putenv select setenv setlocale \
|
||||||
|
strcasecmp tcgetattr)
|
||||||
|
|
||||||
AC_FUNC_STRCOLL
|
AC_FUNC_STRCOLL
|
||||||
|
|
||||||
@ -102,7 +104,7 @@ esac
|
|||||||
#
|
#
|
||||||
if test -f ${srcdir}/support/shobj-conf; then
|
if test -f ${srcdir}/support/shobj-conf; then
|
||||||
AC_MSG_CHECKING(configuration for building shared libraries)
|
AC_MSG_CHECKING(configuration for building shared libraries)
|
||||||
eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C ${CC} -c ${host_cpu} -o ${host_os} -v ${host_vendor}`
|
eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}`
|
||||||
AC_SUBST(SHOBJ_CC)
|
AC_SUBST(SHOBJ_CC)
|
||||||
AC_SUBST(SHOBJ_CFLAGS)
|
AC_SUBST(SHOBJ_CFLAGS)
|
||||||
AC_SUBST(SHOBJ_LD)
|
AC_SUBST(SHOBJ_LD)
|
||||||
@ -116,9 +118,20 @@ if test -f ${srcdir}/support/shobj-conf; then
|
|||||||
AC_SUBST(SHLIB_LIBVERSION)
|
AC_SUBST(SHLIB_LIBVERSION)
|
||||||
AC_SUBST(SHLIB_LIBS)
|
AC_SUBST(SHLIB_LIBS)
|
||||||
AC_MSG_RESULT($SHLIB_STATUS)
|
AC_MSG_RESULT($SHLIB_STATUS)
|
||||||
|
|
||||||
|
# shared library versioning
|
||||||
|
# quoted for m4 so I can use character classes
|
||||||
|
SHLIB_MAJOR=[`expr "$LIBVERSION" : '\([0-9]\)\..*'`]
|
||||||
|
SHLIB_MINOR=[`expr "$LIBVERSION" : '[0-9]\.\([0-9]\).*'`]
|
||||||
|
AC_SUBST(SHLIB_MAJOR)
|
||||||
|
AC_SUBST(SHLIB_MINOR)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
BUILD_DIR=`pwd`
|
case "$host_os" in
|
||||||
|
msdosdjgpp*) BUILD_DIR=`pwd.exe` ;; # to prevent //d/path/file
|
||||||
|
*) BUILD_DIR=`pwd` ;;
|
||||||
|
esac
|
||||||
|
|
||||||
AC_SUBST(BUILD_DIR)
|
AC_SUBST(BUILD_DIR)
|
||||||
|
|
||||||
AC_SUBST(CFLAGS)
|
AC_SUBST(CFLAGS)
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -41,11 +41,6 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#if defined (__GO32__)
|
|
||||||
# include <go32.h>
|
|
||||||
# include <pc.h>
|
|
||||||
#endif /* __GO32__ */
|
|
||||||
|
|
||||||
/* System-specific feature definitions and include files. */
|
/* System-specific feature definitions and include files. */
|
||||||
#include "rldefs.h"
|
#include "rldefs.h"
|
||||||
|
|
||||||
@ -56,48 +51,25 @@
|
|||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
|
#include "rlprivate.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
#if !defined (strchr) && !defined (__STDC__)
|
#if !defined (strchr) && !defined (__STDC__)
|
||||||
extern char *strchr (), *strrchr ();
|
extern char *strchr (), *strrchr ();
|
||||||
#endif /* !strchr && !__STDC__ */
|
#endif /* !strchr && !__STDC__ */
|
||||||
|
|
||||||
/* Global and pseudo-global variables and functions
|
#if defined (HACK_TERMCAP_MOTION)
|
||||||
imported from readline.c. */
|
extern char *term_forward_char;
|
||||||
extern char *rl_prompt;
|
|
||||||
extern int readline_echoing_p;
|
|
||||||
|
|
||||||
extern int _rl_output_meta_chars;
|
|
||||||
extern int _rl_horizontal_scroll_mode;
|
|
||||||
extern int _rl_mark_modified_lines;
|
|
||||||
extern int _rl_prefer_visible_bell;
|
|
||||||
|
|
||||||
/* Variables and functions imported from terminal.c */
|
|
||||||
extern void _rl_output_some_chars ();
|
|
||||||
#ifdef _MINIX
|
|
||||||
extern void _rl_output_character_function ();
|
|
||||||
#else
|
|
||||||
extern int _rl_output_character_function ();
|
|
||||||
#endif
|
#endif
|
||||||
extern int _rl_backspace ();
|
|
||||||
|
|
||||||
extern char *term_clreol, *term_clrpag;
|
static void update_line __P((char *, char *, int, int, int, int));
|
||||||
extern char *term_im, *term_ic, *term_ei, *term_DC;
|
static void space_to_eol __P((int));
|
||||||
extern char *term_up, *term_dc, *term_cr, *term_IC;
|
static void delete_chars __P((int));
|
||||||
extern int screenheight, screenwidth, screenchars;
|
static void insert_some_chars __P((char *, int));
|
||||||
extern int terminal_can_insert, _rl_term_autowrap;
|
static void cr __P((void));
|
||||||
|
|
||||||
/* Pseudo-global functions (local to the readline library) exported
|
|
||||||
by this file. */
|
|
||||||
void _rl_move_cursor_relative (), _rl_output_some_chars ();
|
|
||||||
void _rl_move_vert ();
|
|
||||||
void _rl_clear_to_eol (), _rl_clear_screen ();
|
|
||||||
|
|
||||||
static void update_line (), space_to_eol ();
|
|
||||||
static void delete_chars (), insert_some_chars ();
|
|
||||||
static void cr ();
|
|
||||||
|
|
||||||
static int *inv_lbreaks, *vis_lbreaks;
|
static int *inv_lbreaks, *vis_lbreaks;
|
||||||
|
static int inv_lbsize, vis_lbsize;
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
/* Heuristic used to decide whether it is faster to move from CUR to NEW
|
/* Heuristic used to decide whether it is faster to move from CUR to NEW
|
||||||
by backing up or outputting a carriage return and moving forward. */
|
by backing up or outputting a carriage return and moving forward. */
|
||||||
@ -190,7 +162,7 @@ static int visible_first_line_len;
|
|||||||
/* Expand the prompt string S and return the number of visible
|
/* Expand the prompt string S and return the number of visible
|
||||||
characters in *LP, if LP is not null. This is currently more-or-less
|
characters in *LP, if LP is not null. This is currently more-or-less
|
||||||
a placeholder for expansion. LIP, if non-null is a place to store the
|
a placeholder for expansion. LIP, if non-null is a place to store the
|
||||||
index of the last invisible character in ther eturned string. */
|
index of the last invisible character in the returned string. */
|
||||||
|
|
||||||
/* Current implementation:
|
/* Current implementation:
|
||||||
\001 (^A) start non-visible characters
|
\001 (^A) start non-visible characters
|
||||||
@ -250,6 +222,18 @@ expand_prompt (pmt, lp, lip)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Just strip out RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE from
|
||||||
|
PMT and return the rest of PMT. */
|
||||||
|
char *
|
||||||
|
_rl_strip_prompt (pmt)
|
||||||
|
char *pmt;
|
||||||
|
{
|
||||||
|
char *ret;
|
||||||
|
|
||||||
|
ret = expand_prompt (pmt, (int *)NULL, (int *)NULL);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Expand the prompt string into the various display components, if
|
* Expand the prompt string into the various display components, if
|
||||||
* necessary.
|
* necessary.
|
||||||
@ -307,6 +291,49 @@ rl_expand_prompt (prompt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Initialize the VISIBLE_LINE and INVISIBLE_LINE arrays, and their associated
|
||||||
|
arrays of line break markers. MINSIZE is the minimum size of VISIBLE_LINE
|
||||||
|
and INVISIBLE_LINE; if it is greater than LINE_SIZE, LINE_SIZE is
|
||||||
|
increased. If the lines have already been allocated, this ensures that
|
||||||
|
they can hold at least MINSIZE characters. */
|
||||||
|
static void
|
||||||
|
init_line_structures (minsize)
|
||||||
|
int minsize;
|
||||||
|
{
|
||||||
|
register int n;
|
||||||
|
|
||||||
|
if (invisible_line == 0) /* initialize it */
|
||||||
|
{
|
||||||
|
if (line_size < minsize)
|
||||||
|
line_size = minsize;
|
||||||
|
visible_line = xmalloc (line_size);
|
||||||
|
invisible_line = xmalloc (line_size);
|
||||||
|
}
|
||||||
|
else if (line_size < minsize) /* ensure it can hold MINSIZE chars */
|
||||||
|
{
|
||||||
|
line_size *= 2;
|
||||||
|
if (line_size < minsize)
|
||||||
|
line_size = minsize;
|
||||||
|
visible_line = xrealloc (visible_line, line_size);
|
||||||
|
invisible_line = xrealloc (invisible_line, line_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (n = minsize; n < line_size; n++)
|
||||||
|
{
|
||||||
|
visible_line[n] = 0;
|
||||||
|
invisible_line[n] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vis_lbreaks == 0)
|
||||||
|
{
|
||||||
|
/* should be enough. */
|
||||||
|
inv_lbsize = vis_lbsize = 256;
|
||||||
|
inv_lbreaks = (int *)xmalloc (inv_lbsize * sizeof (int));
|
||||||
|
vis_lbreaks = (int *)xmalloc (vis_lbsize * sizeof (int));
|
||||||
|
inv_lbreaks[0] = vis_lbreaks[0] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Basic redisplay algorithm. */
|
/* Basic redisplay algorithm. */
|
||||||
void
|
void
|
||||||
rl_redisplay ()
|
rl_redisplay ()
|
||||||
@ -325,19 +352,7 @@ rl_redisplay ()
|
|||||||
|
|
||||||
if (invisible_line == 0)
|
if (invisible_line == 0)
|
||||||
{
|
{
|
||||||
visible_line = xmalloc (line_size);
|
init_line_structures (0);
|
||||||
invisible_line = xmalloc (line_size);
|
|
||||||
for (in = 0; in < line_size; in++)
|
|
||||||
{
|
|
||||||
visible_line[in] = 0;
|
|
||||||
invisible_line[in] = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* should be enough, but then again, this is just for testing. */
|
|
||||||
inv_lbreaks = (int *)malloc (256 * sizeof (int));
|
|
||||||
vis_lbreaks = (int *)malloc (256 * sizeof (int));
|
|
||||||
inv_lbreaks[0] = vis_lbreaks[0] = 0;
|
|
||||||
|
|
||||||
rl_on_new_line ();
|
rl_on_new_line ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -395,12 +410,13 @@ rl_redisplay ()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
prompt_this_line++;
|
prompt_this_line++;
|
||||||
|
pmtlen = prompt_this_line - rl_display_prompt; /* temp var */
|
||||||
if (forced_display)
|
if (forced_display)
|
||||||
{
|
{
|
||||||
_rl_output_some_chars (rl_display_prompt, prompt_this_line - rl_display_prompt);
|
_rl_output_some_chars (rl_display_prompt, pmtlen);
|
||||||
/* Make sure we are at column zero even after a newline,
|
/* Make sure we are at column zero even after a newline,
|
||||||
regardless of the state of terminal output processing. */
|
regardless of the state of terminal output processing. */
|
||||||
if (prompt_this_line[-2] != '\r')
|
if (pmtlen < 2 || prompt_this_line[-2] != '\r')
|
||||||
cr ();
|
cr ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -419,11 +435,25 @@ rl_redisplay ()
|
|||||||
wrap_offset = 0;
|
wrap_offset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define CHECK_INV_LBREAKS() \
|
||||||
|
do { \
|
||||||
|
if (newlines >= (inv_lbsize - 2)) \
|
||||||
|
{ \
|
||||||
|
inv_lbsize *= 2; \
|
||||||
|
inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define CHECK_LPOS() \
|
#define CHECK_LPOS() \
|
||||||
do { \
|
do { \
|
||||||
lpos++; \
|
lpos++; \
|
||||||
if (lpos >= screenwidth) \
|
if (lpos >= screenwidth) \
|
||||||
{ \
|
{ \
|
||||||
|
if (newlines >= (inv_lbsize - 2)) \
|
||||||
|
{ \
|
||||||
|
inv_lbsize *= 2; \
|
||||||
|
inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
|
||||||
|
} \
|
||||||
inv_lbreaks[++newlines] = out; \
|
inv_lbreaks[++newlines] = out; \
|
||||||
lpos = 0; \
|
lpos = 0; \
|
||||||
} \
|
} \
|
||||||
@ -437,14 +467,13 @@ rl_redisplay ()
|
|||||||
contents of the command line? */
|
contents of the command line? */
|
||||||
while (lpos >= screenwidth)
|
while (lpos >= screenwidth)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
temp = ((newlines + 1) * screenwidth) - ((newlines == 0) ? wrap_offset : 0);
|
|
||||||
#else
|
|
||||||
/* XXX - possible fix from Darin Johnson <darin@acuson.com> for prompt
|
/* XXX - possible fix from Darin Johnson <darin@acuson.com> for prompt
|
||||||
string with invisible characters that is longer than the screen
|
string with invisible characters that is longer than the screen
|
||||||
width. */
|
width. XXX - this doesn't work right if invisible characters have
|
||||||
|
to be put on the second screen line -- it adds too much (the number
|
||||||
|
of invisible chars after the screenwidth). */
|
||||||
temp = ((newlines + 1) * screenwidth) + ((newlines == 0) ? wrap_offset : 0);
|
temp = ((newlines + 1) * screenwidth) + ((newlines == 0) ? wrap_offset : 0);
|
||||||
#endif
|
|
||||||
inv_lbreaks[++newlines] = temp;
|
inv_lbreaks[++newlines] = temp;
|
||||||
lpos -= screenwidth;
|
lpos -= screenwidth;
|
||||||
}
|
}
|
||||||
@ -477,6 +506,7 @@ rl_redisplay ()
|
|||||||
if (lpos + 4 >= screenwidth)
|
if (lpos + 4 >= screenwidth)
|
||||||
{
|
{
|
||||||
temp = screenwidth - lpos;
|
temp = screenwidth - lpos;
|
||||||
|
CHECK_INV_LBREAKS ();
|
||||||
inv_lbreaks[++newlines] = out + temp;
|
inv_lbreaks[++newlines] = out + temp;
|
||||||
lpos = 4 - temp;
|
lpos = 4 - temp;
|
||||||
}
|
}
|
||||||
@ -506,6 +536,7 @@ rl_redisplay ()
|
|||||||
{
|
{
|
||||||
register int temp2;
|
register int temp2;
|
||||||
temp2 = screenwidth - lpos;
|
temp2 = screenwidth - lpos;
|
||||||
|
CHECK_INV_LBREAKS ();
|
||||||
inv_lbreaks[++newlines] = out + temp2;
|
inv_lbreaks[++newlines] = out + temp2;
|
||||||
lpos = temp - temp2;
|
lpos = temp - temp2;
|
||||||
while (out < newout)
|
while (out < newout)
|
||||||
@ -522,6 +553,7 @@ rl_redisplay ()
|
|||||||
else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && term_up && *term_up)
|
else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && term_up && *term_up)
|
||||||
{
|
{
|
||||||
line[out++] = '\0'; /* XXX - sentinel */
|
line[out++] = '\0'; /* XXX - sentinel */
|
||||||
|
CHECK_INV_LBREAKS ();
|
||||||
inv_lbreaks[++newlines] = out;
|
inv_lbreaks[++newlines] = out;
|
||||||
lpos = 0;
|
lpos = 0;
|
||||||
}
|
}
|
||||||
@ -546,6 +578,7 @@ rl_redisplay ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
inv_botlin = lb_botlin = newlines;
|
inv_botlin = lb_botlin = newlines;
|
||||||
|
CHECK_INV_LBREAKS ();
|
||||||
inv_lbreaks[newlines+1] = out;
|
inv_lbreaks[newlines+1] = out;
|
||||||
cursor_linenum = lb_linenum;
|
cursor_linenum = lb_linenum;
|
||||||
|
|
||||||
@ -651,8 +684,12 @@ rl_redisplay ()
|
|||||||
if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 &&
|
if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 &&
|
||||||
_rl_last_c_pos <= last_invisible && local_prompt)
|
_rl_last_c_pos <= last_invisible && local_prompt)
|
||||||
{
|
{
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
putc ('\r', rl_outstream);
|
||||||
|
#else
|
||||||
if (term_cr)
|
if (term_cr)
|
||||||
tputs (term_cr, 1, _rl_output_character_function);
|
tputs (term_cr, 1, _rl_output_character_function);
|
||||||
|
#endif
|
||||||
_rl_output_some_chars (local_prompt, nleft);
|
_rl_output_some_chars (local_prompt, nleft);
|
||||||
_rl_last_c_pos = nleft;
|
_rl_last_c_pos = nleft;
|
||||||
}
|
}
|
||||||
@ -772,11 +809,17 @@ rl_redisplay ()
|
|||||||
/* Swap visible and non-visible lines. */
|
/* Swap visible and non-visible lines. */
|
||||||
{
|
{
|
||||||
char *temp = visible_line;
|
char *temp = visible_line;
|
||||||
int *itemp = vis_lbreaks;
|
int *itemp = vis_lbreaks, ntemp = vis_lbsize;
|
||||||
|
|
||||||
visible_line = invisible_line;
|
visible_line = invisible_line;
|
||||||
invisible_line = temp;
|
invisible_line = temp;
|
||||||
|
|
||||||
vis_lbreaks = inv_lbreaks;
|
vis_lbreaks = inv_lbreaks;
|
||||||
inv_lbreaks = itemp;
|
inv_lbreaks = itemp;
|
||||||
|
|
||||||
|
vis_lbsize = inv_lbsize;
|
||||||
|
inv_lbsize = ntemp;
|
||||||
|
|
||||||
rl_display_fixed = 0;
|
rl_display_fixed = 0;
|
||||||
/* If we are displaying on a single line, and last_lmargin is > 0, we
|
/* If we are displaying on a single line, and last_lmargin is > 0, we
|
||||||
are not displaying any invisible characters, so set visible_wrap_offset
|
are not displaying any invisible characters, so set visible_wrap_offset
|
||||||
@ -899,7 +942,11 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
|
|||||||
term_cr && lendiff > visible_length && _rl_last_c_pos > 0 &&
|
term_cr && lendiff > visible_length && _rl_last_c_pos > 0 &&
|
||||||
od > lendiff && _rl_last_c_pos < last_invisible)
|
od > lendiff && _rl_last_c_pos < last_invisible)
|
||||||
{
|
{
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
putc ('\r', rl_outstream);
|
||||||
|
#else
|
||||||
tputs (term_cr, 1, _rl_output_character_function);
|
tputs (term_cr, 1, _rl_output_character_function);
|
||||||
|
#endif
|
||||||
_rl_output_some_chars (local_prompt, lendiff);
|
_rl_output_some_chars (local_prompt, lendiff);
|
||||||
_rl_last_c_pos = lendiff;
|
_rl_last_c_pos = lendiff;
|
||||||
}
|
}
|
||||||
@ -1029,6 +1076,58 @@ rl_on_new_line ()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Tell the update routines that we have moved onto a new line with the
|
||||||
|
prompt already displayed. Code originally from the version of readline
|
||||||
|
distributed with CLISP. */
|
||||||
|
int
|
||||||
|
rl_on_new_line_with_prompt ()
|
||||||
|
{
|
||||||
|
int prompt_size, i, l, real_screenwidth, newlines;
|
||||||
|
char *prompt_last_line;
|
||||||
|
|
||||||
|
/* Initialize visible_line and invisible_line to ensure that they can hold
|
||||||
|
the already-displayed prompt. */
|
||||||
|
prompt_size = strlen (rl_prompt) + 1;
|
||||||
|
init_line_structures (prompt_size);
|
||||||
|
|
||||||
|
/* Make sure the line structures hold the already-displayed prompt for
|
||||||
|
redisplay. */
|
||||||
|
strcpy (visible_line, rl_prompt);
|
||||||
|
strcpy (invisible_line, rl_prompt);
|
||||||
|
|
||||||
|
/* If the prompt contains newlines, take the last tail. */
|
||||||
|
prompt_last_line = strrchr (rl_prompt, '\n');
|
||||||
|
if (!prompt_last_line)
|
||||||
|
prompt_last_line = rl_prompt;
|
||||||
|
|
||||||
|
l = strlen (prompt_last_line);
|
||||||
|
_rl_last_c_pos = l;
|
||||||
|
|
||||||
|
/* Dissect prompt_last_line into screen lines. Note that here we have
|
||||||
|
to use the real screenwidth. Readline's notion of screenwidth might be
|
||||||
|
one less, see terminal.c. */
|
||||||
|
real_screenwidth = screenwidth + (_rl_term_autowrap ? 0 : 1);
|
||||||
|
_rl_last_v_pos = l / real_screenwidth;
|
||||||
|
/* If the prompt length is a multiple of real_screenwidth, we don't know
|
||||||
|
whether the cursor is at the end of the last line, or already at the
|
||||||
|
beginning of the next line. Output a newline just to be safe. */
|
||||||
|
if (l > 0 && (l % real_screenwidth) == 0)
|
||||||
|
_rl_output_some_chars ("\n", 1);
|
||||||
|
last_lmargin = 0;
|
||||||
|
|
||||||
|
newlines = 0; i = 0;
|
||||||
|
while (i <= l)
|
||||||
|
{
|
||||||
|
_rl_vis_botlin = newlines;
|
||||||
|
vis_lbreaks[newlines++] = i;
|
||||||
|
i += real_screenwidth;
|
||||||
|
}
|
||||||
|
vis_lbreaks[newlines] = l;
|
||||||
|
visible_wrap_offset = 0;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Actually update the display, period. */
|
/* Actually update the display, period. */
|
||||||
int
|
int
|
||||||
rl_forced_update_display ()
|
rl_forced_update_display ()
|
||||||
@ -1086,8 +1185,6 @@ _rl_move_cursor_relative (new, data)
|
|||||||
That kind of control is for people who don't know what the
|
That kind of control is for people who don't know what the
|
||||||
data is underneath the cursor. */
|
data is underneath the cursor. */
|
||||||
#if defined (HACK_TERMCAP_MOTION)
|
#if defined (HACK_TERMCAP_MOTION)
|
||||||
extern char *term_forward_char;
|
|
||||||
|
|
||||||
if (term_forward_char)
|
if (term_forward_char)
|
||||||
for (i = _rl_last_c_pos; i < new; i++)
|
for (i = _rl_last_c_pos; i < new; i++)
|
||||||
tputs (term_forward_char, 1, _rl_output_character_function);
|
tputs (term_forward_char, 1, _rl_output_character_function);
|
||||||
@ -1114,20 +1211,15 @@ _rl_move_vert (to)
|
|||||||
if (_rl_last_v_pos == to || to > screenheight)
|
if (_rl_last_v_pos == to || to > screenheight)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#if defined (__GO32__)
|
|
||||||
{
|
|
||||||
int row, col;
|
|
||||||
|
|
||||||
ScreenGetCursor (&row, &col);
|
|
||||||
ScreenSetCursor ((row + to - _rl_last_v_pos), col);
|
|
||||||
}
|
|
||||||
#else /* !__GO32__ */
|
|
||||||
|
|
||||||
if ((delta = to - _rl_last_v_pos) > 0)
|
if ((delta = to - _rl_last_v_pos) > 0)
|
||||||
{
|
{
|
||||||
for (i = 0; i < delta; i++)
|
for (i = 0; i < delta; i++)
|
||||||
putc ('\n', rl_outstream);
|
putc ('\n', rl_outstream);
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
putc ('\r', rl_outstream);
|
||||||
|
#else
|
||||||
tputs (term_cr, 1, _rl_output_character_function);
|
tputs (term_cr, 1, _rl_output_character_function);
|
||||||
|
#endif
|
||||||
_rl_last_c_pos = 0;
|
_rl_last_c_pos = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1136,7 +1228,7 @@ _rl_move_vert (to)
|
|||||||
for (i = 0; i < -delta; i++)
|
for (i = 0; i < -delta; i++)
|
||||||
tputs (term_up, 1, _rl_output_character_function);
|
tputs (term_up, 1, _rl_output_character_function);
|
||||||
}
|
}
|
||||||
#endif /* !__GO32__ */
|
|
||||||
_rl_last_v_pos = to; /* Now TO is here */
|
_rl_last_v_pos = to; /* Now TO is here */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1344,11 +1436,9 @@ void
|
|||||||
_rl_clear_to_eol (count)
|
_rl_clear_to_eol (count)
|
||||||
int count;
|
int count;
|
||||||
{
|
{
|
||||||
#if !defined (__GO32__)
|
|
||||||
if (term_clreol)
|
if (term_clreol)
|
||||||
tputs (term_clreol, 1, _rl_output_character_function);
|
tputs (term_clreol, 1, _rl_output_character_function);
|
||||||
else if (count)
|
else if (count)
|
||||||
#endif /* !__GO32__ */
|
|
||||||
space_to_eol (count);
|
space_to_eol (count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1369,11 +1459,9 @@ space_to_eol (count)
|
|||||||
void
|
void
|
||||||
_rl_clear_screen ()
|
_rl_clear_screen ()
|
||||||
{
|
{
|
||||||
#if !defined (__GO32__)
|
|
||||||
if (term_clrpag)
|
if (term_clrpag)
|
||||||
tputs (term_clrpag, 1, _rl_output_character_function);
|
tputs (term_clrpag, 1, _rl_output_character_function);
|
||||||
else
|
else
|
||||||
#endif /* !__GO32__ */
|
|
||||||
crlf ();
|
crlf ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1383,20 +1471,6 @@ insert_some_chars (string, count)
|
|||||||
char *string;
|
char *string;
|
||||||
int count;
|
int count;
|
||||||
{
|
{
|
||||||
#if defined (__GO32__)
|
|
||||||
int row, col, width;
|
|
||||||
char *row_start;
|
|
||||||
|
|
||||||
ScreenGetCursor (&row, &col);
|
|
||||||
width = ScreenCols ();
|
|
||||||
row_start = ScreenPrimary + (row * width);
|
|
||||||
|
|
||||||
memcpy (row_start + col + count, row_start + col, width - col - count);
|
|
||||||
|
|
||||||
/* Place the text on the screen. */
|
|
||||||
_rl_output_some_chars (string, count);
|
|
||||||
#else /* !_GO32 */
|
|
||||||
|
|
||||||
/* If IC is defined, then we do not have to "enter" insert mode. */
|
/* If IC is defined, then we do not have to "enter" insert mode. */
|
||||||
if (term_IC)
|
if (term_IC)
|
||||||
{
|
{
|
||||||
@ -1429,7 +1503,6 @@ insert_some_chars (string, count)
|
|||||||
if (term_ei && *term_ei)
|
if (term_ei && *term_ei)
|
||||||
tputs (term_ei, 1, _rl_output_character_function);
|
tputs (term_ei, 1, _rl_output_character_function);
|
||||||
}
|
}
|
||||||
#endif /* !__GO32__ */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Delete COUNT characters from the display line. */
|
/* Delete COUNT characters from the display line. */
|
||||||
@ -1437,18 +1510,6 @@ static void
|
|||||||
delete_chars (count)
|
delete_chars (count)
|
||||||
int count;
|
int count;
|
||||||
{
|
{
|
||||||
#if defined (__GO32__)
|
|
||||||
int row, col, width;
|
|
||||||
char *row_start;
|
|
||||||
|
|
||||||
ScreenGetCursor (&row, &col);
|
|
||||||
width = ScreenCols ();
|
|
||||||
row_start = ScreenPrimary + (row * width);
|
|
||||||
|
|
||||||
memcpy (row_start + col, row_start + col + count, width - col - count);
|
|
||||||
memset (row_start + width - count, 0, count * 2);
|
|
||||||
#else /* !_GO32 */
|
|
||||||
|
|
||||||
if (count > screenwidth) /* XXX */
|
if (count > screenwidth) /* XXX */
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1464,7 +1525,6 @@ delete_chars (count)
|
|||||||
while (count--)
|
while (count--)
|
||||||
tputs (term_dc, 1, _rl_output_character_function);
|
tputs (term_dc, 1, _rl_output_character_function);
|
||||||
}
|
}
|
||||||
#endif /* !__GO32__ */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1486,7 +1546,11 @@ _rl_update_final ()
|
|||||||
if (full_lines && _rl_term_autowrap && (VIS_LLEN(_rl_vis_botlin) == screenwidth))
|
if (full_lines && _rl_term_autowrap && (VIS_LLEN(_rl_vis_botlin) == screenwidth))
|
||||||
{
|
{
|
||||||
char *last_line;
|
char *last_line;
|
||||||
|
#if 0
|
||||||
last_line = &visible_line[inv_lbreaks[_rl_vis_botlin]];
|
last_line = &visible_line[inv_lbreaks[_rl_vis_botlin]];
|
||||||
|
#else
|
||||||
|
last_line = &visible_line[vis_lbreaks[_rl_vis_botlin]];
|
||||||
|
#endif
|
||||||
_rl_move_cursor_relative (screenwidth - 1, last_line);
|
_rl_move_cursor_relative (screenwidth - 1, last_line);
|
||||||
_rl_clear_to_eol (0);
|
_rl_clear_to_eol (0);
|
||||||
putc (last_line[screenwidth - 1], rl_outstream);
|
putc (last_line[screenwidth - 1], rl_outstream);
|
||||||
@ -1503,23 +1567,66 @@ cr ()
|
|||||||
{
|
{
|
||||||
if (term_cr)
|
if (term_cr)
|
||||||
{
|
{
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
putc ('\r', rl_outstream);
|
||||||
|
#else
|
||||||
tputs (term_cr, 1, _rl_output_character_function);
|
tputs (term_cr, 1, _rl_output_character_function);
|
||||||
|
#endif
|
||||||
_rl_last_c_pos = 0;
|
_rl_last_c_pos = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Redraw the last line of a multi-line prompt that may possibly contain
|
||||||
|
terminal escape sequences. Called with the cursor at column 0 of the
|
||||||
|
line to draw the prompt on. */
|
||||||
|
static void
|
||||||
|
redraw_prompt (t)
|
||||||
|
char *t;
|
||||||
|
{
|
||||||
|
char *oldp, *oldl, *oldlprefix;
|
||||||
|
int oldlen, oldlast, oldplen;
|
||||||
|
|
||||||
|
/* Geez, I should make this a struct. */
|
||||||
|
oldp = rl_display_prompt;
|
||||||
|
oldl = local_prompt;
|
||||||
|
oldlprefix = local_prompt_prefix;
|
||||||
|
oldlen = visible_length;
|
||||||
|
oldplen = prefix_length;
|
||||||
|
oldlast = last_invisible;
|
||||||
|
|
||||||
|
rl_display_prompt = t;
|
||||||
|
local_prompt = expand_prompt (t, &visible_length, &last_invisible);
|
||||||
|
local_prompt_prefix = (char *)NULL;
|
||||||
|
rl_forced_update_display ();
|
||||||
|
|
||||||
|
rl_display_prompt = oldp;
|
||||||
|
local_prompt = oldl;
|
||||||
|
local_prompt_prefix = oldlprefix;
|
||||||
|
visible_length = oldlen;
|
||||||
|
prefix_length = oldplen;
|
||||||
|
last_invisible = oldlast;
|
||||||
|
}
|
||||||
|
|
||||||
/* Redisplay the current line after a SIGWINCH is received. */
|
/* Redisplay the current line after a SIGWINCH is received. */
|
||||||
void
|
void
|
||||||
_rl_redisplay_after_sigwinch ()
|
_rl_redisplay_after_sigwinch ()
|
||||||
{
|
{
|
||||||
char *t, *oldp, *oldl, *oldlprefix;
|
char *t;
|
||||||
|
|
||||||
/* Clear the current line and put the cursor at column 0. Make sure
|
/* Clear the current line and put the cursor at column 0. Make sure
|
||||||
the right thing happens if we have wrapped to a new screen line. */
|
the right thing happens if we have wrapped to a new screen line. */
|
||||||
if (term_cr)
|
if (term_cr)
|
||||||
{
|
{
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
putc ('\r', rl_outstream);
|
||||||
|
#else
|
||||||
tputs (term_cr, 1, _rl_output_character_function);
|
tputs (term_cr, 1, _rl_output_character_function);
|
||||||
|
#endif
|
||||||
_rl_last_c_pos = 0;
|
_rl_last_c_pos = 0;
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
space_to_eol (screenwidth);
|
||||||
|
putc ('\r', rl_outstream);
|
||||||
|
#else
|
||||||
if (term_clreol)
|
if (term_clreol)
|
||||||
tputs (term_clreol, 1, _rl_output_character_function);
|
tputs (term_clreol, 1, _rl_output_character_function);
|
||||||
else
|
else
|
||||||
@ -1527,6 +1634,7 @@ _rl_redisplay_after_sigwinch ()
|
|||||||
space_to_eol (screenwidth);
|
space_to_eol (screenwidth);
|
||||||
tputs (term_cr, 1, _rl_output_character_function);
|
tputs (term_cr, 1, _rl_output_character_function);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (_rl_last_v_pos > 0)
|
if (_rl_last_v_pos > 0)
|
||||||
_rl_move_vert (0);
|
_rl_move_vert (0);
|
||||||
}
|
}
|
||||||
@ -1536,17 +1644,7 @@ _rl_redisplay_after_sigwinch ()
|
|||||||
/* Redraw only the last line of a multi-line prompt. */
|
/* Redraw only the last line of a multi-line prompt. */
|
||||||
t = strrchr (rl_display_prompt, '\n');
|
t = strrchr (rl_display_prompt, '\n');
|
||||||
if (t)
|
if (t)
|
||||||
{
|
redraw_prompt (++t);
|
||||||
oldp = rl_display_prompt;
|
|
||||||
oldl = local_prompt;
|
|
||||||
oldlprefix = local_prompt_prefix;
|
|
||||||
rl_display_prompt = ++t;
|
|
||||||
local_prompt = local_prompt_prefix = (char *)NULL;
|
|
||||||
rl_forced_update_display ();
|
|
||||||
rl_display_prompt = oldp;
|
|
||||||
local_prompt = oldl;
|
|
||||||
local_prompt_prefix = oldlprefix;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
rl_forced_update_display ();
|
rl_forced_update_display ();
|
||||||
}
|
}
|
||||||
@ -1571,3 +1669,25 @@ _rl_erase_entire_line ()
|
|||||||
cr ();
|
cr ();
|
||||||
fflush (rl_outstream);
|
fflush (rl_outstream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* return the `current display line' of the cursor -- the number of lines to
|
||||||
|
move up to get to the first screen line of the current readline line. */
|
||||||
|
int
|
||||||
|
_rl_current_display_line ()
|
||||||
|
{
|
||||||
|
int ret, nleft;
|
||||||
|
|
||||||
|
/* Find out whether or not there might be invisible characters in the
|
||||||
|
editing buffer. */
|
||||||
|
if (rl_display_prompt == rl_prompt)
|
||||||
|
nleft = _rl_last_c_pos - screenwidth - rl_visible_prompt_length;
|
||||||
|
else
|
||||||
|
nleft = _rl_last_c_pos - screenwidth;
|
||||||
|
|
||||||
|
if (nleft > 0)
|
||||||
|
ret = 1 + nleft / screenwidth;
|
||||||
|
else
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@ -1,6 +1,23 @@
|
|||||||
# This makefile for Readline library documentation is in -*- text -*- mode.
|
# This makefile for Readline library documentation is in -*- text -*- mode.
|
||||||
# Emacs likes it that way.
|
# Emacs likes it that way.
|
||||||
top_srcdir = @top_srcdir@
|
|
||||||
|
# Copyright (C) 1996 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
|
||||||
|
|
||||||
|
topdir = @top_srcdir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
VPATH = .:@srcdir@
|
VPATH = .:@srcdir@
|
||||||
|
|
||||||
@ -8,25 +25,33 @@ prefix = @prefix@
|
|||||||
infodir = @infodir@
|
infodir = @infodir@
|
||||||
|
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
man3dir = $(mandir)/man3
|
manpfx = man
|
||||||
|
|
||||||
|
man1ext = 1
|
||||||
|
man1dir = $(mandir)/$(manpfx)$(man1ext)
|
||||||
|
man3ext = 3
|
||||||
|
man3dir = $(mandir)/$(manpfx)$(man3ext)
|
||||||
|
|
||||||
SHELL = @MAKE_SHELL@
|
SHELL = @MAKE_SHELL@
|
||||||
RM = rm -f
|
RM = rm -f
|
||||||
|
|
||||||
|
INSTALL = @INSTALL@
|
||||||
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
|
|
||||||
|
BUILD_DIR = @BUILD_DIR@
|
||||||
TEXINPUTDIR = $(srcdir)
|
TEXINPUTDIR = $(srcdir)
|
||||||
|
|
||||||
MAKEINFO = makeinfo
|
MAKEINFO = LANGUAGE= makeinfo
|
||||||
TEXI2DVI = $(srcdir)/texi2dvi
|
TEXI2DVI = $(srcdir)/texi2dvi
|
||||||
TEXI2HTML = $(srcdir)/texi2html
|
TEXI2HTML = $(srcdir)/texi2html
|
||||||
QUIETPS = #set this to -q to shut up dvips
|
QUIETPS = #set this to -q to shut up dvips
|
||||||
DVIPS = dvips -D 300 $(QUIETPS) -o $@ # tricky
|
PAPERSIZE = letter
|
||||||
|
PSDPI = 300 # I don't have any 600-dpi printers
|
||||||
INSTALL = @INSTALL@
|
DVIPS = dvips -D ${PSDPI} $(QUIETPS) -t ${PAPERSIZE} -o $@ # tricky
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
|
||||||
|
|
||||||
RLSRC = $(srcdir)/rlman.texinfo $(srcdir)/rluser.texinfo \
|
RLSRC = $(srcdir)/rlman.texinfo $(srcdir)/rluser.texinfo \
|
||||||
$(srcdir)/rltech.texinfo $(srcdir)/manvers.texinfo
|
$(srcdir)/rltech.texinfo $(srcdir)/manvers.texinfo \
|
||||||
|
$(srcdir)/rluserman.texinfo
|
||||||
HISTSRC = $(srcdir)/hist.texinfo $(srcdir)/hsuser.texinfo \
|
HISTSRC = $(srcdir)/hist.texinfo $(srcdir)/hsuser.texinfo \
|
||||||
$(srcdir)/hstech.texinfo $(srcdir)/manvers.texinfo
|
$(srcdir)/hstech.texinfo $(srcdir)/manvers.texinfo
|
||||||
|
|
||||||
@ -36,16 +61,15 @@ NROFF = groff -Tascii
|
|||||||
# This should be a program that converts troff to postscript
|
# This should be a program that converts troff to postscript
|
||||||
GROFF = groff
|
GROFF = groff
|
||||||
|
|
||||||
DVIOBJ = readline.dvi history.dvi
|
DVIOBJ = readline.dvi history.dvi rluserman.dvi
|
||||||
INFOOBJ = readline.info history.info
|
INFOOBJ = readline.info history.info rluserman.info
|
||||||
PSOBJ = readline.ps history.ps
|
PSOBJ = readline.ps history.ps rluserman.ps
|
||||||
HTMLOBJ = readline.html history.html
|
HTMLOBJ = readline.html history.html rluserman.html
|
||||||
HTMLTOC = readline_toc.html history_toc.html
|
|
||||||
TEXTOBJ = readline.0
|
TEXTOBJ = readline.0
|
||||||
|
|
||||||
INTERMEDIATE_OBJ = rlman.dvi hist.dvi
|
INTERMEDIATE_OBJ = rlman.dvi hist.dvi rluserman.dvi
|
||||||
|
|
||||||
CREATED_DOCS = $(DVIOBJ) $(INFOOBJ) $(PSOBJ) $(HTMLOBJ) $(HTMLTOC) $(TEXTOBJ)
|
CREATED_DOCS = $(DVIOBJ) $(INFOOBJ) $(PSOBJ) $(HTMLOBJ) $(TEXTOBJ)
|
||||||
|
|
||||||
.SUFFIXES: .0 .3 .ps .txt .dvi
|
.SUFFIXES: .0 .3 .ps .txt .dvi
|
||||||
|
|
||||||
@ -63,6 +87,12 @@ readline.dvi: $(RLSRC)
|
|||||||
readline.info: $(RLSRC)
|
readline.info: $(RLSRC)
|
||||||
$(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/rlman.texinfo
|
$(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/rlman.texinfo
|
||||||
|
|
||||||
|
rluserman.dvi: $(RLSRC)
|
||||||
|
TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/rluserman.texinfo
|
||||||
|
|
||||||
|
rluserman.info: $(RLSRC)
|
||||||
|
$(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/rluserman.texinfo
|
||||||
|
|
||||||
history.dvi: ${HISTSRC}
|
history.dvi: ${HISTSRC}
|
||||||
TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/hist.texinfo
|
TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/hist.texinfo
|
||||||
mv hist.dvi history.dvi
|
mv hist.dvi history.dvi
|
||||||
@ -74,18 +104,25 @@ readline.ps: readline.dvi
|
|||||||
$(RM) $@
|
$(RM) $@
|
||||||
$(DVIPS) readline.dvi
|
$(DVIPS) readline.dvi
|
||||||
|
|
||||||
|
rluserman.ps: rluserman.dvi
|
||||||
|
$(RM) $@
|
||||||
|
$(DVIPS) rluserman.dvi
|
||||||
|
|
||||||
history.ps: history.dvi
|
history.ps: history.dvi
|
||||||
$(RM) $@
|
$(RM) $@
|
||||||
$(DVIPS) history.dvi
|
$(DVIPS) history.dvi
|
||||||
|
|
||||||
readline.html: ${RLSRC}
|
readline.html: ${RLSRC}
|
||||||
$(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rlman.texinfo
|
$(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rlman.texinfo
|
||||||
sed -e 's:rlman.html:readline.html:' rlman.html > readline.html
|
sed -e 's:rlman.html:readline.html:g' rlman.html > readline.html
|
||||||
$(RM) rlman.html
|
$(RM) rlman.html
|
||||||
|
|
||||||
|
rluserman.html: ${RLSRC}
|
||||||
|
$(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rluserman.texinfo
|
||||||
|
|
||||||
history.html: ${HISTSRC}
|
history.html: ${HISTSRC}
|
||||||
$(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/hist.texinfo
|
$(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/hist.texinfo
|
||||||
sed -e 's:hist.html:history.html:' hist.html > history.html
|
sed -e 's:hist.html:history.html:g' hist.html > history.html
|
||||||
$(RM) hist.html
|
$(RM) hist.html
|
||||||
|
|
||||||
info: $(INFOOBJ)
|
info: $(INFOOBJ)
|
||||||
@ -98,7 +135,7 @@ readline.0: readline.3
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) *.aux *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps *.pgs \
|
$(RM) *.aux *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps *.pgs \
|
||||||
*.fns *.kys *.tps *.vrs *.o core
|
*.fns *.kys *.tps *.vrs *.bt *.bts *.o core
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
$(RM) $(CREATED_DOCS)
|
$(RM) $(CREATED_DOCS)
|
||||||
@ -112,8 +149,8 @@ maintainer-clean: clean
|
|||||||
$(RM) $(INTERMEDIATE_OBJ)
|
$(RM) $(INTERMEDIATE_OBJ)
|
||||||
$(RM) Makefile
|
$(RM) Makefile
|
||||||
|
|
||||||
installdirs: $(top_srcdir)/support/mkdirs
|
installdirs: $(topdir)/support/mkdirs
|
||||||
-$(SHELL) $(top_srcdir)/support/mkdirs $(infodir) $(man3dir)
|
-$(SHELL) $(topdir)/support/mkdirs $(infodir) $(man3dir)
|
||||||
|
|
||||||
install: installdirs
|
install: installdirs
|
||||||
if test -f readline.info; then \
|
if test -f readline.info; then \
|
||||||
@ -121,12 +158,17 @@ install: installdirs
|
|||||||
else \
|
else \
|
||||||
${INSTALL_DATA} $(srcdir)/readline.info $(infodir)/readline.info; \
|
${INSTALL_DATA} $(srcdir)/readline.info $(infodir)/readline.info; \
|
||||||
fi
|
fi
|
||||||
|
if test -f rluserman.info; then \
|
||||||
|
${INSTALL_DATA} rluserman.info $(infodir)/rluserman.info; \
|
||||||
|
else \
|
||||||
|
${INSTALL_DATA} $(srcdir)/rluserman.info $(infodir)/rluserman.info; \
|
||||||
|
fi
|
||||||
if test -f history.info; then \
|
if test -f history.info; then \
|
||||||
${INSTALL_DATA} history.info $(infodir)/history.info; \
|
${INSTALL_DATA} history.info $(infodir)/history.info; \
|
||||||
else \
|
else \
|
||||||
${INSTALL_DATA} $(srcdir)/history.info $(infodir)/history.info; \
|
${INSTALL_DATA} $(srcdir)/history.info $(infodir)/history.info; \
|
||||||
fi
|
fi
|
||||||
if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
|
-if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
|
||||||
install-info --dir-file=$(infodir)/dir $(infodir)/readline.info ; \
|
install-info --dir-file=$(infodir)/dir $(infodir)/readline.info ; \
|
||||||
install-info --dir-file=$(infodir)/dir $(infodir)/history.info ; \
|
install-info --dir-file=$(infodir)/dir $(infodir)/history.info ; \
|
||||||
else true; fi
|
else true; fi
|
||||||
@ -134,5 +176,6 @@ install: installdirs
|
|||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
$(RM) $(infodir)/readline.info
|
$(RM) $(infodir)/readline.info
|
||||||
|
$(RM) $(infodir)/rluserman.info
|
||||||
$(RM) $(infodir)/history.info
|
$(RM) $(infodir)/history.info
|
||||||
$(RM) $(man3dir)/readline.3
|
$(RM) $(man3dir)/readline.3
|
||||||
|
@ -55,8 +55,8 @@ provides a consistent user interface for recalling lines of previously
|
|||||||
typed input.
|
typed input.
|
||||||
|
|
||||||
Published by the Free Software Foundation @*
|
Published by the Free Software Foundation @*
|
||||||
675 Massachusetts Avenue, @*
|
59 Temple Place, Suite 330, @*
|
||||||
Cambridge, MA 02139 USA
|
Boston, MA 02111 USA
|
||||||
|
|
||||||
Permission is granted to make and distribute verbatim copies of
|
Permission is granted to make and distribute verbatim copies of
|
||||||
this manual provided the copyright notice and this permission notice
|
this manual provided the copyright notice and this permission notice
|
||||||
|
@ -66,6 +66,13 @@ If the programmer desires, he can use the Readline library, which
|
|||||||
includes some history manipulation by default, and has the added
|
includes some history manipulation by default, and has the added
|
||||||
advantage of command line editing.
|
advantage of command line editing.
|
||||||
|
|
||||||
|
Before declaring any functions using any functionality the History
|
||||||
|
library provides in other code, an application writer should include
|
||||||
|
the file @code{<readline/history.h>} in any file that uses the
|
||||||
|
History library's features. It supplies extern declarations for all
|
||||||
|
of the library's public functions and variables, and declares all of
|
||||||
|
the public data structures.
|
||||||
|
|
||||||
@node History Storage
|
@node History Storage
|
||||||
@section History Storage
|
@section History Storage
|
||||||
|
|
||||||
@ -334,7 +341,7 @@ if expansions did take place;
|
|||||||
@item -1
|
@item -1
|
||||||
if there was an error in expansion;
|
if there was an error in expansion;
|
||||||
@item 2
|
@item 2
|
||||||
if the returned line should only be displayed, but not executed,
|
if the returned line should be displayed, but not executed,
|
||||||
as with the @code{:p} modifier (@pxref{Modifiers}).
|
as with the @code{:p} modifier (@pxref{Modifiers}).
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
@ignore
|
@ignore
|
||||||
This file documents the user interface to the GNU History library.
|
This file documents the user interface to the GNU History library.
|
||||||
|
|
||||||
Copyright (C) 1988, 1991, 1996 Free Software Foundation, Inc.
|
Copyright (C) 1988-1999 Free Software Foundation, Inc.
|
||||||
Authored by Brian Fox and Chet Ramey.
|
Authored by Brian Fox and Chet Ramey.
|
||||||
|
|
||||||
Permission is granted to make and distribute verbatim copies of this manual
|
Permission is granted to make and distribute verbatim copies of this manual
|
||||||
@ -26,11 +26,16 @@ into another language, under the above conditions for modified versions.
|
|||||||
@node Using History Interactively
|
@node Using History Interactively
|
||||||
@chapter Using History Interactively
|
@chapter Using History Interactively
|
||||||
|
|
||||||
|
@ifclear BashFeatures
|
||||||
|
@defcodeindex bt
|
||||||
|
@end ifclear
|
||||||
|
|
||||||
@ifset BashFeatures
|
@ifset BashFeatures
|
||||||
This chapter describes how to use the GNU History Library interactively,
|
This chapter describes how to use the @sc{gnu} History Library
|
||||||
from a user's standpoint. It should be considered a user's guide. For
|
interactively, from a user's standpoint.
|
||||||
information on using the GNU History Library in other programs,
|
It should be considered a user's guide.
|
||||||
see the GNU Readline Library Manual.
|
For information on using the @sc{gnu} History Library in other programs,
|
||||||
|
see the @sc{gnu} Readline Library Manual.
|
||||||
@end ifset
|
@end ifset
|
||||||
@ifclear BashFeatures
|
@ifclear BashFeatures
|
||||||
This chapter describes how to use the GNU History Library interactively,
|
This chapter describes how to use the GNU History Library interactively,
|
||||||
@ -63,20 +68,25 @@ information on using the GNU History Library in your own programs,
|
|||||||
When the @samp{-o history} option to the @code{set} builtin
|
When the @samp{-o history} option to the @code{set} builtin
|
||||||
is enabled (@pxref{The Set Builtin}),
|
is enabled (@pxref{The Set Builtin}),
|
||||||
the shell provides access to the @var{command history},
|
the shell provides access to the @var{command history},
|
||||||
the list of commands previously typed. The text of the last
|
the list of commands previously typed.
|
||||||
@code{HISTSIZE}
|
The value of the @code{HISTSIZE} shell variable is used as the
|
||||||
commands (default 500) is saved in a history list. The shell
|
number of commands to save in a history list.
|
||||||
stores each command in the history list prior to parameter and
|
The text of the last @code{$HISTSIZE}
|
||||||
variable expansion
|
commands (default 500) is saved.
|
||||||
|
The shell stores each command in the history list prior to
|
||||||
|
parameter and variable expansion
|
||||||
but after history expansion is performed, subject to the
|
but after history expansion is performed, subject to the
|
||||||
values of the shell variables
|
values of the shell variables
|
||||||
@code{HISTIGNORE} and @code{HISTCONTROL}.
|
@code{HISTIGNORE} and @code{HISTCONTROL}.
|
||||||
|
|
||||||
When the shell starts up, the history is initialized from the
|
When the shell starts up, the history is initialized from the
|
||||||
file named by the @code{HISTFILE} variable (default @file{~/.bash_history}).
|
file named by the @code{HISTFILE} variable (default @file{~/.bash_history}).
|
||||||
@code{HISTFILE} is truncated, if necessary, to contain no more than
|
The file named by the value of @code{HISTFILE} is truncated, if
|
||||||
the number of lines specified by the value of the @code{HISTFILESIZE}
|
necessary, to contain no more than the number of lines specified by
|
||||||
variable. When an interactive shell exits, the last
|
the value of the @code{HISTFILESIZE} variable.
|
||||||
@code{HISTSIZE} lines are copied from the history list to @code{HISTFILE}.
|
When an interactive shell exits, the last
|
||||||
|
@code{$HISTSIZE} lines are copied from the history list to the file
|
||||||
|
named by @code{$HISTFILE}.
|
||||||
If the @code{histappend} shell option is set (@pxref{Bash Builtins}),
|
If the @code{histappend} shell option is set (@pxref{Bash Builtins}),
|
||||||
the lines are appended to the history file,
|
the lines are appended to the history file,
|
||||||
otherwise the history file is overwritten.
|
otherwise the history file is overwritten.
|
||||||
@ -88,11 +98,11 @@ lines. If @code{HISTFILESIZE} is not set, no truncation is performed.
|
|||||||
|
|
||||||
The builtin command @code{fc} may be used to list or edit and re-execute
|
The builtin command @code{fc} may be used to list or edit and re-execute
|
||||||
a portion of the history list.
|
a portion of the history list.
|
||||||
The @code{history} builtin can be used to display or modify the history
|
The @code{history} builtin may be used to display or modify the history
|
||||||
list and manipulate the history file.
|
list and manipulate the history file.
|
||||||
When using the command-line editing, search commands
|
When using command-line editing, search commands
|
||||||
are available in each editing mode that provide access to the
|
are available in each editing mode that provide access to the
|
||||||
history list.
|
history list (@pxref{Commands For History}).
|
||||||
|
|
||||||
The shell allows control over which commands are saved on the history
|
The shell allows control over which commands are saved on the history
|
||||||
list. The @code{HISTCONTROL} and @code{HISTIGNORE}
|
list. The @code{HISTCONTROL} and @code{HISTIGNORE}
|
||||||
@ -105,13 +115,14 @@ semicolons where necessary to preserve syntactic correctness.
|
|||||||
The @code{lithist}
|
The @code{lithist}
|
||||||
shell option causes the shell to save the command with embedded newlines
|
shell option causes the shell to save the command with embedded newlines
|
||||||
instead of semicolons.
|
instead of semicolons.
|
||||||
|
The @code{shopt} builtin is used to set these options.
|
||||||
@xref{Bash Builtins}, for a description of @code{shopt}.
|
@xref{Bash Builtins}, for a description of @code{shopt}.
|
||||||
|
|
||||||
@node Bash History Builtins
|
@node Bash History Builtins
|
||||||
@section Bash History Builtins
|
@section Bash History Builtins
|
||||||
@cindex history builtins
|
@cindex history builtins
|
||||||
|
|
||||||
Bash provides two builtin commands that allow you to manipulate the
|
Bash provides two builtin commands which manipulate the
|
||||||
history list and history file.
|
history list and history file.
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
@ -151,23 +162,27 @@ and typing @samp{r} re-executes the last command (@pxref{Aliases}).
|
|||||||
@item history
|
@item history
|
||||||
@btindex history
|
@btindex history
|
||||||
@example
|
@example
|
||||||
history [-c] [@var{n}]
|
history [@var{n}]
|
||||||
|
history -c
|
||||||
|
history -d @var{offset}
|
||||||
history [-anrw] [@var{filename}]
|
history [-anrw] [@var{filename}]
|
||||||
history -ps @var{arg}
|
history -ps @var{arg}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
Display the history list with line numbers. Lines prefixed with
|
With no options, display the history list with line numbers.
|
||||||
with a @samp{*} have been modified. An argument of @var{n} says
|
Lines prefixed with with a @samp{*} have been modified.
|
||||||
to list only the last @var{n} lines. Options, if supplied, have
|
An argument of @var{n} lists only the last @var{n} lines.
|
||||||
the following meanings:
|
Options, if supplied, have the following meanings:
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
@item -w
|
@item -c
|
||||||
Write out the current history to the history file.
|
Clear the history list. This may be combined
|
||||||
|
with the other options to replace the history list completely.
|
||||||
|
|
||||||
@item -r
|
@item -d @var{offset}
|
||||||
Read the current history file and append its contents to
|
Delete the history entry at position @var{offset}.
|
||||||
the history list.
|
@var{offset} should be specified as it appears when the history is
|
||||||
|
displayed.
|
||||||
|
|
||||||
@item -a
|
@item -a
|
||||||
Append the new
|
Append the new
|
||||||
@ -179,20 +194,24 @@ Append the history lines not already read from the history file
|
|||||||
to the current history list. These are lines appended to the history
|
to the current history list. These are lines appended to the history
|
||||||
file since the beginning of the current Bash session.
|
file since the beginning of the current Bash session.
|
||||||
|
|
||||||
@item -c
|
@item -r
|
||||||
Clear the history list. This may be combined
|
Read the current history file and append its contents to
|
||||||
with the other options to replace the history list completely.
|
the history list.
|
||||||
|
|
||||||
|
@item -w
|
||||||
|
Write out the current history to the history file.
|
||||||
|
|
||||||
|
@item -p
|
||||||
|
Perform history substitution on the @var{arg}s and display the result
|
||||||
|
on the standard output, without storing the results in the history list.
|
||||||
|
|
||||||
@item -s
|
@item -s
|
||||||
The @var{arg}s are added to the end of
|
The @var{arg}s are added to the end of
|
||||||
the history list as a single entry.
|
the history list as a single entry.
|
||||||
|
|
||||||
@item -p
|
|
||||||
Perform history substitution on the @var{arg}s and display the result
|
|
||||||
on the standard output, without storing the results in the history list.
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
When the @samp{-w}, @samp{-r}, @samp{-a}, or @samp{-n} option is
|
When any of the @samp{-w}, @samp{-r}, @samp{-a}, or @samp{-n} options is
|
||||||
used, if @var{filename}
|
used, if @var{filename}
|
||||||
is given, then it is used as the history file. If not, then
|
is given, then it is used as the history file. If not, then
|
||||||
the value of the @code{HISTFILE} variable is used.
|
the value of the @code{HISTFILE} variable is used.
|
||||||
@ -309,6 +328,26 @@ may be omitted if the word designator begins with a @samp{^}, @samp{$},
|
|||||||
of the line, with the first word being denoted by 0 (zero). Words are
|
of the line, with the first word being denoted by 0 (zero). Words are
|
||||||
inserted into the current line separated by single spaces.
|
inserted into the current line separated by single spaces.
|
||||||
|
|
||||||
|
@need 0.75
|
||||||
|
For example,
|
||||||
|
|
||||||
|
@table @code
|
||||||
|
@item !!
|
||||||
|
designates the preceding command. When you type this, the preceding
|
||||||
|
command is repeated in toto.
|
||||||
|
|
||||||
|
@item !!:$
|
||||||
|
designates the last argument of the preceding command. This may be
|
||||||
|
shortened to @code{!$}.
|
||||||
|
|
||||||
|
@item !fi:2
|
||||||
|
designates the second argument of the most recent command starting with
|
||||||
|
the letters @code{fi}.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@need 0.75
|
||||||
|
Here are the word designators:
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
|
|
||||||
@item 0 (zero)
|
@item 0 (zero)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
@set EDITION 4.0
|
@set EDITION 4.1
|
||||||
@set VERSION 4.0
|
@set VERSION 4.1
|
||||||
@set UPDATED 31 December 1998
|
@set UPDATED 2000 January 19
|
||||||
@set UPDATE-MONTH December 1998
|
@set UPDATE-MONTH January 2000
|
||||||
|
|
||||||
@set LASTCHANGE Thu Dec 31 10:17:05 EST 1998
|
@set LASTCHANGE Wed Jan 19 12:16:30 EST 2000
|
||||||
|
@ -6,9 +6,9 @@
|
|||||||
.\" Case Western Reserve University
|
.\" Case Western Reserve University
|
||||||
.\" chet@ins.CWRU.Edu
|
.\" chet@ins.CWRU.Edu
|
||||||
.\"
|
.\"
|
||||||
.\" Last Change: Thu Dec 31 10:16:30 EST 1998
|
.\" Last Change: Tue Jun 1 13:28:03 EDT 1999
|
||||||
.\"
|
.\"
|
||||||
.TH READLINE 3 "1998 Dec 31" GNU
|
.TH READLINE 3 "1999 Jun 1" GNU
|
||||||
.\"
|
.\"
|
||||||
.\" File Name macro. This used to be `.PN', for Path Name,
|
.\" File Name macro. This used to be `.PN', for Path Name,
|
||||||
.\" but Sun doesn't seem to like that very much.
|
.\" but Sun doesn't seem to like that very much.
|
||||||
@ -148,6 +148,7 @@ processing key bindings:
|
|||||||
.IR SPACE ,
|
.IR SPACE ,
|
||||||
and
|
and
|
||||||
.IR TAB .
|
.IR TAB .
|
||||||
|
.PP
|
||||||
In addition to command names, readline allows keys to be bound
|
In addition to command names, readline allows keys to be bound
|
||||||
to a string that is inserted when the key is pressed (a \fImacro\fP).
|
to a string that is inserted when the key is pressed (a \fImacro\fP).
|
||||||
.PP
|
.PP
|
||||||
@ -564,7 +565,7 @@ Move forward to the end of the next word. Words are composed of
|
|||||||
alphanumeric characters (letters and digits).
|
alphanumeric characters (letters and digits).
|
||||||
.TP
|
.TP
|
||||||
.B backward\-word (M\-b)
|
.B backward\-word (M\-b)
|
||||||
Move back to the start of this, or the previous, word. Words are
|
Move back to the start of the current or previous word. Words are
|
||||||
composed of alphanumeric characters (letters and digits).
|
composed of alphanumeric characters (letters and digits).
|
||||||
.TP
|
.TP
|
||||||
.B clear\-screen (C\-l)
|
.B clear\-screen (C\-l)
|
||||||
@ -1172,9 +1173,9 @@ VI Command Mode functions
|
|||||||
Individual \fBreadline\fP initialization file
|
Individual \fBreadline\fP initialization file
|
||||||
.PD
|
.PD
|
||||||
.SH AUTHORS
|
.SH AUTHORS
|
||||||
Brian Fox, Free Software Foundation (primary author)
|
Brian Fox, Free Software Foundation
|
||||||
.br
|
.br
|
||||||
bfox@ai.MIT.Edu
|
bfox@gnu.org
|
||||||
.PP
|
.PP
|
||||||
Chet Ramey, Case Western Reserve University
|
Chet Ramey, Case Western Reserve University
|
||||||
.br
|
.br
|
||||||
|
@ -55,8 +55,8 @@ in the consistency of user interface across discrete programs that need
|
|||||||
to provide a command line interface.
|
to provide a command line interface.
|
||||||
|
|
||||||
Published by the Free Software Foundation @*
|
Published by the Free Software Foundation @*
|
||||||
675 Massachusetts Avenue, @*
|
59 Temple Place, Suite 330, @*
|
||||||
Cambridge, MA 02139 USA
|
Boston, MA 02111 USA
|
||||||
|
|
||||||
Permission is granted to make and distribute verbatim copies of
|
Permission is granted to make and distribute verbatim copies of
|
||||||
this manual provided the copyright notice and this permission notice
|
this manual provided the copyright notice and this permission notice
|
||||||
|
@ -167,6 +167,13 @@ programs. This section describes the various functions and variables
|
|||||||
defined within the Readline library which allow a user program to add
|
defined within the Readline library which allow a user program to add
|
||||||
customized functionality to Readline.
|
customized functionality to Readline.
|
||||||
|
|
||||||
|
Before declaring any functions that customize Readline's behavior, or
|
||||||
|
using any functionality Readline provides in other code, an
|
||||||
|
application writer should include the file @code{<readline/readline.h>}
|
||||||
|
in any file that uses Readline's features. Since some of the definitions
|
||||||
|
in @code{readline.h} use the @code{stdio} library, the file
|
||||||
|
@code{<stdio.h>} should be included before @code{readline.h}.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* The Function Type:: C declarations to make code readable.
|
* The Function Type:: C declarations to make code readable.
|
||||||
* Function Writing:: Variables and calling conventions.
|
* Function Writing:: Variables and calling conventions.
|
||||||
@ -241,7 +248,9 @@ These variables are available to function writers.
|
|||||||
|
|
||||||
@deftypevar {char *} rl_line_buffer
|
@deftypevar {char *} rl_line_buffer
|
||||||
This is the line gathered so far. You are welcome to modify the
|
This is the line gathered so far. You are welcome to modify the
|
||||||
contents of the line, but see @ref{Allowing Undoing}.
|
contents of the line, but see @ref{Allowing Undoing}. The
|
||||||
|
function @code{rl_extend_line_buffer} is available to increase
|
||||||
|
the memory allocated to @code{rl_line_buffer}.
|
||||||
@end deftypevar
|
@end deftypevar
|
||||||
|
|
||||||
@deftypevar int rl_point
|
@deftypevar int rl_point
|
||||||
@ -282,6 +291,16 @@ The prompt Readline uses. This is set from the argument to
|
|||||||
@code{readline ()}, and should not be assigned to directly.
|
@code{readline ()}, and should not be assigned to directly.
|
||||||
@end deftypevar
|
@end deftypevar
|
||||||
|
|
||||||
|
@deftypevar int rl_already_prompted
|
||||||
|
If an application wishes to display the prompt itself, rather than have
|
||||||
|
Readline do it the first time @code{readline()} is called, it should set
|
||||||
|
this variable to a non-zero value after displaying the prompt.
|
||||||
|
The prompt must also be passed as the argument to @code{readline()} so
|
||||||
|
the redisplay functions can update the display properly.
|
||||||
|
The calling application is responsible for managing the value; Readline
|
||||||
|
never sets it.
|
||||||
|
@end deftypevar
|
||||||
|
|
||||||
@deftypevar {char *} rl_library_version
|
@deftypevar {char *} rl_library_version
|
||||||
The version number of this revision of the library.
|
The version number of this revision of the library.
|
||||||
@end deftypevar
|
@end deftypevar
|
||||||
@ -447,6 +466,13 @@ several internal keymaps: @code{emacs_standard_keymap},
|
|||||||
@code{emacs_standard_keymap} is the default, and the examples in
|
@code{emacs_standard_keymap} is the default, and the examples in
|
||||||
this manual assume that.
|
this manual assume that.
|
||||||
|
|
||||||
|
Since @code{readline} installs a set of default key bindings the first
|
||||||
|
time it is called, there is always the danger that a custom binding
|
||||||
|
installed before the first call to @code{readline} will be overridden.
|
||||||
|
An alternate mechanism is to install custom key bindings in an
|
||||||
|
initialization function assigned to the @code{rl_startup_hook} variable
|
||||||
|
(@pxref{Readline Variables}).
|
||||||
|
|
||||||
These functions manage key bindings.
|
These functions manage key bindings.
|
||||||
|
|
||||||
@deftypefun int rl_bind_key (int key, Function *function)
|
@deftypefun int rl_bind_key (int key, Function *function)
|
||||||
@ -534,6 +560,12 @@ the list is formatted in such a way that it can be made part of an
|
|||||||
Print the names of all bindable Readline functions to @code{rl_outstream}.
|
Print the names of all bindable Readline functions to @code{rl_outstream}.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
|
@deftypefun {char **} rl_funmap_names ()
|
||||||
|
Return a NULL terminated array of known function names. The array is
|
||||||
|
sorted. The array itself is allocated, but not the strings inside. You
|
||||||
|
should free () the array when you done, but not the pointrs.
|
||||||
|
@end deftypefun
|
||||||
|
|
||||||
@node Allowing Undoing
|
@node Allowing Undoing
|
||||||
@subsection Allowing Undoing
|
@subsection Allowing Undoing
|
||||||
|
|
||||||
@ -615,10 +647,19 @@ Readline thinks the screen display is correct.
|
|||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
@deftypefun int rl_on_new_line ()
|
@deftypefun int rl_on_new_line ()
|
||||||
Tell the update routines that we have moved onto a new (empty) line,
|
Tell the update functions that we have moved onto a new (empty) line,
|
||||||
usually after ouputting a newline.
|
usually after ouputting a newline.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
|
@deftypefun int rl_on_new_line_with_prompt ()
|
||||||
|
Tell the update functions that we have moved onto a new line, with
|
||||||
|
@var{rl_prompt} already displayed.
|
||||||
|
This could be used by applications that want to output the prompt string
|
||||||
|
themselves, but still need Readline to know the prompt string length for
|
||||||
|
redisplay.
|
||||||
|
It should be used after setting @var{rl_already_prompted}.
|
||||||
|
@end deftypefun
|
||||||
|
|
||||||
@deftypefun int rl_reset_line_state ()
|
@deftypefun int rl_reset_line_state ()
|
||||||
Reset the display state to a clean state and redisplay the current line
|
Reset the display state to a clean state and redisplay the current line
|
||||||
starting on a new line.
|
starting on a new line.
|
||||||
@ -688,7 +729,7 @@ before Readline attempts to read characters from the terminal with
|
|||||||
@code{rl_read_key ()}.
|
@code{rl_read_key ()}.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
@deftypefun rl_extend_line_buffer (int len)
|
@deftypefun int rl_extend_line_buffer (int len)
|
||||||
Ensure that @code{rl_line_buffer} has enough space to hold @var{len}
|
Ensure that @code{rl_line_buffer} has enough space to hold @var{len}
|
||||||
characters, possibly reallocating it if necessary.
|
characters, possibly reallocating it if necessary.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
@ -700,6 +741,8 @@ Initialize or re-initialize Readline's internal state.
|
|||||||
@deftypefun int rl_reset_terminal (char *terminal_name)
|
@deftypefun int rl_reset_terminal (char *terminal_name)
|
||||||
Reinitialize Readline's idea of the terminal settings using
|
Reinitialize Readline's idea of the terminal settings using
|
||||||
@var{terminal_name} as the terminal type (e.g., @code{vt100}).
|
@var{terminal_name} as the terminal type (e.g., @code{vt100}).
|
||||||
|
If @var{terminal_name} is NULL, the value of the @code{TERM}
|
||||||
|
environment variable is used.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
@deftypefun int alphabetic (int c)
|
@deftypefun int alphabetic (int c)
|
||||||
@ -1106,7 +1149,7 @@ for subsequent calls.
|
|||||||
|
|
||||||
@deftypevar {Function *} rl_completion_entry_function
|
@deftypevar {Function *} rl_completion_entry_function
|
||||||
A pointer to the generator function for @code{completion_matches ()}.
|
A pointer to the generator function for @code{completion_matches ()}.
|
||||||
@code{NULL} means to use @code{filename_entry_function ()}, the default
|
@code{NULL} means to use @code{filename_completion_function ()}, the default
|
||||||
filename completer.
|
filename completer.
|
||||||
@end deftypevar
|
@end deftypevar
|
||||||
|
|
||||||
|
@ -7,10 +7,10 @@
|
|||||||
This file documents the end user interface to the GNU command line
|
This file documents the end user interface to the GNU command line
|
||||||
editing features. It is to be an appendix to manuals for programs which
|
editing features. It is to be an appendix to manuals for programs which
|
||||||
use these features. There is a document entitled "readline.texinfo"
|
use these features. There is a document entitled "readline.texinfo"
|
||||||
which contains both end-user and programmer documentation for the GNU
|
which contains both end-user and programmer documentation for the
|
||||||
Readline Library.
|
GNU Readline Library.
|
||||||
|
|
||||||
Copyright (C) 1988, 1991, 1993, 1996 Free Software Foundation, Inc.
|
Copyright (C) 1988-1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
Authored by Brian Fox and Chet Ramey.
|
Authored by Brian Fox and Chet Ramey.
|
||||||
|
|
||||||
@ -36,11 +36,19 @@ into another language, under the above conditions for modified versions.
|
|||||||
@comment If you are including this manual as an appendix, then set the
|
@comment If you are including this manual as an appendix, then set the
|
||||||
@comment variable readline-appendix.
|
@comment variable readline-appendix.
|
||||||
|
|
||||||
|
@ifclear BashFeatures
|
||||||
|
@defcodeindex bt
|
||||||
|
@end ifclear
|
||||||
|
|
||||||
@node Command Line Editing
|
@node Command Line Editing
|
||||||
@chapter Command Line Editing
|
@chapter Command Line Editing
|
||||||
|
|
||||||
This chapter describes the basic features of the @sc{GNU}
|
This chapter describes the basic features of the @sc{gnu}
|
||||||
command line editing interface.
|
command line editing interface.
|
||||||
|
@ifset BashFeatures
|
||||||
|
Command line editing is provided by the Readline library, which is
|
||||||
|
used by several different programs, including Bash.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Introduction and Notation:: Notation used in this text.
|
* Introduction and Notation:: Notation used in this text.
|
||||||
@ -50,6 +58,12 @@ command line editing interface.
|
|||||||
available for binding
|
available for binding
|
||||||
* Readline vi Mode:: A short description of how to make Readline
|
* Readline vi Mode:: A short description of how to make Readline
|
||||||
behave like the vi editor.
|
behave like the vi editor.
|
||||||
|
@ifset BashFeatures
|
||||||
|
* Programmable Completion:: How to specify the possible completions for
|
||||||
|
a specific command.
|
||||||
|
* Programmable Completion Builtins:: Builtin commands to specify how to
|
||||||
|
complete arguments for a particular command.
|
||||||
|
@end ifset
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Introduction and Notation
|
@node Introduction and Notation
|
||||||
@ -63,9 +77,19 @@ produced when the @key{k} key is pressed while the Control key
|
|||||||
is depressed.
|
is depressed.
|
||||||
|
|
||||||
The text @key{M-k} is read as `Meta-K' and describes the character
|
The text @key{M-k} is read as `Meta-K' and describes the character
|
||||||
produced when the meta key (if you have one) is depressed, and the @key{k}
|
produced when the Meta key (if you have one) is depressed, and the @key{k}
|
||||||
key is pressed. If you do not have a meta key, the identical keystroke
|
key is pressed.
|
||||||
can be generated by typing @key{ESC} @i{first}, and then typing @key{k}.
|
The Meta key is labeled @key{ALT} on many keyboards.
|
||||||
|
On keyboards with two keys labeled @key{ALT} (usually to either side of
|
||||||
|
the space bar), the @key{ALT} on the left side is generally set to
|
||||||
|
work as a Meta key.
|
||||||
|
The @key{ALT} key on the right may also be configured to work as a
|
||||||
|
Meta key or may be configured as some other modifier, such as a
|
||||||
|
Compose key for typing accented characters.
|
||||||
|
|
||||||
|
If you do not have a Meta or @key{ALT} key, or another key working as
|
||||||
|
a Meta key, the identical keystroke can be generated by typing @key{ESC}
|
||||||
|
@i{first}, and then typing @key{k}.
|
||||||
Either process is known as @dfn{metafying} the @key{k} key.
|
Either process is known as @dfn{metafying} the @key{k} key.
|
||||||
|
|
||||||
The text @key{M-C-k} is read as `Meta-Control-k' and describes the
|
The text @key{M-C-k} is read as `Meta-Control-k' and describes the
|
||||||
@ -75,6 +99,10 @@ In addition, several keys have their own names. Specifically,
|
|||||||
@key{DEL}, @key{ESC}, @key{LFD}, @key{SPC}, @key{RET}, and @key{TAB} all
|
@key{DEL}, @key{ESC}, @key{LFD}, @key{SPC}, @key{RET}, and @key{TAB} all
|
||||||
stand for themselves when seen in this text, or in an init file
|
stand for themselves when seen in this text, or in an init file
|
||||||
(@pxref{Readline Init File}).
|
(@pxref{Readline Init File}).
|
||||||
|
If your keyboard lacks a @key{LFD} key, typing @key{C-j} will
|
||||||
|
produce the desired character.
|
||||||
|
The @key{RET} key may be labeled @key{Return} or @key{Enter} on
|
||||||
|
some keyboards.
|
||||||
|
|
||||||
@node Readline Interaction
|
@node Readline Interaction
|
||||||
@section Readline Interaction
|
@section Readline Interaction
|
||||||
@ -110,8 +138,8 @@ character appears where the cursor was, and then the cursor moves one
|
|||||||
space to the right. If you mistype a character, you can use your
|
space to the right. If you mistype a character, you can use your
|
||||||
erase character to back up and delete the mistyped character.
|
erase character to back up and delete the mistyped character.
|
||||||
|
|
||||||
Sometimes you may miss typing a character that you wanted to type, and
|
Sometimes you may mistype a character, and
|
||||||
not notice your error until you have typed several other characters. In
|
not notice the error until you have typed several other characters. In
|
||||||
that case, you can type @key{C-b} to move the cursor to the left, and then
|
that case, you can type @key{C-b} to move the cursor to the left, and then
|
||||||
correct your mistake. Afterwards, you can move the cursor to the right
|
correct your mistake. Afterwards, you can move the cursor to the right
|
||||||
with @key{C-f}.
|
with @key{C-f}.
|
||||||
@ -120,7 +148,7 @@ When you add text in the middle of a line, you will notice that characters
|
|||||||
to the right of the cursor are `pushed over' to make room for the text
|
to the right of the cursor are `pushed over' to make room for the text
|
||||||
that you have inserted. Likewise, when you delete text behind the cursor,
|
that you have inserted. Likewise, when you delete text behind the cursor,
|
||||||
characters to the right of the cursor are `pulled back' to fill in the
|
characters to the right of the cursor are `pulled back' to fill in the
|
||||||
blank space created by the removal of the text. A list of the basic bare
|
blank space created by the removal of the text. A list of the bare
|
||||||
essentials for editing the text of an input line follows.
|
essentials for editing the text of an input line follows.
|
||||||
|
|
||||||
@table @asis
|
@table @asis
|
||||||
@ -128,22 +156,28 @@ essentials for editing the text of an input line follows.
|
|||||||
Move back one character.
|
Move back one character.
|
||||||
@item @key{C-f}
|
@item @key{C-f}
|
||||||
Move forward one character.
|
Move forward one character.
|
||||||
@item @key{DEL}
|
@item @key{DEL} or @key{Backspace}
|
||||||
Delete the character to the left of the cursor.
|
Delete the character to the left of the cursor.
|
||||||
@item @key{C-d}
|
@item @key{C-d}
|
||||||
Delete the character underneath the cursor.
|
Delete the character underneath the cursor.
|
||||||
@item @w{Printing characters}
|
@item @w{Printing characters}
|
||||||
Insert the character into the line at the cursor.
|
Insert the character into the line at the cursor.
|
||||||
@item @key{C-_}
|
@item @key{C-_} or @key{C-x C-u}
|
||||||
Undo the last editing command. You can undo all the way back to an
|
Undo the last editing command. You can undo all the way back to an
|
||||||
empty line.
|
empty line.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
(Depending on your configuration, the @key{Backspace} key be set to
|
||||||
|
delete the character to the left of the cursor and the @key{DEL} key set
|
||||||
|
to delete the character underneath the cursor, like @key{C-d}, rather
|
||||||
|
than the character to the left of the cursor.)
|
||||||
|
|
||||||
@node Readline Movement Commands
|
@node Readline Movement Commands
|
||||||
@subsection Readline Movement Commands
|
@subsection Readline Movement Commands
|
||||||
|
|
||||||
|
|
||||||
The above table describes the most basic possible keystrokes that you need
|
The above table describes the most basic keystrokes that you need
|
||||||
in order to do editing of the input line. For your convenience, many
|
in order to do editing of the input line. For your convenience, many
|
||||||
other commands have been added in addition to @key{C-b}, @key{C-f},
|
other commands have been added in addition to @key{C-b}, @key{C-f},
|
||||||
@key{C-d}, and @key{DEL}. Here are some commands for moving more rapidly
|
@key{C-d}, and @key{DEL}. Here are some commands for moving more rapidly
|
||||||
@ -175,6 +209,8 @@ operate on characters while meta keystrokes operate on words.
|
|||||||
@dfn{Killing} text means to delete the text from the line, but to save
|
@dfn{Killing} text means to delete the text from the line, but to save
|
||||||
it away for later use, usually by @dfn{yanking} (re-inserting)
|
it away for later use, usually by @dfn{yanking} (re-inserting)
|
||||||
it back into the line.
|
it back into the line.
|
||||||
|
(`Cut' and `paste' are more recent jargon for `kill' and `yank'.)
|
||||||
|
|
||||||
If the description for a command says that it `kills' text, then you can
|
If the description for a command says that it `kills' text, then you can
|
||||||
be sure that you can get the text back in a different (or the same)
|
be sure that you can get the text back in a different (or the same)
|
||||||
place later.
|
place later.
|
||||||
@ -194,12 +230,14 @@ Here is the list of commands for killing text.
|
|||||||
Kill the text from the current cursor position to the end of the line.
|
Kill the text from the current cursor position to the end of the line.
|
||||||
|
|
||||||
@item M-d
|
@item M-d
|
||||||
Kill from the cursor to the end of the current word, or if between
|
Kill from the cursor to the end of the current word, or, if between
|
||||||
words, to the end of the next word.
|
words, to the end of the next word.
|
||||||
|
Word boundaries are the same as those used by @key{M-f}.
|
||||||
|
|
||||||
@item M-DEL
|
@item M-DEL
|
||||||
Kill from the cursor the start of the previous word, or if between
|
Kill from the cursor the start of the previous word, or, if between
|
||||||
words, to the start of the previous word.
|
words, to the start of the previous word.
|
||||||
|
Word boundaries are the same as those used by @key{M-b}.
|
||||||
|
|
||||||
@item C-w
|
@item C-w
|
||||||
Kill from the cursor to the previous whitespace. This is different than
|
Kill from the cursor to the previous whitespace. This is different than
|
||||||
@ -231,7 +269,7 @@ start of the line, you might type @samp{M-- C-k}.
|
|||||||
|
|
||||||
The general way to pass numeric arguments to a command is to type meta
|
The general way to pass numeric arguments to a command is to type meta
|
||||||
digits before the command. If the first `digit' typed is a minus
|
digits before the command. If the first `digit' typed is a minus
|
||||||
sign (@key{-}), then the sign of the argument will be negative. Once
|
sign (@samp{-}), then the sign of the argument will be negative. Once
|
||||||
you have typed one meta digit to get the argument started, you can type
|
you have typed one meta digit to get the argument started, you can type
|
||||||
the remainder of the digits, and then the command. For example, to give
|
the remainder of the digits, and then the command. For example, to give
|
||||||
the @key{C-d} command an argument of 10, you could type @samp{M-1 0 C-d}.
|
the @key{C-d} command an argument of 10, you could type @samp{M-1 0 C-d}.
|
||||||
@ -252,15 +290,18 @@ As each character of the search string is typed, Readline displays
|
|||||||
the next entry from the history matching the string typed so far.
|
the next entry from the history matching the string typed so far.
|
||||||
An incremental search requires only as many characters as needed to
|
An incremental search requires only as many characters as needed to
|
||||||
find the desired history entry.
|
find the desired history entry.
|
||||||
The characters present in the value of the @var{isearch-terminators} variable
|
To search backward in the history for a particular string, type
|
||||||
|
@key{C-r}. Typing @key{C-s} searches forward through the history.
|
||||||
|
The characters present in the value of the @code{isearch-terminators} variable
|
||||||
are used to terminate an incremental search.
|
are used to terminate an incremental search.
|
||||||
If that variable has not been assigned a value, the @key{ESC} and
|
If that variable has not been assigned a value, the @key{ESC} and
|
||||||
@key{C-J} characters will terminate an incremental search.
|
@key{C-J} characters will terminate an incremental search.
|
||||||
@key{C-g} will abort an incremental search and restore the original line.
|
@key{C-g} will abort an incremental search and restore the original line.
|
||||||
When the search is terminated, the history entry containing the
|
When the search is terminated, the history entry containing the
|
||||||
search string becomes the current line.
|
search string becomes the current line.
|
||||||
To find other matching entries in the history list, type @key{C-s} or
|
|
||||||
@key{C-r} as appropriate.
|
To find other matching entries in the history list, type @key{C-r} or
|
||||||
|
@key{C-s} as appropriate.
|
||||||
This will search backward or forward in the history for the next
|
This will search backward or forward in the history for the next
|
||||||
entry matching the search string typed so far.
|
entry matching the search string typed so far.
|
||||||
Any other key sequence bound to a Readline command will terminate
|
Any other key sequence bound to a Readline command will terminate
|
||||||
@ -276,11 +317,11 @@ typed by the user or be part of the contents of the current line.
|
|||||||
@section Readline Init File
|
@section Readline Init File
|
||||||
@cindex initialization file, readline
|
@cindex initialization file, readline
|
||||||
|
|
||||||
Although the Readline library comes with a set of @code{emacs}-like
|
Although the Readline library comes with a set of Emacs-like
|
||||||
keybindings installed by default, it is possible to use a different set
|
keybindings installed by default, it is possible to use a different set
|
||||||
of keybindings.
|
of keybindings.
|
||||||
Any user can customize programs that use Readline by putting
|
Any user can customize programs that use Readline by putting
|
||||||
commands in an @dfn{inputrc} file in his home directory.
|
commands in an @dfn{inputrc} file, conventionally in his home directory.
|
||||||
The name of this
|
The name of this
|
||||||
@ifset BashFeatures
|
@ifset BashFeatures
|
||||||
file is taken from the value of the shell variable @code{INPUTRC}. If
|
file is taken from the value of the shell variable @code{INPUTRC}. If
|
||||||
@ -326,6 +367,11 @@ change from the default Emacs-like key binding to use
|
|||||||
set editing-mode vi
|
set editing-mode vi
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
@ifset BashFeatures
|
||||||
|
The @w{@code{bind -V}} command lists the current Readline variable names
|
||||||
|
and values. @xref{Bash Builtins}.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
A great deal of run-time behavior is changeable with the following
|
A great deal of run-time behavior is changeable with the following
|
||||||
variables.
|
variables.
|
||||||
|
|
||||||
@ -363,7 +409,7 @@ them; otherwise, they are simply listed. The default limit is
|
|||||||
@vindex convert-meta
|
@vindex convert-meta
|
||||||
If set to @samp{on}, Readline will convert characters with the
|
If set to @samp{on}, Readline will convert characters with the
|
||||||
eighth bit set to an ASCII key sequence by stripping the eighth
|
eighth bit set to an ASCII key sequence by stripping the eighth
|
||||||
bit and prepending an @key{ESC} character, converting them to a
|
bit and prefixing an @key{ESC} character, converting them to a
|
||||||
meta-prefixed key sequence. The default value is @samp{on}.
|
meta-prefixed key sequence. The default value is @samp{on}.
|
||||||
|
|
||||||
@item disable-completion
|
@item disable-completion
|
||||||
@ -469,7 +515,7 @@ completions. The default is @samp{off}.
|
|||||||
|
|
||||||
@item Key Bindings
|
@item Key Bindings
|
||||||
The syntax for controlling key bindings in the init file is
|
The syntax for controlling key bindings in the init file is
|
||||||
simple. First you have to know the name of the command that you
|
simple. First you need to find the name of the command that you
|
||||||
want to change. The following sections contain tables of the command
|
want to change. The following sections contain tables of the command
|
||||||
name, the default keybinding, if any, and a short description of what
|
name, the default keybinding, if any, and a short description of what
|
||||||
the command does.
|
the command does.
|
||||||
@ -480,6 +526,12 @@ command on a line in the init file. The name of the key
|
|||||||
can be expressed in different ways, depending on which is most
|
can be expressed in different ways, depending on which is most
|
||||||
comfortable for you.
|
comfortable for you.
|
||||||
|
|
||||||
|
@ifset BashFeatures
|
||||||
|
The @w{@code{bind -p}} command displays Readline function names and
|
||||||
|
bindings in a format that can put directly into an initialization file.
|
||||||
|
@xref{Bash Builtins}.
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@table @asis
|
@table @asis
|
||||||
@item @w{@var{keyname}: @var{function-name} or @var{macro}}
|
@item @w{@var{keyname}: @var{function-name} or @var{macro}}
|
||||||
@var{keyname} is the name of a key spelled out in English. For example:
|
@var{keyname} is the name of a key spelled out in English. For example:
|
||||||
@ -497,7 +549,7 @@ expressed on the right hand side (that is, to insert the text
|
|||||||
@item @w{"@var{keyseq}": @var{function-name} or @var{macro}}
|
@item @w{"@var{keyseq}": @var{function-name} or @var{macro}}
|
||||||
@var{keyseq} differs from @var{keyname} above in that strings
|
@var{keyseq} differs from @var{keyname} above in that strings
|
||||||
denoting an entire key sequence can be specified, by placing
|
denoting an entire key sequence can be specified, by placing
|
||||||
the key sequence in double quotes. Some GNU Emacs style key
|
the key sequence in double quotes. Some @sc{gnu} Emacs style key
|
||||||
escapes can be used, as in the following example, but the
|
escapes can be used, as in the following example, but the
|
||||||
special character names are not recognized.
|
special character names are not recognized.
|
||||||
|
|
||||||
@ -515,7 +567,7 @@ the text @samp{Function Key 1}.
|
|||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
The following GNU Emacs style escape sequences are available when
|
The following @sc{gnu} Emacs style escape sequences are available when
|
||||||
specifying key sequences:
|
specifying key sequences:
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
@ -528,12 +580,12 @@ an escape character
|
|||||||
@item @kbd{\\}
|
@item @kbd{\\}
|
||||||
backslash
|
backslash
|
||||||
@item @kbd{\"}
|
@item @kbd{\"}
|
||||||
@key{"}
|
@key{"}, a double quotation mark
|
||||||
@item @kbd{\'}
|
@item @kbd{\'}
|
||||||
@key{'}
|
@key{'}, a single quote or apostrophe
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
In addition to the GNU Emacs style escape sequences, a second
|
In addition to the @sc{gnu} Emacs style escape sequences, a second
|
||||||
set of backslash escapes is available:
|
set of backslash escapes is available:
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
@ -554,10 +606,10 @@ horizontal tab
|
|||||||
@item \v
|
@item \v
|
||||||
vertical tab
|
vertical tab
|
||||||
@item \@var{nnn}
|
@item \@var{nnn}
|
||||||
the character whose ASCII code is the octal value @var{nnn}
|
the character whose @code{ASCII} code is the octal value @var{nnn}
|
||||||
(one to three digits)
|
(one to three digits)
|
||||||
@item \x@var{nnn}
|
@item \x@var{nnn}
|
||||||
the character whose ASCII code is the hexadecimal value @var{nnn}
|
the character whose @code{ASCII} code is the hexadecimal value @var{nnn}
|
||||||
(one to three digits)
|
(one to three digits)
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@ -762,6 +814,17 @@ $endif
|
|||||||
|
|
||||||
This section describes Readline commands that may be bound to key
|
This section describes Readline commands that may be bound to key
|
||||||
sequences.
|
sequences.
|
||||||
|
@ifset BashFeatures
|
||||||
|
You can list your key bindings by executing
|
||||||
|
@w{@code{bind -P}} or, for a more terse format, suitable for an
|
||||||
|
@var{inputrc} file, @w{@code{bind -p}}. (@xref{Bash Builtins}.)
|
||||||
|
@end ifset
|
||||||
|
|
||||||
|
Command names without an accompanying key sequence are unbound by default.
|
||||||
|
In the following descriptions, @var{point} refers to the current cursor
|
||||||
|
position, and @var{mark} refers to a cursor position saved by the
|
||||||
|
@code{set-mark} command.
|
||||||
|
The text between the point and mark is referred to as the @var{region}.
|
||||||
|
|
||||||
@node Commands For Moving
|
@node Commands For Moving
|
||||||
@subsection Commands For Moving
|
@subsection Commands For Moving
|
||||||
@ -783,7 +846,7 @@ Move forward to the end of the next word. Words are composed of
|
|||||||
letters and digits.
|
letters and digits.
|
||||||
|
|
||||||
@item backward-word (M-b)
|
@item backward-word (M-b)
|
||||||
Move back to the start of this, or the previous, word. Words are
|
Move back to the start of the current or previous word. Words are
|
||||||
composed of letters and digits.
|
composed of letters and digits.
|
||||||
|
|
||||||
@item clear-screen (C-l)
|
@item clear-screen (C-l)
|
||||||
@ -846,9 +909,9 @@ for a string supplied by the user.
|
|||||||
|
|
||||||
@item history-search-forward ()
|
@item history-search-forward ()
|
||||||
Search forward through the history for the string of characters
|
Search forward through the history for the string of characters
|
||||||
between the start of the current line and the current cursor
|
between the start of the current line and the point.
|
||||||
position (the @var{point}). This is a non-incremental search. By
|
This is a non-incremental search.
|
||||||
default, this command is unbound.
|
By default, this command is unbound.
|
||||||
|
|
||||||
@item history-search-backward ()
|
@item history-search-backward ()
|
||||||
Search backward through the history for the string of characters
|
Search backward through the history for the string of characters
|
||||||
@ -908,11 +971,11 @@ the character at the cursor, moving the
|
|||||||
cursor forward as well. If the insertion point
|
cursor forward as well. If the insertion point
|
||||||
is at the end of the line, then this
|
is at the end of the line, then this
|
||||||
transposes the last two characters of the line.
|
transposes the last two characters of the line.
|
||||||
Negative arguments don't work.
|
Negative arguments have no effect.
|
||||||
|
|
||||||
@item transpose-words (M-t)
|
@item transpose-words (M-t)
|
||||||
Drag the word behind the cursor past the word in front of the cursor
|
Drag the word before point past the word after point,
|
||||||
moving the cursor over that word as well.
|
moving point past that word as well.
|
||||||
|
|
||||||
@item upcase-word (M-u)
|
@item upcase-word (M-u)
|
||||||
Uppercase the current (or following) word. With a negative argument,
|
Uppercase the current (or following) word. With a negative argument,
|
||||||
@ -934,38 +997,36 @@ capitalize the previous word, but do not move the cursor.
|
|||||||
@ftable @code
|
@ftable @code
|
||||||
|
|
||||||
@item kill-line (C-k)
|
@item kill-line (C-k)
|
||||||
Kill the text from the current cursor position to the end of the line.
|
Kill the text from point to the end of the line.
|
||||||
|
|
||||||
@item backward-kill-line (C-x Rubout)
|
@item backward-kill-line (C-x Rubout)
|
||||||
Kill backward to the beginning of the line.
|
Kill backward to the beginning of the line.
|
||||||
|
|
||||||
@item unix-line-discard (C-u)
|
@item unix-line-discard (C-u)
|
||||||
Kill backward from the cursor to the beginning of the current line.
|
Kill backward from the cursor to the beginning of the current line.
|
||||||
The killed text is saved on the kill-ring.
|
|
||||||
|
|
||||||
@item kill-whole-line ()
|
@item kill-whole-line ()
|
||||||
Kill all characters on the current line, no matter where the
|
Kill all characters on the current line, no matter point is.
|
||||||
cursor is. By default, this is unbound.
|
By default, this is unbound.
|
||||||
|
|
||||||
@item kill-word (M-d)
|
@item kill-word (M-d)
|
||||||
Kill from the cursor to the end of the current word, or if between
|
Kill from point to the end of the current word, or if between
|
||||||
words, to the end of the next word. Word boundaries are the same
|
words, to the end of the next word.
|
||||||
as @code{forward-word}.
|
Word boundaries are the same as @code{forward-word}.
|
||||||
|
|
||||||
@item backward-kill-word (M-DEL)
|
@item backward-kill-word (M-DEL)
|
||||||
Kill the word behind the cursor. Word boundaries are the same
|
Kill the word behind point.
|
||||||
as @code{backward-word}.
|
Word boundaries are the same as @code{backward-word}.
|
||||||
|
|
||||||
@item unix-word-rubout (C-w)
|
@item unix-word-rubout (C-w)
|
||||||
Kill the word behind the cursor, using white space as a word
|
Kill the word behind point, using white space as a word boundary.
|
||||||
boundary. The killed text is saved on the kill-ring.
|
The killed text is saved on the kill-ring.
|
||||||
|
|
||||||
@item delete-horizontal-space ()
|
@item delete-horizontal-space ()
|
||||||
Delete all spaces and tabs around point. By default, this is unbound.
|
Delete all spaces and tabs around point. By default, this is unbound.
|
||||||
|
|
||||||
@item kill-region ()
|
@item kill-region ()
|
||||||
Kill the text between the point and the @emph{mark} (saved
|
Kill the text in the current region.
|
||||||
cursor position). This text is referred to as the @var{region}.
|
|
||||||
By default, this command is unbound.
|
By default, this command is unbound.
|
||||||
|
|
||||||
@item copy-region-as-kill ()
|
@item copy-region-as-kill ()
|
||||||
@ -1109,7 +1170,7 @@ the text against lines from the history list for possible
|
|||||||
completion matches.
|
completion matches.
|
||||||
|
|
||||||
@item complete-into-braces (M-@{)
|
@item complete-into-braces (M-@{)
|
||||||
Perform filename completion and return the list of possible completions
|
Perform filename completion and insert the list of possible completions
|
||||||
enclosed within braces so the list is available to the shell
|
enclosed within braces so the list is available to the shell
|
||||||
(@pxref{Brace Expansion}).
|
(@pxref{Brace Expansion}).
|
||||||
|
|
||||||
@ -1138,7 +1199,7 @@ in the macro appear as if typed at the keyboard.
|
|||||||
@ftable @code
|
@ftable @code
|
||||||
|
|
||||||
@item re-read-init-file (C-x C-r)
|
@item re-read-init-file (C-x C-r)
|
||||||
Read in the contents of the inputrc file, and incorporate
|
Read in the contents of the @var{inputrc} file, and incorporate
|
||||||
any bindings or variable assignments found there.
|
any bindings or variable assignments found there.
|
||||||
|
|
||||||
@item abort (C-g)
|
@item abort (C-g)
|
||||||
@ -1192,7 +1253,8 @@ The value of the @code{comment-begin}
|
|||||||
variable is inserted at the beginning of the current line,
|
variable is inserted at the beginning of the current line,
|
||||||
and the line is accepted as if a newline had been typed.
|
and the line is accepted as if a newline had been typed.
|
||||||
@ifset BashFeatures
|
@ifset BashFeatures
|
||||||
This makes the current line a shell comment.
|
The default value of @code{comment-begin} causes this command
|
||||||
|
to make the current line a shell comment.
|
||||||
@end ifset
|
@end ifset
|
||||||
|
|
||||||
@item dump-functions ()
|
@item dump-functions ()
|
||||||
@ -1285,3 +1347,283 @@ switches you into `command' mode, where you can edit the text of the
|
|||||||
line with the standard @code{vi} movement keys, move to previous
|
line with the standard @code{vi} movement keys, move to previous
|
||||||
history lines with @samp{k} and subsequent lines with @samp{j}, and
|
history lines with @samp{k} and subsequent lines with @samp{j}, and
|
||||||
so forth.
|
so forth.
|
||||||
|
|
||||||
|
@ifset BashFeatures
|
||||||
|
@node Programmable Completion
|
||||||
|
@section Programmable Completion
|
||||||
|
@cindex programmable completion
|
||||||
|
|
||||||
|
When word completion is attempted for an argument to a command for
|
||||||
|
which a completion specification (a @var{compspec}) has been defined
|
||||||
|
using the @code{complete} builtin (@pxref{Programmable Completion Builtins}),
|
||||||
|
the programmable completion facilities are invoked.
|
||||||
|
|
||||||
|
First, the command name is identified.
|
||||||
|
If a compspec has been defined for that command, the
|
||||||
|
compspec is used to generate the list of possible completions for the word.
|
||||||
|
If the command word is a full pathname, a compspec for the full
|
||||||
|
pathname is searched for first.
|
||||||
|
If no compspec is found for the full pathname, an attempt is made to
|
||||||
|
find a compspec for the portion following the final slash.
|
||||||
|
|
||||||
|
Once a compspec has been found, it is used to generate the list of
|
||||||
|
matching words.
|
||||||
|
If a compspec is not found, the default Bash completion
|
||||||
|
described above (@pxref{Commands For Completion}) is performed.
|
||||||
|
|
||||||
|
First, the actions specified by the compspec are used.
|
||||||
|
Only matches which are prefixed by the word being completed are
|
||||||
|
returned.
|
||||||
|
When the @samp{-f} or @samp{-d} option is used for filename or
|
||||||
|
directory name completion, the shell variable @code{FIGNORE} is
|
||||||
|
used to filter the matches.
|
||||||
|
@xref{Bash Variables}, for a description of @code{FIGNORE}.
|
||||||
|
|
||||||
|
Any completions specified by a filename expansion pattern to the
|
||||||
|
@samp{-G} option are generated next.
|
||||||
|
The words generated by the pattern need not match the word being completed.
|
||||||
|
The @code{GLOBIGNORE} shell variable is not used to filter the matches,
|
||||||
|
but the @code{FIGNORE} shell variable is used.
|
||||||
|
|
||||||
|
Next, the string specified as the argument to the @samp{-W} option
|
||||||
|
is considered.
|
||||||
|
The string is first split using the characters in the @code{IFS}
|
||||||
|
special variable as delimiters.
|
||||||
|
Shell quoting is honored.
|
||||||
|
Each word is then expanded using
|
||||||
|
brace expansion, tilde expansion, parameter and variable expansion,
|
||||||
|
command substitution, arithmetic expansion, and pathname expansion,
|
||||||
|
as described above (@pxref{Shell Expansions}).
|
||||||
|
The results are split using the rules described above
|
||||||
|
(@pxref{Word Splitting}).
|
||||||
|
The results of the expansion are prefix-matched against the word being
|
||||||
|
completed, and the matching words become the possible completions.
|
||||||
|
|
||||||
|
After these matches have been generated, any shell function or command
|
||||||
|
specified with the @samp{-F} and @samp{-C} options is invoked.
|
||||||
|
When the command or function is invoked, the @code{COMP_LINE} and
|
||||||
|
@code{COMP_POINT} variables are assigned values as described above
|
||||||
|
(@pxref{Bash Variables}).
|
||||||
|
If a shell function is being invoked, the @code{COMP_WORDS} and
|
||||||
|
@code{COMP_CWORD} variables are also set.
|
||||||
|
When the function or command is invoked, the first argument is the
|
||||||
|
name of the command whose arguments are being completed, the
|
||||||
|
second argument is the word being completed, and the third argument
|
||||||
|
is the word preceding the word being completed on the current command line.
|
||||||
|
No filtering of the generated completions against the word being completed
|
||||||
|
is performed; the function or command has complete freedom in generating
|
||||||
|
the matches.
|
||||||
|
|
||||||
|
Any function specified with @samp{-F} is invoked first.
|
||||||
|
The function may use any of the shell facilities, including the
|
||||||
|
@code{compgen} builtin described below
|
||||||
|
(@pxref{Programmable Completion Builtins}), to generate the matches.
|
||||||
|
It must put the possible completions in the @code{COMPREPLY} array
|
||||||
|
variable.
|
||||||
|
|
||||||
|
Next, any command specified with the @samp{-C} option is invoked
|
||||||
|
in an environment equivalent to command substitution.
|
||||||
|
It should print a list of completions, one per line, to
|
||||||
|
the standard output.
|
||||||
|
Backslash may be used to escape a newline, if necessary.
|
||||||
|
|
||||||
|
After all of the possible completions are generated, any filter
|
||||||
|
specified with the @samp{-X} option is applied to the list.
|
||||||
|
The filter is a pattern as used for pathname expansion; a @samp{&}
|
||||||
|
in the pattern is replaced with the text of the word being completed.
|
||||||
|
A literal @samp{&} may be escaped with a backslash; the backslash
|
||||||
|
is removed before attempting a match.
|
||||||
|
Any completion that matches the pattern will be removed from the list.
|
||||||
|
A leading @samp{!} negates the pattern; in this case any completion
|
||||||
|
not matching the pattern will be removed.
|
||||||
|
|
||||||
|
Finally, any prefix and suffix specified with the @samp{-P} and @samp{-S}
|
||||||
|
options are added to each member of the completion list, and the result is
|
||||||
|
returned to the Readline completion code as the list of possible
|
||||||
|
completions.
|
||||||
|
|
||||||
|
If a compspec is found, whatever it generates is returned to the completion
|
||||||
|
code as the full set of possible completions.
|
||||||
|
The default Bash completions are not attempted, and the Readline
|
||||||
|
default of filename completion is disabled.
|
||||||
|
|
||||||
|
@node Programmable Completion Builtins
|
||||||
|
@section Programmable Completion Builtins
|
||||||
|
@cindex completion builtins
|
||||||
|
|
||||||
|
Two builtin commands are available to manipulate the programmable completion
|
||||||
|
facilities.
|
||||||
|
|
||||||
|
@table @code
|
||||||
|
@item compgen
|
||||||
|
@btindex compgen
|
||||||
|
@example
|
||||||
|
@code{compgen [@var{option}] [@var{word}]}
|
||||||
|
@end example
|
||||||
|
|
||||||
|
Generate possible completion matches for @var{word} according to
|
||||||
|
the @var{option}s, which may be any option accepted by the
|
||||||
|
@code{complete}
|
||||||
|
builtin with the exception of @samp{-p} and @samp{-r}, and write
|
||||||
|
the matches to the standard output.
|
||||||
|
When using the @samp{-F} or @samp{-C} options, the various shell variables
|
||||||
|
set by the programmable completion facilities, while available, will not
|
||||||
|
have useful values.
|
||||||
|
|
||||||
|
The matches will be generated in the same way as if the programmable
|
||||||
|
completion code had generated them directly from a completion specification
|
||||||
|
with the same flags.
|
||||||
|
If @var{word} is specified, only those completions matching @var{word}
|
||||||
|
will be displayed.
|
||||||
|
|
||||||
|
The return value is true unless an invalid option is supplied, or no
|
||||||
|
matches were generated.
|
||||||
|
|
||||||
|
@item complete
|
||||||
|
@btindex complete
|
||||||
|
@example
|
||||||
|
@code{complete [-abcdefjkvu] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}]
|
||||||
|
[-P @var{prefix}] [-S @var{suffix}] [-X @var{filterpat}] [-F @var{function}]
|
||||||
|
[-C @var{command}] @var{name} [@var{name} @dots{}]}
|
||||||
|
@code{complete -pr [@var{name} @dots{}]}
|
||||||
|
@end example
|
||||||
|
|
||||||
|
Specify how arguments to each @var{name} should be completed.
|
||||||
|
If the @samp{-p} option is supplied, or if no options are supplied, existing
|
||||||
|
completion specifications are printed in a way that allows them to be
|
||||||
|
reused as input.
|
||||||
|
The @samp{-r} option removes a completion specification for
|
||||||
|
each @var{name}, or, if no @var{name}s are supplied, all
|
||||||
|
completion specifications.
|
||||||
|
|
||||||
|
The process of applying these completion specifications when word completion
|
||||||
|
is attempted is described above (@pxref{Programmable Completion}).
|
||||||
|
|
||||||
|
Other options, if specified, have the following meanings.
|
||||||
|
The arguments to the @samp{-G}, @samp{-W}, and @samp{-X} options
|
||||||
|
(and, if necessary, the @samp{-P} and @samp{-S} options)
|
||||||
|
should be quoted to protect them from expansion before the
|
||||||
|
@code{complete} builtin is invoked.
|
||||||
|
|
||||||
|
@table @code
|
||||||
|
@item -A @var{action}
|
||||||
|
The @var{action} may be one of the following to generate a list of possible
|
||||||
|
completions:
|
||||||
|
|
||||||
|
@table @code
|
||||||
|
@item alias
|
||||||
|
Alias names. May also be specified as @samp{-a}.
|
||||||
|
|
||||||
|
@item arrayvar
|
||||||
|
Array variable names.
|
||||||
|
|
||||||
|
@item binding
|
||||||
|
Readline key binding names (@pxref{Bindable Readline Commands}).
|
||||||
|
|
||||||
|
@item builtin
|
||||||
|
Names of shell builtin commands. May also be specified as @samp{-b}.
|
||||||
|
|
||||||
|
@item command
|
||||||
|
Command names. May also be specified as @samp{-c}.
|
||||||
|
|
||||||
|
@item directory
|
||||||
|
Directory names. May also be specified as @samp{-d}.
|
||||||
|
|
||||||
|
@item disabled
|
||||||
|
Names of disabled shell builtins.
|
||||||
|
|
||||||
|
@item enabled
|
||||||
|
Names of enabled shell builtins.
|
||||||
|
|
||||||
|
@item export
|
||||||
|
Names of exported shell variables. May also be specified as @samp{-e}.
|
||||||
|
|
||||||
|
@item file
|
||||||
|
File names. May also be specified as @samp{-f}.
|
||||||
|
|
||||||
|
@item function
|
||||||
|
Names of shell functions.
|
||||||
|
|
||||||
|
@item helptopic
|
||||||
|
Help topics as accepted by the @code{help} builtin (@pxref{Bash Builtins}).
|
||||||
|
|
||||||
|
@item hostname
|
||||||
|
Hostnames, as taken from the file specified by the
|
||||||
|
@code{HOSTFILE} shell variable (@pxref{Bash Variables}).
|
||||||
|
|
||||||
|
@item job
|
||||||
|
Job names, if job control is active. May also be specified as @samp{-j}.
|
||||||
|
|
||||||
|
@item keyword
|
||||||
|
Shell reserved words. May also be specified as @samp{-k}.
|
||||||
|
|
||||||
|
@item running
|
||||||
|
Names of running jobs, if job control is active.
|
||||||
|
|
||||||
|
@item setopt
|
||||||
|
Valid arguments for the @samp{-o} option to the @code{set} builtin
|
||||||
|
(@pxref{The Set Builtin}).
|
||||||
|
|
||||||
|
@item shopt
|
||||||
|
Shell option names as accepted by the @code{shopt} builtin
|
||||||
|
(@pxref{Bash Builtins}).
|
||||||
|
|
||||||
|
@item signal
|
||||||
|
Signal names.
|
||||||
|
|
||||||
|
@item stopped
|
||||||
|
Names of stopped jobs, if job control is active.
|
||||||
|
|
||||||
|
@item user
|
||||||
|
User names. May also be specified as @samp{-u}.
|
||||||
|
|
||||||
|
@item variable
|
||||||
|
Names of all shell variables. May also be specified as @samp{-v}.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@item -G @var{globpat}
|
||||||
|
The filename expansion pattern @var{globpat} is expanded to generate
|
||||||
|
the possible completions.
|
||||||
|
|
||||||
|
@item -W @var{wordlist}
|
||||||
|
The @var{wordlist} is split using the characters in the
|
||||||
|
@code{IFS} special variable as delimiters, and each resultant word
|
||||||
|
is expanded.
|
||||||
|
The possible completions are the members of the resultant list which
|
||||||
|
match the word being completed.
|
||||||
|
|
||||||
|
@item -C @var{command}
|
||||||
|
@var{command} is executed in a subshell environment, and its output is
|
||||||
|
used as the possible completions.
|
||||||
|
|
||||||
|
@item -F @var{function}
|
||||||
|
The shell function @var{function} is executed in the current shell
|
||||||
|
environment.
|
||||||
|
When it finishes, the possible completions are retrieved from the value
|
||||||
|
of the @code{COMPREPLY} array variable.
|
||||||
|
|
||||||
|
@item -X @var{filterpat}
|
||||||
|
@var{filterpat} is a pattern as used for filename expansion.
|
||||||
|
It is applied to the list of possible completions generated by the
|
||||||
|
preceding options and arguments, and each completion matching
|
||||||
|
@var{filterpat} is removed from the list.
|
||||||
|
A leading @samp{!} in @var{filterpat} negates the pattern; in this
|
||||||
|
case, any completion not matching @var{filterpat} is removed.
|
||||||
|
|
||||||
|
@item -P @var{prefix}
|
||||||
|
@var{prefix} is added at the beginning of each possible completion
|
||||||
|
after all other options have been applied.
|
||||||
|
|
||||||
|
@item -S @var{suffix}
|
||||||
|
@var{suffix} is appended to each possible completion
|
||||||
|
after all other options have been applied.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
The return value is true unless an invalid option is supplied, an option
|
||||||
|
other than @samp{-p} or @samp{-r} is supplied without a @var{name}
|
||||||
|
argument, an attempt is made to remove a completion specification for
|
||||||
|
a @var{name} for which no specification exists, or
|
||||||
|
an error occurs adding a completion specification.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
@end ifset
|
||||||
|
94
contrib/libreadline/doc/rluserman.texinfo
Normal file
94
contrib/libreadline/doc/rluserman.texinfo
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
\input texinfo @c -*-texinfo-*-
|
||||||
|
@comment %**start of header (This is for running Texinfo on a region.)
|
||||||
|
@setfilename rluserman.info
|
||||||
|
@settitle GNU Readline Library
|
||||||
|
@comment %**end of header (This is for running Texinfo on a region.)
|
||||||
|
@setchapternewpage odd
|
||||||
|
|
||||||
|
@include manvers.texinfo
|
||||||
|
|
||||||
|
@ifinfo
|
||||||
|
@dircategory Libraries
|
||||||
|
@direntry
|
||||||
|
* Readline: (readline). The GNU readline library API
|
||||||
|
@end direntry
|
||||||
|
|
||||||
|
This document describes the end user interface of the GNU Readline Library,
|
||||||
|
a utility which aids in the consistency of user interface across discrete
|
||||||
|
programs that need to provide a command line interface.
|
||||||
|
|
||||||
|
Copyright (C) 1988-1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
Permission is granted to make and distribute verbatim copies of
|
||||||
|
this manual provided the copyright notice and this permission notice
|
||||||
|
pare preserved on all copies.
|
||||||
|
|
||||||
|
@ignore
|
||||||
|
Permission is granted to process this file through TeX and print the
|
||||||
|
results, provided the printed document carries copying permission
|
||||||
|
notice identical to this one except for the removal of this paragraph
|
||||||
|
(this paragraph not being relevant to the printed manual).
|
||||||
|
@end ignore
|
||||||
|
|
||||||
|
Permission is granted to copy and distribute modified versions of this
|
||||||
|
manual under the conditions for verbatim copying, provided that the entire
|
||||||
|
resulting derived work is distributed under the terms of a permission
|
||||||
|
notice identical to this one.
|
||||||
|
|
||||||
|
Permission is granted to copy and distribute translations of this manual
|
||||||
|
into another language, under the above conditions for modified versions,
|
||||||
|
except that this permission notice may be stated in a translation approved
|
||||||
|
by the Free Software Foundation.
|
||||||
|
@end ifinfo
|
||||||
|
|
||||||
|
@titlepage
|
||||||
|
@title GNU Readline Library User Interface
|
||||||
|
@subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}.
|
||||||
|
@subtitle @value{UPDATE-MONTH}
|
||||||
|
@author Brian Fox, Free Software Foundation
|
||||||
|
@author Chet Ramey, Case Western Reserve University
|
||||||
|
|
||||||
|
@page
|
||||||
|
This document describes the end user interface of the GNU Readline Library,
|
||||||
|
a utility which aids in the consistency of user interface across discrete
|
||||||
|
programs that need to provide a command line interface.
|
||||||
|
|
||||||
|
Published by the Free Software Foundation @*
|
||||||
|
59 Temple Place, Suite 330, @*
|
||||||
|
Boston, MA 02111 USA
|
||||||
|
|
||||||
|
Permission is granted to make and distribute verbatim copies of
|
||||||
|
this manual provided the copyright notice and this permission notice
|
||||||
|
are preserved on all copies.
|
||||||
|
|
||||||
|
Permission is granted to copy and distribute modified versions of this
|
||||||
|
manual under the conditions for verbatim copying, provided that the entire
|
||||||
|
resulting derived work is distributed under the terms of a permission
|
||||||
|
notice identical to this one.
|
||||||
|
|
||||||
|
Permission is granted to copy and distribute translations of this manual
|
||||||
|
into another language, under the above conditions for modified versions,
|
||||||
|
except that this permission notice may be stated in a translation approved
|
||||||
|
by the Free Software Foundation.
|
||||||
|
|
||||||
|
@vskip 0pt plus 1filll
|
||||||
|
Copyright @copyright{} 1988-1999 Free Software Foundation, Inc.
|
||||||
|
@end titlepage
|
||||||
|
|
||||||
|
@ifinfo
|
||||||
|
@node Top
|
||||||
|
@top GNU Readline Library
|
||||||
|
|
||||||
|
This document describes the end user interface of the GNU Readline Library,
|
||||||
|
a utility which aids in the consistency of user interface across discrete
|
||||||
|
programs that need to provide a command line interface.
|
||||||
|
|
||||||
|
@menu
|
||||||
|
* Command Line Editing:: GNU Readline User's Manual.
|
||||||
|
@end menu
|
||||||
|
@end ifinfo
|
||||||
|
|
||||||
|
@include rluser.texinfo
|
||||||
|
|
||||||
|
@contents
|
||||||
|
@bye
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#if !defined (BUFSIZ)
|
#if !defined (BUFSIZ)
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -76,11 +76,7 @@ KEYMAP_ENTRY_ARRAY emacs_standard_keymap = {
|
|||||||
{ ISFUNC, rl_insert }, /* & */
|
{ ISFUNC, rl_insert }, /* & */
|
||||||
{ ISFUNC, rl_insert }, /* ' */
|
{ ISFUNC, rl_insert }, /* ' */
|
||||||
{ ISFUNC, rl_insert }, /* ( */
|
{ ISFUNC, rl_insert }, /* ( */
|
||||||
#if defined (PAREN_MATCHING)
|
|
||||||
{ ISFUNC, rl_insert_close }, /* ) */
|
|
||||||
#else
|
|
||||||
{ ISFUNC, rl_insert }, /* ) */
|
{ ISFUNC, rl_insert }, /* ) */
|
||||||
#endif /* !PAREN_MATCHING */
|
|
||||||
{ ISFUNC, rl_insert }, /* * */
|
{ ISFUNC, rl_insert }, /* * */
|
||||||
{ ISFUNC, rl_insert }, /* + */
|
{ ISFUNC, rl_insert }, /* + */
|
||||||
{ ISFUNC, rl_insert }, /* , */
|
{ ISFUNC, rl_insert }, /* , */
|
||||||
@ -140,11 +136,7 @@ KEYMAP_ENTRY_ARRAY emacs_standard_keymap = {
|
|||||||
/* Some more punctuation. */
|
/* Some more punctuation. */
|
||||||
{ ISFUNC, rl_insert }, /* [ */
|
{ ISFUNC, rl_insert }, /* [ */
|
||||||
{ ISFUNC, rl_insert }, /* \ */
|
{ ISFUNC, rl_insert }, /* \ */
|
||||||
#if defined (PAREN_MATCHING)
|
|
||||||
{ ISFUNC, rl_insert_close }, /* ] */
|
|
||||||
#else
|
|
||||||
{ ISFUNC, rl_insert }, /* ] */
|
{ ISFUNC, rl_insert }, /* ] */
|
||||||
#endif /* !PAREN_MATCHING */
|
|
||||||
{ ISFUNC, rl_insert }, /* ^ */
|
{ ISFUNC, rl_insert }, /* ^ */
|
||||||
{ ISFUNC, rl_insert }, /* _ */
|
{ ISFUNC, rl_insert }, /* _ */
|
||||||
{ ISFUNC, rl_insert }, /* ` */
|
{ ISFUNC, rl_insert }, /* ` */
|
||||||
@ -180,11 +172,7 @@ KEYMAP_ENTRY_ARRAY emacs_standard_keymap = {
|
|||||||
/* Final punctuation. */
|
/* Final punctuation. */
|
||||||
{ ISFUNC, rl_insert }, /* { */
|
{ ISFUNC, rl_insert }, /* { */
|
||||||
{ ISFUNC, rl_insert }, /* | */
|
{ ISFUNC, rl_insert }, /* | */
|
||||||
#if defined (PAREN_MATCHING)
|
|
||||||
{ ISFUNC, rl_insert_close }, /* } */
|
|
||||||
#else
|
|
||||||
{ ISFUNC, rl_insert }, /* } */
|
{ ISFUNC, rl_insert }, /* } */
|
||||||
#endif /* !PAREN_MATCHING */
|
|
||||||
{ ISFUNC, rl_insert }, /* ~ */
|
{ ISFUNC, rl_insert }, /* ~ */
|
||||||
{ ISFUNC, rl_rubout }, /* RUBOUT */
|
{ ISFUNC, rl_rubout }, /* RUBOUT */
|
||||||
|
|
||||||
|
@ -1,5 +1,22 @@
|
|||||||
# This is the Makefile for the examples subdirectory of readline. -*- text -*-
|
|
||||||
#
|
#
|
||||||
|
# This is the Makefile for the readline examples subdirectory.
|
||||||
|
#
|
||||||
|
# Copyright (C) 1994 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
|
||||||
|
|
||||||
SHELL = @MAKE_SHELL@
|
SHELL = @MAKE_SHELL@
|
||||||
RM = rm -f
|
RM = rm -f
|
||||||
|
|
||||||
@ -11,7 +28,7 @@ BUILD_DIR = .
|
|||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
LOCAL_CFLAGS = @LOCAL_CFLAGS@
|
LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DREADLINE_LIBRARY
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
|
||||||
INCLUDES = -I$(srcdir) -I$(top_srcdir) -I..
|
INCLUDES = -I$(srcdir) -I$(top_srcdir) -I..
|
||||||
@ -19,6 +36,9 @@ INCLUDES = -I$(srcdir) -I$(top_srcdir) -I..
|
|||||||
CCFLAGS = $(DEFS) $(LOCAL_CFLAGS) $(CPPFLAGS) $(INCLUDES) $(CFLAGS)
|
CCFLAGS = $(DEFS) $(LOCAL_CFLAGS) $(CPPFLAGS) $(INCLUDES) $(CFLAGS)
|
||||||
LDFLAGS = -g -L..
|
LDFLAGS = -g -L..
|
||||||
|
|
||||||
|
READLINE_LIB = ../libreadline.a
|
||||||
|
HISTORY_LIB = ../libhistory.a
|
||||||
|
|
||||||
TERMCAP_LIB = @TERMCAP_LIB@
|
TERMCAP_LIB = @TERMCAP_LIB@
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
@ -39,12 +59,12 @@ fileman: fileman.o
|
|||||||
rltest: rltest.o
|
rltest: rltest.o
|
||||||
$(CC) $(LDFLAGS) -o $@ rltest.o -lreadline $(TERMCAP_LIB)
|
$(CC) $(LDFLAGS) -o $@ rltest.o -lreadline $(TERMCAP_LIB)
|
||||||
|
|
||||||
rlversion: rlversion.o
|
rlversion: rlversion.o $(READLINE_LIB)
|
||||||
$(CC) $(LDFLAGS) -o $@ rlversion.o -lreadline $(TERMCAP_LIB)
|
$(CC) $(LDFLAGS) -o $@ rlversion.o -lreadline $(TERMCAP_LIB)
|
||||||
|
|
||||||
clean mostlyclean:
|
clean mostlyclean:
|
||||||
$(RM) $(OBJECTS)
|
$(RM) $(OBJECTS)
|
||||||
$(RM) $(EXECUTABLES)
|
$(RM) $(EXECUTABLES) *.exe
|
||||||
|
|
||||||
distclean maintainer-clean: clean
|
distclean maintainer-clean: clean
|
||||||
$(RM) Makefile
|
$(RM) Makefile
|
||||||
@ -53,3 +73,13 @@ fileman.o: fileman.c
|
|||||||
rltest.o: rltest.c
|
rltest.o: rltest.c
|
||||||
rl.o: rl.c
|
rl.o: rl.c
|
||||||
rlversion.o: rlversion.c
|
rlversion.o: rlversion.c
|
||||||
|
|
||||||
|
# Stuff for Per Bothner's `rlfe' program
|
||||||
|
|
||||||
|
rlfe: rlfe.o $(READLINE_LIB) $(HISTORY_LIB)
|
||||||
|
$(CC) $(LDFLAGS) -o $@ rlfe.o -lreadline -lhistory ${TERMCAP_LIB}
|
||||||
|
|
||||||
|
rlfe.o: rlfe.c
|
||||||
|
|
||||||
|
rlfe.o: $(top_srcdir)/readline.h
|
||||||
|
rlfe.o: $(top_srcdir)/history.h
|
||||||
|
186
contrib/libreadline/examples/excallback.c
Normal file
186
contrib/libreadline/examples/excallback.c
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
/*
|
||||||
|
From: Jeff Solomon <jsolomon@stanford.edu>
|
||||||
|
Date: Fri, 9 Apr 1999 10:13:27 -0700 (PDT)
|
||||||
|
To: chet@po.cwru.edu
|
||||||
|
Subject: new readline example
|
||||||
|
Message-ID: <14094.12094.527305.199695@mrclean.Stanford.EDU>
|
||||||
|
|
||||||
|
Chet,
|
||||||
|
|
||||||
|
I've been using readline 4.0. Specifically, I've been using the perl
|
||||||
|
version Term::ReadLine::Gnu. It works great.
|
||||||
|
|
||||||
|
Anyway, I've been playing around the alternate interface and I wanted
|
||||||
|
to contribute a little C program, callback.c, to you that you could
|
||||||
|
use as an example of the alternate interface in the /examples
|
||||||
|
directory of the readline distribution.
|
||||||
|
|
||||||
|
My example shows how, using the alternate interface, you can
|
||||||
|
interactively change the prompt (which is very nice imo). Also, I
|
||||||
|
point out that you must roll your own terminal setting when using the
|
||||||
|
alternate interface because readline depreps (using your parlance) the
|
||||||
|
terminal while in the user callback. I try to demostrate what I mean
|
||||||
|
with an example. I've included the program below.
|
||||||
|
|
||||||
|
To compile, I just put the program in the examples directory and made
|
||||||
|
the appropriate changes to the EXECUTABLES and OBJECTS line and added
|
||||||
|
an additional target 'callback'.
|
||||||
|
|
||||||
|
I compiled on my Sun Solaris2.6 box using Sun's cc.
|
||||||
|
|
||||||
|
Let me know what you think.
|
||||||
|
|
||||||
|
Jeff
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (HAVE_CONFIG_H)
|
||||||
|
#include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <termios.h> /* xxx - should make this more general */
|
||||||
|
|
||||||
|
#ifdef READLINE_LIBRARY
|
||||||
|
# include "readline.h"
|
||||||
|
#else
|
||||||
|
# include <readline/readline.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This little examples demonstrates the alternate interface to using readline.
|
||||||
|
* In the alternate interface, the user maintains control over program flow and
|
||||||
|
* only calls readline when STDIN is readable. Using the alternate interface,
|
||||||
|
* you can do anything else while still using readline (like talking to a
|
||||||
|
* network or another program) without blocking.
|
||||||
|
*
|
||||||
|
* Specifically, this program highlights two importants features of the
|
||||||
|
* alternate interface. The first is the ability to interactively change the
|
||||||
|
* prompt, which can't be done using the regular interface since rl_prompt is
|
||||||
|
* read-only.
|
||||||
|
*
|
||||||
|
* The second feature really highlights a subtle point when using the alternate
|
||||||
|
* interface. That is, readline will not alter the terminal when inside your
|
||||||
|
* callback handler. So let's so, your callback executes a user command that
|
||||||
|
* takes a non-trivial amount of time to complete (seconds). While your
|
||||||
|
* executing the command, the user continues to type keystrokes and expects them
|
||||||
|
* to be re-echoed on the new prompt when it returns. Unfortunately, the default
|
||||||
|
* terminal configuration doesn't do this. After the prompt returns, the user
|
||||||
|
* must hit one additional keystroke and then will see all of his previous
|
||||||
|
* keystrokes. To illustrate this, compile and run this program. Type "sleep" at
|
||||||
|
* the prompt and then type "bar" before the prompt returns (you have 3
|
||||||
|
* seconds). Notice how "bar" is re-echoed on the prompt after the prompt
|
||||||
|
* returns? This is what you expect to happen. Now comment out the 4 lines below
|
||||||
|
* the line that says COMMENT LINE BELOW. Recompile and rerun the program and do
|
||||||
|
* the same thing. When the prompt returns, you should not see "bar". Now type
|
||||||
|
* "f", see how "barf" magically appears? This behavior is un-expected and not
|
||||||
|
* desired.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void process_line(char *line);
|
||||||
|
int change_prompt(void);
|
||||||
|
char *get_prompt(void);
|
||||||
|
|
||||||
|
int prompt = 1;
|
||||||
|
char prompt_buf[40], line_buf[256];
|
||||||
|
tcflag_t old_lflag;
|
||||||
|
cc_t old_vtime;
|
||||||
|
struct termios term;
|
||||||
|
|
||||||
|
int
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
fd_set fds;
|
||||||
|
|
||||||
|
/* Adjust the terminal slightly before the handler is installed. Disable
|
||||||
|
* canonical mode processing and set the input character time flag to be
|
||||||
|
* non-blocking.
|
||||||
|
*/
|
||||||
|
if( tcgetattr(STDIN_FILENO, &term) < 0 ) {
|
||||||
|
perror("tcgetattr");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
old_lflag = term.c_lflag;
|
||||||
|
old_vtime = term.c_cc[VTIME];
|
||||||
|
term.c_lflag &= ~ICANON;
|
||||||
|
term.c_cc[VTIME] = 1;
|
||||||
|
/* COMMENT LINE BELOW - see above */
|
||||||
|
if( tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0 ) {
|
||||||
|
perror("tcsetattr");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
rl_add_defun("change-prompt", change_prompt, CTRL('t'));
|
||||||
|
rl_callback_handler_install(get_prompt(), process_line);
|
||||||
|
|
||||||
|
while(1) {
|
||||||
|
FD_ZERO(&fds);
|
||||||
|
FD_SET(fileno(stdin), &fds);
|
||||||
|
|
||||||
|
if( select(FD_SETSIZE, &fds, NULL, NULL, NULL) < 0) {
|
||||||
|
perror("select");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( FD_ISSET(fileno(stdin), &fds) ) {
|
||||||
|
rl_callback_read_char();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
process_line(char *line)
|
||||||
|
{
|
||||||
|
if( line == NULL ) {
|
||||||
|
fprintf(stderr, "\n", line);
|
||||||
|
|
||||||
|
/* reset the old terminal setting before exiting */
|
||||||
|
term.c_lflag = old_lflag;
|
||||||
|
term.c_cc[VTIME] = old_vtime;
|
||||||
|
if( tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0 ) {
|
||||||
|
perror("tcsetattr");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( strcmp(line, "sleep") == 0 ) {
|
||||||
|
sleep(3);
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "|%s|\n", line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
change_prompt(void)
|
||||||
|
{
|
||||||
|
/* toggle the prompt variable */
|
||||||
|
prompt = !prompt;
|
||||||
|
|
||||||
|
/* save away the current contents of the line */
|
||||||
|
strcpy(line_buf, rl_line_buffer);
|
||||||
|
|
||||||
|
/* install a new handler which will change the prompt and erase the current line */
|
||||||
|
rl_callback_handler_install(get_prompt(), process_line);
|
||||||
|
|
||||||
|
/* insert the old text on the new line */
|
||||||
|
rl_insert_text(line_buf);
|
||||||
|
|
||||||
|
/* redraw the current line - this is an undocumented function. It invokes the
|
||||||
|
* redraw-current-line command.
|
||||||
|
*/
|
||||||
|
rl_refresh_line(0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
get_prompt(void)
|
||||||
|
{
|
||||||
|
/* The prompts can even be different lengths! */
|
||||||
|
sprintf(prompt_buf, "%s",
|
||||||
|
prompt ? "Hit ctrl-t to toggle prompt> " : "Pretty cool huh?> ");
|
||||||
|
return prompt_buf;
|
||||||
|
}
|
@ -1,22 +1,22 @@
|
|||||||
/* fileman.c -- A tiny application which demonstrates how to use the
|
/* fileman.c -- A tiny application which demonstrates how to use the
|
||||||
GNU Readline library. This application interactively allows users
|
GNU Readline library. This application interactively allows users
|
||||||
to manipulate files and their modes. */
|
to manipulate files and their modes. */
|
||||||
/*
|
|
||||||
* Remove the next line if you're compiling this against an installed
|
|
||||||
* libreadline.a
|
|
||||||
*/
|
|
||||||
#define READLINE_LIBRARY
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#ifdef HAVE_SYS_FILE_H
|
#ifdef HAVE_SYS_FILE_H
|
||||||
#include <sys/file.h>
|
# include <sys/file.h>
|
||||||
#endif
|
#endif
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
@ -26,6 +26,10 @@
|
|||||||
# include <strings.h>
|
# include <strings.h>
|
||||||
#endif /* !HAVE_STRING_H */
|
#endif /* !HAVE_STRING_H */
|
||||||
|
|
||||||
|
#ifdef HAVE_STDLIB_H
|
||||||
|
# include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef READLINE_LIBRARY
|
#ifdef READLINE_LIBRARY
|
||||||
# include "readline.h"
|
# include "readline.h"
|
||||||
# include "history.h"
|
# include "history.h"
|
||||||
@ -34,7 +38,6 @@
|
|||||||
# include <readline/history.h>
|
# include <readline/history.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern char *getwd ();
|
|
||||||
extern char *xmalloc ();
|
extern char *xmalloc ();
|
||||||
|
|
||||||
/* The names of functions that actually do the manipulation. */
|
/* The names of functions that actually do the manipulation. */
|
||||||
@ -300,7 +303,12 @@ com_view (arg)
|
|||||||
if (!valid_argument ("view", arg))
|
if (!valid_argument ("view", arg))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
/* more.com doesn't grok slashes in pathnames */
|
||||||
|
sprintf (syscom, "less %s", arg);
|
||||||
|
#else
|
||||||
sprintf (syscom, "more %s", arg);
|
sprintf (syscom, "more %s", arg);
|
||||||
|
#endif
|
||||||
return (system (syscom));
|
return (system (syscom));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -406,7 +414,7 @@ com_pwd (ignore)
|
|||||||
{
|
{
|
||||||
char dir[1024], *s;
|
char dir[1024], *s;
|
||||||
|
|
||||||
s = getwd (dir);
|
s = getcwd (dir, sizeof(dir) - 1);
|
||||||
if (s == 0)
|
if (s == 0)
|
||||||
{
|
{
|
||||||
printf ("Error getting pwd: %s\n", dir);
|
printf ("Error getting pwd: %s\n", dir);
|
||||||
|
@ -2,15 +2,9 @@
|
|||||||
* rl - command-line interface to read a line from the standard input
|
* rl - command-line interface to read a line from the standard input
|
||||||
* (or another fd) using readline.
|
* (or another fd) using readline.
|
||||||
*
|
*
|
||||||
* usage: rl [-p prompt] [-u unit] [-d default]
|
* usage: rl [-p prompt] [-u unit] [-d default] [-n nchars]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
* Remove the next line if you're compiling this against an installed
|
|
||||||
* libreadline.a
|
|
||||||
*/
|
|
||||||
#define READLINE_LIBRARY
|
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
@ -18,8 +12,14 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include "posixstat.h"
|
#include "posixstat.h"
|
||||||
#include "readline.h"
|
|
||||||
#include "history.h"
|
#if defined (READLINE_LIBRARY)
|
||||||
|
# include "readline.h"
|
||||||
|
# include "history.h"
|
||||||
|
#else
|
||||||
|
# include <readline/readline.h>
|
||||||
|
# include <readline/history.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
extern int optind;
|
extern int optind;
|
||||||
extern char *optarg;
|
extern char *optarg;
|
||||||
@ -40,22 +40,24 @@ set_deftext ()
|
|||||||
deftext = (char *)NULL;
|
deftext = (char *)NULL;
|
||||||
rl_startup_hook = (Function *)NULL;
|
rl_startup_hook = (Function *)NULL;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
usage()
|
usage()
|
||||||
{
|
{
|
||||||
fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default]\n",
|
fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default] [-n nchars]\n",
|
||||||
progname, progname);
|
progname, progname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
main (argc, argv)
|
main (argc, argv)
|
||||||
int argc;
|
int argc;
|
||||||
char **argv;
|
char **argv;
|
||||||
{
|
{
|
||||||
char *temp, *prompt;
|
char *temp, *prompt;
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
int opt, fd;
|
int opt, fd, nch;
|
||||||
FILE *ifp;
|
FILE *ifp;
|
||||||
|
|
||||||
progname = strrchr(argv[0], '/');
|
progname = strrchr(argv[0], '/');
|
||||||
@ -66,10 +68,10 @@ main (argc, argv)
|
|||||||
|
|
||||||
/* defaults */
|
/* defaults */
|
||||||
prompt = "readline$ ";
|
prompt = "readline$ ";
|
||||||
fd = 0;
|
fd = nch = 0;
|
||||||
deftext = (char *)0;
|
deftext = (char *)0;
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "p:u:d:")) != EOF)
|
while ((opt = getopt(argc, argv, "p:u:d:n:")) != EOF)
|
||||||
{
|
{
|
||||||
switch (opt)
|
switch (opt)
|
||||||
{
|
{
|
||||||
@ -87,6 +89,14 @@ main (argc, argv)
|
|||||||
case 'd':
|
case 'd':
|
||||||
deftext = optarg;
|
deftext = optarg;
|
||||||
break;
|
break;
|
||||||
|
case 'n':
|
||||||
|
nch = atoi(optarg);
|
||||||
|
if (nch < 0)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "%s: bad value for -n: `%s'\n", progname, optarg);
|
||||||
|
exit (2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
usage ();
|
usage ();
|
||||||
exit (2);
|
exit (2);
|
||||||
@ -107,6 +117,9 @@ main (argc, argv)
|
|||||||
if (deftext && *deftext)
|
if (deftext && *deftext)
|
||||||
rl_startup_hook = set_deftext;
|
rl_startup_hook = set_deftext;
|
||||||
|
|
||||||
|
if (nch > 0)
|
||||||
|
rl_num_chars_to_read = nch;
|
||||||
|
|
||||||
temp = readline (prompt);
|
temp = readline (prompt);
|
||||||
|
|
||||||
/* Test for EOF. */
|
/* Test for EOF. */
|
||||||
|
685
contrib/libreadline/examples/rlfe.c
Normal file
685
contrib/libreadline/examples/rlfe.c
Normal file
@ -0,0 +1,685 @@
|
|||||||
|
/* A front-end using readline to "cook" input lines for Kawa.
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 Per Bothner
|
||||||
|
*
|
||||||
|
* This front-end program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as published
|
||||||
|
* by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* Some code from Johnson & Troan: "Linux Application Development"
|
||||||
|
* (Addison-Wesley, 1998) was used directly or for inspiration.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* PROBLEMS/TODO:
|
||||||
|
*
|
||||||
|
* Only tested under Linux; needs to be ported.
|
||||||
|
*
|
||||||
|
* When running mc -c under the Linux console, mc does not recognize
|
||||||
|
* mouse clicks, which mc does when not running under fep.
|
||||||
|
*
|
||||||
|
* Pasting selected text containing tabs is like hitting the tab character,
|
||||||
|
* which invokes readline completion. We don't want this. I don't know
|
||||||
|
* if this is fixable without integrating fep into a terminal emulator.
|
||||||
|
*
|
||||||
|
* Echo suppression is a kludge, but can only be avoided with better kernel
|
||||||
|
* support: We need a tty mode to disable "real" echoing, while still
|
||||||
|
* letting the inferior think its tty driver to doing echoing.
|
||||||
|
* Stevens's book claims SCR$ and BSD4.3+ have TIOCREMOTE.
|
||||||
|
*
|
||||||
|
* The latest readline may have some hooks we can use to avoid having
|
||||||
|
* to back up the prompt.
|
||||||
|
*
|
||||||
|
* Desirable readline feature: When in cooked no-echo mode (e.g. password),
|
||||||
|
* echo characters are they are types with '*', but remove them when done.
|
||||||
|
*
|
||||||
|
* A synchronous output while we're editing an input line should be
|
||||||
|
* inserted in the output view *before* the input line, so that the
|
||||||
|
* lines being edited (with the prompt) float at the end of the input.
|
||||||
|
*
|
||||||
|
* A "page mode" option to emulate more/less behavior: At each page of
|
||||||
|
* output, pause for a user command. This required parsing the output
|
||||||
|
* to keep track of line lengths. It also requires remembering the
|
||||||
|
* output, if we want an option to scroll back, which suggests that
|
||||||
|
* this should be integrated with a terminal emulator like xterm.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <grp.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
#ifdef READLINE_LIBRARY
|
||||||
|
# include "readline.h"
|
||||||
|
# include "history.h"
|
||||||
|
#else
|
||||||
|
# include <readline/readline.h>
|
||||||
|
# include <readline/history.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef COMMAND
|
||||||
|
#define COMMAND "/bin/sh"
|
||||||
|
#endif
|
||||||
|
#ifndef COMMAND_ARGS
|
||||||
|
#define COMMAND_ARGS COMMAND
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_MEMMOVE
|
||||||
|
# if __GNUC__ > 1
|
||||||
|
# define memmove(d, s, n) __builtin_memcpy(d, s, n)
|
||||||
|
# else
|
||||||
|
# define memmove(d, s, n) memcpy(d, s, n)
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define memmove(d, s, n) memcpy(d, s, n)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define APPLICATION_NAME "Fep"
|
||||||
|
|
||||||
|
static int in_from_inferior_fd;
|
||||||
|
static int out_to_inferior_fd;
|
||||||
|
|
||||||
|
/* Unfortunately, we cannot safely display echo from the inferior process.
|
||||||
|
The reason is that the echo bit in the pty is "owned" by the inferior,
|
||||||
|
and if we try to turn it off, we could confuse the inferior.
|
||||||
|
Thus, when echoing, we get echo twice: First readline echoes while
|
||||||
|
we're actually editing. Then we send the line to the inferior, and the
|
||||||
|
terminal driver send back an extra echo.
|
||||||
|
The work-around is to remember the input lines, and when we see that
|
||||||
|
line come back, we supress the output.
|
||||||
|
A better solution (supposedly available on SVR4) would be a smarter
|
||||||
|
terminal driver, with more flags ... */
|
||||||
|
#define ECHO_SUPPRESS_MAX 1024
|
||||||
|
char echo_suppress_buffer[ECHO_SUPPRESS_MAX];
|
||||||
|
int echo_suppress_start = 0;
|
||||||
|
int echo_suppress_limit = 0;
|
||||||
|
|
||||||
|
#define DEBUG
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
FILE *logfile = NULL;
|
||||||
|
#define DPRINT0(FMT) (fprintf(logfile, FMT), fflush(logfile))
|
||||||
|
#define DPRINT1(FMT, V1) (fprintf(logfile, FMT, V1), fflush(logfile))
|
||||||
|
#define DPRINT2(FMT, V1, V2) (fprintf(logfile, FMT, V1, V2), fflush(logfile))
|
||||||
|
#else
|
||||||
|
#define DPRINT0(FMT) /* Do nothing */
|
||||||
|
#define DPRINT1(FMT, V1) /* Do nothing */
|
||||||
|
#define DPRINT2(FMT, V1, V2) /* Do nothing */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct termios orig_term;
|
||||||
|
|
||||||
|
/* Pid of child process. */
|
||||||
|
static pid_t child = -1;
|
||||||
|
|
||||||
|
static void
|
||||||
|
sig_child (int signo)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
wait (&status);
|
||||||
|
DPRINT0 ("(Child process died.)\n");
|
||||||
|
tcsetattr(STDIN_FILENO, TCSANOW, &orig_term);
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
volatile int propagate_sigwinch = 0;
|
||||||
|
|
||||||
|
/* sigwinch_handler
|
||||||
|
* propagate window size changes from input file descriptor to
|
||||||
|
* master side of pty.
|
||||||
|
*/
|
||||||
|
void sigwinch_handler(int signal) {
|
||||||
|
propagate_sigwinch = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* get_master_pty() takes a double-indirect character pointer in which
|
||||||
|
* to put a slave name, and returns an integer file descriptor.
|
||||||
|
* If it returns < 0, an error has occurred.
|
||||||
|
* Otherwise, it has returned the master pty file descriptor, and fills
|
||||||
|
* in *name with the name of the corresponding slave pty.
|
||||||
|
* Once the slave pty has been opened, you are responsible to free *name.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int get_master_pty(char **name) {
|
||||||
|
int i, j;
|
||||||
|
/* default to returning error */
|
||||||
|
int master = -1;
|
||||||
|
|
||||||
|
/* create a dummy name to fill in */
|
||||||
|
*name = strdup("/dev/ptyXX");
|
||||||
|
|
||||||
|
/* search for an unused pty */
|
||||||
|
for (i=0; i<16 && master <= 0; i++) {
|
||||||
|
for (j=0; j<16 && master <= 0; j++) {
|
||||||
|
(*name)[5] = 'p';
|
||||||
|
(*name)[8] = "pqrstuvwxyzPQRST"[i];
|
||||||
|
(*name)[9] = "0123456789abcdef"[j];
|
||||||
|
/* open the master pty */
|
||||||
|
if ((master = open(*name, O_RDWR)) < 0) {
|
||||||
|
if (errno == ENOENT) {
|
||||||
|
/* we are out of pty devices */
|
||||||
|
free (*name);
|
||||||
|
return (master);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* By substituting a letter, we change the master pty
|
||||||
|
* name into the slave pty name.
|
||||||
|
*/
|
||||||
|
(*name)[5] = 't';
|
||||||
|
if (access(*name, R_OK|W_OK) != 0)
|
||||||
|
{
|
||||||
|
close(master);
|
||||||
|
master = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((master < 0) && (i == 16) && (j == 16)) {
|
||||||
|
/* must have tried every pty unsuccessfully */
|
||||||
|
free (*name);
|
||||||
|
return (master);
|
||||||
|
}
|
||||||
|
|
||||||
|
(*name)[5] = 't';
|
||||||
|
|
||||||
|
return (master);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* get_slave_pty() returns an integer file descriptor.
|
||||||
|
* If it returns < 0, an error has occurred.
|
||||||
|
* Otherwise, it has returned the slave file descriptor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int get_slave_pty(char *name) {
|
||||||
|
struct group *gptr;
|
||||||
|
gid_t gid;
|
||||||
|
int slave = -1;
|
||||||
|
|
||||||
|
/* chown/chmod the corresponding pty, if possible.
|
||||||
|
* This will only work if the process has root permissions.
|
||||||
|
* Alternatively, write and exec a small setuid program that
|
||||||
|
* does just this.
|
||||||
|
*/
|
||||||
|
if ((gptr = getgrnam("tty")) != 0) {
|
||||||
|
gid = gptr->gr_gid;
|
||||||
|
} else {
|
||||||
|
/* if the tty group does not exist, don't change the
|
||||||
|
* group on the slave pty, only the owner
|
||||||
|
*/
|
||||||
|
gid = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Note that we do not check for errors here. If this is code
|
||||||
|
* where these actions are critical, check for errors!
|
||||||
|
*/
|
||||||
|
chown(name, getuid(), gid);
|
||||||
|
/* This code only makes the slave read/writeable for the user.
|
||||||
|
* If this is for an interactive shell that will want to
|
||||||
|
* receive "write" and "wall" messages, OR S_IWGRP into the
|
||||||
|
* second argument below.
|
||||||
|
*/
|
||||||
|
chmod(name, S_IRUSR|S_IWUSR);
|
||||||
|
|
||||||
|
/* open the corresponding slave pty */
|
||||||
|
slave = open(name, O_RDWR);
|
||||||
|
return (slave);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Certain special characters, such as ctrl/C, we want to pass directly
|
||||||
|
to the inferior, rather than letting readline handle them. */
|
||||||
|
|
||||||
|
static char special_chars[20];
|
||||||
|
static int special_chars_count;
|
||||||
|
|
||||||
|
static void
|
||||||
|
add_special_char(int ch)
|
||||||
|
{
|
||||||
|
if (ch != 0)
|
||||||
|
special_chars[special_chars_count++] = ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int eof_char;
|
||||||
|
|
||||||
|
static int
|
||||||
|
is_special_char(int ch)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
#if 0
|
||||||
|
if (ch == eof_char && rl_point == rl_end)
|
||||||
|
return 1;
|
||||||
|
#endif
|
||||||
|
for (i = special_chars_count; --i >= 0; )
|
||||||
|
if (special_chars[i] == ch)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char buf[1024];
|
||||||
|
/* buf[0 .. buf_count-1] is the what has been emitted on the current line.
|
||||||
|
It is used as the readline prompt. */
|
||||||
|
static int buf_count = 0;
|
||||||
|
|
||||||
|
int num_keys = 0;
|
||||||
|
|
||||||
|
static void
|
||||||
|
null_prep_terminal (int meta)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
null_deprep_terminal ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
char pending_special_char;
|
||||||
|
|
||||||
|
static void
|
||||||
|
line_handler (char *line)
|
||||||
|
{
|
||||||
|
if (line == NULL)
|
||||||
|
{
|
||||||
|
char buf[1];
|
||||||
|
DPRINT0("saw eof!\n");
|
||||||
|
buf[0] = '\004'; /* ctrl/d */
|
||||||
|
write (out_to_inferior_fd, buf, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
static char enter[] = "\r";
|
||||||
|
/* Send line to inferior: */
|
||||||
|
int length = strlen (line);
|
||||||
|
if (length > ECHO_SUPPRESS_MAX-2)
|
||||||
|
{
|
||||||
|
echo_suppress_start = 0;
|
||||||
|
echo_suppress_limit = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (echo_suppress_limit + length > ECHO_SUPPRESS_MAX - 2)
|
||||||
|
{
|
||||||
|
if (echo_suppress_limit - echo_suppress_start + length
|
||||||
|
<= ECHO_SUPPRESS_MAX - 2)
|
||||||
|
{
|
||||||
|
memmove (echo_suppress_buffer,
|
||||||
|
echo_suppress_buffer + echo_suppress_start,
|
||||||
|
echo_suppress_limit - echo_suppress_start);
|
||||||
|
echo_suppress_limit -= echo_suppress_start;
|
||||||
|
echo_suppress_start = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo_suppress_limit = 0;
|
||||||
|
}
|
||||||
|
echo_suppress_start = 0;
|
||||||
|
}
|
||||||
|
memcpy (echo_suppress_buffer + echo_suppress_limit,
|
||||||
|
line, length);
|
||||||
|
echo_suppress_limit += length;
|
||||||
|
echo_suppress_buffer[echo_suppress_limit++] = '\r';
|
||||||
|
echo_suppress_buffer[echo_suppress_limit++] = '\n';
|
||||||
|
}
|
||||||
|
write (out_to_inferior_fd, line, length);
|
||||||
|
if (pending_special_char == 0)
|
||||||
|
{
|
||||||
|
write (out_to_inferior_fd, enter, sizeof(enter)-1);
|
||||||
|
if (*line)
|
||||||
|
add_history (line);
|
||||||
|
}
|
||||||
|
free (line);
|
||||||
|
}
|
||||||
|
rl_callback_handler_remove ();
|
||||||
|
buf_count = 0;
|
||||||
|
num_keys = 0;
|
||||||
|
if (pending_special_char != 0)
|
||||||
|
{
|
||||||
|
write (out_to_inferior_fd, &pending_special_char, 1);
|
||||||
|
pending_special_char = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Value of rl_getc_function.
|
||||||
|
Use this because readline should read from stdin, not rl_instream,
|
||||||
|
points to the pty (so readline has monitor its terminal modes). */
|
||||||
|
|
||||||
|
int
|
||||||
|
my_rl_getc (FILE *dummy)
|
||||||
|
{
|
||||||
|
int ch = rl_getc (stdin);
|
||||||
|
if (is_special_char (ch))
|
||||||
|
{
|
||||||
|
pending_special_char = ch;
|
||||||
|
return '\r';
|
||||||
|
}
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
char *path;
|
||||||
|
int i;
|
||||||
|
int master;
|
||||||
|
char *name;
|
||||||
|
int in_from_tty_fd;
|
||||||
|
struct sigaction act;
|
||||||
|
struct winsize ws;
|
||||||
|
struct termios t;
|
||||||
|
int maxfd;
|
||||||
|
fd_set in_set;
|
||||||
|
static char empty_string[1] = "";
|
||||||
|
char *prompt = empty_string;
|
||||||
|
int ioctl_err = 0;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
logfile = fopen("LOG", "w");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
rl_readline_name = APPLICATION_NAME;
|
||||||
|
|
||||||
|
if ((master = get_master_pty(&name)) < 0)
|
||||||
|
{
|
||||||
|
perror("ptypair: could not open master pty");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
DPRINT1("pty name: '%s'\n", name);
|
||||||
|
|
||||||
|
/* set up SIGWINCH handler */
|
||||||
|
act.sa_handler = sigwinch_handler;
|
||||||
|
sigemptyset(&(act.sa_mask));
|
||||||
|
act.sa_flags = 0;
|
||||||
|
if (sigaction(SIGWINCH, &act, NULL) < 0)
|
||||||
|
{
|
||||||
|
perror("ptypair: could not handle SIGWINCH ");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) < 0)
|
||||||
|
{
|
||||||
|
perror("ptypair: could not get window size");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((child = fork()) < 0)
|
||||||
|
{
|
||||||
|
perror("cannot fork");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (child == 0)
|
||||||
|
{
|
||||||
|
int slave; /* file descriptor for slave pty */
|
||||||
|
|
||||||
|
/* We are in the child process */
|
||||||
|
close(master);
|
||||||
|
|
||||||
|
#ifdef TIOCSCTTY
|
||||||
|
if ((slave = get_slave_pty(name)) < 0)
|
||||||
|
{
|
||||||
|
perror("ptypair: could not open slave pty");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
free(name);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* We need to make this process a session group leader, because
|
||||||
|
* it is on a new PTY, and things like job control simply will
|
||||||
|
* not work correctly unless there is a session group leader
|
||||||
|
* and process group leader (which a session group leader
|
||||||
|
* automatically is). This also disassociates us from our old
|
||||||
|
* controlling tty.
|
||||||
|
*/
|
||||||
|
if (setsid() < 0)
|
||||||
|
{
|
||||||
|
perror("could not set session leader");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tie us to our new controlling tty. */
|
||||||
|
#ifdef TIOCSCTTY
|
||||||
|
if (ioctl(slave, TIOCSCTTY, NULL))
|
||||||
|
{
|
||||||
|
perror("could not set new controlling tty");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if ((slave = get_slave_pty(name)) < 0)
|
||||||
|
{
|
||||||
|
perror("ptypair: could not open slave pty");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
free(name);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* make slave pty be standard in, out, and error */
|
||||||
|
dup2(slave, STDIN_FILENO);
|
||||||
|
dup2(slave, STDOUT_FILENO);
|
||||||
|
dup2(slave, STDERR_FILENO);
|
||||||
|
|
||||||
|
/* at this point the slave pty should be standard input */
|
||||||
|
if (slave > 2)
|
||||||
|
{
|
||||||
|
close(slave);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Try to restore window size; failure isn't critical */
|
||||||
|
if (ioctl(STDOUT_FILENO, TIOCSWINSZ, &ws) < 0)
|
||||||
|
{
|
||||||
|
perror("could not restore window size");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* now start the shell */
|
||||||
|
{
|
||||||
|
static char* command_args[] = { COMMAND_ARGS, NULL };
|
||||||
|
if (argc <= 1)
|
||||||
|
execvp(COMMAND, command_args);
|
||||||
|
else
|
||||||
|
execvp(argv[1], &argv[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* should never be reached */
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* parent */
|
||||||
|
signal (SIGCHLD, sig_child);
|
||||||
|
free(name);
|
||||||
|
|
||||||
|
/* Note that we only set termios settings for standard input;
|
||||||
|
* the master side of a pty is NOT a tty.
|
||||||
|
*/
|
||||||
|
tcgetattr(STDIN_FILENO, &orig_term);
|
||||||
|
|
||||||
|
t = orig_term;
|
||||||
|
eof_char = t.c_cc[VEOF];
|
||||||
|
/* add_special_char(t.c_cc[VEOF]);*/
|
||||||
|
add_special_char(t.c_cc[VINTR]);
|
||||||
|
add_special_char(t.c_cc[VQUIT]);
|
||||||
|
add_special_char(t.c_cc[VSUSP]);
|
||||||
|
#if defined (VDISCARD)
|
||||||
|
add_special_char(t.c_cc[VDISCARD]);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
t.c_lflag |= (ICANON | ISIG | ECHO | ECHOCTL | ECHOE | \
|
||||||
|
ECHOK | ECHOKE | ECHONL | ECHOPRT );
|
||||||
|
#else
|
||||||
|
t.c_lflag &= ~(ICANON | ISIG | ECHO | ECHOCTL | ECHOE | \
|
||||||
|
ECHOK | ECHOKE | ECHONL | ECHOPRT );
|
||||||
|
#endif
|
||||||
|
t.c_iflag |= IGNBRK;
|
||||||
|
t.c_cc[VMIN] = 1;
|
||||||
|
t.c_cc[VTIME] = 0;
|
||||||
|
tcsetattr(STDIN_FILENO, TCSANOW, &t);
|
||||||
|
in_from_inferior_fd = master;
|
||||||
|
out_to_inferior_fd = master;
|
||||||
|
rl_instream = fdopen (master, "r");
|
||||||
|
rl_getc_function = my_rl_getc;
|
||||||
|
|
||||||
|
rl_prep_term_function = null_prep_terminal;
|
||||||
|
rl_deprep_term_function = null_deprep_terminal;
|
||||||
|
rl_callback_handler_install (prompt, line_handler);
|
||||||
|
|
||||||
|
in_from_tty_fd = STDIN_FILENO;
|
||||||
|
FD_ZERO (&in_set);
|
||||||
|
maxfd = in_from_inferior_fd > in_from_tty_fd ? in_from_inferior_fd
|
||||||
|
: in_from_tty_fd;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
int num;
|
||||||
|
FD_SET (in_from_inferior_fd, &in_set);
|
||||||
|
FD_SET (in_from_tty_fd, &in_set);
|
||||||
|
|
||||||
|
num = select(maxfd+1, &in_set, NULL, NULL, NULL);
|
||||||
|
|
||||||
|
if (propagate_sigwinch)
|
||||||
|
{
|
||||||
|
struct winsize ws;
|
||||||
|
if (ioctl (STDIN_FILENO, TIOCGWINSZ, &ws) >= 0)
|
||||||
|
{
|
||||||
|
ioctl (master, TIOCSWINSZ, &ws);
|
||||||
|
}
|
||||||
|
propagate_sigwinch = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (num <= 0)
|
||||||
|
{
|
||||||
|
perror ("select");
|
||||||
|
exit (-1);
|
||||||
|
}
|
||||||
|
if (FD_ISSET (in_from_tty_fd, &in_set))
|
||||||
|
{
|
||||||
|
extern int readline_echoing_p;
|
||||||
|
struct termios term_master;
|
||||||
|
int do_canon = 1;
|
||||||
|
int ioctl_ret;
|
||||||
|
|
||||||
|
DPRINT1("[tty avail num_keys:%d]\n", num_keys);
|
||||||
|
|
||||||
|
/* If we can't get tty modes for the master side of the pty, we
|
||||||
|
can't handle non-canonical-mode programs. Always assume the
|
||||||
|
master is in canonical echo mode if we can't tell. */
|
||||||
|
ioctl_ret = tcgetattr(master, &term_master);
|
||||||
|
|
||||||
|
if (ioctl_ret >= 0)
|
||||||
|
{
|
||||||
|
DPRINT2 ("echo:%d, canon:%d\n",
|
||||||
|
(term_master.c_lflag & ECHO) != 0,
|
||||||
|
(term_master.c_lflag & ICANON) != 0);
|
||||||
|
do_canon = (term_master.c_lflag & ICANON) != 0;
|
||||||
|
readline_echoing_p = (term_master.c_lflag & ECHO) != 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ioctl_err == 0)
|
||||||
|
DPRINT1("tcgetattr on master fd failed: errno = %d\n", errno);
|
||||||
|
ioctl_err = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (do_canon == 0 && num_keys == 0)
|
||||||
|
{
|
||||||
|
char ch[10];
|
||||||
|
int count = read (STDIN_FILENO, ch, sizeof(ch));
|
||||||
|
write (out_to_inferior_fd, ch, count);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (num_keys == 0)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
/* Re-install callback handler for new prompt. */
|
||||||
|
if (prompt != empty_string)
|
||||||
|
free (prompt);
|
||||||
|
prompt = malloc (buf_count + 1);
|
||||||
|
if (prompt == NULL)
|
||||||
|
prompt = empty_string;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memcpy (prompt, buf, buf_count);
|
||||||
|
prompt[buf_count] = '\0';
|
||||||
|
DPRINT1("New prompt '%s'\n", prompt);
|
||||||
|
#if 0 /* ifdef HAVE_RL_ALREADY_PROMPTED -- doesn't work */
|
||||||
|
rl_already_prompted = buf_count > 0;
|
||||||
|
#else
|
||||||
|
if (buf_count > 0)
|
||||||
|
write (1, "\r", 1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
rl_callback_handler_install (prompt, line_handler);
|
||||||
|
}
|
||||||
|
num_keys++;
|
||||||
|
rl_callback_read_char ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else /* input from inferior. */
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int count;
|
||||||
|
int old_count;
|
||||||
|
if (buf_count > (sizeof(buf) >> 2))
|
||||||
|
buf_count = 0;
|
||||||
|
count = read (in_from_inferior_fd, buf+buf_count,
|
||||||
|
sizeof(buf) - buf_count);
|
||||||
|
if (count <= 0)
|
||||||
|
{
|
||||||
|
DPRINT0 ("(Connection closed by foreign host.)\n");
|
||||||
|
tcsetattr(STDIN_FILENO, TCSANOW, &orig_term);
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
old_count = buf_count;
|
||||||
|
|
||||||
|
/* Look for any pending echo that we need to suppress. */
|
||||||
|
while (echo_suppress_start < echo_suppress_limit
|
||||||
|
&& count > 0
|
||||||
|
&& buf[buf_count] == echo_suppress_buffer[echo_suppress_start])
|
||||||
|
{
|
||||||
|
count--;
|
||||||
|
buf_count++;
|
||||||
|
echo_suppress_start++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Write to the terminal anything that was not suppressed. */
|
||||||
|
if (count > 0)
|
||||||
|
write (1, buf + buf_count, count);
|
||||||
|
|
||||||
|
/* Finally, look for a prompt candidate.
|
||||||
|
* When we get around to going input (from the keyboard),
|
||||||
|
* we will consider the prompt to be anything since the last
|
||||||
|
* line terminator. So we need to save that text in the
|
||||||
|
* initial part of buf. However, anything before the
|
||||||
|
* most recent end-of-line is not interesting. */
|
||||||
|
buf_count += count;
|
||||||
|
#if 1
|
||||||
|
for (i = buf_count; --i >= old_count; )
|
||||||
|
#else
|
||||||
|
for (i = buf_count - 1; i-- >= buf_count - count; )
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if (buf[i] == '\n' || buf[i] == '\r')
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
memmove (buf, buf+i, buf_count - i);
|
||||||
|
buf_count -= i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DPRINT2("-> i: %d, buf_count: %d\n", i, buf_count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -4,20 +4,20 @@
|
|||||||
/* */
|
/* */
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
|
|
||||||
/*
|
|
||||||
* Remove the next line if you're compiling this against an installed
|
|
||||||
* libreadline.a
|
|
||||||
*/
|
|
||||||
#define READLINE_LIBRARY
|
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include "readline.h"
|
|
||||||
#include "history.h"
|
#ifdef READLINE_LIBRARY
|
||||||
|
# include "readline.h"
|
||||||
|
# include "history.h"
|
||||||
|
#else
|
||||||
|
# include <readline/readline.h>
|
||||||
|
# include <readline/history.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
extern HIST_ENTRY **history_list ();
|
extern HIST_ENTRY **history_list ();
|
||||||
|
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
* rlversion -- print out readline's version number
|
* rlversion -- print out readline's version number
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define READLINE_LIBRARY
|
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
@ -12,7 +10,11 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include "posixstat.h"
|
#include "posixstat.h"
|
||||||
|
|
||||||
#include "readline.h"
|
#ifdef READLINE_LIBRARY
|
||||||
|
# include "readline.h"
|
||||||
|
#else
|
||||||
|
# include <readline/readline.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,15 +18,13 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
#if !defined (BUFSIZ)
|
#if !defined (BUFSIZ)
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif /* BUFSIZ */
|
#endif /* BUFSIZ */
|
||||||
@ -40,6 +38,14 @@ extern char *xmalloc (), *xrealloc ();
|
|||||||
#include "rlconf.h"
|
#include "rlconf.h"
|
||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
|
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
typedef int QSFUNC (const void *, const void *);
|
||||||
|
#else
|
||||||
|
typedef int QSFUNC ();
|
||||||
|
#endif
|
||||||
|
|
||||||
extern int _rl_qsort_string_compare ();
|
extern int _rl_qsort_string_compare ();
|
||||||
|
|
||||||
FUNMAP **funmap;
|
FUNMAP **funmap;
|
||||||
@ -240,7 +246,7 @@ rl_funmap_names ()
|
|||||||
result[result_index + 1] = (char *)NULL;
|
result[result_index + 1] = (char *)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
qsort (result, result_index, sizeof (char *), _rl_qsort_string_compare);
|
qsort (result, result_index, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare);
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
@ -50,6 +50,9 @@
|
|||||||
#include "history.h"
|
#include "history.h"
|
||||||
#include "histlib.h"
|
#include "histlib.h"
|
||||||
|
|
||||||
|
#include "rlshell.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
#define HISTORY_WORD_DELIMITERS " \t\n;&()|<>"
|
#define HISTORY_WORD_DELIMITERS " \t\n;&()|<>"
|
||||||
#define HISTORY_QUOTE_CHARACTERS "\"'`"
|
#define HISTORY_QUOTE_CHARACTERS "\"'`"
|
||||||
|
|
||||||
@ -60,15 +63,10 @@ static char *subst_rhs;
|
|||||||
static int subst_lhs_len;
|
static int subst_lhs_len;
|
||||||
static int subst_rhs_len;
|
static int subst_rhs_len;
|
||||||
|
|
||||||
static char *get_history_word_specifier ();
|
static char *get_history_word_specifier __P((char *, char *, int *));
|
||||||
static char *history_find_word ();
|
static char *history_find_word __P((char *, int));
|
||||||
|
|
||||||
extern int history_offset;
|
static char *quote_breaks __P((char *));
|
||||||
|
|
||||||
extern char *single_quote ();
|
|
||||||
static char *quote_breaks ();
|
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
/* Variables exported by this file. */
|
/* Variables exported by this file. */
|
||||||
/* The character that represents the start of a history expansion
|
/* The character that represents the start of a history expansion
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
/* The goal is to make the implementation transparent, so that you
|
/* The goal is to make the implementation transparent, so that you
|
||||||
don't have to know what data types are used, just what functions
|
don't have to know what data types are used, just what functions
|
||||||
@ -35,7 +35,7 @@
|
|||||||
#ifndef _MINIX
|
#ifndef _MINIX
|
||||||
# include <sys/file.h>
|
# include <sys/file.h>
|
||||||
#endif
|
#endif
|
||||||
#include <sys/stat.h>
|
#include "posixstat.h"
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
#if defined (HAVE_STDLIB_H)
|
#if defined (HAVE_STDLIB_H)
|
||||||
@ -54,15 +54,19 @@
|
|||||||
# include <strings.h>
|
# include <strings.h>
|
||||||
#endif /* !HAVE_STRING_H */
|
#endif /* !HAVE_STRING_H */
|
||||||
|
|
||||||
#if defined (__EMX__)
|
|
||||||
|
/* If we're compiling for __EMX__ (OS/2) or __CYGWIN__ (cygwin32 environment
|
||||||
|
on win 95/98/nt), we want to open files with O_BINARY mode so that there
|
||||||
|
is no \n -> \r\n conversion performed. On other systems, we don't want to
|
||||||
|
mess around with O_BINARY at all, so we ensure that it's defined to 0. */
|
||||||
|
#if defined (__EMX__) || defined (__CYGWIN__)
|
||||||
# ifndef O_BINARY
|
# ifndef O_BINARY
|
||||||
# define O_BINARY 0
|
# define O_BINARY 0
|
||||||
# endif
|
# endif
|
||||||
#else /* !__EMX__ */
|
#else /* !__EMX__ && !__CYGWIN__ */
|
||||||
/* If we're not compiling for __EMX__, we don't want this at all. Ever. */
|
|
||||||
# undef O_BINARY
|
# undef O_BINARY
|
||||||
# define O_BINARY 0
|
# define O_BINARY 0
|
||||||
#endif /* !__EMX__ */
|
#endif /* !__EMX__ && !__CYGWIN__ */
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#if !defined (errno)
|
#if !defined (errno)
|
||||||
@ -72,10 +76,8 @@ extern int errno;
|
|||||||
#include "history.h"
|
#include "history.h"
|
||||||
#include "histlib.h"
|
#include "histlib.h"
|
||||||
|
|
||||||
/* Functions imported from shell.c */
|
#include "rlshell.h"
|
||||||
extern char *get_env_value ();
|
#include "xmalloc.h"
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
/* Return the string that should be used in the place of this
|
/* Return the string that should be used in the place of this
|
||||||
filename. This only matters when you don't specify the
|
filename. This only matters when you don't specify the
|
||||||
@ -105,7 +107,11 @@ history_filename (filename)
|
|||||||
return_val = xmalloc (2 + home_len + 8); /* strlen(".history") == 8 */
|
return_val = xmalloc (2 + home_len + 8); /* strlen(".history") == 8 */
|
||||||
strcpy (return_val, home);
|
strcpy (return_val, home);
|
||||||
return_val[home_len] = '/';
|
return_val[home_len] = '/';
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
strcpy (return_val + home_len + 1, "_history");
|
||||||
|
#else
|
||||||
strcpy (return_val + home_len + 1, ".history");
|
strcpy (return_val + home_len + 1, ".history");
|
||||||
|
#endif
|
||||||
|
|
||||||
return (return_val);
|
return (return_val);
|
||||||
}
|
}
|
||||||
@ -132,7 +138,7 @@ read_history_range (filename, from, to)
|
|||||||
{
|
{
|
||||||
register int line_start, line_end;
|
register int line_start, line_end;
|
||||||
char *input, *buffer;
|
char *input, *buffer;
|
||||||
int file, current_line;
|
int file, current_line, chars_read;
|
||||||
struct stat finfo;
|
struct stat finfo;
|
||||||
size_t file_size;
|
size_t file_size;
|
||||||
|
|
||||||
@ -155,11 +161,9 @@ read_history_range (filename, from, to)
|
|||||||
}
|
}
|
||||||
|
|
||||||
buffer = xmalloc (file_size + 1);
|
buffer = xmalloc (file_size + 1);
|
||||||
#if 0
|
|
||||||
if (read (file, buffer, file_size) != file_size)
|
chars_read = read (file, buffer, file_size);
|
||||||
#else
|
if (chars_read < 0)
|
||||||
if (read (file, buffer, file_size) < 0)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
error_and_exit:
|
error_and_exit:
|
||||||
if (file >= 0)
|
if (file >= 0)
|
||||||
@ -175,15 +179,15 @@ read_history_range (filename, from, to)
|
|||||||
|
|
||||||
/* Set TO to larger than end of file if negative. */
|
/* Set TO to larger than end of file if negative. */
|
||||||
if (to < 0)
|
if (to < 0)
|
||||||
to = file_size;
|
to = chars_read;
|
||||||
|
|
||||||
/* Start at beginning of file, work to end. */
|
/* Start at beginning of file, work to end. */
|
||||||
line_start = line_end = current_line = 0;
|
line_start = line_end = current_line = 0;
|
||||||
|
|
||||||
/* Skip lines until we are at FROM. */
|
/* Skip lines until we are at FROM. */
|
||||||
while (line_start < file_size && current_line < from)
|
while (line_start < chars_read && current_line < from)
|
||||||
{
|
{
|
||||||
for (line_end = line_start; line_end < file_size; line_end++)
|
for (line_end = line_start; line_end < chars_read; line_end++)
|
||||||
if (buffer[line_end] == '\n')
|
if (buffer[line_end] == '\n')
|
||||||
{
|
{
|
||||||
current_line++;
|
current_line++;
|
||||||
@ -194,7 +198,7 @@ read_history_range (filename, from, to)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* If there are lines left to gobble, then gobble them now. */
|
/* If there are lines left to gobble, then gobble them now. */
|
||||||
for (line_end = line_start; line_end < file_size; line_end++)
|
for (line_end = line_start; line_end < chars_read; line_end++)
|
||||||
if (buffer[line_end] == '\n')
|
if (buffer[line_end] == '\n')
|
||||||
{
|
{
|
||||||
buffer[line_end] = '\0';
|
buffer[line_end] = '\0';
|
||||||
@ -236,6 +240,10 @@ history_truncate_file (fname, lines)
|
|||||||
if (file == -1 || fstat (file, &finfo) == -1)
|
if (file == -1 || fstat (file, &finfo) == -1)
|
||||||
goto truncate_exit;
|
goto truncate_exit;
|
||||||
|
|
||||||
|
/* Don't try to truncate non-regular files. */
|
||||||
|
if (S_ISREG(finfo.st_mode) == 0)
|
||||||
|
goto truncate_exit;
|
||||||
|
|
||||||
file_size = (size_t)finfo.st_size;
|
file_size = (size_t)finfo.st_size;
|
||||||
|
|
||||||
/* check for overflow on very large files */
|
/* check for overflow on very large files */
|
||||||
@ -279,11 +287,11 @@ history_truncate_file (fname, lines)
|
|||||||
truncate to. */
|
truncate to. */
|
||||||
if (i && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1))
|
if (i && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1))
|
||||||
{
|
{
|
||||||
write (file, buffer + i, file_size - i);
|
write (file, buffer + i, chars_read - i);
|
||||||
|
|
||||||
#if defined (__BEOS__)
|
#if defined (__BEOS__)
|
||||||
/* BeOS ignores O_TRUNC. */
|
/* BeOS ignores O_TRUNC. */
|
||||||
ftruncate (file, file_size - i);
|
ftruncate (file, chars_read - i);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
close (file);
|
close (file);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -17,7 +17,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#if !defined (_HISTLIB_H_)
|
#if !defined (_HISTLIB_H_)
|
||||||
#define _HISTLIB_H_
|
#define _HISTLIB_H_
|
||||||
@ -31,8 +31,11 @@ typedef char *CPFunction ();
|
|||||||
typedef char **CPPFunction ();
|
typedef char **CPPFunction ();
|
||||||
#endif /* _FUNCTION_DEF */
|
#endif /* _FUNCTION_DEF */
|
||||||
|
|
||||||
|
#if !defined (STREQ)
|
||||||
#define STREQ(a, b) (((a)[0] == (b)[0]) && (strcmp ((a), (b)) == 0))
|
#define STREQ(a, b) (((a)[0] == (b)[0]) && (strcmp ((a), (b)) == 0))
|
||||||
#define STREQN(a, b, n) (((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0))
|
#define STREQN(a, b, n) (((n) == 0) ? (1) \
|
||||||
|
: ((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0))
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef savestring
|
#ifndef savestring
|
||||||
# ifndef strcpy
|
# ifndef strcpy
|
||||||
@ -79,4 +82,7 @@ extern char *strchr ();
|
|||||||
#define HISTORY_APPEND 0
|
#define HISTORY_APPEND 0
|
||||||
#define HISTORY_OVERWRITE 1
|
#define HISTORY_OVERWRITE 1
|
||||||
|
|
||||||
|
/* Some variable definitions shared across history source files. */
|
||||||
|
extern int history_offset;
|
||||||
|
|
||||||
#endif /* !_HISTLIB_H_ */
|
#endif /* !_HISTLIB_H_ */
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
/* The goal is to make the implementation transparent, so that you
|
/* The goal is to make the implementation transparent, so that you
|
||||||
don't have to know what data types are used, just what functions
|
don't have to know what data types are used, just what functions
|
||||||
@ -53,7 +53,7 @@
|
|||||||
#include "history.h"
|
#include "history.h"
|
||||||
#include "histlib.h"
|
#include "histlib.h"
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
#include "xmalloc.h"
|
||||||
|
|
||||||
/* The number of slots to increase the_history by. */
|
/* The number of slots to increase the_history by. */
|
||||||
#define DEFAULT_HISTORY_GROW_SIZE 50
|
#define DEFAULT_HISTORY_GROW_SIZE 50
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -17,7 +17,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#ifndef _HISTORY_H_
|
#ifndef _HISTORY_H_
|
||||||
#define _HISTORY_H_
|
#define _HISTORY_H_
|
||||||
@ -119,7 +119,7 @@ extern int where_history __P((void));
|
|||||||
|
|
||||||
/* Return the history entry at the current position, as determined by
|
/* Return the history entry at the current position, as determined by
|
||||||
history_offset. If there is no entry there, return a NULL pointer. */
|
history_offset. If there is no entry there, return a NULL pointer. */
|
||||||
HIST_ENTRY *current_history __P((void));
|
extern HIST_ENTRY *current_history __P((void));
|
||||||
|
|
||||||
/* Return the history entry which is logically at OFFSET in the history
|
/* Return the history entry which is logically at OFFSET in the history
|
||||||
array. OFFSET is relative to history_base. */
|
array. OFFSET is relative to history_base. */
|
||||||
@ -132,7 +132,7 @@ extern int history_total_bytes __P((void));
|
|||||||
/* Moving around the history list. */
|
/* Moving around the history list. */
|
||||||
|
|
||||||
/* Set the position in the history list to POS. */
|
/* Set the position in the history list to POS. */
|
||||||
int history_set_pos __P((int));
|
extern int history_set_pos __P((int));
|
||||||
|
|
||||||
/* Back up history_offset to the previous history entry, and return
|
/* Back up history_offset to the previous history entry, and return
|
||||||
a pointer to that entry. If there is no previous entry, return
|
a pointer to that entry. If there is no previous entry, return
|
||||||
@ -187,7 +187,7 @@ extern int write_history __P((char *));
|
|||||||
|
|
||||||
/* Append NELEMENT entries to FILENAME. The entries appended are from
|
/* Append NELEMENT entries to FILENAME. The entries appended are from
|
||||||
the end of the list minus NELEMENTs up to the end of the list. */
|
the end of the list minus NELEMENTs up to the end of the list. */
|
||||||
int append_history __P((int, char *));
|
extern int append_history __P((int, char *));
|
||||||
|
|
||||||
/* Truncate the history file, leaving only the last NLINES lines. */
|
/* Truncate the history file, leaving only the last NLINES lines. */
|
||||||
extern int history_truncate_file __P((char *, int));
|
extern int history_truncate_file __P((char *, int));
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
@ -47,9 +47,6 @@
|
|||||||
#include "history.h"
|
#include "history.h"
|
||||||
#include "histlib.h"
|
#include "histlib.h"
|
||||||
|
|
||||||
/* Variables imported from other history library files. */
|
|
||||||
extern int history_offset;
|
|
||||||
|
|
||||||
/* The list of alternate characters that can delimit a history search
|
/* The list of alternate characters that can delimit a history search
|
||||||
string. */
|
string. */
|
||||||
char *history_search_delimiter_chars = (char *)NULL;
|
char *history_search_delimiter_chars = (char *)NULL;
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -67,39 +67,15 @@ extern int errno;
|
|||||||
/* Some standard library routines. */
|
/* Some standard library routines. */
|
||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
|
|
||||||
|
#include "rlprivate.h"
|
||||||
|
#include "rlshell.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
/* What kind of non-blocking I/O do we have? */
|
/* What kind of non-blocking I/O do we have? */
|
||||||
#if !defined (O_NDELAY) && defined (O_NONBLOCK)
|
#if !defined (O_NDELAY) && defined (O_NONBLOCK)
|
||||||
# define O_NDELAY O_NONBLOCK /* Posix style */
|
# define O_NDELAY O_NONBLOCK /* Posix style */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Functions imported from other files in the library. */
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
/* Variables and functions from macro.c. */
|
|
||||||
extern void _rl_add_macro_char ();
|
|
||||||
extern void _rl_with_macro_input ();
|
|
||||||
extern int _rl_next_macro_key ();
|
|
||||||
extern int _rl_defining_kbd_macro;
|
|
||||||
|
|
||||||
#if defined (VI_MODE)
|
|
||||||
extern void _rl_vi_set_last ();
|
|
||||||
extern int _rl_vi_textmod_command ();
|
|
||||||
#endif /* VI_MODE */
|
|
||||||
|
|
||||||
extern FILE *rl_instream, *rl_outstream;
|
|
||||||
extern Function *rl_last_func;
|
|
||||||
extern int rl_key_sequence_length;
|
|
||||||
extern int rl_pending_input;
|
|
||||||
extern int rl_editing_mode;
|
|
||||||
|
|
||||||
extern Keymap _rl_keymap;
|
|
||||||
|
|
||||||
extern int _rl_convert_meta_chars_to_ascii;
|
|
||||||
|
|
||||||
#if defined (__GO32__)
|
|
||||||
# include <pc.h>
|
|
||||||
#endif /* __GO32__ */
|
|
||||||
|
|
||||||
/* Non-null means it is a pointer to a function to run while waiting for
|
/* Non-null means it is a pointer to a function to run while waiting for
|
||||||
character input. */
|
character input. */
|
||||||
Function *rl_event_hook = (Function *)NULL;
|
Function *rl_event_hook = (Function *)NULL;
|
||||||
@ -176,17 +152,6 @@ rl_unget_char (key)
|
|||||||
static void
|
static void
|
||||||
rl_gather_tyi ()
|
rl_gather_tyi ()
|
||||||
{
|
{
|
||||||
#if defined (__GO32__)
|
|
||||||
char input;
|
|
||||||
|
|
||||||
if (isatty (0) && kbhit () && ibuffer_space ())
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
i = (*rl_getc_function) (rl_instream);
|
|
||||||
rl_stuff_char (i);
|
|
||||||
}
|
|
||||||
#else /* !__GO32__ */
|
|
||||||
|
|
||||||
int tty;
|
int tty;
|
||||||
register int tem, result;
|
register int tem, result;
|
||||||
int chars_avail;
|
int chars_avail;
|
||||||
@ -255,7 +220,6 @@ rl_gather_tyi ()
|
|||||||
if (chars_avail)
|
if (chars_avail)
|
||||||
rl_stuff_char (input);
|
rl_stuff_char (input);
|
||||||
}
|
}
|
||||||
#endif /* !__GO32__ */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Is there input available to be read on the readline input file
|
/* Is there input available to be read on the readline input file
|
||||||
@ -394,14 +358,9 @@ int
|
|||||||
rl_getc (stream)
|
rl_getc (stream)
|
||||||
FILE *stream;
|
FILE *stream;
|
||||||
{
|
{
|
||||||
int result, flags;
|
int result;
|
||||||
unsigned char c;
|
unsigned char c;
|
||||||
|
|
||||||
#if defined (__GO32__)
|
|
||||||
if (isatty (0))
|
|
||||||
return (getkey () & 0x7F);
|
|
||||||
#endif /* __GO32__ */
|
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
result = read (fileno (stream), &c, sizeof (unsigned char));
|
result = read (fileno (stream), &c, sizeof (unsigned char));
|
||||||
@ -420,40 +379,31 @@ rl_getc (stream)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (EWOULDBLOCK)
|
#if defined (EWOULDBLOCK)
|
||||||
if (errno == EWOULDBLOCK)
|
# define X_EWOULDBLOCK EWOULDBLOCK
|
||||||
|
#else
|
||||||
|
# define X_EWOULDBLOCK -99
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (EAGAIN)
|
||||||
|
# define X_EAGAIN EAGAIN
|
||||||
|
#else
|
||||||
|
# define X_EAGAIN -99
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (errno == X_EWOULDBLOCK || errno == X_EAGAIN)
|
||||||
{
|
{
|
||||||
if ((flags = fcntl (fileno (stream), F_GETFL, 0)) < 0)
|
if (unset_nodelay_mode (fileno (stream)) < 0)
|
||||||
return (EOF);
|
return (EOF);
|
||||||
if (flags & O_NDELAY)
|
|
||||||
{
|
|
||||||
flags &= ~O_NDELAY;
|
|
||||||
fcntl (fileno (stream), F_SETFL, flags);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif /* EWOULDBLOCK */
|
|
||||||
|
|
||||||
#if defined (_POSIX_VERSION) && defined (EAGAIN) && defined (O_NONBLOCK)
|
#undef X_EWOULDBLOCK
|
||||||
if (errno == EAGAIN)
|
#undef X_EAGAIN
|
||||||
{
|
|
||||||
if ((flags = fcntl (fileno (stream), F_GETFL, 0)) < 0)
|
|
||||||
return (EOF);
|
|
||||||
if (flags & O_NONBLOCK)
|
|
||||||
{
|
|
||||||
flags &= ~O_NONBLOCK;
|
|
||||||
fcntl (fileno (stream), F_SETFL, flags);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* _POSIX_VERSION && EAGAIN && O_NONBLOCK */
|
|
||||||
|
|
||||||
#if !defined (__GO32__)
|
|
||||||
/* If the error that we received was SIGINT, then try again,
|
/* If the error that we received was SIGINT, then try again,
|
||||||
this is simply an interrupted system call to read ().
|
this is simply an interrupted system call to read ().
|
||||||
Otherwise, some error ocurred, also signifying EOF. */
|
Otherwise, some error ocurred, also signifying EOF. */
|
||||||
if (errno != EINTR)
|
if (errno != EINTR)
|
||||||
return (EOF);
|
return (EOF);
|
||||||
#endif /* !__GO32__ */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -23,7 +23,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -48,24 +48,17 @@
|
|||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
|
#include "rlprivate.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
/* Variables exported to other files in the readline library. */
|
/* Variables exported to other files in the readline library. */
|
||||||
unsigned char *_rl_isearch_terminators = (unsigned char *)NULL;
|
unsigned char *_rl_isearch_terminators = (unsigned char *)NULL;
|
||||||
|
|
||||||
/* Variables imported from other files in the readline library. */
|
/* Variables imported from other files in the readline library. */
|
||||||
extern Keymap _rl_keymap;
|
|
||||||
extern HIST_ENTRY *saved_line_for_history;
|
extern HIST_ENTRY *saved_line_for_history;
|
||||||
extern int rl_line_buffer_len;
|
|
||||||
extern int rl_point, rl_end;
|
|
||||||
extern char *rl_line_buffer;
|
|
||||||
|
|
||||||
extern int rl_execute_next ();
|
/* Forward declarations */
|
||||||
extern void rl_extend_line_buffer ();
|
static int rl_search_history __P((int, int));
|
||||||
|
|
||||||
extern int _rl_input_available ();
|
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
static int rl_search_history ();
|
|
||||||
|
|
||||||
/* Last line found by the current incremental search, so we don't `find'
|
/* Last line found by the current incremental search, so we don't `find'
|
||||||
identical lines many times in a row. */
|
identical lines many times in a row. */
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
Readline is free software; you can redistribute it and/or modify it
|
Readline is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU General Public License as published by the
|
under the terms of the GNU General Public License as published by the
|
||||||
Free Software Foundation; either version 1, or (at your option) any
|
Free Software Foundation; either version 2, or (at your option) any
|
||||||
later version.
|
later version.
|
||||||
|
|
||||||
Readline is distributed in the hope that it will be useful, but
|
Readline is distributed in the hope that it will be useful, but
|
||||||
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with Readline; see the file COPYING. If not, write to the Free
|
along with Readline; see the file COPYING. If not, write to the Free
|
||||||
Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -30,18 +30,18 @@
|
|||||||
# include "ansi_stdlib.h"
|
# include "ansi_stdlib.h"
|
||||||
#endif /* HAVE_STDLIB_H */
|
#endif /* HAVE_STDLIB_H */
|
||||||
|
|
||||||
|
#include <stdio.h> /* for FILE * definition for readline.h */
|
||||||
|
|
||||||
|
#include "readline.h"
|
||||||
#include "rlconf.h"
|
#include "rlconf.h"
|
||||||
#include "keymaps.h"
|
|
||||||
#include "emacs_keymap.c"
|
#include "emacs_keymap.c"
|
||||||
|
|
||||||
#if defined (VI_MODE)
|
#if defined (VI_MODE)
|
||||||
#include "vi_keymap.c"
|
#include "vi_keymap.c"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int rl_do_lowercase_version ();
|
#include "xmalloc.h"
|
||||||
extern int rl_rubout (), rl_insert ();
|
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,11 +18,15 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#ifndef _KEYMAPS_H_
|
#ifndef _KEYMAPS_H_
|
||||||
#define _KEYMAPS_H_
|
#define _KEYMAPS_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined (READLINE_LIBRARY)
|
#if defined (READLINE_LIBRARY)
|
||||||
# include "rlstdc.h"
|
# include "rlstdc.h"
|
||||||
# include "chardefs.h"
|
# include "chardefs.h"
|
||||||
@ -97,4 +101,8 @@ extern Keymap rl_get_keymap __P((void));
|
|||||||
/* Set the current keymap to MAP. */
|
/* Set the current keymap to MAP. */
|
||||||
extern void rl_set_keymap __P((Keymap));
|
extern void rl_set_keymap __P((Keymap));
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _KEYMAPS_H_ */
|
#endif /* _KEYMAPS_H_ */
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -46,17 +46,8 @@
|
|||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
extern int _rl_last_command_was_kill;
|
#include "rlprivate.h"
|
||||||
extern int rl_editing_mode;
|
#include "xmalloc.h"
|
||||||
extern int rl_explicit_arg;
|
|
||||||
extern Function *rl_last_func;
|
|
||||||
|
|
||||||
extern void _rl_init_argument ();
|
|
||||||
extern int _rl_set_mark_at_pos ();
|
|
||||||
extern void _rl_fix_point ();
|
|
||||||
extern void _rl_abort_internal ();
|
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
@ -385,10 +376,12 @@ int
|
|||||||
rl_kill_region (count, ignore)
|
rl_kill_region (count, ignore)
|
||||||
int count, ignore;
|
int count, ignore;
|
||||||
{
|
{
|
||||||
int r;
|
int r, npoint;
|
||||||
|
|
||||||
|
npoint = (rl_point < rl_mark) ? rl_point : rl_mark;
|
||||||
r = region_kill_internal (1);
|
r = region_kill_internal (1);
|
||||||
_rl_fix_point (1);
|
_rl_fix_point (1);
|
||||||
|
rl_point = npoint;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -503,7 +496,9 @@ rl_yank_nth_arg_internal (count, ignore, history_skip)
|
|||||||
{
|
{
|
||||||
register HIST_ENTRY *entry;
|
register HIST_ENTRY *entry;
|
||||||
char *arg;
|
char *arg;
|
||||||
int i;
|
int i, pos;
|
||||||
|
|
||||||
|
pos = where_history ();
|
||||||
|
|
||||||
if (history_skip)
|
if (history_skip)
|
||||||
{
|
{
|
||||||
@ -512,16 +507,10 @@ rl_yank_nth_arg_internal (count, ignore, history_skip)
|
|||||||
}
|
}
|
||||||
|
|
||||||
entry = previous_history ();
|
entry = previous_history ();
|
||||||
if (entry)
|
|
||||||
{
|
history_set_pos (pos);
|
||||||
if (history_skip)
|
|
||||||
{
|
if (entry == 0)
|
||||||
for (i = 0; i < history_skip; i++)
|
|
||||||
next_history ();
|
|
||||||
}
|
|
||||||
next_history ();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
ding ();
|
ding ();
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -46,20 +46,11 @@
|
|||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
|
#include "rlprivate.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
|
#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
|
||||||
|
|
||||||
/* Forward definitions. */
|
|
||||||
void _rl_push_executing_macro (), _rl_pop_executing_macro ();
|
|
||||||
void _rl_add_macro_char ();
|
|
||||||
|
|
||||||
/* Extern declarations. */
|
|
||||||
extern int rl_explicit_arg;
|
|
||||||
extern int rl_key_sequence_length;
|
|
||||||
|
|
||||||
extern void _rl_abort_internal ();
|
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* Hacking Keyboard Macros */
|
/* Hacking Keyboard Macros */
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -27,6 +27,8 @@
|
|||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#if defined (HAVE_UNISTD_H)
|
#if defined (HAVE_UNISTD_H)
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif /* HAVE_UNISTD_H */
|
#endif /* HAVE_UNISTD_H */
|
||||||
@ -44,13 +46,9 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
#include "rldefs.h"
|
#include "rldefs.h"
|
||||||
|
#include "readline.h"
|
||||||
extern int _rl_convert_meta_chars_to_ascii;
|
#include "rlshell.h"
|
||||||
extern int _rl_output_meta_chars;
|
#include "rlprivate.h"
|
||||||
extern int _rl_meta_flag;
|
|
||||||
|
|
||||||
/* Functions imported from shell.c */
|
|
||||||
extern char *get_env_value ();
|
|
||||||
|
|
||||||
#if !defined (HAVE_SETLOCALE)
|
#if !defined (HAVE_SETLOCALE)
|
||||||
/* A list of legal values for the LANG or LC_CTYPE environment variables.
|
/* A list of legal values for the LANG or LC_CTYPE environment variables.
|
||||||
@ -70,12 +68,11 @@ static char *legal_lang_values[] =
|
|||||||
"iso88599",
|
"iso88599",
|
||||||
"iso885910",
|
"iso885910",
|
||||||
"koi8r",
|
"koi8r",
|
||||||
"koi8-r",
|
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
static char *normalize_codeset ();
|
static char *normalize_codeset __P((char *));
|
||||||
static char *find_codeset ();
|
static char *find_codeset __P((char *, size_t *));
|
||||||
#endif /* !HAVE_SETLOCALE */
|
#endif /* !HAVE_SETLOCALE */
|
||||||
|
|
||||||
/* Check for LC_ALL, LC_CTYPE, and LANG and use the first with a value
|
/* Check for LC_ALL, LC_CTYPE, and LANG and use the first with a value
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,23 +18,11 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#include "rlconf.h"
|
#include "rlconf.h"
|
||||||
|
|
||||||
#if !defined (PAREN_MATCHING)
|
|
||||||
extern int rl_insert ();
|
|
||||||
|
|
||||||
int
|
|
||||||
rl_insert_close (count, invoking_key)
|
|
||||||
int count, invoking_key;
|
|
||||||
{
|
|
||||||
return (rl_insert (count, invoking_key));
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* PAREN_MATCHING */
|
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
@ -64,8 +52,9 @@ extern char *strchr (), *strrchr ();
|
|||||||
#endif /* !strchr && !__STDC__ */
|
#endif /* !strchr && !__STDC__ */
|
||||||
|
|
||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
|
#include "rlprivate.h"
|
||||||
|
|
||||||
extern int rl_explicit_arg;
|
static int find_matching_open __P((char *, int, int));
|
||||||
|
|
||||||
/* Non-zero means try to blink the matching open parenthesis when the
|
/* Non-zero means try to blink the matching open parenthesis when the
|
||||||
close parenthesis is inserted. */
|
close parenthesis is inserted. */
|
||||||
@ -75,7 +64,25 @@ int rl_blink_matching_paren = 1;
|
|||||||
int rl_blink_matching_paren = 0;
|
int rl_blink_matching_paren = 0;
|
||||||
#endif /* !HAVE_SELECT */
|
#endif /* !HAVE_SELECT */
|
||||||
|
|
||||||
static int find_matching_open ();
|
/* Change emacs_standard_keymap to have bindings for paren matching when
|
||||||
|
ON_OR_OFF is 1, change them back to self_insert when ON_OR_OFF == 0. */
|
||||||
|
void
|
||||||
|
_rl_enable_paren_matching (on_or_off)
|
||||||
|
int on_or_off;
|
||||||
|
{
|
||||||
|
if (on_or_off)
|
||||||
|
{ /* ([{ */
|
||||||
|
rl_bind_key_in_map (')', rl_insert_close, emacs_standard_keymap);
|
||||||
|
rl_bind_key_in_map (']', rl_insert_close, emacs_standard_keymap);
|
||||||
|
rl_bind_key_in_map ('}', rl_insert_close, emacs_standard_keymap);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ /* ([{ */
|
||||||
|
rl_bind_key_in_map (')', rl_insert, emacs_standard_keymap);
|
||||||
|
rl_bind_key_in_map (']', rl_insert, emacs_standard_keymap);
|
||||||
|
rl_bind_key_in_map ('}', rl_insert, emacs_standard_keymap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
rl_insert_close (count, invoking_key)
|
rl_insert_close (count, invoking_key)
|
||||||
@ -152,5 +159,3 @@ find_matching_open (string, from, closer)
|
|||||||
}
|
}
|
||||||
return (i);
|
return (i);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* PAREN_MATCHING */
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
Bash is free software; you can redistribute it and/or modify it
|
Bash is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU General Public License as published by
|
under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
Bash is distributed in the hope that it will be useful, but WITHOUT
|
Bash is distributed in the hope that it will be useful, but WITHOUT
|
||||||
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with Bash; see the file COPYING. If not, write to the Free
|
along with Bash; see the file COPYING. If not, write to the Free
|
||||||
Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
/* This file should be included instead of <dirent.h> or <sys/dir.h>. */
|
/* This file should be included instead of <dirent.h> or <sys/dir.h>. */
|
||||||
|
|
||||||
|
@ -1,5 +1,23 @@
|
|||||||
/* posixjmp.h -- wrapper for setjmp.h with changes for POSIX systems. */
|
/* posixjmp.h -- wrapper for setjmp.h with changes for POSIX systems. */
|
||||||
|
|
||||||
|
/* Copyright (C) 1987,1991 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Bash, the Bourne Again SHell.
|
||||||
|
|
||||||
|
Bash is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
Bash is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||||
|
License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Bash; see the file COPYING. If not, write to the Free
|
||||||
|
Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#ifndef _POSIXJMP_H_
|
#ifndef _POSIXJMP_H_
|
||||||
#define _POSIXJMP_H_
|
#define _POSIXJMP_H_
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
Bash is free software; you can redistribute it and/or modify it
|
Bash is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU General Public License as published by
|
under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
Bash is distributed in the hope that it will be useful, but WITHOUT
|
Bash is distributed in the hope that it will be useful, but WITHOUT
|
||||||
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with Bash; see the file COPYING. If not, write to the Free
|
along with Bash; see the file COPYING. If not, write to the Free
|
||||||
Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
/* This file should be included instead of <sys/stat.h>.
|
/* This file should be included instead of <sys/stat.h>.
|
||||||
It relies on the local sys/stat.h to work though. */
|
It relies on the local sys/stat.h to work though. */
|
||||||
|
@ -6,9 +6,9 @@
|
|||||||
.\" Case Western Reserve University
|
.\" Case Western Reserve University
|
||||||
.\" chet@ins.CWRU.Edu
|
.\" chet@ins.CWRU.Edu
|
||||||
.\"
|
.\"
|
||||||
.\" Last Change: Thu Dec 31 10:16:30 EST 1998
|
.\" Last Change: Tue Jun 1 13:28:03 EDT 1999
|
||||||
.\"
|
.\"
|
||||||
.TH READLINE 3 "1998 Dec 31" GNU
|
.TH READLINE 3 "1999 Jun 1" GNU
|
||||||
.\"
|
.\"
|
||||||
.\" File Name macro. This used to be `.PN', for Path Name,
|
.\" File Name macro. This used to be `.PN', for Path Name,
|
||||||
.\" but Sun doesn't seem to like that very much.
|
.\" but Sun doesn't seem to like that very much.
|
||||||
@ -148,6 +148,7 @@ processing key bindings:
|
|||||||
.IR SPACE ,
|
.IR SPACE ,
|
||||||
and
|
and
|
||||||
.IR TAB .
|
.IR TAB .
|
||||||
|
.PP
|
||||||
In addition to command names, readline allows keys to be bound
|
In addition to command names, readline allows keys to be bound
|
||||||
to a string that is inserted when the key is pressed (a \fImacro\fP).
|
to a string that is inserted when the key is pressed (a \fImacro\fP).
|
||||||
.PP
|
.PP
|
||||||
@ -564,7 +565,7 @@ Move forward to the end of the next word. Words are composed of
|
|||||||
alphanumeric characters (letters and digits).
|
alphanumeric characters (letters and digits).
|
||||||
.TP
|
.TP
|
||||||
.B backward\-word (M\-b)
|
.B backward\-word (M\-b)
|
||||||
Move back to the start of this, or the previous, word. Words are
|
Move back to the start of the current or previous word. Words are
|
||||||
composed of alphanumeric characters (letters and digits).
|
composed of alphanumeric characters (letters and digits).
|
||||||
.TP
|
.TP
|
||||||
.B clear\-screen (C\-l)
|
.B clear\-screen (C\-l)
|
||||||
@ -1172,9 +1173,9 @@ VI Command Mode functions
|
|||||||
Individual \fBreadline\fP initialization file
|
Individual \fBreadline\fP initialization file
|
||||||
.PD
|
.PD
|
||||||
.SH AUTHORS
|
.SH AUTHORS
|
||||||
Brian Fox, Free Software Foundation (primary author)
|
Brian Fox, Free Software Foundation
|
||||||
.br
|
.br
|
||||||
bfox@ai.MIT.Edu
|
bfox@gnu.org
|
||||||
.PP
|
.PP
|
||||||
Chet Ramey, Case Western Reserve University
|
Chet Ramey, Case Western Reserve University
|
||||||
.br
|
.br
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -19,7 +19,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -47,7 +47,6 @@
|
|||||||
# include <locale.h>
|
# include <locale.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <signal.h>
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "posixjmp.h"
|
#include "posixjmp.h"
|
||||||
|
|
||||||
@ -63,117 +62,27 @@
|
|||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
|
#include "rlprivate.h"
|
||||||
|
#include "rlshell.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
#ifndef RL_LIBRARY_VERSION
|
#ifndef RL_LIBRARY_VERSION
|
||||||
# define RL_LIBRARY_VERSION "4.0"
|
# define RL_LIBRARY_VERSION "4.1"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Evaluates its arguments multiple times. */
|
/* Evaluates its arguments multiple times. */
|
||||||
#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
|
#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
|
||||||
|
|
||||||
/* NOTE: Functions and variables prefixed with `_rl_' are
|
|
||||||
pseudo-global: they are global so they can be shared
|
|
||||||
between files in the readline library, but are not intended
|
|
||||||
to be visible to readline callers. */
|
|
||||||
|
|
||||||
/* Variables and functions imported from terminal.c */
|
|
||||||
extern int _rl_init_terminal_io ();
|
|
||||||
extern void _rl_enable_meta_key ();
|
|
||||||
#ifdef _MINIX
|
|
||||||
extern void _rl_output_character_function ();
|
|
||||||
#else
|
|
||||||
extern int _rl_output_character_function ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern int _rl_enable_meta;
|
|
||||||
extern int _rl_term_autowrap;
|
|
||||||
extern int screenwidth, screenheight, screenchars;
|
|
||||||
|
|
||||||
/* Variables and functions imported from rltty.c. */
|
|
||||||
extern void rl_prep_terminal (), rl_deprep_terminal ();
|
|
||||||
extern void rltty_set_default_bindings ();
|
|
||||||
|
|
||||||
/* Functions imported from util.c. */
|
|
||||||
extern void _rl_abort_internal ();
|
|
||||||
extern void rl_extend_line_buffer ();
|
|
||||||
extern int alphabetic ();
|
|
||||||
|
|
||||||
/* Functions imported from bind.c. */
|
|
||||||
extern void _rl_bind_if_unbound ();
|
|
||||||
|
|
||||||
/* Functions imported from input.c. */
|
|
||||||
extern int _rl_any_typein ();
|
|
||||||
extern void _rl_insert_typein ();
|
|
||||||
extern int rl_read_key ();
|
|
||||||
|
|
||||||
/* Functions imported from nls.c */
|
|
||||||
extern int _rl_init_eightbit ();
|
|
||||||
|
|
||||||
/* Functions imported from shell.c */
|
|
||||||
extern char *get_env_value ();
|
|
||||||
|
|
||||||
/* External redisplay functions and variables from display.c */
|
|
||||||
extern void _rl_move_vert ();
|
|
||||||
extern void _rl_update_final ();
|
|
||||||
extern void _rl_clear_to_eol ();
|
|
||||||
extern void _rl_clear_screen ();
|
|
||||||
extern void _rl_erase_entire_line ();
|
|
||||||
|
|
||||||
extern void _rl_erase_at_end_of_line ();
|
|
||||||
extern void _rl_move_cursor_relative ();
|
|
||||||
|
|
||||||
extern int _rl_vis_botlin;
|
|
||||||
extern int _rl_last_c_pos;
|
|
||||||
extern int _rl_horizontal_scroll_mode;
|
|
||||||
extern int rl_display_fixed;
|
|
||||||
extern int _rl_suppress_redisplay;
|
|
||||||
extern char *rl_display_prompt;
|
|
||||||
|
|
||||||
/* Variables imported from complete.c. */
|
|
||||||
extern char *rl_completer_word_break_characters;
|
|
||||||
extern char *rl_basic_word_break_characters;
|
|
||||||
extern int rl_completion_query_items;
|
|
||||||
extern int rl_complete_with_tilde_expansion;
|
|
||||||
|
|
||||||
/* Variables and functions from macro.c. */
|
|
||||||
extern void _rl_add_macro_char ();
|
|
||||||
extern void _rl_with_macro_input ();
|
|
||||||
extern int _rl_next_macro_key ();
|
|
||||||
extern int _rl_defining_kbd_macro;
|
|
||||||
|
|
||||||
#if defined (VI_MODE)
|
|
||||||
/* Functions imported from vi_mode.c. */
|
|
||||||
extern void _rl_vi_set_last ();
|
|
||||||
extern void _rl_vi_reset_last ();
|
|
||||||
extern void _rl_vi_done_inserting ();
|
|
||||||
extern int _rl_vi_textmod_command ();
|
|
||||||
extern void _rl_vi_initialize_line ();
|
|
||||||
#endif /* VI_MODE */
|
|
||||||
|
|
||||||
extern UNDO_LIST *rl_undo_list;
|
|
||||||
extern int _rl_doing_an_undo;
|
|
||||||
|
|
||||||
/* Forward declarations used in this file. */
|
/* Forward declarations used in this file. */
|
||||||
void _rl_free_history_entry ();
|
void _rl_free_history_entry __P((HIST_ENTRY *));
|
||||||
|
|
||||||
int _rl_dispatch ();
|
static char *readline_internal __P((void));
|
||||||
int _rl_init_argument ();
|
static void readline_initialize_everything __P((void));
|
||||||
|
static void start_using_history __P((void));
|
||||||
|
static void bind_arrow_keys __P((void));
|
||||||
|
static int rl_change_case __P((int, int));
|
||||||
|
|
||||||
static char *readline_internal ();
|
static void readline_default_bindings __P((void));
|
||||||
static void readline_initialize_everything ();
|
|
||||||
static void start_using_history ();
|
|
||||||
static void bind_arrow_keys ();
|
|
||||||
|
|
||||||
#if !defined (__GO32__)
|
|
||||||
static void readline_default_bindings ();
|
|
||||||
#endif /* !__GO32__ */
|
|
||||||
|
|
||||||
#if defined (__GO32__)
|
|
||||||
# include <go32.h>
|
|
||||||
# include <pc.h>
|
|
||||||
# undef HANDLE_SIGNALS
|
|
||||||
#endif /* __GO32__ */
|
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
@ -183,6 +92,8 @@ extern char *xmalloc (), *xrealloc ();
|
|||||||
|
|
||||||
char *rl_library_version = RL_LIBRARY_VERSION;
|
char *rl_library_version = RL_LIBRARY_VERSION;
|
||||||
|
|
||||||
|
int rl_gnu_readline_p = 1;
|
||||||
|
|
||||||
/* A pointer to the keymap that is currently in use.
|
/* A pointer to the keymap that is currently in use.
|
||||||
By default, it is the standard emacs keymap. */
|
By default, it is the standard emacs keymap. */
|
||||||
Keymap _rl_keymap = emacs_standard_keymap;
|
Keymap _rl_keymap = emacs_standard_keymap;
|
||||||
@ -245,6 +156,10 @@ int readline_echoing_p = 1;
|
|||||||
char *rl_prompt;
|
char *rl_prompt;
|
||||||
int rl_visible_prompt_length = 0;
|
int rl_visible_prompt_length = 0;
|
||||||
|
|
||||||
|
/* Set to non-zero by calling application if it has already printed rl_prompt
|
||||||
|
and does not want readline to do it the first time. */
|
||||||
|
int rl_already_prompted = 0;
|
||||||
|
|
||||||
/* The number of characters read in order to type this complete command. */
|
/* The number of characters read in order to type this complete command. */
|
||||||
int rl_key_sequence_length = 0;
|
int rl_key_sequence_length = 0;
|
||||||
|
|
||||||
@ -290,6 +205,10 @@ Keymap rl_executing_keymap;
|
|||||||
/* Non-zero means to erase entire line, including prompt, on empty input lines. */
|
/* Non-zero means to erase entire line, including prompt, on empty input lines. */
|
||||||
int rl_erase_empty_line = 0;
|
int rl_erase_empty_line = 0;
|
||||||
|
|
||||||
|
/* Non-zero means to read only this many characters rather than up to a
|
||||||
|
character bound to accept-line. */
|
||||||
|
int rl_num_chars_to_read;
|
||||||
|
|
||||||
/* Line buffer and maintenence. */
|
/* Line buffer and maintenence. */
|
||||||
char *rl_line_buffer = (char *)NULL;
|
char *rl_line_buffer = (char *)NULL;
|
||||||
int rl_line_buffer_len = 0;
|
int rl_line_buffer_len = 0;
|
||||||
@ -369,6 +288,8 @@ readline (prompt)
|
|||||||
STATIC_CALLBACK void
|
STATIC_CALLBACK void
|
||||||
readline_internal_setup ()
|
readline_internal_setup ()
|
||||||
{
|
{
|
||||||
|
char *nprompt;
|
||||||
|
|
||||||
_rl_in_stream = rl_instream;
|
_rl_in_stream = rl_instream;
|
||||||
_rl_out_stream = rl_outstream;
|
_rl_out_stream = rl_outstream;
|
||||||
|
|
||||||
@ -377,15 +298,20 @@ readline_internal_setup ()
|
|||||||
|
|
||||||
if (readline_echoing_p == 0)
|
if (readline_echoing_p == 0)
|
||||||
{
|
{
|
||||||
if (rl_prompt)
|
if (rl_prompt && rl_already_prompted == 0)
|
||||||
{
|
{
|
||||||
fprintf (_rl_out_stream, "%s", rl_prompt);
|
nprompt = _rl_strip_prompt (rl_prompt);
|
||||||
|
fprintf (_rl_out_stream, "%s", nprompt);
|
||||||
fflush (_rl_out_stream);
|
fflush (_rl_out_stream);
|
||||||
|
free (nprompt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rl_on_new_line ();
|
if (rl_prompt && rl_already_prompted)
|
||||||
|
rl_on_new_line_with_prompt ();
|
||||||
|
else
|
||||||
|
rl_on_new_line ();
|
||||||
(*rl_redisplay_function) ();
|
(*rl_redisplay_function) ();
|
||||||
#if defined (VI_MODE)
|
#if defined (VI_MODE)
|
||||||
if (rl_editing_mode == vi_mode)
|
if (rl_editing_mode == vi_mode)
|
||||||
@ -477,7 +403,7 @@ readline_internal_charloop ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
lastc = c;
|
lastc = c;
|
||||||
_rl_dispatch (c, _rl_keymap);
|
_rl_dispatch ((unsigned char)c, _rl_keymap);
|
||||||
|
|
||||||
/* If there was no change in _rl_last_command_was_kill, then no kill
|
/* If there was no change in _rl_last_command_was_kill, then no kill
|
||||||
has taken place. Note that if input is pending we are reading
|
has taken place. Note that if input is pending we are reading
|
||||||
@ -492,6 +418,12 @@ readline_internal_charloop ()
|
|||||||
rl_vi_check ();
|
rl_vi_check ();
|
||||||
#endif /* VI_MODE */
|
#endif /* VI_MODE */
|
||||||
|
|
||||||
|
if (rl_num_chars_to_read && rl_end >= rl_num_chars_to_read)
|
||||||
|
{
|
||||||
|
(*rl_redisplay_function) ();
|
||||||
|
rl_newline (1, '\n');
|
||||||
|
}
|
||||||
|
|
||||||
if (rl_done == 0)
|
if (rl_done == 0)
|
||||||
(*rl_redisplay_function) ();
|
(*rl_redisplay_function) ();
|
||||||
|
|
||||||
@ -689,6 +621,7 @@ rl_initialize ()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
#if defined (__EMX__)
|
#if defined (__EMX__)
|
||||||
static void
|
static void
|
||||||
_emx_build_environ ()
|
_emx_build_environ ()
|
||||||
@ -712,14 +645,17 @@ _emx_build_environ ()
|
|||||||
*tp = 0;
|
*tp = 0;
|
||||||
}
|
}
|
||||||
#endif /* __EMX__ */
|
#endif /* __EMX__ */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Initialize the entire state of the world. */
|
/* Initialize the entire state of the world. */
|
||||||
static void
|
static void
|
||||||
readline_initialize_everything ()
|
readline_initialize_everything ()
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
#if defined (__EMX__)
|
#if defined (__EMX__)
|
||||||
if (environ == 0)
|
if (environ == 0)
|
||||||
_emx_build_environ ();
|
_emx_build_environ ();
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Find out if we are running in Emacs. */
|
/* Find out if we are running in Emacs. */
|
||||||
@ -745,10 +681,8 @@ readline_initialize_everything ()
|
|||||||
/* Initialize the terminal interface. */
|
/* Initialize the terminal interface. */
|
||||||
_rl_init_terminal_io ((char *)NULL);
|
_rl_init_terminal_io ((char *)NULL);
|
||||||
|
|
||||||
#if !defined (__GO32__)
|
|
||||||
/* Bind tty characters to readline functions. */
|
/* Bind tty characters to readline functions. */
|
||||||
readline_default_bindings ();
|
readline_default_bindings ();
|
||||||
#endif /* !__GO32__ */
|
|
||||||
|
|
||||||
/* Initialize the function names. */
|
/* Initialize the function names. */
|
||||||
rl_initialize_funmap ();
|
rl_initialize_funmap ();
|
||||||
@ -797,6 +731,17 @@ bind_arrow_keys_internal ()
|
|||||||
{
|
{
|
||||||
Function *f;
|
Function *f;
|
||||||
|
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
f = rl_function_of_keyseq ("\033[0A", _rl_keymap, (int *)NULL);
|
||||||
|
if (!f || f == rl_do_lowercase_version)
|
||||||
|
{
|
||||||
|
_rl_bind_if_unbound ("\033[0A", rl_get_previous_history);
|
||||||
|
_rl_bind_if_unbound ("\033[0B", rl_backward);
|
||||||
|
_rl_bind_if_unbound ("\033[0C", rl_forward);
|
||||||
|
_rl_bind_if_unbound ("\033[0D", rl_get_next_history);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
f = rl_function_of_keyseq ("\033[A", _rl_keymap, (int *)NULL);
|
f = rl_function_of_keyseq ("\033[A", _rl_keymap, (int *)NULL);
|
||||||
if (!f || f == rl_do_lowercase_version)
|
if (!f || f == rl_do_lowercase_version)
|
||||||
{
|
{
|
||||||
@ -1121,6 +1066,10 @@ rl_forward (count, key)
|
|||||||
else
|
else
|
||||||
rl_point = end;
|
rl_point = end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rl_end < 0)
|
||||||
|
rl_end = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1255,35 +1204,14 @@ int
|
|||||||
rl_refresh_line (ignore1, ignore2)
|
rl_refresh_line (ignore1, ignore2)
|
||||||
int ignore1, ignore2;
|
int ignore1, ignore2;
|
||||||
{
|
{
|
||||||
int curr_line, nleft;
|
int curr_line;
|
||||||
|
|
||||||
/* Find out whether or not there might be invisible characters in the
|
curr_line = _rl_current_display_line ();
|
||||||
editing buffer. */
|
|
||||||
if (rl_display_prompt == rl_prompt)
|
|
||||||
nleft = _rl_last_c_pos - screenwidth - rl_visible_prompt_length;
|
|
||||||
else
|
|
||||||
nleft = _rl_last_c_pos - screenwidth;
|
|
||||||
|
|
||||||
if (nleft > 0)
|
|
||||||
curr_line = 1 + nleft / screenwidth;
|
|
||||||
else
|
|
||||||
curr_line = 0;
|
|
||||||
|
|
||||||
_rl_move_vert (curr_line);
|
_rl_move_vert (curr_line);
|
||||||
_rl_move_cursor_relative (0, the_line); /* XXX is this right */
|
_rl_move_cursor_relative (0, the_line); /* XXX is this right */
|
||||||
|
|
||||||
#if defined (__GO32__)
|
|
||||||
{
|
|
||||||
int row, col, width, row_start;
|
|
||||||
|
|
||||||
ScreenGetCursor (&row, &col);
|
|
||||||
width = ScreenCols ();
|
|
||||||
row_start = ScreenPrimary + (row * width);
|
|
||||||
memset (row_start + col, 0, (width - col) * 2);
|
|
||||||
}
|
|
||||||
#else /* !__GO32__ */
|
|
||||||
_rl_clear_to_eol (0); /* arg of 0 means to not use spaces */
|
_rl_clear_to_eol (0); /* arg of 0 means to not use spaces */
|
||||||
#endif /* !__GO32__ */
|
|
||||||
|
|
||||||
rl_forced_update_display ();
|
rl_forced_update_display ();
|
||||||
rl_display_fixed = 1;
|
rl_display_fixed = 1;
|
||||||
@ -1421,7 +1349,14 @@ rl_quoted_insert (count, key)
|
|||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
|
#if defined (HANDLE_SIGNALS)
|
||||||
|
_rl_disable_tty_signals ();
|
||||||
|
#endif
|
||||||
c = rl_read_key ();
|
c = rl_read_key ();
|
||||||
|
#if defined (HANDLE_SIGNALS)
|
||||||
|
_rl_restore_tty_signals ();
|
||||||
|
#endif
|
||||||
|
|
||||||
return (rl_insert (count, c));
|
return (rl_insert (count, c));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1615,8 +1550,6 @@ rl_insert_comment (count, key)
|
|||||||
#define DownCase 2
|
#define DownCase 2
|
||||||
#define CapCase 3
|
#define CapCase 3
|
||||||
|
|
||||||
static int rl_change_case ();
|
|
||||||
|
|
||||||
/* Uppercase the word at point. */
|
/* Uppercase the word at point. */
|
||||||
int
|
int
|
||||||
rl_upcase_word (count, key)
|
rl_upcase_word (count, key)
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#if !defined (_READLINE_H_)
|
#if !defined (_READLINE_H_)
|
||||||
#define _READLINE_H_
|
#define _READLINE_H_
|
||||||
@ -192,7 +192,7 @@ extern int rl_noninc_reverse_search __P((int, int));
|
|||||||
extern int rl_noninc_forward_search_again __P((int, int));
|
extern int rl_noninc_forward_search_again __P((int, int));
|
||||||
extern int rl_noninc_reverse_search_again __P((int, int));
|
extern int rl_noninc_reverse_search_again __P((int, int));
|
||||||
|
|
||||||
/* Not available unless readline is compiled -DPAREN_MATCHING. */
|
/* Bindable command used when inserting a matching close character. */
|
||||||
extern int rl_insert_close __P((int, int));
|
extern int rl_insert_close __P((int, int));
|
||||||
|
|
||||||
/* Not available unless READLINE_CALLBACKS is defined. */
|
/* Not available unless READLINE_CALLBACKS is defined. */
|
||||||
@ -331,11 +331,12 @@ extern int rl_modifying __P((int, int));
|
|||||||
/* Functions for redisplay. */
|
/* Functions for redisplay. */
|
||||||
extern void rl_redisplay __P((void));
|
extern void rl_redisplay __P((void));
|
||||||
extern int rl_on_new_line __P((void));
|
extern int rl_on_new_line __P((void));
|
||||||
|
extern int rl_on_new_line_with_prompt __P((void));
|
||||||
extern int rl_forced_update_display __P((void));
|
extern int rl_forced_update_display __P((void));
|
||||||
extern int rl_clear_message __P((void));
|
extern int rl_clear_message __P((void));
|
||||||
extern int rl_reset_line_state __P((void));
|
extern int rl_reset_line_state __P((void));
|
||||||
|
|
||||||
#if defined (__STDC__) && defined (USE_VARARGS) && defined (PREFER_STDARG)
|
#if (defined (__STDC__) || defined (__cplusplus)) && defined (USE_VARARGS) && defined (PREFER_STDARG)
|
||||||
extern int rl_message (const char *, ...);
|
extern int rl_message (const char *, ...);
|
||||||
#else
|
#else
|
||||||
extern int rl_message ();
|
extern int rl_message ();
|
||||||
@ -405,6 +406,9 @@ extern char *filename_completion_function __P((char *, int));
|
|||||||
/* The version of this incarnation of the readline library. */
|
/* The version of this incarnation of the readline library. */
|
||||||
extern char *rl_library_version;
|
extern char *rl_library_version;
|
||||||
|
|
||||||
|
/* True if this is real GNU readline. */
|
||||||
|
extern int rl_gnu_readline_p;
|
||||||
|
|
||||||
/* The name of the calling program. You should initialize this to
|
/* The name of the calling program. You should initialize this to
|
||||||
whatever was in argv[0]. It is used when parsing conditionals. */
|
whatever was in argv[0]. It is used when parsing conditionals. */
|
||||||
extern char *rl_readline_name;
|
extern char *rl_readline_name;
|
||||||
@ -468,6 +472,15 @@ extern Keymap rl_binding_keymap;
|
|||||||
rl_newline. */
|
rl_newline. */
|
||||||
extern int rl_erase_empty_line;
|
extern int rl_erase_empty_line;
|
||||||
|
|
||||||
|
/* If non-zero, the application has already printed the prompt (rl_prompt)
|
||||||
|
before calling readline, so readline should not output it the first time
|
||||||
|
redisplay is done. */
|
||||||
|
extern int rl_already_prompted;
|
||||||
|
|
||||||
|
/* A non-zero value means to read only this many characters rather than
|
||||||
|
up to a character bound to accept-line. */
|
||||||
|
extern int rl_num_chars_to_read;
|
||||||
|
|
||||||
/* Variables to control readline signal handling. */
|
/* Variables to control readline signal handling. */
|
||||||
/* If non-zero, readline will install its own signal handlers for
|
/* If non-zero, readline will install its own signal handlers for
|
||||||
SIGINT, SIGTERM, SIGQUIT, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU. */
|
SIGINT, SIGTERM, SIGQUIT, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU. */
|
||||||
@ -611,7 +624,7 @@ extern int rl_inhibit_completion;
|
|||||||
#define MULT_MATCH 2
|
#define MULT_MATCH 2
|
||||||
|
|
||||||
#if !defined (savestring)
|
#if !defined (savestring)
|
||||||
extern char *savestring (); /* XXX backwards compatibility */
|
extern char *savestring __P((char *)); /* XXX backwards compatibility */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -19,7 +19,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#if !defined (_RLCONF_H_)
|
#if !defined (_RLCONF_H_)
|
||||||
#define _RLCONF_H_
|
#define _RLCONF_H_
|
||||||
@ -30,10 +30,6 @@
|
|||||||
/* Define this to get an indication of file type when listing completions. */
|
/* Define this to get an indication of file type when listing completions. */
|
||||||
#define VISIBLE_STATS
|
#define VISIBLE_STATS
|
||||||
|
|
||||||
/* If defined, readline shows opening parens and braces when closing
|
|
||||||
paren or brace entered. */
|
|
||||||
/* #define PAREN_MATCHING */
|
|
||||||
|
|
||||||
/* This definition is needed by readline.c, rltty.c, and signals.c. */
|
/* This definition is needed by readline.c, rltty.c, and signals.c. */
|
||||||
/* If on, then readline handles signals in a way that doesn't screw. */
|
/* If on, then readline handles signals in a way that doesn't screw. */
|
||||||
#define HANDLE_SIGNALS
|
#define HANDLE_SIGNALS
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -21,7 +21,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#if !defined (_RLDEFS_H_)
|
#if !defined (_RLDEFS_H_)
|
||||||
#define _RLDEFS_H_
|
#define _RLDEFS_H_
|
||||||
@ -122,7 +122,8 @@ extern char *xmalloc ();
|
|||||||
|
|
||||||
#if !defined (STREQ)
|
#if !defined (STREQ)
|
||||||
#define STREQ(a, b) (((a)[0] == (b)[0]) && (strcmp ((a), (b)) == 0))
|
#define STREQ(a, b) (((a)[0] == (b)[0]) && (strcmp ((a), (b)) == 0))
|
||||||
#define STREQN(a, b, n) (((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0))
|
#define STREQN(a, b, n) (((n) == 0) ? (1) \
|
||||||
|
: ((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined (FREE)
|
#if !defined (FREE)
|
||||||
|
271
contrib/libreadline/rlprivate.h
Normal file
271
contrib/libreadline/rlprivate.h
Normal file
@ -0,0 +1,271 @@
|
|||||||
|
/* rlprivate.h -- functions and variables global to the readline library,
|
||||||
|
but not intended for use by applications. */
|
||||||
|
|
||||||
|
/* Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of the GNU Readline Library, a library for
|
||||||
|
reading lines of text with interactive input and history editing.
|
||||||
|
|
||||||
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||||
|
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
|
#if !defined (_RL_PRIVATE_H_)
|
||||||
|
#define _RL_PRIVATE_H_
|
||||||
|
|
||||||
|
#include "rlconf.h" /* for VISIBLE_STATS */
|
||||||
|
#include "rlstdc.h"
|
||||||
|
#include "posixjmp.h" /* defines procenv_t */
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* *
|
||||||
|
* Global functions undocumented in texinfo manual and not in readline.h *
|
||||||
|
* *
|
||||||
|
*************************************************************************/
|
||||||
|
|
||||||
|
/* terminal.c */
|
||||||
|
extern char *rl_get_termcap __P((char *));
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* *
|
||||||
|
* Global variables undocumented in texinfo manual and not in readline.h *
|
||||||
|
* *
|
||||||
|
*************************************************************************/
|
||||||
|
|
||||||
|
/* complete.c */
|
||||||
|
extern int rl_complete_with_tilde_expansion;
|
||||||
|
#if defined (VISIBLE_STATS)
|
||||||
|
extern int rl_visible_stats;
|
||||||
|
#endif /* VISIBLE_STATS */
|
||||||
|
|
||||||
|
/* readline.c */
|
||||||
|
extern int rl_line_buffer_len;
|
||||||
|
extern int rl_numeric_arg;
|
||||||
|
extern int rl_arg_sign;
|
||||||
|
extern int rl_explicit_arg;
|
||||||
|
extern int rl_editing_mode;
|
||||||
|
extern int rl_visible_prompt_length;
|
||||||
|
extern Function *rl_last_func;
|
||||||
|
extern int readline_echoing_p;
|
||||||
|
extern int rl_key_sequence_length;
|
||||||
|
|
||||||
|
/* display.c */
|
||||||
|
extern int rl_display_fixed;
|
||||||
|
|
||||||
|
/* parens.c */
|
||||||
|
extern int rl_blink_matching_paren;
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* *
|
||||||
|
* Global functions and variables unsed and undocumented *
|
||||||
|
* *
|
||||||
|
*************************************************************************/
|
||||||
|
|
||||||
|
/* bind.c */
|
||||||
|
extern char *rl_untranslate_keyseq __P((int));
|
||||||
|
|
||||||
|
/* kill.c */
|
||||||
|
extern int rl_set_retained_kills __P((int));
|
||||||
|
|
||||||
|
/* readline.c */
|
||||||
|
extern int rl_discard_argument __P((void));
|
||||||
|
|
||||||
|
/* rltty.c */
|
||||||
|
extern int rl_stop_output __P((int, int));
|
||||||
|
|
||||||
|
/* terminal.c */
|
||||||
|
extern void _rl_set_screen_size __P((int, int));
|
||||||
|
|
||||||
|
/* undo.c */
|
||||||
|
extern int _rl_fix_last_undo_of_type __P((int, int, int));
|
||||||
|
|
||||||
|
/* util.c */
|
||||||
|
extern char *_rl_savestring __P((char *));
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* *
|
||||||
|
* Functions and variables private to the readline library *
|
||||||
|
* *
|
||||||
|
*************************************************************************/
|
||||||
|
|
||||||
|
/* NOTE: Functions and variables prefixed with `_rl_' are
|
||||||
|
pseudo-global: they are global so they can be shared
|
||||||
|
between files in the readline library, but are not intended
|
||||||
|
to be visible to readline callers. */
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* Undocumented private functions *
|
||||||
|
*************************************************************************/
|
||||||
|
|
||||||
|
#if defined(READLINE_CALLBACKS)
|
||||||
|
|
||||||
|
/* readline.c */
|
||||||
|
extern void readline_internal_setup __P((void));
|
||||||
|
extern char *readline_internal_teardown __P((int));
|
||||||
|
extern int readline_internal_char __P((void));
|
||||||
|
|
||||||
|
#endif /* READLINE_CALLBACKS */
|
||||||
|
|
||||||
|
/* bind.c */
|
||||||
|
extern void _rl_bind_if_unbound __P((char *, Function *));
|
||||||
|
|
||||||
|
/* display.c */
|
||||||
|
extern char *_rl_strip_prompt __P((char *));
|
||||||
|
extern void _rl_move_cursor_relative __P((int, char *));
|
||||||
|
extern void _rl_move_vert __P((int));
|
||||||
|
extern void _rl_save_prompt __P((void));
|
||||||
|
extern void _rl_restore_prompt __P((void));
|
||||||
|
extern char *_rl_make_prompt_for_search __P((int));
|
||||||
|
extern void _rl_erase_at_end_of_line __P((int));
|
||||||
|
extern void _rl_clear_to_eol __P((int));
|
||||||
|
extern void _rl_clear_screen __P((void));
|
||||||
|
extern void _rl_update_final __P((void));
|
||||||
|
extern void _rl_redisplay_after_sigwinch __P((void));
|
||||||
|
extern void _rl_clean_up_for_exit __P((void));
|
||||||
|
extern void _rl_erase_entire_line __P((void));
|
||||||
|
extern int _rl_currentb_display_line __P((void));
|
||||||
|
|
||||||
|
/* input.c */
|
||||||
|
extern int _rl_any_typein __P((void));
|
||||||
|
extern int _rl_input_available __P((void));
|
||||||
|
extern void _rl_insert_typein __P((int));
|
||||||
|
|
||||||
|
/* macro.c */
|
||||||
|
extern void _rl_with_macro_input __P((char *));
|
||||||
|
extern int _rl_next_macro_key __P((void));
|
||||||
|
extern void _rl_push_executing_macro __P((void));
|
||||||
|
extern void _rl_pop_executing_macro __P((void));
|
||||||
|
extern void _rl_add_macro_char __P((int));
|
||||||
|
extern void _rl_kill_kbd_macro __P((void));
|
||||||
|
|
||||||
|
/* nls.c */
|
||||||
|
extern int _rl_init_eightbit __P((void));
|
||||||
|
|
||||||
|
/* parens.c */
|
||||||
|
extern void _rl_enable_paren_matching __P((int));
|
||||||
|
|
||||||
|
/* readline.c */
|
||||||
|
extern void _rl_init_line_state __P((void));
|
||||||
|
extern void _rl_set_the_line __P((void));
|
||||||
|
extern int _rl_dispatch __P((int, Keymap));
|
||||||
|
extern int _rl_init_argument __P((void));
|
||||||
|
extern void _rl_fix_point __P((int));
|
||||||
|
extern void _rl_replace_text __P((char *, int, int));
|
||||||
|
extern int _rl_char_search_internal __P((int, int, int));
|
||||||
|
extern int _rl_set_mark_at_pos __P((int));
|
||||||
|
|
||||||
|
/* rltty.c */
|
||||||
|
extern int _rl_disable_tty_signals __P((void));
|
||||||
|
extern int _rl_restore_tty_signals __P((void));
|
||||||
|
|
||||||
|
/* terminal.c */
|
||||||
|
extern void _rl_get_screen_size __P((int, int));
|
||||||
|
extern int _rl_init_terminal_io __P((char *));
|
||||||
|
#ifdef _MINIX
|
||||||
|
extern void _rl_output_character_function __P((int));
|
||||||
|
#else
|
||||||
|
extern int _rl_output_character_function __P((int));
|
||||||
|
#endif
|
||||||
|
extern void _rl_output_some_chars __P((char *, int));
|
||||||
|
extern int _rl_backspace __P((int));
|
||||||
|
extern void _rl_enable_meta_key __P((void));
|
||||||
|
extern void _rl_control_keypad __P((int));
|
||||||
|
|
||||||
|
/* util.c */
|
||||||
|
extern int alphabetic __P((int));
|
||||||
|
extern int _rl_abort_internal __P((void));
|
||||||
|
extern char *_rl_strindex __P((char *, char *));
|
||||||
|
extern int _rl_qsort_string_compare __P((char **, char **));
|
||||||
|
extern int (_rl_uppercase_p) __P((int));
|
||||||
|
extern int (_rl_lowercase_p) __P((int));
|
||||||
|
extern int (_rl_pure_alphabetic) __P((int));
|
||||||
|
extern int (_rl_digit_p) __P((int));
|
||||||
|
extern int (_rl_to_lower) __P((int));
|
||||||
|
extern int (_rl_to_upper) __P((int));
|
||||||
|
extern int (_rl_digit_value) __P((int));
|
||||||
|
|
||||||
|
/* vi_mode.c */
|
||||||
|
extern void _rl_vi_initialize_line __P((void));
|
||||||
|
extern void _rl_vi_reset_last __P((void));
|
||||||
|
extern void _rl_vi_set_last __P((int, int, int));
|
||||||
|
extern int _rl_vi_textmod_command __P((int));
|
||||||
|
extern void _rl_vi_done_inserting __P((void));
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* Undocumented private variables *
|
||||||
|
*************************************************************************/
|
||||||
|
|
||||||
|
/* complete.c */
|
||||||
|
extern int _rl_complete_show_all;
|
||||||
|
extern int _rl_complete_mark_directories;
|
||||||
|
extern int _rl_print_completions_horizontally;
|
||||||
|
extern int _rl_completion_case_fold;
|
||||||
|
|
||||||
|
/* display.c */
|
||||||
|
extern int _rl_vis_botlin;
|
||||||
|
extern int _rl_last_c_pos;
|
||||||
|
extern int _rl_suppress_redisplay;
|
||||||
|
extern char *rl_display_prompt;
|
||||||
|
|
||||||
|
/* funmap.c */
|
||||||
|
extern char *possible_control_prefixes[];
|
||||||
|
extern char *possible_meta_prefixes[];
|
||||||
|
|
||||||
|
/* isearch.c */
|
||||||
|
extern unsigned char *_rl_isearch_terminators;
|
||||||
|
|
||||||
|
/* macro.c */
|
||||||
|
extern int _rl_defining_kbd_macro;
|
||||||
|
extern char *_rl_executing_macro;
|
||||||
|
|
||||||
|
/* readline.c */
|
||||||
|
extern int _rl_horizontal_scroll_mode;
|
||||||
|
extern int _rl_mark_modified_lines;
|
||||||
|
extern int _rl_bell_preference;
|
||||||
|
extern int _rl_meta_flag;
|
||||||
|
extern int _rl_convert_meta_chars_to_ascii;
|
||||||
|
extern int _rl_output_meta_chars;
|
||||||
|
extern char *_rl_comment_begin;
|
||||||
|
extern unsigned char _rl_parsing_conditionalized_out;
|
||||||
|
extern Keymap _rl_keymap;
|
||||||
|
extern FILE *_rl_in_stream;
|
||||||
|
extern FILE *_rl_out_stream;
|
||||||
|
extern int _rl_last_command_was_kill;
|
||||||
|
extern int _rl_eof_char;
|
||||||
|
extern procenv_t readline_top_level;
|
||||||
|
|
||||||
|
/* terminal.c */
|
||||||
|
extern int _rl_enable_keypad;
|
||||||
|
extern int _rl_enable_meta;
|
||||||
|
extern char *term_clreol;
|
||||||
|
extern char *term_clrpag;
|
||||||
|
extern char *term_im;
|
||||||
|
extern char *term_ic;
|
||||||
|
extern char *term_ei;
|
||||||
|
extern char *term_DC;
|
||||||
|
extern char *term_up;
|
||||||
|
extern char *term_dc;
|
||||||
|
extern char *term_cr;
|
||||||
|
extern char *term_IC;
|
||||||
|
extern int screenheight;
|
||||||
|
extern int screenwidth;
|
||||||
|
extern int screenchars;
|
||||||
|
extern int terminal_can_insert;
|
||||||
|
extern int _rl_term_autowrap;
|
||||||
|
|
||||||
|
/* undo.c */
|
||||||
|
extern int _rl_doing_an_undo;
|
||||||
|
extern int _rl_undo_group_level;
|
||||||
|
|
||||||
|
#endif /* _RL_PRIVATE_H_ */
|
34
contrib/libreadline/rlshell.h
Normal file
34
contrib/libreadline/rlshell.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/* rlshell.h -- utility functions normally provided by bash. */
|
||||||
|
|
||||||
|
/* Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of the GNU Readline Library, a library for
|
||||||
|
reading lines of text with interactive input and history editing.
|
||||||
|
|
||||||
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||||
|
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
|
#if !defined (_RL_SHELL_H_)
|
||||||
|
#define _RL_SHELL_H_
|
||||||
|
|
||||||
|
#include "rlstdc.h"
|
||||||
|
|
||||||
|
extern char *single_quote __P((char *));
|
||||||
|
extern void set_lines_and_columns __P((int, int));
|
||||||
|
extern char *get_env_value __P((char *));
|
||||||
|
extern char *get_home_dir __P((void));
|
||||||
|
extern int unset_nodelay_mode __P((int));
|
||||||
|
|
||||||
|
#endif /* _RL_SHELL_H_ */
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
Bash is free software; you can redistribute it and/or modify it
|
Bash is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU General Public License as published by
|
under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
Bash is distributed in the hope that it will be useful, but WITHOUT
|
Bash is distributed in the hope that it will be useful, but WITHOUT
|
||||||
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with Bash; see the file COPYING. If not, write to the Free
|
along with Bash; see the file COPYING. If not, write to the Free
|
||||||
Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#if !defined (_RL_STDC_H_)
|
#if !defined (_RL_STDC_H_)
|
||||||
#define _RL_STDC_H_
|
#define _RL_STDC_H_
|
||||||
@ -28,52 +28,12 @@
|
|||||||
and traditional C compilers with something like this:
|
and traditional C compilers with something like this:
|
||||||
extern char *func __P((char *, char *, int)); */
|
extern char *func __P((char *, char *, int)); */
|
||||||
|
|
||||||
#if defined (__STDC__)
|
#if !defined (__P)
|
||||||
|
# if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus)
|
||||||
# if !defined (__P)
|
|
||||||
# define __P(protos) protos
|
# define __P(protos) protos
|
||||||
# endif
|
# else
|
||||||
# define __STRING(x) #x
|
|
||||||
|
|
||||||
# if !defined (__GNUC__)
|
|
||||||
# define inline
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#else /* !__STDC__ */
|
|
||||||
|
|
||||||
# if !defined (__P)
|
|
||||||
# define __P(protos) ()
|
# define __P(protos) ()
|
||||||
# endif
|
# endif
|
||||||
# define __STRING(x) "x"
|
#endif
|
||||||
|
|
||||||
#if defined (__GNUC__) /* gcc with -traditional */
|
|
||||||
# if !defined (const)
|
|
||||||
# define const __const
|
|
||||||
# endif
|
|
||||||
# if !defined (inline)
|
|
||||||
# define inline __inline
|
|
||||||
# endif
|
|
||||||
# if !defined (signed)
|
|
||||||
# define signed __signed
|
|
||||||
# endif
|
|
||||||
# if !defined (volatile)
|
|
||||||
# define volatile __volatile
|
|
||||||
# endif
|
|
||||||
#else /* !__GNUC__ */
|
|
||||||
# if !defined (const)
|
|
||||||
# define const
|
|
||||||
# endif
|
|
||||||
# if !defined (inline)
|
|
||||||
# define inline
|
|
||||||
# endif
|
|
||||||
# if !defined (signed)
|
|
||||||
# define signed
|
|
||||||
# endif
|
|
||||||
# if !defined (volatile)
|
|
||||||
# define volatile
|
|
||||||
# endif
|
|
||||||
#endif /* !__GNUC__ */
|
|
||||||
|
|
||||||
#endif /* !__STDC__ */
|
|
||||||
|
|
||||||
#endif /* !_RL_STDC_H_ */
|
#endif /* !_RL_STDC_H_ */
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -19,7 +19,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -43,26 +43,12 @@
|
|||||||
|
|
||||||
#include "rltty.h"
|
#include "rltty.h"
|
||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
|
#include "rlprivate.h"
|
||||||
|
|
||||||
#if !defined (errno)
|
#if !defined (errno)
|
||||||
extern int errno;
|
extern int errno;
|
||||||
#endif /* !errno */
|
#endif /* !errno */
|
||||||
|
|
||||||
extern int readline_echoing_p;
|
|
||||||
extern int _rl_eof_char;
|
|
||||||
|
|
||||||
extern int _rl_enable_keypad, _rl_enable_meta;
|
|
||||||
|
|
||||||
extern void _rl_control_keypad ();
|
|
||||||
|
|
||||||
#if defined (__GO32__)
|
|
||||||
# include <pc.h>
|
|
||||||
# undef HANDLE_SIGNALS
|
|
||||||
#endif /* __GO32__ */
|
|
||||||
|
|
||||||
/* Indirect functions to allow apps control over terminal management. */
|
|
||||||
extern void rl_prep_terminal (), rl_deprep_terminal ();
|
|
||||||
|
|
||||||
VFunction *rl_prep_term_function = rl_prep_terminal;
|
VFunction *rl_prep_term_function = rl_prep_terminal;
|
||||||
VFunction *rl_deprep_term_function = rl_deprep_terminal;
|
VFunction *rl_deprep_term_function = rl_deprep_terminal;
|
||||||
|
|
||||||
@ -104,6 +90,7 @@ block_sigint ()
|
|||||||
# endif /* HAVE_USG_SIGHOLD */
|
# endif /* HAVE_USG_SIGHOLD */
|
||||||
# endif /* !HAVE_BSD_SIGNALS */
|
# endif /* !HAVE_BSD_SIGNALS */
|
||||||
#endif /* !HAVE_POSIX_SIGNALS */
|
#endif /* !HAVE_POSIX_SIGNALS */
|
||||||
|
|
||||||
sigint_blocked = 1;
|
sigint_blocked = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,7 +98,7 @@ block_sigint ()
|
|||||||
static void
|
static void
|
||||||
release_sigint ()
|
release_sigint ()
|
||||||
{
|
{
|
||||||
if (!sigint_blocked)
|
if (sigint_blocked == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#if defined (HAVE_POSIX_SIGNALS)
|
#if defined (HAVE_POSIX_SIGNALS)
|
||||||
@ -138,25 +125,27 @@ release_sigint ()
|
|||||||
/* Non-zero means that the terminal is in a prepped state. */
|
/* Non-zero means that the terminal is in a prepped state. */
|
||||||
static int terminal_prepped;
|
static int terminal_prepped;
|
||||||
|
|
||||||
|
static _RL_TTY_CHARS _rl_tty_chars, _rl_last_tty_chars;
|
||||||
|
|
||||||
/* If non-zero, means that this process has called tcflow(fd, TCOOFF)
|
/* If non-zero, means that this process has called tcflow(fd, TCOOFF)
|
||||||
and output is suspended. */
|
and output is suspended. */
|
||||||
#if defined (__ksr1__)
|
#if defined (__ksr1__)
|
||||||
static int ksrflow;
|
static int ksrflow;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (TIOCGWINSZ)
|
|
||||||
/* Dummy call to force a backgrounded readline to stop before it tries
|
/* Dummy call to force a backgrounded readline to stop before it tries
|
||||||
to get the tty settings. */
|
to get the tty settings. */
|
||||||
static void
|
static void
|
||||||
set_winsize (tty)
|
set_winsize (tty)
|
||||||
int tty;
|
int tty;
|
||||||
{
|
{
|
||||||
|
#if defined (TIOCGWINSZ)
|
||||||
struct winsize w;
|
struct winsize w;
|
||||||
|
|
||||||
if (ioctl (tty, TIOCGWINSZ, &w) == 0)
|
if (ioctl (tty, TIOCGWINSZ, &w) == 0)
|
||||||
(void) ioctl (tty, TIOCSWINSZ, &w);
|
(void) ioctl (tty, TIOCSWINSZ, &w);
|
||||||
}
|
|
||||||
#endif /* TIOCGWINSZ */
|
#endif /* TIOCGWINSZ */
|
||||||
|
}
|
||||||
|
|
||||||
#if defined (NEW_TTY_DRIVER)
|
#if defined (NEW_TTY_DRIVER)
|
||||||
|
|
||||||
@ -184,6 +173,42 @@ struct bsdtty {
|
|||||||
|
|
||||||
static TIOTYPE otio;
|
static TIOTYPE otio;
|
||||||
|
|
||||||
|
static void
|
||||||
|
save_tty_chars (tiop)
|
||||||
|
TIOTYPE *tiop;
|
||||||
|
{
|
||||||
|
_rl_last_tty_chars = _rl_tty_chars;
|
||||||
|
|
||||||
|
if (tiop->flags & SGTTY_SET)
|
||||||
|
{
|
||||||
|
_rl_tty_chars.t_erase = tiop->sgttyb.sg_erase;
|
||||||
|
_rl_tty_chars.t_kill = tiop->sgttyb.sg_kill;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tiop->flags & TCHARS_SET)
|
||||||
|
{
|
||||||
|
_rl_tty_chars.t_intr = tiop->tchars.t_intrc;
|
||||||
|
_rl_tty_chars.t_quit = tiop->tchars.t_quitc;
|
||||||
|
_rl_tty_chars.t_start = tiop->tchars.t_startc;
|
||||||
|
_rl_tty_chars.t_stop = tiop->tchars.t_stopc
|
||||||
|
_rl_tty_chars.t_eof = tiop->tchars.t_eofc;
|
||||||
|
_rl_tty_chars.t_eol = '\n';
|
||||||
|
_rl_tty_chars.t_eol2 = tiop->tchars.t_brkc;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tiop->flags & LTCHARS_SET)
|
||||||
|
{
|
||||||
|
_rl_tty_chars.t_susp = tiop->ltchars.t_suspc;
|
||||||
|
_rl_tty_chars.t_dsusp = tiop->ltchars.t_dsuspc;
|
||||||
|
_rl_tty_chars.t_reprint = tiop->ltchars.t_rprntc;
|
||||||
|
_rl_tty_chars.t_flush = tiop->ltchars.t_flushc;
|
||||||
|
_rl_tty_chars.t_werase = tiop->ltchars.t_werasc;
|
||||||
|
_rl_tty_chars.t_lnext = tiop->ltchars.t_lnextc;
|
||||||
|
}
|
||||||
|
|
||||||
|
_rl_tty_chars.t_status = -1;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
get_tty_settings (tty, tiop)
|
get_tty_settings (tty, tiop)
|
||||||
int tty;
|
int tty;
|
||||||
@ -258,7 +283,6 @@ prepare_terminal_settings (meta_flag, otio, tiop)
|
|||||||
int meta_flag;
|
int meta_flag;
|
||||||
TIOTYPE otio, *tiop;
|
TIOTYPE otio, *tiop;
|
||||||
{
|
{
|
||||||
#if !defined (__GO32__)
|
|
||||||
readline_echoing_p = (otio.sgttyb.sg_flags & ECHO);
|
readline_echoing_p = (otio.sgttyb.sg_flags & ECHO);
|
||||||
|
|
||||||
/* Copy the original settings to the structure we're going to use for
|
/* Copy the original settings to the structure we're going to use for
|
||||||
@ -324,7 +348,6 @@ prepare_terminal_settings (meta_flag, otio, tiop)
|
|||||||
tiop->ltchars.t_dsuspc = -1; /* C-y */
|
tiop->ltchars.t_dsuspc = -1; /* C-y */
|
||||||
tiop->ltchars.t_lnextc = -1; /* C-v */
|
tiop->ltchars.t_lnextc = -1; /* C-v */
|
||||||
#endif /* TIOCGLTC */
|
#endif /* TIOCGLTC */
|
||||||
#endif /* !__GO32__ */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !defined (NEW_TTY_DRIVER) */
|
#else /* !defined (NEW_TTY_DRIVER) */
|
||||||
@ -361,12 +384,59 @@ static TIOTYPE otio;
|
|||||||
# define OUTPUT_BEING_FLUSHED(tp) 0
|
# define OUTPUT_BEING_FLUSHED(tp) 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
save_tty_chars (tiop)
|
||||||
|
TIOTYPE *tiop;
|
||||||
|
{
|
||||||
|
_rl_last_tty_chars = _rl_tty_chars;
|
||||||
|
|
||||||
|
_rl_tty_chars.t_eof = tiop->c_cc[VEOF];
|
||||||
|
_rl_tty_chars.t_eol = tiop->c_cc[VEOL];
|
||||||
|
#ifdef VEOL2
|
||||||
|
_rl_tty_chars.t_eol2 = tiop->c_cc[VEOL2];
|
||||||
|
#endif
|
||||||
|
_rl_tty_chars.t_erase = tiop->c_cc[VERASE];
|
||||||
|
#ifdef VWERASE
|
||||||
|
_rl_tty_chars.t_werase = tiop->c_cc[VWERASE];
|
||||||
|
#endif
|
||||||
|
_rl_tty_chars.t_kill = tiop->c_cc[VKILL];
|
||||||
|
#ifdef VREPRINT
|
||||||
|
_rl_tty_chars.t_reprint = tiop->c_cc[VREPRINT];
|
||||||
|
#endif
|
||||||
|
_rl_tty_chars.t_intr = tiop->c_cc[VINTR];
|
||||||
|
_rl_tty_chars.t_quit = tiop->c_cc[VQUIT];
|
||||||
|
#ifdef VSUSP
|
||||||
|
_rl_tty_chars.t_susp = tiop->c_cc[VSUSP];
|
||||||
|
#endif
|
||||||
|
#ifdef VDSUSP
|
||||||
|
_rl_tty_chars.t_dsusp = tiop->c_cc[VDSUSP];
|
||||||
|
#endif
|
||||||
|
#ifdef VSTART
|
||||||
|
_rl_tty_chars.t_start = tiop->c_cc[VSTART];
|
||||||
|
#endif
|
||||||
|
#ifdef VSTOP
|
||||||
|
_rl_tty_chars.t_stop = tiop->c_cc[VSTOP];
|
||||||
|
#endif
|
||||||
|
#ifdef VLNEXT
|
||||||
|
_rl_tty_chars.t_lnext = tiop->c_cc[VLNEXT];
|
||||||
|
#endif
|
||||||
|
#ifdef VDISCARD
|
||||||
|
_rl_tty_chars.t_flush = tiop->c_cc[VDISCARD];
|
||||||
|
#endif
|
||||||
|
#ifdef VSTATUS
|
||||||
|
_rl_tty_chars.t_status = tiop->c_cc[VSTATUS];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined (_AIX) || defined (_AIX41)
|
||||||
|
/* Currently this is only used on AIX */
|
||||||
static void
|
static void
|
||||||
rltty_warning (msg)
|
rltty_warning (msg)
|
||||||
char *msg;
|
char *msg;
|
||||||
{
|
{
|
||||||
fprintf (stderr, "readline: warning: %s\n", msg);
|
fprintf (stderr, "readline: warning: %s\n", msg);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined (_AIX)
|
#if defined (_AIX)
|
||||||
void
|
void
|
||||||
@ -382,14 +452,12 @@ TIOTYPE *tp;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int
|
static int
|
||||||
get_tty_settings (tty, tiop)
|
_get_tty_settings (tty, tiop)
|
||||||
int tty;
|
int tty;
|
||||||
TIOTYPE *tiop;
|
TIOTYPE *tiop;
|
||||||
{
|
{
|
||||||
int ioctl_ret;
|
int ioctl_ret;
|
||||||
|
|
||||||
set_winsize (tty);
|
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
ioctl_ret = GETATTR (tty, tiop);
|
ioctl_ret = GETATTR (tty, tiop);
|
||||||
@ -413,6 +481,19 @@ get_tty_settings (tty, tiop)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
get_tty_settings (tty, tiop)
|
||||||
|
int tty;
|
||||||
|
TIOTYPE *tiop;
|
||||||
|
{
|
||||||
|
set_winsize (tty);
|
||||||
|
|
||||||
|
if (_get_tty_settings (tty, tiop) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
#if defined (_AIX)
|
#if defined (_AIX)
|
||||||
setopost(tiop);
|
setopost(tiop);
|
||||||
#endif
|
#endif
|
||||||
@ -421,7 +502,7 @@ get_tty_settings (tty, tiop)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
set_tty_settings (tty, tiop)
|
_set_tty_settings (tty, tiop)
|
||||||
int tty;
|
int tty;
|
||||||
TIOTYPE *tiop;
|
TIOTYPE *tiop;
|
||||||
{
|
{
|
||||||
@ -431,7 +512,17 @@ set_tty_settings (tty, tiop)
|
|||||||
return -1;
|
return -1;
|
||||||
errno = 0;
|
errno = 0;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
set_tty_settings (tty, tiop)
|
||||||
|
int tty;
|
||||||
|
TIOTYPE *tiop;
|
||||||
|
{
|
||||||
|
if (_set_tty_settings (tty, tiop) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
||||||
#if defined (TERMIOS_TTY_DRIVER)
|
#if defined (TERMIOS_TTY_DRIVER)
|
||||||
@ -448,7 +539,7 @@ set_tty_settings (tty, tiop)
|
|||||||
ioctl (tty, TCXONC, 1); /* Simulate a ^Q. */
|
ioctl (tty, TCXONC, 1); /* Simulate a ^Q. */
|
||||||
#endif /* !TERMIOS_TTY_DRIVER */
|
#endif /* !TERMIOS_TTY_DRIVER */
|
||||||
|
|
||||||
#endif
|
#endif /* 0 */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -520,7 +611,6 @@ void
|
|||||||
rl_prep_terminal (meta_flag)
|
rl_prep_terminal (meta_flag)
|
||||||
int meta_flag;
|
int meta_flag;
|
||||||
{
|
{
|
||||||
#if !defined (__GO32__)
|
|
||||||
int tty;
|
int tty;
|
||||||
TIOTYPE tio;
|
TIOTYPE tio;
|
||||||
|
|
||||||
@ -540,6 +630,8 @@ rl_prep_terminal (meta_flag)
|
|||||||
|
|
||||||
otio = tio;
|
otio = tio;
|
||||||
|
|
||||||
|
save_tty_chars (&otio);
|
||||||
|
|
||||||
prepare_terminal_settings (meta_flag, otio, &tio);
|
prepare_terminal_settings (meta_flag, otio, &tio);
|
||||||
|
|
||||||
if (set_tty_settings (tty, &tio) < 0)
|
if (set_tty_settings (tty, &tio) < 0)
|
||||||
@ -555,14 +647,12 @@ rl_prep_terminal (meta_flag)
|
|||||||
terminal_prepped = 1;
|
terminal_prepped = 1;
|
||||||
|
|
||||||
release_sigint ();
|
release_sigint ();
|
||||||
#endif /* !__GO32__ */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Restore the terminal's normal settings and modes. */
|
/* Restore the terminal's normal settings and modes. */
|
||||||
void
|
void
|
||||||
rl_deprep_terminal ()
|
rl_deprep_terminal ()
|
||||||
{
|
{
|
||||||
#if !defined (__GO32__)
|
|
||||||
int tty;
|
int tty;
|
||||||
|
|
||||||
if (!terminal_prepped)
|
if (!terminal_prepped)
|
||||||
@ -587,7 +677,6 @@ rl_deprep_terminal ()
|
|||||||
terminal_prepped = 0;
|
terminal_prepped = 0;
|
||||||
|
|
||||||
release_sigint ();
|
release_sigint ();
|
||||||
#endif /* !__GO32__ */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
@ -725,3 +814,54 @@ rltty_set_default_bindings (kmap)
|
|||||||
}
|
}
|
||||||
#endif /* !NEW_TTY_DRIVER */
|
#endif /* !NEW_TTY_DRIVER */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined (HANDLE_SIGNALS)
|
||||||
|
|
||||||
|
#if defined (NEW_TTY_DRIVER)
|
||||||
|
int
|
||||||
|
_rl_disable_tty_signals ()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_rl_restore_tty_signals ()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
static TIOTYPE sigstty, nosigstty;
|
||||||
|
static int tty_sigs_disabled = 0;
|
||||||
|
|
||||||
|
int
|
||||||
|
_rl_disable_tty_signals ()
|
||||||
|
{
|
||||||
|
if (tty_sigs_disabled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (_get_tty_settings (fileno (rl_instream), &sigstty) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
nosigstty = sigstty;
|
||||||
|
|
||||||
|
nosigstty.c_lflag &= ~ISIG;
|
||||||
|
|
||||||
|
if (_set_tty_settings (fileno (rl_instream), &nosigstty) < 0)
|
||||||
|
return (_set_tty_settings (fileno (rl_instream), &sigstty));
|
||||||
|
|
||||||
|
tty_sigs_disabled = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_rl_restore_tty_signals ()
|
||||||
|
{
|
||||||
|
if (tty_sigs_disabled == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return (_set_tty_settings (fileno (rl_instream), &sigstty));
|
||||||
|
}
|
||||||
|
#endif /* !NEW_TTY_DRIVER */
|
||||||
|
|
||||||
|
#endif /* HANDLE_SIGNALS */
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -19,10 +19,10 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#if !defined (_RLTTY_H_)
|
#if !defined (_RLTTY_H_)
|
||||||
#define _RLTTY_H
|
#define _RLTTY_H_
|
||||||
|
|
||||||
/* Posix systems use termios and the Posix signal functions. */
|
/* Posix systems use termios and the Posix signal functions. */
|
||||||
#if defined (TERMIOS_TTY_DRIVER)
|
#if defined (TERMIOS_TTY_DRIVER)
|
||||||
@ -60,4 +60,23 @@
|
|||||||
# endif /* !_SVR4_DISABLE */
|
# endif /* !_SVR4_DISABLE */
|
||||||
#endif /* !NEW_TTY_DRIVER && !_POSIX_VDISABLE */
|
#endif /* !NEW_TTY_DRIVER && !_POSIX_VDISABLE */
|
||||||
|
|
||||||
|
typedef struct _rl_tty_chars {
|
||||||
|
char t_eof;
|
||||||
|
char t_eol;
|
||||||
|
char t_eol2;
|
||||||
|
char t_erase;
|
||||||
|
char t_werase;
|
||||||
|
char t_kill;
|
||||||
|
char t_reprint;
|
||||||
|
char t_intr;
|
||||||
|
char t_quit;
|
||||||
|
char t_susp;
|
||||||
|
char t_dsusp;
|
||||||
|
char t_start;
|
||||||
|
char t_stop;
|
||||||
|
char t_lnext;
|
||||||
|
char t_flush;
|
||||||
|
char t_status;
|
||||||
|
} _RL_TTY_CHARS;
|
||||||
|
|
||||||
#endif /* _RLTTY_H_ */
|
#endif /* _RLTTY_H_ */
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -20,7 +20,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#if !defined (_RLWINSIZE_H_)
|
#if !defined (_RLWINSIZE_H_)
|
||||||
#define _RLWINSIZE_H_
|
#define _RLWINSIZE_H_
|
||||||
@ -55,4 +55,3 @@
|
|||||||
|
|
||||||
#endif /* _RL_WINSIZE_H */
|
#endif /* _RL_WINSIZE_H */
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -19,7 +19,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -43,30 +43,51 @@
|
|||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
|
#include "rlprivate.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
#ifdef abs
|
#ifdef abs
|
||||||
# undef abs
|
# undef abs
|
||||||
#endif
|
#endif
|
||||||
#define abs(x) (((x) >= 0) ? (x) : -(x))
|
#define abs(x) (((x) >= 0) ? (x) : -(x))
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
/* Variables imported from readline.c */
|
|
||||||
extern int rl_point, rl_end, rl_line_buffer_len;
|
|
||||||
extern int rl_editing_mode;
|
|
||||||
extern char *rl_prompt;
|
|
||||||
extern char *rl_line_buffer;
|
|
||||||
extern HIST_ENTRY *saved_line_for_history;
|
extern HIST_ENTRY *saved_line_for_history;
|
||||||
extern Function *rl_last_func;
|
|
||||||
|
|
||||||
/* Functions imported from the rest of the library. */
|
/* Functions imported from the rest of the library. */
|
||||||
extern int _rl_free_history_entry ();
|
extern int _rl_free_history_entry __P((HIST_ENTRY *));
|
||||||
extern char *_rl_make_prompt_for_search ();
|
|
||||||
extern void rl_extend_line_buffer ();
|
|
||||||
|
|
||||||
static char *noninc_search_string = (char *) NULL;
|
static char *noninc_search_string = (char *) NULL;
|
||||||
static int noninc_history_pos;
|
static int noninc_history_pos;
|
||||||
|
|
||||||
static char *prev_line_found = (char *) NULL;
|
static char *prev_line_found = (char *) NULL;
|
||||||
|
|
||||||
|
static int rl_history_search_len;
|
||||||
|
static int rl_history_search_pos;
|
||||||
|
static char *history_search_string;
|
||||||
|
static int history_string_size;
|
||||||
|
|
||||||
|
/* Make the data from the history entry ENTRY be the contents of the
|
||||||
|
current line. This doesn't do anything with rl_point; the caller
|
||||||
|
must set it. */
|
||||||
|
static void
|
||||||
|
make_history_line_current (entry)
|
||||||
|
HIST_ENTRY *entry;
|
||||||
|
{
|
||||||
|
int line_len;
|
||||||
|
|
||||||
|
line_len = strlen (entry->line);
|
||||||
|
if (line_len >= rl_line_buffer_len)
|
||||||
|
rl_extend_line_buffer (line_len);
|
||||||
|
strcpy (rl_line_buffer, entry->line);
|
||||||
|
|
||||||
|
rl_undo_list = (UNDO_LIST *)entry->data;
|
||||||
|
rl_end = line_len;
|
||||||
|
|
||||||
|
if (saved_line_for_history)
|
||||||
|
_rl_free_history_entry (saved_line_for_history);
|
||||||
|
saved_line_for_history = (HIST_ENTRY *)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Search the history list for STRING starting at absolute history position
|
/* Search the history list for STRING starting at absolute history position
|
||||||
POS. If STRING begins with `^', the search must match STRING at the
|
POS. If STRING begins with `^', the search must match STRING at the
|
||||||
beginning of a history line, otherwise a full substring match is performed
|
beginning of a history line, otherwise a full substring match is performed
|
||||||
@ -102,7 +123,7 @@ noninc_dosearch (string, dir)
|
|||||||
char *string;
|
char *string;
|
||||||
int dir;
|
int dir;
|
||||||
{
|
{
|
||||||
int oldpos, pos, line_len;
|
int oldpos, pos;
|
||||||
HIST_ENTRY *entry;
|
HIST_ENTRY *entry;
|
||||||
|
|
||||||
if (string == 0 || *string == '\0' || noninc_history_pos < 0)
|
if (string == 0 || *string == '\0' || noninc_history_pos < 0)
|
||||||
@ -132,19 +153,10 @@ noninc_dosearch (string, dir)
|
|||||||
#endif
|
#endif
|
||||||
history_set_pos (oldpos);
|
history_set_pos (oldpos);
|
||||||
|
|
||||||
line_len = strlen (entry->line);
|
make_history_line_current (entry);
|
||||||
if (line_len >= rl_line_buffer_len)
|
|
||||||
rl_extend_line_buffer (line_len);
|
|
||||||
strcpy (rl_line_buffer, entry->line);
|
|
||||||
|
|
||||||
rl_undo_list = (UNDO_LIST *)entry->data;
|
|
||||||
rl_end = strlen (rl_line_buffer);
|
|
||||||
rl_point = 0;
|
rl_point = 0;
|
||||||
rl_clear_message ();
|
rl_clear_message ();
|
||||||
|
|
||||||
if (saved_line_for_history)
|
|
||||||
_rl_free_history_entry (saved_line_for_history);
|
|
||||||
saved_line_for_history = (HIST_ENTRY *)NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Search non-interactively through the history list. DIR < 0 means to
|
/* Search non-interactively through the history list. DIR < 0 means to
|
||||||
@ -235,8 +247,7 @@ noninc_search (dir, pchar)
|
|||||||
{
|
{
|
||||||
/* We want to start the search from the current history position. */
|
/* We want to start the search from the current history position. */
|
||||||
noninc_history_pos = where_history ();
|
noninc_history_pos = where_history ();
|
||||||
if (noninc_search_string)
|
FREE (noninc_search_string);
|
||||||
free (noninc_search_string);
|
|
||||||
noninc_search_string = savestring (rl_line_buffer);
|
noninc_search_string = savestring (rl_line_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -295,59 +306,84 @@ rl_noninc_reverse_search_again (count, key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
rl_history_search_internal (count, direction)
|
rl_history_search_internal (count, dir)
|
||||||
int count, direction;
|
int count, dir;
|
||||||
{
|
{
|
||||||
HIST_ENTRY *temp, *old_temp;
|
HIST_ENTRY *temp;
|
||||||
int line_len;
|
int ret, oldpos;
|
||||||
|
|
||||||
maybe_save_line ();
|
maybe_save_line ();
|
||||||
|
temp = (HIST_ENTRY *)NULL;
|
||||||
|
|
||||||
temp = old_temp = (HIST_ENTRY *)NULL;
|
/* Search COUNT times through the history for a line whose prefix
|
||||||
|
matches history_search_string. When this loop finishes, TEMP,
|
||||||
|
if non-null, is the history line to copy into the line buffer. */
|
||||||
while (count)
|
while (count)
|
||||||
{
|
{
|
||||||
temp = (direction < 0) ? previous_history () : next_history ();
|
ret = noninc_search_from_pos (history_search_string, rl_history_search_pos + dir, dir);
|
||||||
if (temp == 0)
|
if (ret == -1)
|
||||||
break;
|
break;
|
||||||
/* On an empty prefix, make this the same as previous-history. */
|
|
||||||
if (rl_point == 0)
|
/* Get the history entry we found. */
|
||||||
{
|
rl_history_search_pos = ret;
|
||||||
count--;
|
oldpos = where_history ();
|
||||||
continue;
|
history_set_pos (rl_history_search_pos);
|
||||||
}
|
temp = current_history ();
|
||||||
if (STREQN (rl_line_buffer, temp->line, rl_point))
|
history_set_pos (oldpos);
|
||||||
{
|
|
||||||
/* Don't find multiple instances of the same line. */
|
/* Don't find multiple instances of the same line. */
|
||||||
if (prev_line_found && STREQ (prev_line_found, temp->line))
|
if (prev_line_found && STREQ (prev_line_found, temp->line))
|
||||||
continue;
|
continue;
|
||||||
if (direction < 0)
|
prev_line_found = temp->line;
|
||||||
old_temp = temp;
|
count--;
|
||||||
prev_line_found = temp->line;
|
|
||||||
count--;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If we didn't find anything at all, return. */
|
||||||
if (temp == 0)
|
if (temp == 0)
|
||||||
{
|
{
|
||||||
if (direction < 0 && old_temp)
|
maybe_unsave_line ();
|
||||||
temp = old_temp;
|
ding ();
|
||||||
else
|
/* If you don't want the saved history line (last match) to show up
|
||||||
{
|
in the line buffer after the search fails, change the #if 0 to
|
||||||
maybe_unsave_line ();
|
#if 1 */
|
||||||
ding ();
|
#if 0
|
||||||
return 1;
|
if (rl_point > rl_history_search_len)
|
||||||
}
|
{
|
||||||
|
rl_point = rl_end = rl_history_search_len;
|
||||||
|
rl_line_buffer[rl_end] = '\0';
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
rl_point = rl_history_search_len; /* maybe_unsave_line changes it */
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
line_len = strlen (temp->line);
|
/* Copy the line we found into the current line buffer. */
|
||||||
if (line_len >= rl_line_buffer_len)
|
make_history_line_current (temp);
|
||||||
rl_extend_line_buffer (line_len);
|
|
||||||
strcpy (rl_line_buffer, temp->line);
|
rl_point = rl_history_search_len;
|
||||||
rl_undo_list = (UNDO_LIST *)temp->data;
|
|
||||||
rl_end = line_len;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
rl_history_search_reinit ()
|
||||||
|
{
|
||||||
|
rl_history_search_pos = where_history ();
|
||||||
|
rl_history_search_len = rl_point;
|
||||||
|
prev_line_found = (char *)NULL;
|
||||||
|
if (rl_point)
|
||||||
|
{
|
||||||
|
if (rl_history_search_len >= history_string_size - 2)
|
||||||
|
{
|
||||||
|
history_string_size = rl_history_search_len + 2;
|
||||||
|
history_search_string = xrealloc (history_search_string, history_string_size);
|
||||||
|
}
|
||||||
|
history_search_string[0] = '^';
|
||||||
|
strncpy (history_search_string + 1, rl_line_buffer, rl_point);
|
||||||
|
history_search_string[rl_point + 1] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Search forward in the history for the string of characters
|
/* Search forward in the history for the string of characters
|
||||||
from the start of the line to rl_point. This is a non-incremental
|
from the start of the line to rl_point. This is a non-incremental
|
||||||
search. */
|
search. */
|
||||||
@ -357,8 +393,13 @@ rl_history_search_forward (count, ignore)
|
|||||||
{
|
{
|
||||||
if (count == 0)
|
if (count == 0)
|
||||||
return (0);
|
return (0);
|
||||||
if (rl_last_func != rl_history_search_forward)
|
|
||||||
prev_line_found = (char *)NULL;
|
if (rl_last_func != rl_history_search_forward &&
|
||||||
|
rl_last_func != rl_history_search_backward)
|
||||||
|
rl_history_search_reinit ();
|
||||||
|
|
||||||
|
if (rl_history_search_len == 0)
|
||||||
|
return (rl_get_next_history (count, ignore));
|
||||||
return (rl_history_search_internal (abs (count), (count > 0) ? 1 : -1));
|
return (rl_history_search_internal (abs (count), (count > 0) ? 1 : -1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,7 +412,12 @@ rl_history_search_backward (count, ignore)
|
|||||||
{
|
{
|
||||||
if (count == 0)
|
if (count == 0)
|
||||||
return (0);
|
return (0);
|
||||||
if (rl_last_func != rl_history_search_backward)
|
|
||||||
prev_line_found = (char *)NULL;
|
if (rl_last_func != rl_history_search_forward &&
|
||||||
|
rl_last_func != rl_history_search_backward)
|
||||||
|
rl_history_search_reinit ();
|
||||||
|
|
||||||
|
if (rl_history_search_len == 0)
|
||||||
|
return (rl_get_previous_history (count, ignore));
|
||||||
return (rl_history_search_internal (abs (count), (count > 0) ? -1 : 1));
|
return (rl_history_search_internal (abs (count), (count > 0) ? -1 : 1));
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -19,7 +19,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -44,13 +44,21 @@
|
|||||||
# include <strings.h>
|
# include <strings.h>
|
||||||
#endif /* !HAVE_STRING_H */
|
#endif /* !HAVE_STRING_H */
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "rlshell.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
#if !defined (HAVE_GETPW_DECLS)
|
#if !defined (HAVE_GETPW_DECLS)
|
||||||
extern struct passwd *getpwuid ();
|
extern struct passwd *getpwuid ();
|
||||||
#endif /* !HAVE_GETPW_DECLS */
|
#endif /* !HAVE_GETPW_DECLS */
|
||||||
|
|
||||||
extern char *xmalloc ();
|
#ifndef NULL
|
||||||
|
# define NULL 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/* All of these functions are resolved from bash if we are linking readline
|
/* All of these functions are resolved from bash if we are linking readline
|
||||||
as part of bash. */
|
as part of bash. */
|
||||||
@ -63,7 +71,7 @@ single_quote (string)
|
|||||||
register int c;
|
register int c;
|
||||||
char *result, *r, *s;
|
char *result, *r, *s;
|
||||||
|
|
||||||
result = (char *)xmalloc (3 + (3 * strlen (string)));
|
result = (char *)xmalloc (3 + (4 * strlen (string)));
|
||||||
r = result;
|
r = result;
|
||||||
*r++ = '\'';
|
*r++ = '\'';
|
||||||
|
|
||||||
@ -131,3 +139,37 @@ get_home_dir ()
|
|||||||
home_dir = entry->pw_dir;
|
home_dir = entry->pw_dir;
|
||||||
return (home_dir);
|
return (home_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined (O_NDELAY)
|
||||||
|
# if defined (FNDELAY)
|
||||||
|
# define O_NDELAY FNDELAY
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
unset_nodelay_mode (fd)
|
||||||
|
int fd;
|
||||||
|
{
|
||||||
|
int flags, bflags;
|
||||||
|
|
||||||
|
if ((flags = fcntl (fd, F_GETFL, 0)) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
bflags = 0;
|
||||||
|
|
||||||
|
#ifdef O_NONBLOCK
|
||||||
|
bflags |= O_NONBLOCK;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef O_NDELAY
|
||||||
|
bflags |= O_NDELAY;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (flags & bflags)
|
||||||
|
{
|
||||||
|
flags &= ~bflags;
|
||||||
|
return (fcntl (fd, F_SETFL, flags));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -15,7 +15,8 @@
|
|||||||
|
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
|
||||||
|
|
||||||
RL_LIBRARY_VERSION = @LIBVERSION@
|
RL_LIBRARY_VERSION = @LIBVERSION@
|
||||||
RL_LIBRARY_NAME = readline
|
RL_LIBRARY_NAME = readline
|
||||||
|
|
||||||
@ -75,9 +76,9 @@ SHLIB_LIBVERSION = @SHLIB_LIBVERSION@
|
|||||||
SHLIB_STATUS = @SHLIB_STATUS@
|
SHLIB_STATUS = @SHLIB_STATUS@
|
||||||
|
|
||||||
# shared library versioning
|
# shared library versioning
|
||||||
SHLIB_MAJOR= 4
|
SHLIB_MAJOR= @SHLIB_MAJOR@
|
||||||
# shared library systems like SVR4's do not use minor versions
|
# shared library systems like SVR4's do not use minor versions
|
||||||
SHLIB_MINOR= .0
|
SHLIB_MINOR= .@SHLIB_MINOR@
|
||||||
|
|
||||||
# For libraries which include headers from other libraries.
|
# For libraries which include headers from other libraries.
|
||||||
INCLUDES = -I. -I.. -I$(topdir) -I$(includedir)
|
INCLUDES = -I. -I.. -I$(topdir) -I$(includedir)
|
||||||
@ -112,7 +113,7 @@ CSOURCES = $(topdir)/readline.c $(topdir)/funmap.c $(topdir)/keymaps.c \
|
|||||||
# The header files for this library.
|
# The header files for this library.
|
||||||
HSOURCES = readline.h rldefs.h chardefs.h keymaps.h history.h histlib.h \
|
HSOURCES = readline.h rldefs.h chardefs.h keymaps.h history.h histlib.h \
|
||||||
posixstat.h posixdir.h posixjmp.h tilde.h rlconf.h rltty.h \
|
posixstat.h posixdir.h posixjmp.h tilde.h rlconf.h rltty.h \
|
||||||
ansi_stdlib.h tcap.h
|
ansi_stdlib.h tcap.h xmalloc.h rlprivate.h rlshell.h
|
||||||
|
|
||||||
SHARED_HISTOBJ = history.so histexpand.so histfile.so histsearch.so shell.so
|
SHARED_HISTOBJ = history.so histexpand.so histfile.so histsearch.so shell.so
|
||||||
SHARED_TILDEOBJ = tilde.so
|
SHARED_TILDEOBJ = tilde.so
|
||||||
@ -131,7 +132,7 @@ unsupported:
|
|||||||
@echo "Your system and compiler (${host_os}-${CC}) are not supported by the"
|
@echo "Your system and compiler (${host_os}-${CC}) are not supported by the"
|
||||||
@echo "${topdir}/support/shobj-conf script."
|
@echo "${topdir}/support/shobj-conf script."
|
||||||
@echo "If your operating system provides facilities for creating"
|
@echo "If your operating system provides facilities for creating"
|
||||||
@echo "shared libraries, please update the script and re-run configure.
|
@echo "shared libraries, please update the script and re-run configure."
|
||||||
@echo "Please send the changes you made to bash-maintainers@gnu.org"
|
@echo "Please send the changes you made to bash-maintainers@gnu.org"
|
||||||
@echo "for inclusion in future bash and readline releases."
|
@echo "for inclusion in future bash and readline releases."
|
||||||
|
|
||||||
@ -222,6 +223,8 @@ macro.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
|
|||||||
macro.so: $(topdir)/tilde.h $(topdir)/history.h
|
macro.so: $(topdir)/tilde.h $(topdir)/history.h
|
||||||
nls.so: $(topdir)/ansi_stdlib.h
|
nls.so: $(topdir)/ansi_stdlib.h
|
||||||
nls.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
|
nls.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h
|
||||||
|
nls.o: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
|
||||||
|
nls.o: $(topdir)/tilde.h $(topdir)/history.h $(topdir)/rlstdc.h
|
||||||
parens.so: $(topdir)/rlconf.h ${BUILD_DIR}/config.h
|
parens.so: $(topdir)/rlconf.h ${BUILD_DIR}/config.h
|
||||||
parens.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
|
parens.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h
|
||||||
parens.so: $(topdir)/tilde.h
|
parens.so: $(topdir)/tilde.h
|
||||||
@ -257,6 +260,54 @@ vi_mode.so: $(topdir)/history.h $(topdir)/ansi_stdlib.h $(topdir)/tilde.h
|
|||||||
xmalloc.so: ${BUILD_DIR}/config.h
|
xmalloc.so: ${BUILD_DIR}/config.h
|
||||||
xmalloc.so: $(topdir)/ansi_stdlib.h
|
xmalloc.so: $(topdir)/ansi_stdlib.h
|
||||||
|
|
||||||
|
bind.so: $(topdir)/rlshell.h
|
||||||
|
histfile.so: $(topdir)/rlshell.h
|
||||||
|
nls.so: $(topdir)/rlshell.h
|
||||||
|
readline.so: $(topdir)/rlshell.h
|
||||||
|
shell.so: $(topdir)/rlshell.h
|
||||||
|
terminal.so: $(topdir)/rlshell.h
|
||||||
|
histexpand.so: $(topdir)/rlshell.h
|
||||||
|
|
||||||
|
bind.so: $(topdir)/rlprivate.h
|
||||||
|
callback.so: $(topdir)/rlprivate.h
|
||||||
|
complete.so: $(topdir)/rlprivate.h
|
||||||
|
display.so: $(topdir)/rlprivate.h
|
||||||
|
input.so: $(topdir)/rlprivate.h
|
||||||
|
isearch.so: $(topdir)/rlprivate.h
|
||||||
|
kill.so: $(topdir)/rlprivate.h
|
||||||
|
macro.so: $(topdir)/rlprivate.h
|
||||||
|
nls.so: $(topdir)/rlprivate.h
|
||||||
|
parens.so: $(topdir)/rlprivate.h
|
||||||
|
readline.so: $(topdir)/rlprivate.h
|
||||||
|
rltty.so: $(topdir)/rlprivate.h
|
||||||
|
search.so: $(topdir)/rlprivate.h
|
||||||
|
signals.so: $(topdir)/rlprivate.h
|
||||||
|
terminal.so: $(topdir)/rlprivate.h
|
||||||
|
undo.so: $(topdir)/rlprivate.h
|
||||||
|
util.so: $(topdir)/rlprivate.h
|
||||||
|
vi_mode.so: $(topdir)/rlprivate.h
|
||||||
|
|
||||||
|
bind.so: $(topdir)/xmalloc.h
|
||||||
|
complete.so: $(topdir)/xmalloc.h
|
||||||
|
display.so: $(topdir)/xmalloc.h
|
||||||
|
funmap.so: $(topdir)/xmalloc.h
|
||||||
|
histexpand.so: $(topdir)/xmalloc.h
|
||||||
|
histfile.so: $(topdir)/xmalloc.h
|
||||||
|
history.so: $(topdir)/xmalloc.h
|
||||||
|
input.so: $(topdir)/xmalloc.h
|
||||||
|
isearch.so: $(topdir)/xmalloc.h
|
||||||
|
keymaps.so: $(topdir)/xmalloc.h
|
||||||
|
kill.so: $(topdir)/xmalloc.h
|
||||||
|
macro.so: $(topdir)/xmalloc.h
|
||||||
|
readline.so: $(topdir)/xmalloc.h
|
||||||
|
savestring.so: $(topdir)/xmalloc.h
|
||||||
|
search.so: $(topdir)/xmalloc.h
|
||||||
|
shell.so: $(topdir)/xmalloc.h
|
||||||
|
tilde.so: $(topdir)/xmalloc.h
|
||||||
|
tilde.so: $(topdir)/xmalloc.h
|
||||||
|
util.so: $(topdir)/xmalloc.h
|
||||||
|
vi_mode.so: $(topdir)/xmalloc.h
|
||||||
|
|
||||||
readline.so: $(topdir)/readline.c
|
readline.so: $(topdir)/readline.c
|
||||||
vi_mode.so: $(topdir)/vi_mode.c
|
vi_mode.so: $(topdir)/vi_mode.c
|
||||||
funmap.so: $(topdir)/funmap.c
|
funmap.so: $(topdir)/funmap.c
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -40,15 +40,13 @@
|
|||||||
# include <sys/ioctl.h>
|
# include <sys/ioctl.h>
|
||||||
#endif /* GWINSZ_IN_SYS_IOCTL */
|
#endif /* GWINSZ_IN_SYS_IOCTL */
|
||||||
|
|
||||||
#if defined (__GO32__)
|
|
||||||
# undef HANDLE_SIGNALS
|
|
||||||
#endif /* __GO32__ */
|
|
||||||
|
|
||||||
#if defined (HANDLE_SIGNALS)
|
#if defined (HANDLE_SIGNALS)
|
||||||
/* Some standard library routines. */
|
/* Some standard library routines. */
|
||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
|
#include "rlprivate.h"
|
||||||
|
|
||||||
#if !defined (RETSIGTYPE)
|
#if !defined (RETSIGTYPE)
|
||||||
# if defined (VOID_SIGHANDLER)
|
# if defined (VOID_SIGHANDLER)
|
||||||
# define RETSIGTYPE void
|
# define RETSIGTYPE void
|
||||||
@ -67,19 +65,15 @@
|
|||||||
to say SigHandler *foo = signal (SIGKILL, SIG_IGN); */
|
to say SigHandler *foo = signal (SIGKILL, SIG_IGN); */
|
||||||
typedef RETSIGTYPE SigHandler ();
|
typedef RETSIGTYPE SigHandler ();
|
||||||
|
|
||||||
extern int readline_echoing_p;
|
#if defined (HAVE_POSIX_SIGNALS)
|
||||||
extern int rl_pending_input;
|
typedef struct sigaction sighandler_cxt;
|
||||||
extern int _rl_meta_flag;
|
# define rl_sigaction(s, nh, oh) sigaction(s, nh, oh)
|
||||||
|
#else
|
||||||
|
typedef struct { SigHandler *sa_handler; int sa_mask, sa_flags; } sighandler_cxt;
|
||||||
|
# define sigemptyset(m)
|
||||||
|
#endif /* !HAVE_POSIX_SIGNALS */
|
||||||
|
|
||||||
extern void free_undo_list ();
|
static SigHandler *rl_set_sighandler __P((int, SigHandler *, sighandler_cxt *));
|
||||||
extern void _rl_get_screen_size ();
|
|
||||||
extern void _rl_redisplay_after_sigwinch ();
|
|
||||||
extern void _rl_clean_up_for_exit ();
|
|
||||||
extern void _rl_kill_kbd_macro ();
|
|
||||||
extern void _rl_init_argument ();
|
|
||||||
extern void rl_deprep_terminal (), rl_prep_terminal ();
|
|
||||||
|
|
||||||
static SigHandler *rl_set_sighandler ();
|
|
||||||
|
|
||||||
/* Exported variables for use by applications. */
|
/* Exported variables for use by applications. */
|
||||||
|
|
||||||
@ -101,14 +95,6 @@ static int sigwinch_set_flag;
|
|||||||
/* */
|
/* */
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
|
|
||||||
#if defined (HAVE_POSIX_SIGNALS)
|
|
||||||
typedef struct sigaction sighandler_cxt;
|
|
||||||
# define rl_sigaction(s, nh, oh) sigaction(s, nh, oh)
|
|
||||||
#else
|
|
||||||
typedef struct { SigHandler *sa_handler; int sa_mask, sa_flags; } sighandler_cxt;
|
|
||||||
# define sigemptyset(m)
|
|
||||||
#endif /* !HAVE_POSIX_SIGNALS */
|
|
||||||
|
|
||||||
static sighandler_cxt old_int, old_term, old_alrm, old_quit;
|
static sighandler_cxt old_int, old_term, old_alrm, old_quit;
|
||||||
#if defined (SIGTSTP)
|
#if defined (SIGTSTP)
|
||||||
static sighandler_cxt old_tstp, old_ttou, old_ttin;
|
static sighandler_cxt old_tstp, old_ttou, old_ttin;
|
||||||
@ -165,6 +151,10 @@ rl_signal_handler (sig)
|
|||||||
# endif /* HAVE_BSD_SIGNALS */
|
# endif /* HAVE_BSD_SIGNALS */
|
||||||
#endif /* !HAVE_POSIX_SIGNALS */
|
#endif /* !HAVE_POSIX_SIGNALS */
|
||||||
|
|
||||||
|
#if defined (__EMX__)
|
||||||
|
signal (sig, SIG_ACK);
|
||||||
|
#endif
|
||||||
|
|
||||||
kill (getpid (), sig);
|
kill (getpid (), sig);
|
||||||
|
|
||||||
/* Let the signal that we just sent through. */
|
/* Let the signal that we just sent through. */
|
||||||
@ -232,6 +222,7 @@ rl_set_sighandler (sig, handler, ohandler)
|
|||||||
SigHandler *handler;
|
SigHandler *handler;
|
||||||
sighandler_cxt *ohandler;
|
sighandler_cxt *ohandler;
|
||||||
{
|
{
|
||||||
|
sighandler_cxt old_handler;
|
||||||
#if defined (HAVE_POSIX_SIGNALS)
|
#if defined (HAVE_POSIX_SIGNALS)
|
||||||
struct sigaction act;
|
struct sigaction act;
|
||||||
|
|
||||||
@ -239,10 +230,17 @@ rl_set_sighandler (sig, handler, ohandler)
|
|||||||
act.sa_flags = 0;
|
act.sa_flags = 0;
|
||||||
sigemptyset (&act.sa_mask);
|
sigemptyset (&act.sa_mask);
|
||||||
sigemptyset (&ohandler->sa_mask);
|
sigemptyset (&ohandler->sa_mask);
|
||||||
sigaction (sig, &act, ohandler);
|
sigaction (sig, &act, &old_handler);
|
||||||
#else
|
#else
|
||||||
ohandler->sa_handler = (SigHandler *)signal (sig, handler);
|
old_handler.sa_handler = (SigHandler *)signal (sig, handler);
|
||||||
#endif /* !HAVE_POSIX_SIGNALS */
|
#endif /* !HAVE_POSIX_SIGNALS */
|
||||||
|
|
||||||
|
/* XXX -- assume we have memcpy */
|
||||||
|
/* If rl_set_signals is called twice in a row, don't set the old handler to
|
||||||
|
rl_signal_handler, because that would cause infinite recursion. */
|
||||||
|
if (handler != rl_signal_handler || old_handler.sa_handler != rl_signal_handler)
|
||||||
|
memcpy (ohandler, &old_handler, sizeof (sighandler_cxt));
|
||||||
|
|
||||||
return (ohandler->sa_handler);
|
return (ohandler->sa_handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
380
contrib/libreadline/support/config.guess
vendored
380
contrib/libreadline/support/config.guess
vendored
@ -35,6 +35,19 @@
|
|||||||
# (but try to keep the structure clean).
|
# (but try to keep the structure clean).
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# Use $HOST_CC if defined. $CC may point to a cross-compiler
|
||||||
|
if test x"$CC_FOR_BUILD" = x; then
|
||||||
|
if test x"$HOST_CC" != x; then
|
||||||
|
CC_FOR_BUILD="$HOST_CC"
|
||||||
|
else
|
||||||
|
if test x"$CC" != x; then
|
||||||
|
CC_FOR_BUILD="$CC"
|
||||||
|
else
|
||||||
|
CC_FOR_BUILD=cc
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||||
# (ghazi@noc.rutgers.edu 8/24/94.)
|
# (ghazi@noc.rutgers.edu 8/24/94.)
|
||||||
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
|
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
|
||||||
@ -57,7 +70,8 @@ esac
|
|||||||
REL_LEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.\([0-9]*\)'` # 1
|
REL_LEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.\([0-9]*\)'` # 1
|
||||||
REL_SUBLEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.[0-9]*.\([0-9]*\)'` # 2
|
REL_SUBLEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.[0-9]*.\([0-9]*\)'` # 2
|
||||||
|
|
||||||
trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
|
dummy=dummy-$$
|
||||||
|
trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
|
||||||
|
|
||||||
# Some versions of i386 SVR4.2 make `uname' equivalent to `uname -n', which
|
# Some versions of i386 SVR4.2 make `uname' equivalent to `uname -n', which
|
||||||
# is contrary to all other versions of uname
|
# is contrary to all other versions of uname
|
||||||
@ -81,9 +95,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
i?86:OpenBSD:*:*)
|
i?86:OpenBSD:*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
echo ${UNAME_MACHINE}-pc-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:FreeBSD:*:*)
|
|
||||||
echo ${UNAME_MACHINE}-pc-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
|
||||||
exit 0 ;;
|
|
||||||
sparc:NetBSD:*:*)
|
sparc:NetBSD:*:*)
|
||||||
echo sparc-unknown-netbsd${UNAME_RELEASE}
|
echo sparc-unknown-netbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@ -151,17 +162,11 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
*:QNX:*:42*)
|
*:QNX:*:42*)
|
||||||
echo i386-qssl-qnx`echo ${UNAME_VERSION}`
|
echo i386-qssl-qnx`echo ${UNAME_VERSION}`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
BeBox:BeOS:*:*)
|
Alpha*:Windows:NT:*:SP*)
|
||||||
echo powerpc-be-beos
|
echo alpha-pc-opennt
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
BeMac:BeOS:*:*)
|
*:Windows:NT:*:SP*)
|
||||||
echo powerpc-apple-beos
|
echo intel-pc-opennt
|
||||||
exit 0 ;;
|
|
||||||
BePC:BeOS:*:*)
|
|
||||||
echo i586-pc-beos
|
|
||||||
exit 0 ;;
|
|
||||||
SX-4:SUPER-UX:*:*)
|
|
||||||
echo sx4-nec-superux${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
# end cases added for Bash
|
# end cases added for Bash
|
||||||
alpha:OSF1:*:*)
|
alpha:OSF1:*:*)
|
||||||
@ -172,7 +177,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
# A Tn.n version is a released field test version.
|
# A Tn.n version is a released field test version.
|
||||||
# A Xn.n version is an unreleased experimental baselevel.
|
# A Xn.n version is an unreleased experimental baselevel.
|
||||||
# 1.2 uses "1.2" for uname -r.
|
# 1.2 uses "1.2" for uname -r.
|
||||||
cat <<EOF >dummy.s
|
cat <<EOF >$dummy.s
|
||||||
.globl main
|
.globl main
|
||||||
.ent main
|
.ent main
|
||||||
main:
|
main:
|
||||||
@ -189,9 +194,9 @@ main:
|
|||||||
ret \$31,(\$26),1
|
ret \$31,(\$26),1
|
||||||
.end main
|
.end main
|
||||||
EOF
|
EOF
|
||||||
${CC-cc} dummy.s -o dummy 2>/dev/null
|
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
|
||||||
if test "$?" = 0 ; then
|
if test "$?" = 0 ; then
|
||||||
./dummy
|
./$dummy
|
||||||
case "$?" in
|
case "$?" in
|
||||||
7)
|
7)
|
||||||
UNAME_MACHINE="alpha"
|
UNAME_MACHINE="alpha"
|
||||||
@ -210,9 +215,15 @@ EOF
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
rm -f dummy.s dummy
|
rm -f $dummy.s $dummy
|
||||||
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
|
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
Alpha\ *:Windows_NT*:*)
|
||||||
|
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||||
|
# Should we change UNAME_MACHINE based on the output of uname instead
|
||||||
|
# of the specific Alpha model?
|
||||||
|
echo alpha-pc-interix
|
||||||
|
exit 0 ;;
|
||||||
21064:Windows_NT:50:3)
|
21064:Windows_NT:50:3)
|
||||||
echo alpha-dec-winnt3.5
|
echo alpha-dec-winnt3.5
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@ -255,7 +266,7 @@ EOF
|
|||||||
SR2?01:HI-UX/MPP:*:*)
|
SR2?01:HI-UX/MPP:*:*)
|
||||||
echo hppa1.1-hitachi-hiuxmpp
|
echo hppa1.1-hitachi-hiuxmpp
|
||||||
exit 0;;
|
exit 0;;
|
||||||
Pyramid*:OSx*:*:*|MIS*:OSx*:*:*)
|
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
|
||||||
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
|
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
|
||||||
if test "`(/bin/universe) 2>/dev/null`" = att ; then
|
if test "`(/bin/universe) 2>/dev/null`" = att ; then
|
||||||
echo pyramid-pyramid-sysv3
|
echo pyramid-pyramid-sysv3
|
||||||
@ -263,9 +274,12 @@ EOF
|
|||||||
echo pyramid-pyramid-bsd
|
echo pyramid-pyramid-bsd
|
||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
NILE:*:*:dcosx)
|
NILE:*:*:*:dcosx)
|
||||||
echo pyramid-pyramid-svr4
|
echo pyramid-pyramid-svr4
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
sun4H:SunOS:5.*:*)
|
||||||
|
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
|
exit 0 ;;
|
||||||
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
|
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
|
||||||
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@ -287,7 +301,7 @@ EOF
|
|||||||
# Japanese Language versions have a version number like `4.1.3-JL'.
|
# Japanese Language versions have a version number like `4.1.3-JL'.
|
||||||
echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
|
echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sun3*:SunOS:*:*|sun:SunOS:*:*)
|
sun3*:SunOS:*:*)
|
||||||
echo m68k-sun-sunos${UNAME_RELEASE}
|
echo m68k-sun-sunos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sun*:*:4.2BSD:*)
|
sun*:*:4.2BSD:*)
|
||||||
@ -309,19 +323,45 @@ EOF
|
|||||||
echo m68k-atari-netbsd${UNAME_RELEASE}
|
echo m68k-atari-netbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
atari*:OpenBSD:*:*)
|
atari*:OpenBSD:*:*)
|
||||||
echo m68k-atari-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
# The situation for MiNT is a little confusing. The machine name
|
||||||
|
# can be virtually everything (everything which is not
|
||||||
|
# "atarist" or "atariste" at least should have a processor
|
||||||
|
# > m68000). The system name ranges from "MiNT" over "FreeMiNT"
|
||||||
|
# to the lowercase version "mint" (or "freemint"). Finally
|
||||||
|
# the system name "TOS" denotes a system which is actually not
|
||||||
|
# MiNT. But MiNT is downward compatible to TOS, so this should
|
||||||
|
# be no problem.
|
||||||
|
atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
|
||||||
|
echo m68k-atari-mint${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
|
||||||
|
echo m68k-atari-mint${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
|
||||||
|
echo m68k-atari-mint${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
|
||||||
|
echo m68k-milan-mint${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
|
||||||
|
echo m68k-hades-mint${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
|
||||||
|
echo m68k-unknown-mint${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
sun3*:NetBSD:*:*)
|
sun3*:NetBSD:*:*)
|
||||||
echo m68k-sun-netbsd${UNAME_RELEASE}
|
echo m68k-sun-netbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sun3*:OpenBSD:*:*)
|
sun3*:OpenBSD:*:*)
|
||||||
echo m68k-sun-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
mac68k:NetBSD:*:*)
|
mac68k:NetBSD:*:*)
|
||||||
echo m68k-apple-netbsd${UNAME_RELEASE}
|
echo m68k-apple-netbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
mac68k:OpenBSD:*:*)
|
mac68k:OpenBSD:*:*)
|
||||||
echo m68k-apple-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
mvme68k:OpenBSD:*:*)
|
mvme68k:OpenBSD:*:*)
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
@ -329,15 +369,15 @@ EOF
|
|||||||
mvme88k:OpenBSD:*:*)
|
mvme88k:OpenBSD:*:*)
|
||||||
echo m88k-unknown-openbsd${UNAME_RELEASE}
|
echo m88k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
Power?Macintosh:Rhapsody:*:*)
|
*:"Mac OS":*:*)
|
||||||
echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
echo `uname -p`-apple-macos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:Rhapsody:*:*)
|
|
||||||
echo ${UNAME_MACHINE}-unknown-rhapsody${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
powerpc:machten:*:*)
|
powerpc:machten:*:*)
|
||||||
echo powerpc-apple-machten${UNAME_RELEASE}
|
echo powerpc-apple-machten${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
macppc:NetBSD:*:*)
|
||||||
|
echo powerpc-apple-netbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
RISC*:Mach:*:*)
|
RISC*:Mach:*:*)
|
||||||
echo mips-dec-mach_bsd4.3
|
echo mips-dec-mach_bsd4.3
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@ -347,12 +387,16 @@ EOF
|
|||||||
VAX*:ULTRIX*:*:*)
|
VAX*:ULTRIX*:*:*)
|
||||||
echo vax-dec-ultrix${UNAME_RELEASE}
|
echo vax-dec-ultrix${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
2020:CLIX:*:*)
|
2020:CLIX:*:* | 2430:CLIX:*:*)
|
||||||
echo clipper-intergraph-clix${UNAME_RELEASE}
|
echo clipper-intergraph-clix${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
mips:*:*:UMIPS | mips:*:*:RISCos)
|
mips:*:*:UMIPS | mips:*:*:RISCos)
|
||||||
sed 's/^ //' << EOF >dummy.c
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
int main (argc, argv) int argc; char **argv; {
|
#ifdef __cplusplus
|
||||||
|
int main (int argc, char *argv[]) {
|
||||||
|
#else
|
||||||
|
int main (argc, argv) int argc; char *argv[]; {
|
||||||
|
#endif
|
||||||
#if defined (host_mips) && defined (MIPSEB)
|
#if defined (host_mips) && defined (MIPSEB)
|
||||||
#if defined (SYSTYPE_SYSV)
|
#if defined (SYSTYPE_SYSV)
|
||||||
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
|
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
|
||||||
@ -367,10 +411,10 @@ EOF
|
|||||||
exit (-1);
|
exit (-1);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
${CC-cc} dummy.c -o dummy \
|
$CC_FOR_BUILD $dummy.c -o $dummy \
|
||||||
&& ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||||
&& rm dummy.c dummy && exit 0
|
&& rm $dummy.c $dummy && exit 0
|
||||||
rm -f dummy.c dummy
|
rm -f $dummy.c $dummy
|
||||||
echo mips-mips-riscos${UNAME_RELEASE}
|
echo mips-mips-riscos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
Night_Hawk:Power_UNIX:*:*)
|
Night_Hawk:Power_UNIX:*:*)
|
||||||
@ -389,13 +433,14 @@ EOF
|
|||||||
# DG/UX returns AViiON for all architectures
|
# DG/UX returns AViiON for all architectures
|
||||||
UNAME_PROCESSOR=`/usr/bin/uname -p`
|
UNAME_PROCESSOR=`/usr/bin/uname -p`
|
||||||
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
|
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
|
||||||
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
|
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
|
||||||
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
|
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
|
||||||
echo m88k-dg-dgux${UNAME_RELEASE}
|
echo m88k-dg-dgux${UNAME_RELEASE}
|
||||||
else
|
else
|
||||||
echo m88k-dg-dguxbcs${UNAME_RELEASE}
|
echo m88k-dg-dguxbcs${UNAME_RELEASE}
|
||||||
fi
|
fi
|
||||||
else echo i586-dg-dgux${UNAME_RELEASE}
|
else
|
||||||
|
echo i586-dg-dgux${UNAME_RELEASE}
|
||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
|
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
|
||||||
@ -422,7 +467,7 @@ EOF
|
|||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:AIX:2:3)
|
*:AIX:2:3)
|
||||||
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
|
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||||
sed 's/^ //' << EOF >dummy.c
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
#include <sys/systemcfg.h>
|
#include <sys/systemcfg.h>
|
||||||
|
|
||||||
main()
|
main()
|
||||||
@ -433,8 +478,8 @@ EOF
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
|
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
|
||||||
rm -f dummy.c dummy
|
rm -f $dummy.c $dummy
|
||||||
echo rs6000-ibm-aix3.2.5
|
echo rs6000-ibm-aix3.2.5
|
||||||
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||||
echo rs6000-ibm-aix3.2.4
|
echo rs6000-ibm-aix3.2.4
|
||||||
@ -443,7 +488,8 @@ EOF
|
|||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:AIX:*:4)
|
*:AIX:*:4)
|
||||||
if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
|
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
|
||||||
|
if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
|
||||||
IBM_ARCH=rs6000
|
IBM_ARCH=rs6000
|
||||||
else
|
else
|
||||||
IBM_ARCH=powerpc
|
IBM_ARCH=powerpc
|
||||||
@ -484,17 +530,46 @@ EOF
|
|||||||
case "${UNAME_MACHINE}" in
|
case "${UNAME_MACHINE}" in
|
||||||
9000/31? ) HP_ARCH=m68000 ;;
|
9000/31? ) HP_ARCH=m68000 ;;
|
||||||
9000/[34]?? ) HP_ARCH=m68k ;;
|
9000/[34]?? ) HP_ARCH=m68k ;;
|
||||||
9000/78? | 9000/80[24] | 9000/8[67]1 | 9000/8[78]9 | 9000/893 )
|
9000/[678][0-9][0-9])
|
||||||
HP_ARCH=hppa2.0 ;;
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
9000/7?? | 9000/8?[13679] | 9000/892 )
|
#include <stdlib.h>
|
||||||
HP_ARCH=hppa1.1 ;;
|
#include <unistd.h>
|
||||||
9000/[68]?? ) HP_ARCH=hppa1.0 ;;
|
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
#if defined(_SC_KERNEL_BITS)
|
||||||
|
long bits = sysconf(_SC_KERNEL_BITS);
|
||||||
|
#endif
|
||||||
|
long cpu = sysconf (_SC_CPU_VERSION);
|
||||||
|
|
||||||
|
switch (cpu)
|
||||||
|
{
|
||||||
|
case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
|
||||||
|
case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
|
||||||
|
case CPU_PA_RISC2_0:
|
||||||
|
#if defined(_SC_KERNEL_BITS)
|
||||||
|
switch (bits)
|
||||||
|
{
|
||||||
|
case 64: puts ("hppa2.0w"); break;
|
||||||
|
case 32: puts ("hppa2.0n"); break;
|
||||||
|
default: puts ("hppa2.0"); break;
|
||||||
|
} break;
|
||||||
|
#else /* !defined(_SC_KERNEL_BITS) */
|
||||||
|
puts ("hppa2.0"); break;
|
||||||
|
#endif
|
||||||
|
default: puts ("hppa1.0"); break;
|
||||||
|
}
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
|
||||||
|
rm -f $dummy.c $dummy
|
||||||
esac
|
esac
|
||||||
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
||||||
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
3050*:HI-UX:*:*)
|
3050*:HI-UX:*:*)
|
||||||
sed 's/^ //' << EOF >dummy.c
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
int
|
int
|
||||||
main ()
|
main ()
|
||||||
@ -519,8 +594,8 @@ EOF
|
|||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
|
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
|
||||||
rm -f dummy.c dummy
|
rm -f $dummy.c $dummy
|
||||||
echo unknown-hitachi-hiuxwe2
|
echo unknown-hitachi-hiuxwe2
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
||||||
@ -529,6 +604,9 @@ EOF
|
|||||||
9000/8??:4.3bsd:*:*)
|
9000/8??:4.3bsd:*:*)
|
||||||
echo hppa1.0-hp-bsd
|
echo hppa1.0-hp-bsd
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
*9??*:MPE/iX:*:*)
|
||||||
|
echo hppa1.0-hp-mpeix
|
||||||
|
exit 0 ;;
|
||||||
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
||||||
echo hppa1.1-hp-osf
|
echo hppa1.1-hp-osf
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@ -537,14 +615,17 @@ EOF
|
|||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:OSF1:*:*)
|
i?86:OSF1:*:*)
|
||||||
if [ -x /usr/sbin/sysversion ] ; then
|
if [ -x /usr/sbin/sysversion ] ; then
|
||||||
echo ${UNAME_MACHINE}-pc-osf1mk
|
echo ${UNAME_MACHINE}-unknown-osf1mk
|
||||||
else
|
else
|
||||||
echo ${UNAME_MACHINE}-pc-osf1
|
echo ${UNAME_MACHINE}-unknown-osf1
|
||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
parisc*:Lites*:*:*)
|
parisc*:Lites*:*:*)
|
||||||
echo hppa1.1-hp-lites
|
echo hppa1.1-hp-lites
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
hppa*:OpenBSD:*:*)
|
||||||
|
echo hppa-unknown-openbsd
|
||||||
|
exit 0 ;;
|
||||||
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
||||||
echo c1-convex-bsd
|
echo c1-convex-bsd
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@ -577,11 +658,14 @@ EOF
|
|||||||
CRAY*TS:*:*:*)
|
CRAY*TS:*:*:*)
|
||||||
echo t90-cray-unicos${UNAME_RELEASE}
|
echo t90-cray-unicos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
CRAY*T3E:*:*:*)
|
||||||
|
echo alpha-cray-unicosmk${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
CRAY-2:*:*:*)
|
CRAY-2:*:*:*)
|
||||||
echo cray2-cray-unicos
|
echo cray2-cray-unicos
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
F300:UNIX_System_V:*:*)
|
F300:UNIX_System_V:*:*)
|
||||||
FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
|
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
||||||
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
||||||
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@ -591,14 +675,26 @@ EOF
|
|||||||
hp3[0-9][05]:NetBSD:*:*)
|
hp3[0-9][05]:NetBSD:*:*)
|
||||||
echo m68k-hp-netbsd${UNAME_RELEASE}
|
echo m68k-hp-netbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
hp3[0-9][05]:OpenBSD:*:*)
|
hp300:OpenBSD:*:*)
|
||||||
echo m68k-hp-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:BSD/386:*:* | *:BSD/OS:*:*)
|
i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
sparc*:BSD/OS:*:*)
|
||||||
|
echo sparc-unknown-bsdi${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
*:BSD/OS:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
*:FreeBSD:*:*)
|
*:FreeBSD:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
if test -x /usr/bin/objformat; then
|
||||||
|
if test "elf" = "`/usr/bin/objformat`"; then
|
||||||
|
echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-=(].*//'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:NetBSD:*:*)
|
*:NetBSD:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||||
@ -607,14 +703,23 @@ EOF
|
|||||||
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*:CYGWIN*:*)
|
i*:CYGWIN*:*)
|
||||||
echo i386-pc-cygwin32
|
echo ${UNAME_MACHINE}-pc-cygwin32
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*:MINGW*:*)
|
i*:MINGW*:*)
|
||||||
echo i386-pc-mingw32
|
echo ${UNAME_MACHINE}-pc-mingw32
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
||||||
|
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||||
|
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
||||||
|
# UNAME_MACHINE based on the output of uname instead of i386?
|
||||||
|
echo i386-pc-interix
|
||||||
|
exit 0 ;;
|
||||||
|
i*:UWIN*:*)
|
||||||
|
echo ${UNAME_MACHINE}-pc-uwin
|
||||||
|
exit 0 ;;
|
||||||
p*:CYGWIN*:*)
|
p*:CYGWIN*:*)
|
||||||
echo powerpcle-unknown-cygwin32
|
echo powerpcle-unknown-cygwin
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
prep*:SunOS:5.*:*)
|
prep*:SunOS:5.*:*)
|
||||||
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@ -622,9 +727,17 @@ EOF
|
|||||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:Linux:*:*)
|
*:Linux:*:*)
|
||||||
|
# uname on the ARM produces all sorts of strangeness, and we need to
|
||||||
|
# filter it out.
|
||||||
|
case "$UNAME_MACHINE" in
|
||||||
|
armv*) UNAME_MACHINE=$UNAME_MACHINE ;;
|
||||||
|
arm* | sa110*) UNAME_MACHINE="arm" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
# The BFD linker knows what the default object file format is, so
|
# The BFD linker knows what the default object file format is, so
|
||||||
# first see if it will tell us.
|
# first see if it will tell us. cd to the root directory to prevent
|
||||||
ld_help_string=`ld --help 2>&1`
|
# problems with other programs or directories called `ld' in the path.
|
||||||
|
ld_help_string=`cd /; ld --help 2>&1`
|
||||||
ld_supported_emulations=`echo $ld_help_string \
|
ld_supported_emulations=`echo $ld_help_string \
|
||||||
| sed -ne '/supported emulations:/!d
|
| sed -ne '/supported emulations:/!d
|
||||||
s/[ ][ ]*/ /g
|
s/[ ][ ]*/ /g
|
||||||
@ -632,15 +745,46 @@ EOF
|
|||||||
s/ .*//
|
s/ .*//
|
||||||
p'`
|
p'`
|
||||||
case "$ld_supported_emulations" in
|
case "$ld_supported_emulations" in
|
||||||
|
*ia64) echo "${UNAME_MACHINE}-unknown-linux" ; exit 0 ;;
|
||||||
i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
|
i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
|
||||||
i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
|
i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
|
||||||
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||||
|
armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||||
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||||
elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;;
|
elf32ppc | elf32ppclinux)
|
||||||
esac
|
# Determine Lib Version
|
||||||
|
cat >$dummy.c <<EOF
|
||||||
|
#include <features.h>
|
||||||
|
#if defined(__GLIBC__)
|
||||||
|
extern char __libc_version[];
|
||||||
|
extern char __libc_release[];
|
||||||
|
#endif
|
||||||
|
main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
#if defined(__GLIBC__)
|
||||||
|
printf("%s %s\n", __libc_version, __libc_release);
|
||||||
|
#else
|
||||||
|
printf("unkown\n");
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
LIBC=""
|
||||||
|
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
|
||||||
|
if test "$?" = 0 ; then
|
||||||
|
./$dummy | grep 1\.99 > /dev/null
|
||||||
|
if test "$?" = 0 ; then
|
||||||
|
LIBC="libc1"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
rm -f $dummy.c $dummy
|
||||||
|
echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
if test "${UNAME_MACHINE}" = "alpha" ; then
|
if test "${UNAME_MACHINE}" = "alpha" ; then
|
||||||
sed 's/^ //' <<EOF >dummy.s
|
sed 's/^ //' <<EOF >$dummy.s
|
||||||
.globl main
|
.globl main
|
||||||
.ent main
|
.ent main
|
||||||
main:
|
main:
|
||||||
@ -658,9 +802,9 @@ EOF
|
|||||||
.end main
|
.end main
|
||||||
EOF
|
EOF
|
||||||
LIBC=""
|
LIBC=""
|
||||||
${CC-cc} dummy.s -o dummy 2>/dev/null
|
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
|
||||||
if test "$?" = 0 ; then
|
if test "$?" = 0 ; then
|
||||||
./dummy
|
./$dummy
|
||||||
case "$?" in
|
case "$?" in
|
||||||
7)
|
7)
|
||||||
UNAME_MACHINE="alpha"
|
UNAME_MACHINE="alpha"
|
||||||
@ -679,20 +823,21 @@ EOF
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
objdump --private-headers dummy | \
|
objdump --private-headers $dummy | \
|
||||||
grep ld.so.1 > /dev/null
|
grep ld.so.1 > /dev/null
|
||||||
if test "$?" = 0 ; then
|
if test "$?" = 0 ; then
|
||||||
LIBC="libc1"
|
LIBC="libc1"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
rm -f dummy.s dummy
|
rm -f $dummy.s $dummy
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
|
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
|
||||||
elif test "${UNAME_MACHINE}" = "mips" ; then
|
elif test "${UNAME_MACHINE}" = "mips" ; then
|
||||||
cat >dummy.c <<EOF
|
cat >$dummy.c <<EOF
|
||||||
main(argc, argv)
|
#ifdef __cplusplus
|
||||||
int argc;
|
int main (int argc, char *argv[]) {
|
||||||
char *argv[];
|
#else
|
||||||
{
|
int main (argc, argv) int argc; char *argv[]; {
|
||||||
|
#endif
|
||||||
#ifdef __MIPSEB__
|
#ifdef __MIPSEB__
|
||||||
printf ("%s-unknown-linux-gnu\n", argv[1]);
|
printf ("%s-unknown-linux-gnu\n", argv[1]);
|
||||||
#endif
|
#endif
|
||||||
@ -702,8 +847,8 @@ main(argc, argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
|
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
|
||||||
rm -f dummy.c dummy
|
rm -f $dummy.c $dummy
|
||||||
else
|
else
|
||||||
# Either a pre-BFD a.out linker (linux-gnuoldld)
|
# Either a pre-BFD a.out linker (linux-gnuoldld)
|
||||||
# or one that does not give us useful --help.
|
# or one that does not give us useful --help.
|
||||||
@ -722,12 +867,13 @@ EOF
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
# Determine whether the default compiler is a.out or elf
|
# Determine whether the default compiler is a.out or elf
|
||||||
cat >dummy.c <<EOF
|
cat >$dummy.c <<EOF
|
||||||
#include <features.h>
|
#include <features.h>
|
||||||
main(argc, argv)
|
#ifdef __cplusplus
|
||||||
int argc;
|
int main (int argc, char *argv[]) {
|
||||||
char *argv[];
|
#else
|
||||||
{
|
int main (argc, argv) int argc; char *argv[]; {
|
||||||
|
#endif
|
||||||
#ifdef __ELF__
|
#ifdef __ELF__
|
||||||
# ifdef __GLIBC__
|
# ifdef __GLIBC__
|
||||||
# if __GLIBC__ >= 2
|
# if __GLIBC__ >= 2
|
||||||
@ -744,8 +890,8 @@ main(argc, argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
|
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
|
||||||
rm -f dummy.c dummy
|
rm -f $dummy.c $dummy
|
||||||
fi ;;
|
fi ;;
|
||||||
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
|
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
|
||||||
# are messed up and put the nodename in both sysname and nodename.
|
# are messed up and put the nodename in both sysname and nodename.
|
||||||
@ -754,9 +900,9 @@ EOF
|
|||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
# added by chet for bash based on usenet posting from <hops@sco.com> and
|
# added by chet for bash based on usenet posting from <hops@sco.com> and
|
||||||
# documentation on SCO's web site -- UnixWare 7 (SVR5)
|
# documentation on SCO's web site -- UnixWare 7 (SVR5)
|
||||||
i?86:UnixWare:5*:*)
|
# i?86:UnixWare:5*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-sysv5uw${UNAME_VERSION}
|
# echo ${UNAME_MACHINE}-pc-sysv5uw${UNAME_VERSION}
|
||||||
exit 0 ;;
|
# exit 0 ;;
|
||||||
i?86:UNIX_SV:4.2MP:2.*)
|
i?86:UNIX_SV:4.2MP:2.*)
|
||||||
# Unixware is an offshoot of SVR4, but it has its own version
|
# Unixware is an offshoot of SVR4, but it has its own version
|
||||||
# number series starting with 2...
|
# number series starting with 2...
|
||||||
@ -772,6 +918,14 @@ EOF
|
|||||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
i?86:*:5:7*)
|
||||||
|
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
|
||||||
|
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||||
|
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586
|
||||||
|
(/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686
|
||||||
|
(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585
|
||||||
|
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
i?86:*:3.2:*)
|
i?86:*:3.2:*)
|
||||||
if test -f /usr/options/cb.name; then
|
if test -f /usr/options/cb.name; then
|
||||||
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
||||||
@ -781,6 +935,10 @@ EOF
|
|||||||
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||||
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
||||||
&& UNAME_MACHINE=i586
|
&& UNAME_MACHINE=i586
|
||||||
|
(/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
|
||||||
|
&& UNAME_MACHINE=i686
|
||||||
|
(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
|
||||||
|
&& UNAME_MACHINE=i686
|
||||||
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
||||||
else
|
else
|
||||||
echo ${UNAME_MACHINE}-pc-sysv32
|
echo ${UNAME_MACHINE}-pc-sysv32
|
||||||
@ -827,7 +985,7 @@ EOF
|
|||||||
m68*:LynxOS:2.*:*)
|
m68*:LynxOS:2.*:*)
|
||||||
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:LynxOS:2.*:*)
|
i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
|
||||||
echo i386-pc-lynxos${UNAME_RELEASE}
|
echo i386-pc-lynxos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
TSUNAMI:LynxOS:2.*:*)
|
TSUNAMI:LynxOS:2.*:*)
|
||||||
@ -872,23 +1030,40 @@ EOF
|
|||||||
news*:NEWS-OS:*:6*)
|
news*:NEWS-OS:*:6*)
|
||||||
echo mips-sony-newsos6
|
echo mips-sony-newsos6
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*)
|
R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
|
||||||
if [ -d /usr/nec ]; then
|
if [ -d /usr/nec ]; then
|
||||||
echo mips-nec-sysv${UNAME_RELEASE}
|
echo mips-nec-sysv${UNAME_RELEASE}
|
||||||
else
|
else
|
||||||
echo mips-unknown-sysv${UNAME_RELEASE}
|
echo mips-unknown-sysv${UNAME_RELEASE}
|
||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
|
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
|
||||||
# says <Richard.M.Bartel@ccMail.Census.GOV>
|
echo powerpc-apple-beos
|
||||||
echo i586-unisys-sysv4
|
exit 0 ;;
|
||||||
|
BeMac:BeOS:*:*)
|
||||||
|
echo powerpc-apple-beos
|
||||||
|
exit 0 ;;
|
||||||
|
BePC:BeOS:*:*)
|
||||||
|
echo i586-pc-beos
|
||||||
|
exit 0 ;;
|
||||||
|
SX-4:SUPER-UX:*:*)
|
||||||
|
echo sx4-nec-superux${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
SX-5:SUPER-UX:*:*)
|
||||||
|
echo sx5-nec-superux${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
Power*:Rhapsody:*:*)
|
||||||
|
echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
*:Rhapsody:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||||
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
||||||
|
|
||||||
cat >dummy.c <<EOF
|
cat >$dummy.c <<EOF
|
||||||
#ifdef _SEQUENT_
|
#ifdef _SEQUENT_
|
||||||
# include <sys/types.h>
|
# include <sys/types.h>
|
||||||
# include <sys/utsname.h>
|
# include <sys/utsname.h>
|
||||||
@ -930,7 +1105,10 @@ main ()
|
|||||||
#endif
|
#endif
|
||||||
int version;
|
int version;
|
||||||
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
|
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
|
||||||
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
|
if (version < 4)
|
||||||
|
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
|
||||||
|
else
|
||||||
|
printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
|
||||||
exit (0);
|
exit (0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1097,8 +1275,8 @@ main ()
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
|
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
|
||||||
rm -f dummy.c dummy
|
rm -f $dummy.c $dummy
|
||||||
|
|
||||||
# Apollos put the system type in the environment.
|
# Apollos put the system type in the environment.
|
||||||
|
|
||||||
|
397
contrib/libreadline/support/config.sub
vendored
397
contrib/libreadline/support/config.sub
vendored
@ -98,6 +98,16 @@ case $os in
|
|||||||
os=
|
os=
|
||||||
basic_machine=$1
|
basic_machine=$1
|
||||||
;;
|
;;
|
||||||
|
-sim | -cisco | -oki | -wec | -winbond)
|
||||||
|
os=
|
||||||
|
basic_machine=$1
|
||||||
|
;;
|
||||||
|
-scout)
|
||||||
|
;;
|
||||||
|
-wrs)
|
||||||
|
os=vxworks
|
||||||
|
basic_machine=$1
|
||||||
|
;;
|
||||||
-hiux*)
|
-hiux*)
|
||||||
os=-hiuxwe2
|
os=-hiuxwe2
|
||||||
;;
|
;;
|
||||||
@ -121,6 +131,9 @@ case $os in
|
|||||||
os=-sco3.2v2
|
os=-sco3.2v2
|
||||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
;;
|
;;
|
||||||
|
-udk*)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
-isc)
|
-isc)
|
||||||
os=-isc2.2
|
os=-isc2.2
|
||||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
@ -149,19 +162,27 @@ esac
|
|||||||
case $basic_machine in
|
case $basic_machine in
|
||||||
# Recognize the basic CPU types without company name.
|
# Recognize the basic CPU types without company name.
|
||||||
# Some are omitted here because they have special meanings below.
|
# Some are omitted here because they have special meanings below.
|
||||||
tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \
|
tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
|
||||||
| arme[lb] | pyramid \
|
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
|
||||||
| tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
|
| 580 | i960 | h8300 \
|
||||||
| hppa2.0 | alpha | we32k | ns16k | clipper | i370 | sh \
|
| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
|
||||||
| powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \
|
| alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \
|
||||||
| pdp11 | mips64el | mips64orion | mips64orionel \
|
| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
|
||||||
| sparc | sparclet | sparclite | sparc64)
|
| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
|
||||||
|
| mips64orion | mips64orionel | mipstx39 | mipstx39el \
|
||||||
|
| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
|
||||||
|
| mips64vr5000 | miprs64vr5000el | mcore \
|
||||||
|
| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
|
||||||
|
| thumb | d10v)
|
||||||
basic_machine=$basic_machine-unknown
|
basic_machine=$basic_machine-unknown
|
||||||
;;
|
;;
|
||||||
|
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65)
|
||||||
|
;;
|
||||||
|
|
||||||
# We use `pc' rather than `unknown'
|
# We use `pc' rather than `unknown'
|
||||||
# because (1) that's what they normally are, and
|
# because (1) that's what they normally are, and
|
||||||
# (2) the word "unknown" tends to confuse beginning users.
|
# (2) the word "unknown" tends to confuse beginning users.
|
||||||
i[3456]86)
|
i[34567]86)
|
||||||
basic_machine=$basic_machine-pc
|
basic_machine=$basic_machine-pc
|
||||||
;;
|
;;
|
||||||
# Object if more than one company name word.
|
# Object if more than one company name word.
|
||||||
@ -170,30 +191,53 @@ case $basic_machine in
|
|||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
# Recognize the basic CPU types with company name.
|
# Recognize the basic CPU types with company name.
|
||||||
vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
|
# FIXME: clean up the formatting here.
|
||||||
| sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
|
vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
|
||||||
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
|
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
|
||||||
| none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
|
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
|
||||||
| hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \
|
| power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
|
||||||
| alpha-* | alphaev5-* | alphaev56-* | alphapca56-* | alphaev6-* \
|
| xmp-* | ymp-* \
|
||||||
| we32k-* | cydra-* | ns16k-* \
|
| hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
|
||||||
| pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
|
| alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \
|
||||||
| pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
|
| we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
|
||||||
| mips64el-* | mips64orion-* | mips64orionel-* | f301-* \
|
| clipper-* | orion-* \
|
||||||
| butterfly-bbn* \
|
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
|
||||||
| cadmus-* | ews*-nec | ibmrt-ibm* | masscomp-masscomp \
|
| sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
|
||||||
|
| mips64el-* | mips64orion-* | mips64orionel-* \
|
||||||
|
| mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
|
||||||
|
| mipstx39-* | mipstx39el-* | mcore-* \
|
||||||
|
| f301-* | armv*-* | t3e-* \
|
||||||
|
| m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
|
||||||
|
| thumb-* | v850-* | d30v-* | tic30-* | c30-* )
|
||||||
|
;;
|
||||||
|
# BEGIN cases added for Bash
|
||||||
|
butterfly-bbn* | cadmus-* | ews*-nec | ibmrt-ibm* | masscomp-masscomp \
|
||||||
| tandem-* | symmetric-* | drs6000-icl | *-*ardent | gould-gould \
|
| tandem-* | symmetric-* | drs6000-icl | *-*ardent | gould-gould \
|
||||||
| concurrent-* | ksr1-* | esa-ibm | fxc-alliant | *370-amdahl \
|
| concurrent-* | ksr1-* | esa-ibm | fxc-alliant | *370-amdahl \
|
||||||
| *-convex | sx4*-nec)
|
| *-convex | sx[45]*-nec )
|
||||||
;;
|
;;
|
||||||
|
# END cases added for Bash
|
||||||
|
|
||||||
# Recognize the various machine names and aliases which stand
|
# Recognize the various machine names and aliases which stand
|
||||||
# for a CPU type and a company and sometimes even an OS.
|
# for a CPU type and a company and sometimes even an OS.
|
||||||
|
386bsd)
|
||||||
|
basic_machine=i386-unknown
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
|
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
|
||||||
basic_machine=m68000-att
|
basic_machine=m68000-att
|
||||||
;;
|
;;
|
||||||
3b*)
|
3b*)
|
||||||
basic_machine=we32k-att
|
basic_machine=we32k-att
|
||||||
;;
|
;;
|
||||||
|
a29khif)
|
||||||
|
basic_machine=a29k-amd
|
||||||
|
os=-udi
|
||||||
|
;;
|
||||||
|
adobe68k)
|
||||||
|
basic_machine=m68010-adobe
|
||||||
|
os=-scout
|
||||||
|
;;
|
||||||
alliant | fx80)
|
alliant | fx80)
|
||||||
basic_machine=fx80-alliant
|
basic_machine=fx80-alliant
|
||||||
;;
|
;;
|
||||||
@ -212,13 +256,9 @@ case $basic_machine in
|
|||||||
# basic_machine=m68k-cbm
|
# basic_machine=m68k-cbm
|
||||||
basic_machine=m68k-unknown
|
basic_machine=m68k-unknown
|
||||||
;;
|
;;
|
||||||
amigaos)
|
amigaos | amigados)
|
||||||
basic_machine=m68k-unknown
|
|
||||||
os=-amigaos
|
|
||||||
;;
|
|
||||||
amigados)
|
|
||||||
basic_machine=m68k-cbm
|
basic_machine=m68k-cbm
|
||||||
os=-amigados
|
os=-amigaos
|
||||||
;;
|
;;
|
||||||
amigaunix | amix)
|
amigaunix | amix)
|
||||||
basic_machine=m68k-cbm
|
basic_machine=m68k-cbm
|
||||||
@ -228,6 +268,10 @@ case $basic_machine in
|
|||||||
basic_machine=m68k-apollo
|
basic_machine=m68k-apollo
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
|
apollo68bsd)
|
||||||
|
basic_machine=m68k-apollo
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
aux)
|
aux)
|
||||||
basic_machine=m68k-apple
|
basic_machine=m68k-apple
|
||||||
os=-aux
|
os=-aux
|
||||||
@ -307,6 +351,10 @@ case $basic_machine in
|
|||||||
encore | umax | mmax | multimax)
|
encore | umax | mmax | multimax)
|
||||||
basic_machine=ns32k-encore
|
basic_machine=ns32k-encore
|
||||||
;;
|
;;
|
||||||
|
es1800 | OSE68k | ose68k | ose | OSE)
|
||||||
|
basic_machine=m68k-ericsson
|
||||||
|
os=-ose
|
||||||
|
;;
|
||||||
fx2800)
|
fx2800)
|
||||||
basic_machine=i860-alliant
|
basic_machine=i860-alliant
|
||||||
;;
|
;;
|
||||||
@ -325,6 +373,14 @@ case $basic_machine in
|
|||||||
basic_machine=h8300-hitachi
|
basic_machine=h8300-hitachi
|
||||||
os=-hms
|
os=-hms
|
||||||
;;
|
;;
|
||||||
|
h8300xray)
|
||||||
|
basic_machine=h8300-hitachi
|
||||||
|
os=-xray
|
||||||
|
;;
|
||||||
|
h8500hms)
|
||||||
|
basic_machine=h8500-hitachi
|
||||||
|
os=-hms
|
||||||
|
;;
|
||||||
harris)
|
harris)
|
||||||
basic_machine=m88k-harris
|
basic_machine=m88k-harris
|
||||||
os=-sysv3
|
os=-sysv3
|
||||||
@ -340,13 +396,30 @@ case $basic_machine in
|
|||||||
basic_machine=m68k-hp
|
basic_machine=m68k-hp
|
||||||
os=-hpux
|
os=-hpux
|
||||||
;;
|
;;
|
||||||
|
hp3k9[0-9][0-9] | hp9[0-9][0-9])
|
||||||
|
basic_machine=hppa1.0-hp
|
||||||
|
;;
|
||||||
hp9k2[0-9][0-9] | hp9k31[0-9])
|
hp9k2[0-9][0-9] | hp9k31[0-9])
|
||||||
basic_machine=m68000-hp
|
basic_machine=m68000-hp
|
||||||
;;
|
;;
|
||||||
hp9k3[2-9][0-9])
|
hp9k3[2-9][0-9])
|
||||||
basic_machine=m68k-hp
|
basic_machine=m68k-hp
|
||||||
;;
|
;;
|
||||||
hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
|
hp9k6[0-9][0-9] | hp6[0-9][0-9])
|
||||||
|
basic_machine=hppa1.0-hp
|
||||||
|
;;
|
||||||
|
hp9k7[0-79][0-9] | hp7[0-79][0-9])
|
||||||
|
basic_machine=hppa1.1-hp
|
||||||
|
;;
|
||||||
|
hp9k78[0-9] | hp78[0-9])
|
||||||
|
# FIXME: really hppa2.0-hp
|
||||||
|
basic_machine=hppa1.1-hp
|
||||||
|
;;
|
||||||
|
hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
|
||||||
|
# FIXME: really hppa2.0-hp
|
||||||
|
basic_machine=hppa1.1-hp
|
||||||
|
;;
|
||||||
|
hp9k8[0-9][13679] | hp8[0-9][13679])
|
||||||
basic_machine=hppa1.1-hp
|
basic_machine=hppa1.1-hp
|
||||||
;;
|
;;
|
||||||
hp9k8[0-9][0-9] | hp8[0-9][0-9])
|
hp9k8[0-9][0-9] | hp8[0-9][0-9])
|
||||||
@ -355,6 +428,14 @@ case $basic_machine in
|
|||||||
hppa-next)
|
hppa-next)
|
||||||
os=-nextstep3
|
os=-nextstep3
|
||||||
;;
|
;;
|
||||||
|
hppaosf)
|
||||||
|
basic_machine=hppa1.1-hp
|
||||||
|
os=-osf
|
||||||
|
;;
|
||||||
|
hppro)
|
||||||
|
basic_machine=hppa1.1-hp
|
||||||
|
os=-proelf
|
||||||
|
;;
|
||||||
ibm032-*)
|
ibm032-*)
|
||||||
basic_machine=ibmrt-ibm
|
basic_machine=ibmrt-ibm
|
||||||
;;
|
;;
|
||||||
@ -363,22 +444,38 @@ case $basic_machine in
|
|||||||
os=-mvs
|
os=-mvs
|
||||||
;;
|
;;
|
||||||
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
||||||
i[3456]86v32)
|
i[34567]86v32)
|
||||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
os=-sysv32
|
os=-sysv32
|
||||||
;;
|
;;
|
||||||
i[3456]86v4*)
|
i[34567]86v4*)
|
||||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
os=-sysv4
|
os=-sysv4
|
||||||
;;
|
;;
|
||||||
i[3456]86v)
|
i[34567]86v)
|
||||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
i[3456]86sol2)
|
i[34567]86sol2)
|
||||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
os=-solaris2
|
os=-solaris2
|
||||||
;;
|
;;
|
||||||
|
i386mach)
|
||||||
|
basic_machine=i386-mach
|
||||||
|
os=-mach
|
||||||
|
;;
|
||||||
|
i386-vsta | vsta)
|
||||||
|
basic_machine=i386-unknown
|
||||||
|
os=-vsta
|
||||||
|
;;
|
||||||
|
i386-go32 | go32)
|
||||||
|
basic_machine=i386-unknown
|
||||||
|
os=-go32
|
||||||
|
;;
|
||||||
|
i386-mingw32 | mingw32)
|
||||||
|
basic_machine=i386-unknown
|
||||||
|
os=-mingw32
|
||||||
|
;;
|
||||||
iris | iris4d)
|
iris | iris4d)
|
||||||
basic_machine=mips-sgi
|
basic_machine=mips-sgi
|
||||||
case $os in
|
case $os in
|
||||||
@ -410,13 +507,17 @@ case $basic_machine in
|
|||||||
miniframe)
|
miniframe)
|
||||||
basic_machine=m68000-convergent
|
basic_machine=m68000-convergent
|
||||||
;;
|
;;
|
||||||
|
*mint | *MiNT)
|
||||||
|
basic_machine=m68k-atari
|
||||||
|
os=-mint
|
||||||
|
;;
|
||||||
mipsel*-linux*)
|
mipsel*-linux*)
|
||||||
basic_machine=mipsel-unknown
|
basic_machine=mipsel-unknown
|
||||||
os=-linux
|
os=-linux-gnu
|
||||||
;;
|
;;
|
||||||
mips*-linux*)
|
mips*-linux*)
|
||||||
basic_machine=mips-unknown
|
basic_machine=mips-unknown
|
||||||
os=-linux
|
os=-linux-gnu
|
||||||
;;
|
;;
|
||||||
mips3*-*)
|
mips3*-*)
|
||||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
||||||
@ -424,10 +525,26 @@ case $basic_machine in
|
|||||||
mips3*)
|
mips3*)
|
||||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
||||||
;;
|
;;
|
||||||
|
monitor)
|
||||||
|
basic_machine=m68k-rom68k
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
|
msdos)
|
||||||
|
basic_machine=i386-unknown
|
||||||
|
os=-msdos
|
||||||
|
;;
|
||||||
ncr3000)
|
ncr3000)
|
||||||
basic_machine=i486-ncr
|
basic_machine=i486-ncr
|
||||||
os=-sysv4
|
os=-sysv4
|
||||||
;;
|
;;
|
||||||
|
netbsd386)
|
||||||
|
basic_machine=i386-unknown
|
||||||
|
os=-netbsd
|
||||||
|
;;
|
||||||
|
netwinder)
|
||||||
|
basic_machine=armv4l-corel
|
||||||
|
os=-linux
|
||||||
|
;;
|
||||||
news | news700 | news800 | news900)
|
news | news700 | news800 | news900)
|
||||||
basic_machine=m68k-sony
|
basic_machine=m68k-sony
|
||||||
os=-newsos
|
os=-newsos
|
||||||
@ -440,6 +557,10 @@ case $basic_machine in
|
|||||||
basic_machine=mips-sony
|
basic_machine=mips-sony
|
||||||
os=-newsos
|
os=-newsos
|
||||||
;;
|
;;
|
||||||
|
necv70)
|
||||||
|
basic_machine=v70-nec
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
next | m*-next )
|
next | m*-next )
|
||||||
basic_machine=m68k-next
|
basic_machine=m68k-next
|
||||||
case $os in
|
case $os in
|
||||||
@ -465,6 +586,10 @@ case $basic_machine in
|
|||||||
basic_machine=i960-intel
|
basic_machine=i960-intel
|
||||||
os=-nindy
|
os=-nindy
|
||||||
;;
|
;;
|
||||||
|
mon960)
|
||||||
|
basic_machine=i960-intel
|
||||||
|
os=-mon960
|
||||||
|
;;
|
||||||
np1)
|
np1)
|
||||||
basic_machine=np1-gould
|
basic_machine=np1-gould
|
||||||
;;
|
;;
|
||||||
@ -476,6 +601,18 @@ case $basic_machine in
|
|||||||
basic_machine=i386-pc
|
basic_machine=i386-pc
|
||||||
os=-sco3.2v4
|
os=-sco3.2v4
|
||||||
;;
|
;;
|
||||||
|
op50n-* | op60c-*)
|
||||||
|
basic_machine=hppa1.1-oki
|
||||||
|
os=-proelf
|
||||||
|
;;
|
||||||
|
OSE68000 | ose68000)
|
||||||
|
basic_machine=m68000-ericsson
|
||||||
|
os=-ose
|
||||||
|
;;
|
||||||
|
os68k)
|
||||||
|
basic_machine=m68k-none
|
||||||
|
os=-os68k
|
||||||
|
;;
|
||||||
pa-hitachi)
|
pa-hitachi)
|
||||||
basic_machine=hppa1.1-hitachi
|
basic_machine=hppa1.1-hitachi
|
||||||
os=-hiuxwe2
|
os=-hiuxwe2
|
||||||
@ -490,28 +627,26 @@ case $basic_machine in
|
|||||||
pbb)
|
pbb)
|
||||||
basic_machine=m68k-tti
|
basic_machine=m68k-tti
|
||||||
;;
|
;;
|
||||||
pc532 | pc532-*)
|
pc532 | pc532-*)
|
||||||
basic_machine=ns32k-pc532
|
basic_machine=ns32k-pc532
|
||||||
;;
|
;;
|
||||||
pentium | p5)
|
pentium | p5 | k5 | k6 | nexen)
|
||||||
basic_machine=i586-intel
|
basic_machine=i586-intel
|
||||||
;;
|
;;
|
||||||
pentiumpro | p6)
|
pentiumpro | p6 | 6x86)
|
||||||
basic_machine=i686-intel
|
basic_machine=i686-pc
|
||||||
|
;;
|
||||||
|
pentiumii | pentium2)
|
||||||
|
basic_machine=i786-pc
|
||||||
;;
|
;;
|
||||||
pentium-* | p5-*)
|
pentium-* | p5-* | k5-* | k6-* | nexen-*)
|
||||||
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
pentiumpro-* | p6-*)
|
pentiumpro-* | p6-* | 6x86*)
|
||||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
k5)
|
pentiumii-* | pentium2-*)
|
||||||
# We don't have specific support for AMD's K5 yet, so just call it a Pentium
|
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
basic_machine=i586-amd
|
|
||||||
;;
|
|
||||||
nexen)
|
|
||||||
# We don't have specific support for Nexgen yet, so just call it a Pentium
|
|
||||||
basic_machine=i586-nexgen
|
|
||||||
;;
|
;;
|
||||||
pn)
|
pn)
|
||||||
basic_machine=pn-gould
|
basic_machine=pn-gould
|
||||||
@ -519,24 +654,32 @@ case $basic_machine in
|
|||||||
power) basic_machine=rs6000-ibm
|
power) basic_machine=rs6000-ibm
|
||||||
;;
|
;;
|
||||||
ppc) basic_machine=powerpc-unknown
|
ppc) basic_machine=powerpc-unknown
|
||||||
;;
|
;;
|
||||||
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
ppcle | powerpclittle | ppc-le | powerpc-little)
|
ppcle | powerpclittle | ppc-le | powerpc-little)
|
||||||
basic_machine=powerpcle-unknown
|
basic_machine=powerpcle-unknown
|
||||||
;;
|
;;
|
||||||
ppcle-* | powerpclittle-*)
|
ppcle-* | powerpclittle-*)
|
||||||
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
ps2)
|
ps2)
|
||||||
basic_machine=i386-ibm
|
basic_machine=i386-ibm
|
||||||
;;
|
;;
|
||||||
|
rom68k)
|
||||||
|
basic_machine=m68k-rom68k
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
rm[46]00)
|
rm[46]00)
|
||||||
basic_machine=mips-siemens
|
basic_machine=mips-siemens
|
||||||
;;
|
;;
|
||||||
rtpc | rtpc-*)
|
rtpc | rtpc-*)
|
||||||
basic_machine=romp-ibm
|
basic_machine=romp-ibm
|
||||||
;;
|
;;
|
||||||
|
sa29200)
|
||||||
|
basic_machine=a29k-amd
|
||||||
|
os=-udi
|
||||||
|
;;
|
||||||
sequent)
|
sequent)
|
||||||
basic_machine=i386-sequent
|
basic_machine=i386-sequent
|
||||||
;;
|
;;
|
||||||
@ -544,6 +687,10 @@ case $basic_machine in
|
|||||||
basic_machine=sh-hitachi
|
basic_machine=sh-hitachi
|
||||||
os=-hms
|
os=-hms
|
||||||
;;
|
;;
|
||||||
|
sparclite-wrs)
|
||||||
|
basic_machine=sparclite-wrs
|
||||||
|
os=-vxworks
|
||||||
|
;;
|
||||||
sps7)
|
sps7)
|
||||||
basic_machine=m68k-bull
|
basic_machine=m68k-bull
|
||||||
os=-sysv2
|
os=-sysv2
|
||||||
@ -551,6 +698,13 @@ case $basic_machine in
|
|||||||
spur)
|
spur)
|
||||||
basic_machine=spur-unknown
|
basic_machine=spur-unknown
|
||||||
;;
|
;;
|
||||||
|
st2000)
|
||||||
|
basic_machine=m68k-tandem
|
||||||
|
;;
|
||||||
|
stratus)
|
||||||
|
basic_machine=i860-stratus
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
sun2)
|
sun2)
|
||||||
basic_machine=m68000-sun
|
basic_machine=m68000-sun
|
||||||
;;
|
;;
|
||||||
@ -595,6 +749,16 @@ case $basic_machine in
|
|||||||
basic_machine=i386-sequent
|
basic_machine=i386-sequent
|
||||||
os=-dynix
|
os=-dynix
|
||||||
;;
|
;;
|
||||||
|
t3e)
|
||||||
|
basic_machine=t3e-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
|
tx39)
|
||||||
|
basic_machine=mipstx39-unknown
|
||||||
|
;;
|
||||||
|
tx39el)
|
||||||
|
basic_machine=mipstx39el-unknown
|
||||||
|
;;
|
||||||
tower | tower-32)
|
tower | tower-32)
|
||||||
basic_machine=m68k-ncr
|
basic_machine=m68k-ncr
|
||||||
;;
|
;;
|
||||||
@ -614,6 +778,10 @@ case $basic_machine in
|
|||||||
basic_machine=i386-pc
|
basic_machine=i386-pc
|
||||||
os=-sysv5uw7
|
os=-sysv5uw7
|
||||||
;;
|
;;
|
||||||
|
v810 | necv810)
|
||||||
|
basic_machine=v810-nec
|
||||||
|
os=-none
|
||||||
|
;;
|
||||||
vaxv)
|
vaxv)
|
||||||
basic_machine=vax-dec
|
basic_machine=vax-dec
|
||||||
os=-sysv
|
os=-sysv
|
||||||
@ -637,13 +805,25 @@ case $basic_machine in
|
|||||||
basic_machine=a29k-wrs
|
basic_machine=a29k-wrs
|
||||||
os=-vxworks
|
os=-vxworks
|
||||||
;;
|
;;
|
||||||
|
w65*)
|
||||||
|
basic_machine=w65-wdc
|
||||||
|
os=-none
|
||||||
|
;;
|
||||||
|
w89k-*)
|
||||||
|
basic_machine=hppa1.1-winbond
|
||||||
|
os=-proelf
|
||||||
|
;;
|
||||||
xmp)
|
xmp)
|
||||||
basic_machine=xmp-cray
|
basic_machine=xmp-cray
|
||||||
os=-unicos
|
os=-unicos
|
||||||
;;
|
;;
|
||||||
xps | xps100)
|
xps | xps100)
|
||||||
basic_machine=xps100-honeywell
|
basic_machine=xps100-honeywell
|
||||||
;;
|
;;
|
||||||
|
z8k-*-coff)
|
||||||
|
basic_machine=z8k-unknown
|
||||||
|
os=-sim
|
||||||
|
;;
|
||||||
none)
|
none)
|
||||||
basic_machine=none-none
|
basic_machine=none-none
|
||||||
os=-none
|
os=-none
|
||||||
@ -651,8 +831,17 @@ case $basic_machine in
|
|||||||
|
|
||||||
# Here we handle the default manufacturer of certain CPU types. It is in
|
# Here we handle the default manufacturer of certain CPU types. It is in
|
||||||
# some cases the only manufacturer, in others, it is the most popular.
|
# some cases the only manufacturer, in others, it is the most popular.
|
||||||
|
w89k)
|
||||||
|
basic_machine=hppa1.1-winbond
|
||||||
|
;;
|
||||||
|
op50n)
|
||||||
|
basic_machine=hppa1.1-oki
|
||||||
|
;;
|
||||||
|
op60c)
|
||||||
|
basic_machine=hppa1.1-oki
|
||||||
|
;;
|
||||||
mips)
|
mips)
|
||||||
if test "x$os" = "x-linux" ; then
|
if test "x$os" = "x-linux-gnu" ; then
|
||||||
basic_machine=mips-unknown
|
basic_machine=mips-unknown
|
||||||
else
|
else
|
||||||
basic_machine=mips-mips
|
basic_machine=mips-mips
|
||||||
@ -673,10 +862,10 @@ case $basic_machine in
|
|||||||
we32k)
|
we32k)
|
||||||
basic_machine=we32k-att
|
basic_machine=we32k-att
|
||||||
;;
|
;;
|
||||||
sparc)
|
sparc | sparcv9)
|
||||||
basic_machine=sparc-sun
|
basic_machine=sparc-sun
|
||||||
;;
|
;;
|
||||||
cydra)
|
cydra)
|
||||||
basic_machine=cydra-cydrome
|
basic_machine=cydra-cydrome
|
||||||
;;
|
;;
|
||||||
orion)
|
orion)
|
||||||
@ -685,6 +874,16 @@ case $basic_machine in
|
|||||||
orion105)
|
orion105)
|
||||||
basic_machine=clipper-highlevel
|
basic_machine=clipper-highlevel
|
||||||
;;
|
;;
|
||||||
|
mac | mpw | mac-mpw)
|
||||||
|
basic_machine=m68k-apple
|
||||||
|
;;
|
||||||
|
pmac | pmac-mpw)
|
||||||
|
basic_machine=powerpc-apple
|
||||||
|
;;
|
||||||
|
c4x*)
|
||||||
|
basic_machine=c4x-none
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
@ -717,7 +916,7 @@ case $os in
|
|||||||
-solaris)
|
-solaris)
|
||||||
os=-solaris2
|
os=-solaris2
|
||||||
;;
|
;;
|
||||||
svr4*)
|
-svr4*)
|
||||||
os=-sysv4
|
os=-sysv4
|
||||||
;;
|
;;
|
||||||
-unixware | -uw | -unixware2* | -uw2*)
|
-unixware | -uw | -unixware2* | -uw2*)
|
||||||
@ -726,6 +925,9 @@ case $os in
|
|||||||
-unixware7* | -uw7*)
|
-unixware7* | -uw7*)
|
||||||
os=-sysv5uw7
|
os=-sysv5uw7
|
||||||
;;
|
;;
|
||||||
|
-unixware*)
|
||||||
|
os=-sysv4.2uw
|
||||||
|
;;
|
||||||
-gnu/linux*)
|
-gnu/linux*)
|
||||||
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
|
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
|
||||||
;;
|
;;
|
||||||
@ -736,18 +938,31 @@ case $os in
|
|||||||
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
||||||
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
|
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
|
||||||
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
|
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
|
||||||
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
|
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
||||||
|
| -aos* \
|
||||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||||
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
|
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
|
||||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
|
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||||
| -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
| -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
| -linux-gnu* | -uxpv* | -qnx* | -powerux* | -beos* | -rhapsody* \
|
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
| -superux* )
|
| -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*)
|
||||||
# Remember, each alternative MUST END IN *, to match a version number.
|
# Remember, each alternative MUST END IN *, to match a version number.
|
||||||
;;
|
;;
|
||||||
|
# BEGIN CASES ADDED FOR Bash
|
||||||
|
-qnx* | -powerux* | -superux* )
|
||||||
|
;;
|
||||||
|
# END CASES ADDED FOR Bash
|
||||||
|
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
||||||
|
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
|
||||||
|
| -macos* | -mpw* | -magic* | -mon960* | -lnews*)
|
||||||
|
;;
|
||||||
|
-mac*)
|
||||||
|
os=`echo $os | sed -e 's|mac|macos|'`
|
||||||
|
;;
|
||||||
|
|
||||||
-linux*)
|
-linux*)
|
||||||
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
||||||
;;
|
;;
|
||||||
@ -772,11 +987,14 @@ case $os in
|
|||||||
-acis*)
|
-acis*)
|
||||||
os=-aos
|
os=-aos
|
||||||
;;
|
;;
|
||||||
|
-386bsd)
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
-ctix* | -uts*)
|
-ctix* | -uts*)
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
-ns2 )
|
-ns2 )
|
||||||
os=-nextstep2
|
os=-nextstep2
|
||||||
;;
|
;;
|
||||||
# Preserve the version number of sinix5.
|
# Preserve the version number of sinix5.
|
||||||
-sinix5.*)
|
-sinix5.*)
|
||||||
@ -806,9 +1024,18 @@ case $os in
|
|||||||
# This must come after -sysvr[45].
|
# This must come after -sysvr[45].
|
||||||
-sysv*)
|
-sysv*)
|
||||||
;;
|
;;
|
||||||
|
-ose*)
|
||||||
|
os=-ose
|
||||||
|
;;
|
||||||
|
-es1800*)
|
||||||
|
os=-ose
|
||||||
|
;;
|
||||||
-xenix)
|
-xenix)
|
||||||
os=-xenix
|
os=-xenix
|
||||||
;;
|
;;
|
||||||
|
-*mint | -*MiNT)
|
||||||
|
os=-mint
|
||||||
|
;;
|
||||||
-none)
|
-none)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@ -837,7 +1064,7 @@ case $basic_machine in
|
|||||||
arm*-semi)
|
arm*-semi)
|
||||||
os=-aout
|
os=-aout
|
||||||
;;
|
;;
|
||||||
pdp11-*)
|
pdp11-*)
|
||||||
os=-none
|
os=-none
|
||||||
;;
|
;;
|
||||||
*-dec | vax-*)
|
*-dec | vax-*)
|
||||||
@ -855,6 +1082,15 @@ case $basic_machine in
|
|||||||
# default.
|
# default.
|
||||||
# os=-sunos4
|
# os=-sunos4
|
||||||
;;
|
;;
|
||||||
|
m68*-cisco)
|
||||||
|
os=-aout
|
||||||
|
;;
|
||||||
|
mips*-cisco)
|
||||||
|
os=-elf
|
||||||
|
;;
|
||||||
|
mips*-*)
|
||||||
|
os=-elf
|
||||||
|
;;
|
||||||
*-tti) # must be before sparc entry or we get the wrong os.
|
*-tti) # must be before sparc entry or we get the wrong os.
|
||||||
os=-sysv3
|
os=-sysv3
|
||||||
;;
|
;;
|
||||||
@ -867,6 +1103,15 @@ case $basic_machine in
|
|||||||
*-ibm)
|
*-ibm)
|
||||||
os=-aix
|
os=-aix
|
||||||
;;
|
;;
|
||||||
|
*-wec)
|
||||||
|
os=-proelf
|
||||||
|
;;
|
||||||
|
*-winbond)
|
||||||
|
os=-proelf
|
||||||
|
;;
|
||||||
|
*-oki)
|
||||||
|
os=-proelf
|
||||||
|
;;
|
||||||
*-hp)
|
*-hp)
|
||||||
os=-hpux
|
os=-hpux
|
||||||
;;
|
;;
|
||||||
@ -909,19 +1154,19 @@ case $basic_machine in
|
|||||||
*-next)
|
*-next)
|
||||||
os=-nextstep3
|
os=-nextstep3
|
||||||
;;
|
;;
|
||||||
*-gould)
|
*-gould)
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
*-highlevel)
|
*-highlevel)
|
||||||
os=-bsd
|
os=-bsd
|
||||||
;;
|
;;
|
||||||
*-encore)
|
*-encore)
|
||||||
os=-bsd
|
os=-bsd
|
||||||
;;
|
;;
|
||||||
*-sgi)
|
*-sgi)
|
||||||
os=-irix
|
os=-irix
|
||||||
;;
|
;;
|
||||||
*-siemens)
|
*-siemens)
|
||||||
os=-sysv4
|
os=-sysv4
|
||||||
;;
|
;;
|
||||||
*-masscomp)
|
*-masscomp)
|
||||||
@ -930,6 +1175,18 @@ case $basic_machine in
|
|||||||
f301-fujitsu)
|
f301-fujitsu)
|
||||||
os=-uxpv
|
os=-uxpv
|
||||||
;;
|
;;
|
||||||
|
*-rom68k)
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
|
*-*bug)
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
|
*-apple)
|
||||||
|
os=-macos
|
||||||
|
;;
|
||||||
|
*-atari*)
|
||||||
|
os=-mint
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
os=-none
|
os=-none
|
||||||
;;
|
;;
|
||||||
@ -954,6 +1211,9 @@ case $basic_machine in
|
|||||||
-aix*)
|
-aix*)
|
||||||
vendor=ibm
|
vendor=ibm
|
||||||
;;
|
;;
|
||||||
|
-beos*)
|
||||||
|
vendor=be
|
||||||
|
;;
|
||||||
-hpux*)
|
-hpux*)
|
||||||
vendor=hp
|
vendor=hp
|
||||||
;;
|
;;
|
||||||
@ -984,6 +1244,15 @@ case $basic_machine in
|
|||||||
-aux*)
|
-aux*)
|
||||||
vendor=apple
|
vendor=apple
|
||||||
;;
|
;;
|
||||||
|
-hms*)
|
||||||
|
vendor=hitachi
|
||||||
|
;;
|
||||||
|
-mpw* | -macos*)
|
||||||
|
vendor=apple
|
||||||
|
;;
|
||||||
|
-*mint | -*MiNT)
|
||||||
|
vendor=atari
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
||||||
;;
|
;;
|
||||||
|
@ -49,7 +49,7 @@ LN="ln -s"
|
|||||||
if [ -z "$uninstall" ]; then
|
if [ -z "$uninstall" ]; then
|
||||||
${echo} $RM ${INSTALLDIR}/${LIBNAME}.${OLDSUFF}
|
${echo} $RM ${INSTALLDIR}/${LIBNAME}.${OLDSUFF}
|
||||||
if [ -f "$INSTALLDIR/$LIBNAME" ]; then
|
if [ -f "$INSTALLDIR/$LIBNAME" ]; then
|
||||||
${echo} $MV $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LIBNAME}${OLDSUFF}
|
${echo} $MV $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LIBNAME}.${OLDSUFF}
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -63,6 +63,14 @@ fi
|
|||||||
|
|
||||||
# post-install/uninstall
|
# post-install/uninstall
|
||||||
|
|
||||||
|
# HP-UX requires that a shared library have execute permission
|
||||||
|
case "$host_os" in
|
||||||
|
hpux*) if [ -z "$uninstall" ]; then
|
||||||
|
chmod 755 ${INSTALLDIR}/${LIBNAME}
|
||||||
|
fi ;;
|
||||||
|
*) ;;
|
||||||
|
esac
|
||||||
|
|
||||||
case "$LIBNAME" in
|
case "$LIBNAME" in
|
||||||
*.*.[0-9].[0-9]) # libname.so.M.N
|
*.*.[0-9].[0-9]) # libname.so.M.N
|
||||||
LINK2=`echo $LIBNAME | sed 's:\(.*\..*\.[0-9]\)\.[0-9]:\1:'` # libname.so.M
|
LINK2=`echo $LIBNAME | sed 's:\(.*\..*\.[0-9]\)\.[0-9]:\1:'` # libname.so.M
|
||||||
@ -71,6 +79,9 @@ case "$LIBNAME" in
|
|||||||
*.*.[0-9]) # libname.so.M
|
*.*.[0-9]) # libname.so.M
|
||||||
LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]:\1:'` # libname.so
|
LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]:\1:'` # libname.so
|
||||||
;;
|
;;
|
||||||
|
*.[0-9]) # libname.M
|
||||||
|
LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]:\1:'` # libname
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -91,7 +102,7 @@ case "$host_os" in
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
solaris2*|aix4.[2-9]*|hpux1*)
|
solaris2*|aix4.[2-9]*|osf*|irix[56]*)
|
||||||
# libname.so -> libname.so.M
|
# libname.so -> libname.so.M
|
||||||
${echo} ${RM} ${INSTALLDIR}/$LINK1
|
${echo} ${RM} ${INSTALLDIR}/$LINK1
|
||||||
if [ -z "$uninstall" ]; then
|
if [ -z "$uninstall" ]; then
|
||||||
@ -99,6 +110,38 @@ solaris2*|aix4.[2-9]*|hpux1*)
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
# FreeBSD 3.x can have either a.out or ELF shared libraries
|
||||||
|
freebsd3*)
|
||||||
|
if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then
|
||||||
|
# libname.so -> libname.so.M
|
||||||
|
${echo} ${RM} ${INSTALLDIR}/$LINK1
|
||||||
|
if [ -z "$uninstall" ]; then
|
||||||
|
${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# libname.so.M -> libname.so.M.N
|
||||||
|
${echo} ${RM} ${INSTALLDIR}/$LINK2
|
||||||
|
if [ -z "$uninstall" ]; then
|
||||||
|
${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# libname.so -> libname.so.M.N
|
||||||
|
${echo} ${RM} ${INSTALLDIR}/$LINK1
|
||||||
|
if [ -z "$uninstall" ]; then
|
||||||
|
${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
hpux1*)
|
||||||
|
# libname.sl -> libname.M
|
||||||
|
${echo} ${RM} ${INSTALLDIR}/$LINK1.sl
|
||||||
|
if [ -z "$uninstall" ]; then
|
||||||
|
${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LINK1}.sl
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
*) ;;
|
*) ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
@ -62,9 +62,9 @@ sunos4*)
|
|||||||
sunos5*-gcc*|solaris2*-gcc*)
|
sunos5*-gcc*|solaris2*-gcc*)
|
||||||
SHOBJ_CFLAGS=-fpic
|
SHOBJ_CFLAGS=-fpic
|
||||||
SHOBJ_LD='${CC}'
|
SHOBJ_LD='${CC}'
|
||||||
SHOBJ_LDFLAGS='-shared -Wl,-i'
|
SHOBJ_LDFLAGS='-shared -Wl,-i -Wl,-h,$@'
|
||||||
|
|
||||||
SHLIB_XLDFLAGS='-R $(libdir)'
|
# SHLIB_XLDFLAGS='-R $(libdir)'
|
||||||
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
|
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ sunos5*|solaris2*)
|
|||||||
SHOBJ_LD=/usr/ccs/bin/ld
|
SHOBJ_LD=/usr/ccs/bin/ld
|
||||||
SHOBJ_LDFLAGS='-G -dy -z text -i -h $@'
|
SHOBJ_LDFLAGS='-G -dy -z text -i -h $@'
|
||||||
|
|
||||||
SHLIB_XLDFLAGS='-R $(libdir)'
|
# SHLIB_XLDFLAGS='-R $(libdir)'
|
||||||
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
|
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@ -86,13 +86,32 @@ freebsd2* | netbsd* | openbsd*)
|
|||||||
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
|
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
# FreeBSD-3.x can have either a.out or ELF object files
|
||||||
|
#freebsd3*)
|
||||||
|
# SHOBJ_CFLAGS=-fpic
|
||||||
|
# SHOBJ_LD='${CC}'
|
||||||
|
# SHOBJ_LDFLAGS='-shared'
|
||||||
|
#
|
||||||
|
# SHLIB_XLDFLAGS='-R$(libdir)'
|
||||||
|
# SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
|
||||||
|
# ;;
|
||||||
|
|
||||||
|
# FreeBSD-3.x ELF
|
||||||
freebsd3*)
|
freebsd3*)
|
||||||
SHOBJ_CFLAGS=-fpic
|
SHOBJ_CFLAGS=-fpic
|
||||||
SHOBJ_LD='${CC}'
|
SHOBJ_LD='${CC}'
|
||||||
SHOBJ_LDFLAGS='-shared'
|
|
||||||
|
|
||||||
SHLIB_XLDFLAGS='-R$(libdir)'
|
if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then
|
||||||
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
|
SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
|
||||||
|
|
||||||
|
SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)'
|
||||||
|
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
|
||||||
|
else
|
||||||
|
SHOBJ_LDFLAGS='-shared'
|
||||||
|
|
||||||
|
SHLIB_XLDFLAGS='-R$(libdir)'
|
||||||
|
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
linux*)
|
linux*)
|
||||||
@ -142,6 +161,15 @@ bsdi4*)
|
|||||||
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
|
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
osf*-gcc*)
|
||||||
|
# Fix to use gcc linker driver from bfischer@TechFak.Uni-Bielefeld.DE
|
||||||
|
SHOBJ_LD='${CC}'
|
||||||
|
SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
|
||||||
|
|
||||||
|
SHLIB_XLDFLAGS='-rpath $(libdir)'
|
||||||
|
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
|
||||||
|
;;
|
||||||
|
|
||||||
osf*)
|
osf*)
|
||||||
SHOBJ_LD=ld
|
SHOBJ_LD=ld
|
||||||
SHOBJ_LDFLAGS='-shared -soname $@ -expect_unresolved "*"'
|
SHOBJ_LDFLAGS='-shared -soname $@ -expect_unresolved "*"'
|
||||||
@ -187,7 +215,9 @@ irix[56]*-gcc*)
|
|||||||
irix[56]*)
|
irix[56]*)
|
||||||
SHOBJ_CFLAGS='-K PIC'
|
SHOBJ_CFLAGS='-K PIC'
|
||||||
SHOBJ_LD=ld
|
SHOBJ_LD=ld
|
||||||
SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@'
|
# SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@'
|
||||||
|
# Change from David Kaelbling <drk@sgi.com>
|
||||||
|
SHOBJ_LDFLAGS='-shared -no_unresolved -soname $@'
|
||||||
|
|
||||||
SHLIB_XLDFLAGS='-rpath $(libdir)'
|
SHLIB_XLDFLAGS='-rpath $(libdir)'
|
||||||
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
|
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
|
||||||
@ -305,6 +335,12 @@ dgux*)
|
|||||||
|
|
||||||
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
|
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
msdos*)
|
||||||
|
SHOBJ_STATUS=unsupported
|
||||||
|
SHLIB_STATUS=unsupported
|
||||||
|
;;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Rely on correct gcc configuration for everything else
|
# Rely on correct gcc configuration for everything else
|
||||||
#
|
#
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -19,7 +19,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#if !defined (_RLTCAP_H_)
|
#if !defined (_RLTCAP_H_)
|
||||||
#define _RLTCAP_H_
|
#define _RLTCAP_H_
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -46,9 +46,7 @@
|
|||||||
# include <locale.h>
|
# include <locale.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <signal.h>
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <setjmp.h>
|
|
||||||
|
|
||||||
/* System-specific feature definitions and include files. */
|
/* System-specific feature definitions and include files. */
|
||||||
#include "rldefs.h"
|
#include "rldefs.h"
|
||||||
@ -64,18 +62,8 @@
|
|||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
/* Variables and functions imported from readline.c */
|
#include "rlprivate.h"
|
||||||
extern FILE *_rl_in_stream, *_rl_out_stream;
|
#include "rlshell.h"
|
||||||
extern int readline_echoing_p;
|
|
||||||
extern int _rl_bell_preference;
|
|
||||||
extern Keymap _rl_keymap;
|
|
||||||
|
|
||||||
/* Functions imported from bind.c */
|
|
||||||
extern void _rl_bind_if_unbound ();
|
|
||||||
|
|
||||||
/* Functions imported from shell.c */
|
|
||||||
extern void set_lines_and_columns ();
|
|
||||||
extern char *get_env_value ();
|
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
@ -149,6 +137,22 @@ int _rl_enable_keypad;
|
|||||||
/* Non-zero means the user wants to enable a meta key. */
|
/* Non-zero means the user wants to enable a meta key. */
|
||||||
int _rl_enable_meta = 1;
|
int _rl_enable_meta = 1;
|
||||||
|
|
||||||
|
#if defined (__EMX__)
|
||||||
|
static void
|
||||||
|
_emx_get_screensize (swp, shp)
|
||||||
|
int *swp, *shp;
|
||||||
|
{
|
||||||
|
int sz[2];
|
||||||
|
|
||||||
|
_scrsize (sz);
|
||||||
|
|
||||||
|
if (swp)
|
||||||
|
*swp = sz[0];
|
||||||
|
if (shp)
|
||||||
|
*shp = sz[1];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Get readline's idea of the screen size. TTY is a file descriptor open
|
/* Get readline's idea of the screen size. TTY is a file descriptor open
|
||||||
to the terminal. If IGNORE_ENV is true, we do not pay attention to the
|
to the terminal. If IGNORE_ENV is true, we do not pay attention to the
|
||||||
values of $LINES and $COLUMNS. The tests for TERM_STRING_BUFFER being
|
values of $LINES and $COLUMNS. The tests for TERM_STRING_BUFFER being
|
||||||
@ -161,9 +165,6 @@ _rl_get_screen_size (tty, ignore_env)
|
|||||||
#if defined (TIOCGWINSZ)
|
#if defined (TIOCGWINSZ)
|
||||||
struct winsize window_size;
|
struct winsize window_size;
|
||||||
#endif /* TIOCGWINSZ */
|
#endif /* TIOCGWINSZ */
|
||||||
#if defined (__EMX__)
|
|
||||||
int sz[2];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (TIOCGWINSZ)
|
#if defined (TIOCGWINSZ)
|
||||||
if (ioctl (tty, TIOCGWINSZ, &window_size) == 0)
|
if (ioctl (tty, TIOCGWINSZ, &window_size) == 0)
|
||||||
@ -174,9 +175,7 @@ _rl_get_screen_size (tty, ignore_env)
|
|||||||
#endif /* TIOCGWINSZ */
|
#endif /* TIOCGWINSZ */
|
||||||
|
|
||||||
#if defined (__EMX__)
|
#if defined (__EMX__)
|
||||||
_scrsize (sz);
|
_emx_get_screensize (&screenwidth, &screenheight);
|
||||||
screenwidth = sz[0];
|
|
||||||
screenheight = sz[1];
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Environment variable COLUMNS overrides setting of "co" if IGNORE_ENV
|
/* Environment variable COLUMNS overrides setting of "co" if IGNORE_ENV
|
||||||
@ -186,8 +185,10 @@ _rl_get_screen_size (tty, ignore_env)
|
|||||||
if (ignore_env == 0 && (ss = get_env_value ("COLUMNS")))
|
if (ignore_env == 0 && (ss = get_env_value ("COLUMNS")))
|
||||||
screenwidth = atoi (ss);
|
screenwidth = atoi (ss);
|
||||||
|
|
||||||
|
#if !defined (__DJGPP__)
|
||||||
if (screenwidth <= 0 && term_string_buffer)
|
if (screenwidth <= 0 && term_string_buffer)
|
||||||
screenwidth = tgetnum ("co");
|
screenwidth = tgetnum ("co");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Environment variable LINES overrides setting of "li" if IGNORE_ENV
|
/* Environment variable LINES overrides setting of "li" if IGNORE_ENV
|
||||||
@ -197,8 +198,10 @@ _rl_get_screen_size (tty, ignore_env)
|
|||||||
if (ignore_env == 0 && (ss = get_env_value ("LINES")))
|
if (ignore_env == 0 && (ss = get_env_value ("LINES")))
|
||||||
screenheight = atoi (ss);
|
screenheight = atoi (ss);
|
||||||
|
|
||||||
|
#if !defined (__DJGPP__)
|
||||||
if (screenheight <= 0 && term_string_buffer)
|
if (screenheight <= 0 && term_string_buffer)
|
||||||
screenheight = tgetnum ("li");
|
screenheight = tgetnum ("li");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If all else fails, default to 80x24 terminal. */
|
/* If all else fails, default to 80x24 terminal. */
|
||||||
@ -213,7 +216,7 @@ _rl_get_screen_size (tty, ignore_env)
|
|||||||
do a pair of putenv () or setenv () calls. */
|
do a pair of putenv () or setenv () calls. */
|
||||||
set_lines_and_columns (screenheight, screenwidth);
|
set_lines_and_columns (screenheight, screenwidth);
|
||||||
|
|
||||||
if (!_rl_term_autowrap)
|
if (_rl_term_autowrap == 0)
|
||||||
screenwidth--;
|
screenwidth--;
|
||||||
|
|
||||||
screenchars = screenwidth * screenheight;
|
screenchars = screenwidth * screenheight;
|
||||||
@ -251,32 +254,32 @@ struct _tc_string {
|
|||||||
search algorithm to something smarter. */
|
search algorithm to something smarter. */
|
||||||
static struct _tc_string tc_strings[] =
|
static struct _tc_string tc_strings[] =
|
||||||
{
|
{
|
||||||
"DC", &term_DC,
|
{ "DC", &term_DC },
|
||||||
"IC", &term_IC,
|
{ "IC", &term_IC },
|
||||||
"ce", &term_clreol,
|
{ "ce", &term_clreol },
|
||||||
"cl", &term_clrpag,
|
{ "cl", &term_clrpag },
|
||||||
"cr", &term_cr,
|
{ "cr", &term_cr },
|
||||||
"dc", &term_dc,
|
{ "dc", &term_dc },
|
||||||
"ei", &term_ei,
|
{ "ei", &term_ei },
|
||||||
"ic", &term_ic,
|
{ "ic", &term_ic },
|
||||||
"im", &term_im,
|
{ "im", &term_im },
|
||||||
"kd", &term_kd,
|
{ "kd", &term_kd },
|
||||||
"kh", &term_kh, /* home */
|
{ "kh", &term_kh }, /* home */
|
||||||
"kH", &term_kH, /* end */
|
{ "kH", &term_kH }, /* end */
|
||||||
"kl", &term_kl,
|
{ "kl", &term_kl },
|
||||||
"kr", &term_kr,
|
{ "kr", &term_kr },
|
||||||
"ku", &term_ku,
|
{ "ku", &term_ku },
|
||||||
"ks", &term_ks,
|
{ "ks", &term_ks },
|
||||||
"ke", &term_ke,
|
{ "ke", &term_ke },
|
||||||
"le", &term_backspace,
|
{ "le", &term_backspace },
|
||||||
"mm", &term_mm,
|
{ "mm", &term_mm },
|
||||||
"mo", &term_mo,
|
{ "mo", &term_mo },
|
||||||
#if defined (HACK_TERMCAP_MOTION)
|
#if defined (HACK_TERMCAP_MOTION)
|
||||||
"nd", &term_forward_char,
|
{ "nd", &term_forward_char },
|
||||||
#endif
|
#endif
|
||||||
"pc", &term_pc,
|
{ "pc", &term_pc },
|
||||||
"up", &term_up,
|
{ "up", &term_up },
|
||||||
"vb", &visible_bell,
|
{ "vb", &visible_bell },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NUM_TC_STRINGS (sizeof (tc_strings) / sizeof (struct _tc_string))
|
#define NUM_TC_STRINGS (sizeof (tc_strings) / sizeof (struct _tc_string))
|
||||||
@ -287,72 +290,96 @@ static void
|
|||||||
get_term_capabilities (bp)
|
get_term_capabilities (bp)
|
||||||
char **bp;
|
char **bp;
|
||||||
{
|
{
|
||||||
|
#if !defined (__DJGPP__) /* XXX - doesn't DJGPP have a termcap library? */
|
||||||
register int i;
|
register int i;
|
||||||
|
|
||||||
for (i = 0; i < NUM_TC_STRINGS; i++)
|
for (i = 0; i < NUM_TC_STRINGS; i++)
|
||||||
*(tc_strings[i].tc_value) = tgetstr (tc_strings[i].tc_var, bp);
|
*(tc_strings[i].tc_value) = tgetstr (tc_strings[i].tc_var, bp);
|
||||||
|
#endif
|
||||||
tcap_initialized = 1;
|
tcap_initialized = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define CUSTOM_REDISPLAY_FUNC() (rl_redisplay_function != rl_redisplay)
|
||||||
|
#define CUSTOM_INPUT_FUNC() (rl_getc_function != rl_getc)
|
||||||
|
|
||||||
int
|
int
|
||||||
_rl_init_terminal_io (terminal_name)
|
_rl_init_terminal_io (terminal_name)
|
||||||
char *terminal_name;
|
char *terminal_name;
|
||||||
{
|
{
|
||||||
#if defined (__GO32__)
|
|
||||||
screenwidth = ScreenCols ();
|
|
||||||
screenheight = ScreenRows ();
|
|
||||||
screenchars = screenwidth * screenheight;
|
|
||||||
term_cr = "\r";
|
|
||||||
term_im = term_ei = term_ic = term_IC = (char *)NULL;
|
|
||||||
term_up = term_dc = term_DC = visible_bell = (char *)NULL;
|
|
||||||
|
|
||||||
/* Does the __GO32__ have a meta key? I don't know. */
|
|
||||||
term_has_meta = 0;
|
|
||||||
term_mm = term_mo = (char *)NULL;
|
|
||||||
|
|
||||||
/* It probably has arrow keys, but I don't know what they are. */
|
|
||||||
term_ku = term_kd = term_kr = term_kl = (char *)NULL;
|
|
||||||
|
|
||||||
#if defined (HACK_TERMCAP_MOTION)
|
|
||||||
term_forward_char = (char *)NULL;
|
|
||||||
#endif /* HACK_TERMCAP_MOTION */
|
|
||||||
terminal_can_insert = _rl_term_autowrap = 0;
|
|
||||||
return;
|
|
||||||
#else /* !__GO32__ */
|
|
||||||
|
|
||||||
char *term, *buffer;
|
char *term, *buffer;
|
||||||
int tty;
|
int tty, tgetent_ret;
|
||||||
Keymap xkeymap;
|
Keymap xkeymap;
|
||||||
|
|
||||||
term = terminal_name ? terminal_name : get_env_value ("TERM");
|
term = terminal_name ? terminal_name : get_env_value ("TERM");
|
||||||
|
|
||||||
if (term_string_buffer == 0)
|
|
||||||
term_string_buffer = xmalloc (2032);
|
|
||||||
|
|
||||||
if (term_buffer == 0)
|
|
||||||
term_buffer = xmalloc (4080);
|
|
||||||
|
|
||||||
buffer = term_string_buffer;
|
|
||||||
|
|
||||||
term_clrpag = term_cr = term_clreol = (char *)NULL;
|
term_clrpag = term_cr = term_clreol = (char *)NULL;
|
||||||
|
tty = rl_instream ? fileno (rl_instream) : 0;
|
||||||
|
screenwidth = screenheight = 0;
|
||||||
|
|
||||||
if (term == 0)
|
if (term == 0)
|
||||||
term = "dumb";
|
term = "dumb";
|
||||||
|
|
||||||
if (tgetent (term_buffer, term) <= 0)
|
/* I've separated this out for later work on not calling tgetent at all
|
||||||
|
if the calling application has supplied a custom redisplay function,
|
||||||
|
(and possibly if the application has supplied a custom input function). */
|
||||||
|
if (CUSTOM_REDISPLAY_FUNC())
|
||||||
{
|
{
|
||||||
|
tgetent_ret = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (term_string_buffer == 0)
|
||||||
|
term_string_buffer = xmalloc(2032);
|
||||||
|
|
||||||
|
if (term_buffer == 0)
|
||||||
|
term_buffer = xmalloc(4080);
|
||||||
|
|
||||||
|
buffer = term_string_buffer;
|
||||||
|
|
||||||
|
tgetent_ret = tgetent (term_buffer, term);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tgetent_ret <= 0)
|
||||||
|
{
|
||||||
|
FREE (term_string_buffer);
|
||||||
|
FREE (term_buffer);
|
||||||
|
buffer = term_buffer = term_string_buffer = (char *)NULL;
|
||||||
|
|
||||||
dumb_term = 1;
|
dumb_term = 1;
|
||||||
screenwidth = 79;
|
_rl_term_autowrap = 0; /* used by _rl_get_screen_size */
|
||||||
screenheight = 24;
|
|
||||||
screenchars = 79 * 24;
|
#if defined (__EMX__)
|
||||||
|
_emx_get_screensize (&screenwidth, &screenheight);
|
||||||
|
screenwidth--;
|
||||||
|
#else /* !__EMX__ */
|
||||||
|
_rl_get_screen_size (tty, 0);
|
||||||
|
#endif /* !__EMX__ */
|
||||||
|
|
||||||
|
/* Defaults. */
|
||||||
|
if (screenwidth <= 0 || screenheight <= 0)
|
||||||
|
{
|
||||||
|
screenwidth = 79;
|
||||||
|
screenheight = 24;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Everything below here is used by the redisplay code (tputs). */
|
||||||
|
screenchars = screenwidth * screenheight;
|
||||||
term_cr = "\r";
|
term_cr = "\r";
|
||||||
term_im = term_ei = term_ic = term_IC = (char *)NULL;
|
term_im = term_ei = term_ic = term_IC = (char *)NULL;
|
||||||
term_up = term_dc = term_DC = visible_bell = (char *)NULL;
|
term_up = term_dc = term_DC = visible_bell = (char *)NULL;
|
||||||
term_ku = term_kd = term_kl = term_kr = (char *)NULL;
|
term_ku = term_kd = term_kl = term_kr = (char *)NULL;
|
||||||
|
term_mm = term_mo = (char *)NULL;
|
||||||
#if defined (HACK_TERMCAP_MOTION)
|
#if defined (HACK_TERMCAP_MOTION)
|
||||||
term_forward_char = (char *)NULL;
|
term_forward_char = (char *)NULL;
|
||||||
#endif
|
#endif
|
||||||
terminal_can_insert = 0;
|
terminal_can_insert = term_has_meta = 0;
|
||||||
|
|
||||||
|
/* Reasonable defaults for tgoto(). Readline currently only uses
|
||||||
|
tgoto if term_IC or term_DC is defined, but just in case we
|
||||||
|
change that later... */
|
||||||
|
PC = '\0';
|
||||||
|
BC = term_backspace = "\b";
|
||||||
|
UP = term_up;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -367,10 +394,6 @@ _rl_init_terminal_io (terminal_name)
|
|||||||
if (!term_cr)
|
if (!term_cr)
|
||||||
term_cr = "\r";
|
term_cr = "\r";
|
||||||
|
|
||||||
tty = rl_instream ? fileno (rl_instream) : 0;
|
|
||||||
|
|
||||||
screenwidth = screenheight = 0;
|
|
||||||
|
|
||||||
_rl_term_autowrap = tgetflag ("am") && tgetflag ("xn");
|
_rl_term_autowrap = tgetflag ("am") && tgetflag ("xn");
|
||||||
|
|
||||||
_rl_get_screen_size (tty, 0);
|
_rl_get_screen_size (tty, 0);
|
||||||
@ -413,7 +436,6 @@ _rl_init_terminal_io (terminal_name)
|
|||||||
|
|
||||||
_rl_keymap = xkeymap;
|
_rl_keymap = xkeymap;
|
||||||
|
|
||||||
#endif /* !__GO32__ */
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -459,6 +481,7 @@ _rl_output_character_function (c)
|
|||||||
return putc (c, _rl_out_stream);
|
return putc (c, _rl_out_stream);
|
||||||
}
|
}
|
||||||
#endif /* !_MINIX */
|
#endif /* !_MINIX */
|
||||||
|
|
||||||
/* Write COUNT characters from STRING to the output stream. */
|
/* Write COUNT characters from STRING to the output stream. */
|
||||||
void
|
void
|
||||||
_rl_output_some_chars (string, count)
|
_rl_output_some_chars (string, count)
|
||||||
@ -475,12 +498,10 @@ _rl_backspace (count)
|
|||||||
{
|
{
|
||||||
register int i;
|
register int i;
|
||||||
|
|
||||||
#if !defined (__GO32__)
|
|
||||||
if (term_backspace)
|
if (term_backspace)
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
tputs (term_backspace, 1, _rl_output_character_function);
|
tputs (term_backspace, 1, _rl_output_character_function);
|
||||||
else
|
else
|
||||||
#endif /* !__GO32__ */
|
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
putc ('\b', _rl_out_stream);
|
putc ('\b', _rl_out_stream);
|
||||||
return 0;
|
return 0;
|
||||||
@ -504,7 +525,6 @@ ding ()
|
|||||||
{
|
{
|
||||||
if (readline_echoing_p)
|
if (readline_echoing_p)
|
||||||
{
|
{
|
||||||
#if !defined (__GO32__)
|
|
||||||
switch (_rl_bell_preference)
|
switch (_rl_bell_preference)
|
||||||
{
|
{
|
||||||
case NO_BELL:
|
case NO_BELL:
|
||||||
@ -522,10 +542,6 @@ ding ()
|
|||||||
fflush (stderr);
|
fflush (stderr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#else /* __GO32__ */
|
|
||||||
fprintf (stderr, "\007");
|
|
||||||
fflush (stderr);
|
|
||||||
#endif /* __GO32__ */
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -540,16 +556,20 @@ ding ()
|
|||||||
void
|
void
|
||||||
_rl_enable_meta_key ()
|
_rl_enable_meta_key ()
|
||||||
{
|
{
|
||||||
|
#if !defined (__DJGPP__)
|
||||||
if (term_has_meta && term_mm)
|
if (term_has_meta && term_mm)
|
||||||
tputs (term_mm, 1, _rl_output_character_function);
|
tputs (term_mm, 1, _rl_output_character_function);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_rl_control_keypad (on)
|
_rl_control_keypad (on)
|
||||||
int on;
|
int on;
|
||||||
{
|
{
|
||||||
|
#if !defined (__DJGPP__)
|
||||||
if (on && term_ks)
|
if (on && term_ks)
|
||||||
tputs (term_ks, 1, _rl_output_character_function);
|
tputs (term_ks, 1, _rl_output_character_function);
|
||||||
else if (!on && term_ke)
|
else if (!on && term_ke)
|
||||||
tputs (term_ke, 1, _rl_output_character_function);
|
tputs (term_ke, 1, _rl_output_character_function);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
Readline is free software; you can redistribute it and/or modify it
|
Readline is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU General Public License as published by the
|
under the terms of the GNU General Public License as published by the
|
||||||
Free Software Foundation; either version 1, or (at your option) any
|
Free Software Foundation; either version 2, or (at your option) any
|
||||||
later version.
|
later version.
|
||||||
|
|
||||||
Readline is distributed in the hope that it will be useful, but
|
Readline is distributed in the hope that it will be useful, but
|
||||||
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with Readline; see the file COPYING. If not, write to the Free
|
along with Readline; see the file COPYING. If not, write to the Free
|
||||||
Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
@ -47,12 +47,22 @@
|
|||||||
|
|
||||||
#include "tilde.h"
|
#include "tilde.h"
|
||||||
|
|
||||||
|
#if defined (TEST) || defined (STATIC_MALLOC)
|
||||||
|
static char *xmalloc (), *xrealloc ();
|
||||||
|
#else
|
||||||
|
# if defined __STDC__
|
||||||
|
extern char *xmalloc (int);
|
||||||
|
extern char *xrealloc (void *, int);
|
||||||
|
# else
|
||||||
|
extern char *xmalloc (), *xrealloc ();
|
||||||
|
# endif /* !__STDC__ */
|
||||||
|
#endif /* TEST || STATIC_MALLOC */
|
||||||
|
|
||||||
#if !defined (HAVE_GETPW_DECLS)
|
#if !defined (HAVE_GETPW_DECLS)
|
||||||
extern struct passwd *getpwuid (), *getpwnam ();
|
extern struct passwd *getpwuid (), *getpwnam ();
|
||||||
#endif /* !HAVE_GETPW_DECLS */
|
#endif /* !HAVE_GETPW_DECLS */
|
||||||
|
|
||||||
#if !defined (savestring)
|
#if !defined (savestring)
|
||||||
extern char *xmalloc ();
|
|
||||||
# ifndef strcpy
|
# ifndef strcpy
|
||||||
extern char *strcpy ();
|
extern char *strcpy ();
|
||||||
# endif
|
# endif
|
||||||
@ -67,17 +77,11 @@ extern char *strcpy ();
|
|||||||
# endif /* !__STDC__ */
|
# endif /* !__STDC__ */
|
||||||
#endif /* !NULL */
|
#endif /* !NULL */
|
||||||
|
|
||||||
#if defined (TEST) || defined (STATIC_MALLOC)
|
|
||||||
static char *xmalloc (), *xrealloc ();
|
|
||||||
#else
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
#endif /* TEST || STATIC_MALLOC */
|
|
||||||
|
|
||||||
/* If being compiled as part of bash, these will be satisfied from
|
/* If being compiled as part of bash, these will be satisfied from
|
||||||
variables.o. If being compiled as part of readline, they will
|
variables.o. If being compiled as part of readline, they will
|
||||||
be satisfied from shell.o. */
|
be satisfied from shell.o. */
|
||||||
extern char *get_home_dir ();
|
extern char *get_home_dir __P((void));
|
||||||
extern char *get_env_value ();
|
extern char *get_env_value __P((char *));
|
||||||
|
|
||||||
/* The default value of tilde_additional_prefixes. This is set to
|
/* The default value of tilde_additional_prefixes. This is set to
|
||||||
whitespace preceding a tilde so that simple programs which do not
|
whitespace preceding a tilde so that simple programs which do not
|
||||||
@ -122,7 +126,9 @@ tilde_find_prefix (string, len)
|
|||||||
int *len;
|
int *len;
|
||||||
{
|
{
|
||||||
register int i, j, string_len;
|
register int i, j, string_len;
|
||||||
register char **prefixes = tilde_additional_prefixes;
|
register char **prefixes;
|
||||||
|
|
||||||
|
prefixes = tilde_additional_prefixes;
|
||||||
|
|
||||||
string_len = strlen (string);
|
string_len = strlen (string);
|
||||||
*len = 0;
|
*len = 0;
|
||||||
@ -161,7 +167,11 @@ tilde_find_suffix (string)
|
|||||||
|
|
||||||
for (i = 0; i < string_len; i++)
|
for (i = 0; i < string_len; i++)
|
||||||
{
|
{
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
if (string[i] == '/' || string[i] == '\\' /* || !string[i] */)
|
||||||
|
#else
|
||||||
if (string[i] == '/' /* || !string[i] */)
|
if (string[i] == '/' /* || !string[i] */)
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
for (j = 0; suffixes && suffixes[j]; j++)
|
for (j = 0; suffixes && suffixes[j]; j++)
|
||||||
@ -225,11 +235,18 @@ tilde_expand (string)
|
|||||||
free (tilde_word);
|
free (tilde_word);
|
||||||
|
|
||||||
len = strlen (expansion);
|
len = strlen (expansion);
|
||||||
if ((result_index + len + 1) > result_size)
|
#ifdef __CYGWIN32__
|
||||||
result = xrealloc (result, 1 + (result_size += (len + 20)));
|
/* Fix for Cygwin to prevent ~user/xxx from expanding to //xxx when
|
||||||
|
$HOME for `user' is /. On cygwin, // denotes a network drive. */
|
||||||
|
if (len > 1 || *expansion != '/' || *string != '/')
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if ((result_index + len + 1) > result_size)
|
||||||
|
result = xrealloc (result, 1 + (result_size += (len + 20)));
|
||||||
|
|
||||||
strcpy (result + result_index, expansion);
|
strcpy (result + result_index, expansion);
|
||||||
result_index += len;
|
result_index += len;
|
||||||
|
}
|
||||||
free (expansion);
|
free (expansion);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,7 +267,11 @@ isolate_tilde_prefix (fname, lenp)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
ret = xmalloc (strlen (fname));
|
ret = xmalloc (strlen (fname));
|
||||||
|
#if defined (__MSDOS__)
|
||||||
|
for (i = 1; fname[i] && fname[i] != '/' && fname[i] != '\\'; i++)
|
||||||
|
#else
|
||||||
for (i = 1; fname[i] && fname[i] != '/'; i++)
|
for (i = 1; fname[i] && fname[i] != '/'; i++)
|
||||||
|
#endif
|
||||||
ret[i - 1] = fname[i];
|
ret[i - 1] = fname[i];
|
||||||
ret[i - 1] = '\0';
|
ret[i - 1] = '\0';
|
||||||
if (lenp)
|
if (lenp)
|
||||||
@ -271,7 +292,7 @@ glue_prefix_and_suffix (prefix, suffix, suffind)
|
|||||||
plen = (prefix && *prefix) ? strlen (prefix) : 0;
|
plen = (prefix && *prefix) ? strlen (prefix) : 0;
|
||||||
slen = strlen (suffix + suffind);
|
slen = strlen (suffix + suffind);
|
||||||
ret = xmalloc (plen + slen + 1);
|
ret = xmalloc (plen + slen + 1);
|
||||||
if (prefix && *prefix)
|
if (plen)
|
||||||
strcpy (ret, prefix);
|
strcpy (ret, prefix);
|
||||||
strcpy (ret + plen, suffix + suffind);
|
strcpy (ret + plen, suffix + suffind);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
The Library is free software; you can redistribute it and/or modify
|
The Library is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
The Library is distributed in the hope that it will be useful, but
|
The Library is distributed in the hope that it will be useful, but
|
||||||
@ -19,11 +19,27 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#if !defined (_TILDE_H_)
|
#if !defined (_TILDE_H_)
|
||||||
# define _TILDE_H_
|
# define _TILDE_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* A function can be defined using prototypes and compile on both ANSI C
|
||||||
|
and traditional C compilers with something like this:
|
||||||
|
extern char *func __P((char *, char *, int)); */
|
||||||
|
|
||||||
|
#if !defined (__P)
|
||||||
|
# if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus)
|
||||||
|
# define __P(protos) protos
|
||||||
|
# else
|
||||||
|
# define __P(protos) ()
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Function pointers can be declared as (Function *)foo. */
|
/* Function pointers can be declared as (Function *)foo. */
|
||||||
#if !defined (_FUNCTION_DEF)
|
#if !defined (_FUNCTION_DEF)
|
||||||
# define _FUNCTION_DEF
|
# define _FUNCTION_DEF
|
||||||
@ -56,10 +72,14 @@ extern char **tilde_additional_prefixes;
|
|||||||
extern char **tilde_additional_suffixes;
|
extern char **tilde_additional_suffixes;
|
||||||
|
|
||||||
/* Return a new string which is the result of tilde expanding STRING. */
|
/* Return a new string which is the result of tilde expanding STRING. */
|
||||||
extern char *tilde_expand ();
|
extern char *tilde_expand __P((char *));
|
||||||
|
|
||||||
/* Do the work of tilde expansion on FILENAME. FILENAME starts with a
|
/* Do the work of tilde expansion on FILENAME. FILENAME starts with a
|
||||||
tilde. If there is no expansion, call tilde_expansion_failure_hook. */
|
tilde. If there is no expansion, call tilde_expansion_failure_hook. */
|
||||||
extern char *tilde_expand_word ();
|
extern char *tilde_expand_word __P((char *));
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _TILDE_H_ */
|
#endif /* _TILDE_H_ */
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -19,7 +19,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -47,6 +47,8 @@
|
|||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
|
#include "rlprivate.h"
|
||||||
|
|
||||||
#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
|
#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
|
||||||
|
|
||||||
/* Non-zero tells rl_delete_text and rl_insert_text to not add to
|
/* Non-zero tells rl_delete_text and rl_insert_text to not add to
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
@ -52,25 +52,11 @@
|
|||||||
/* Some standard library routines. */
|
/* Some standard library routines. */
|
||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
|
|
||||||
|
#include "rlprivate.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
|
#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
|
||||||
|
|
||||||
/* Pseudo-globals imported from readline.c */
|
|
||||||
extern int readline_echoing_p;
|
|
||||||
extern procenv_t readline_top_level;
|
|
||||||
extern int rl_line_buffer_len;
|
|
||||||
extern Function *rl_last_func;
|
|
||||||
|
|
||||||
extern int _rl_defining_kbd_macro;
|
|
||||||
extern char *_rl_executing_macro;
|
|
||||||
|
|
||||||
/* Pseudo-global functions imported from other library files. */
|
|
||||||
extern void _rl_replace_text ();
|
|
||||||
extern void _rl_pop_executing_macro ();
|
|
||||||
extern void _rl_set_the_line ();
|
|
||||||
extern void _rl_init_argument ();
|
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* Utility Functions */
|
/* Utility Functions */
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -18,7 +18,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
#if !defined (BUFSIZ)
|
#if !defined (BUFSIZ)
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
The GNU Readline Library is free software; you can redistribute it
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public License
|
and/or modify it under the terms of the GNU General Public License
|
||||||
as published by the Free Software Foundation; either version 1, or
|
as published by the Free Software Foundation; either version 2, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
The GNU Readline Library is distributed in the hope that it will be
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
@ -19,7 +19,7 @@
|
|||||||
The GNU General Public License is often shipped with GNU software, and
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
is generally kept in a file called COPYING or LICENSE. If you do not
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
have a copy of the license, write to the Free Software Foundation,
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA. */
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#define READLINE_LIBRARY
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
@ -54,6 +54,9 @@
|
|||||||
#include "readline.h"
|
#include "readline.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
|
#include "rlprivate.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
#ifndef _rl_digit_p
|
#ifndef _rl_digit_p
|
||||||
#define _rl_digit_p(c) ((c) >= '0' && (c) <= '9')
|
#define _rl_digit_p(c) ((c) >= '0' && (c) <= '9')
|
||||||
#endif
|
#endif
|
||||||
@ -74,26 +77,6 @@
|
|||||||
#define exchange(x, y) do {int temp = x; x = y; y = temp;} while (0)
|
#define exchange(x, y) do {int temp = x; x = y; y = temp;} while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern char *xmalloc (), *xrealloc ();
|
|
||||||
|
|
||||||
/* Variables imported from readline.c */
|
|
||||||
extern int rl_point, rl_end, rl_mark;
|
|
||||||
extern FILE *rl_instream;
|
|
||||||
extern int rl_line_buffer_len, rl_explicit_arg, rl_numeric_arg;
|
|
||||||
extern Keymap _rl_keymap;
|
|
||||||
extern char *rl_prompt;
|
|
||||||
extern char *rl_line_buffer;
|
|
||||||
extern int rl_arg_sign;
|
|
||||||
|
|
||||||
extern int _rl_doing_an_undo;
|
|
||||||
extern int _rl_undo_group_level;
|
|
||||||
|
|
||||||
extern void _rl_dispatch ();
|
|
||||||
extern int _rl_char_search_internal ();
|
|
||||||
|
|
||||||
extern void rl_extend_line_buffer ();
|
|
||||||
extern int rl_vi_check ();
|
|
||||||
|
|
||||||
/* Non-zero means enter insertion mode. */
|
/* Non-zero means enter insertion mode. */
|
||||||
static int _rl_vi_doing_insert;
|
static int _rl_vi_doing_insert;
|
||||||
|
|
||||||
@ -131,7 +114,7 @@ static char *vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~";
|
|||||||
/* Arrays for the saved marks. */
|
/* Arrays for the saved marks. */
|
||||||
static int vi_mark_chars[27];
|
static int vi_mark_chars[27];
|
||||||
|
|
||||||
static int rl_digit_loop1 ();
|
static int rl_digit_loop1 __P((void));
|
||||||
|
|
||||||
void
|
void
|
||||||
_rl_vi_initialize_line ()
|
_rl_vi_initialize_line ()
|
||||||
@ -1043,7 +1026,7 @@ rl_vi_char_search (count, key)
|
|||||||
if (vi_redoing)
|
if (vi_redoing)
|
||||||
target = _rl_vi_last_search_char;
|
target = _rl_vi_last_search_char;
|
||||||
else
|
else
|
||||||
_rl_vi_last_search_char = target = rl_getc (rl_instream);
|
_rl_vi_last_search_char = target = (*rl_getc_function) (rl_instream);
|
||||||
|
|
||||||
switch (key)
|
switch (key)
|
||||||
{
|
{
|
||||||
@ -1159,7 +1142,7 @@ rl_vi_change_char (count, key)
|
|||||||
if (vi_redoing)
|
if (vi_redoing)
|
||||||
c = _rl_vi_last_replacement;
|
c = _rl_vi_last_replacement;
|
||||||
else
|
else
|
||||||
_rl_vi_last_replacement = c = rl_getc (rl_instream);
|
_rl_vi_last_replacement = c = (*rl_getc_function) (rl_instream);
|
||||||
|
|
||||||
if (c == '\033' || c == CTRL ('C'))
|
if (c == '\033' || c == CTRL ('C'))
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
Readline is free software; you can redistribute it and/or modify it
|
Readline is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU General Public License as published by the
|
under the terms of the GNU General Public License as published by the
|
||||||
Free Software Foundation; either version 1, or (at your option) any
|
Free Software Foundation; either version 2, or (at your option) any
|
||||||
later version.
|
later version.
|
||||||
|
|
||||||
Readline is distributed in the hope that it will be useful, but
|
Readline is distributed in the hope that it will be useful, but
|
||||||
@ -17,7 +17,8 @@
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with Readline; see the file COPYING. If not, write to the Free
|
along with Readline; see the file COPYING. If not, write to the Free
|
||||||
Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
#define READLINE_LIBRARY
|
||||||
|
|
||||||
#if defined (HAVE_CONFIG_H)
|
#if defined (HAVE_CONFIG_H)
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
@ -31,7 +32,7 @@
|
|||||||
# include "ansi_stdlib.h"
|
# include "ansi_stdlib.h"
|
||||||
#endif /* HAVE_STDLIB_H */
|
#endif /* HAVE_STDLIB_H */
|
||||||
|
|
||||||
static void memory_error_and_abort ();
|
#include "xmalloc.h"
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
@ -39,6 +40,14 @@ static void memory_error_and_abort ();
|
|||||||
/* */
|
/* */
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
|
|
||||||
|
static void
|
||||||
|
memory_error_and_abort (fname)
|
||||||
|
char *fname;
|
||||||
|
{
|
||||||
|
fprintf (stderr, "%s: out of virtual memory\n", fname);
|
||||||
|
exit (2);
|
||||||
|
}
|
||||||
|
|
||||||
/* Return a pointer to free()able block of memory large enough
|
/* Return a pointer to free()able block of memory large enough
|
||||||
to hold BYTES number of bytes. If the memory cannot be allocated,
|
to hold BYTES number of bytes. If the memory cannot be allocated,
|
||||||
print an error message and abort. */
|
print an error message and abort. */
|
||||||
@ -56,7 +65,7 @@ xmalloc (bytes)
|
|||||||
|
|
||||||
char *
|
char *
|
||||||
xrealloc (pointer, bytes)
|
xrealloc (pointer, bytes)
|
||||||
char *pointer;
|
PTR_T pointer;
|
||||||
int bytes;
|
int bytes;
|
||||||
{
|
{
|
||||||
char *temp;
|
char *temp;
|
||||||
@ -68,19 +77,11 @@ xrealloc (pointer, bytes)
|
|||||||
return (temp);
|
return (temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
memory_error_and_abort (fname)
|
|
||||||
char *fname;
|
|
||||||
{
|
|
||||||
fprintf (stderr, "%s: out of virtual memory\n", fname);
|
|
||||||
exit (2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Use this as the function to call when adding unwind protects so we
|
/* Use this as the function to call when adding unwind protects so we
|
||||||
don't need to know what free() returns. */
|
don't need to know what free() returns. */
|
||||||
void
|
void
|
||||||
xfree (string)
|
xfree (string)
|
||||||
char *string;
|
PTR_T string;
|
||||||
{
|
{
|
||||||
if (string)
|
if (string)
|
||||||
free (string);
|
free (string);
|
||||||
|
46
contrib/libreadline/xmalloc.h
Normal file
46
contrib/libreadline/xmalloc.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/* xmalloc.h -- memory allocation that aborts on errors. */
|
||||||
|
|
||||||
|
/* Copyright (C) 1999 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of the GNU Readline Library, a library for
|
||||||
|
reading lines of text with interactive input and history editing.
|
||||||
|
|
||||||
|
The GNU Readline Library is free software; you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
The GNU Readline Library is distributed in the hope that it will be
|
||||||
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||||
|
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
The GNU General Public License is often shipped with GNU software, and
|
||||||
|
is generally kept in a file called COPYING or LICENSE. If you do not
|
||||||
|
have a copy of the license, write to the Free Software Foundation,
|
||||||
|
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
|
#if !defined (_XMALLOC_H_)
|
||||||
|
#define _XMALLOC_H_
|
||||||
|
|
||||||
|
#if defined (READLINE_LIBRARY)
|
||||||
|
# include "rlstdc.h"
|
||||||
|
#else
|
||||||
|
# include <readline/rlstdc.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef PTR_T
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
# define PTR_T void *
|
||||||
|
#else
|
||||||
|
# define PTR_T char *
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !PTR_T */
|
||||||
|
|
||||||
|
extern char *xmalloc __P((int));
|
||||||
|
extern char *xrealloc __P((void *, int));
|
||||||
|
extern void xfree __P((void *));
|
||||||
|
|
||||||
|
#endif /* _XMALLOC_H_ */
|
Loading…
Reference in New Issue
Block a user