Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
8459cd35
Commit
8459cd35
authored
Aug 25, 2004
by
hf@deer.(none)
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk@192.168.21.1:/usr/home/bk/mysql-4.1
into deer.(none):/home/hf/work/mysql-4.1.clean
parents
4629ae29
0e52a458
Changes
46
Show whitespace changes
Inline
Side-by-side
Showing
46 changed files
with
3003 additions
and
1092 deletions
+3003
-1092
.bzrignore
.bzrignore
+1
-1
acinclude.m4
acinclude.m4
+24
-0
client/mysql.cc
client/mysql.cc
+2
-1
cmd-line-utils/Makefile.am
cmd-line-utils/Makefile.am
+17
-0
cmd-line-utils/libedit/Makefile.am
cmd-line-utils/libedit/Makefile.am
+17
-17
cmd-line-utils/libedit/chared.c
cmd-line-utils/libedit/chared.c
+165
-117
cmd-line-utils/libedit/chared.h
cmd-line-utils/libedit/chared.h
+27
-16
cmd-line-utils/libedit/common.c
cmd-line-utils/libedit/common.c
+69
-96
cmd-line-utils/libedit/el.c
cmd-line-utils/libedit/el.c
+55
-23
cmd-line-utils/libedit/el.h
cmd-line-utils/libedit/el.h
+14
-5
cmd-line-utils/libedit/emacs.c
cmd-line-utils/libedit/emacs.c
+11
-5
cmd-line-utils/libedit/hist.c
cmd-line-utils/libedit/hist.c
+43
-20
cmd-line-utils/libedit/hist.h
cmd-line-utils/libedit/hist.h
+3
-3
cmd-line-utils/libedit/histedit.h
cmd-line-utils/libedit/histedit.h
+12
-3
cmd-line-utils/libedit/history.c
cmd-line-utils/libedit/history.c
+146
-49
cmd-line-utils/libedit/key.c
cmd-line-utils/libedit/key.c
+12
-6
cmd-line-utils/libedit/key.h
cmd-line-utils/libedit/key.h
+3
-7
cmd-line-utils/libedit/makelist.sh
cmd-line-utils/libedit/makelist.sh
+1
-3
cmd-line-utils/libedit/map.c
cmd-line-utils/libedit/map.c
+154
-148
cmd-line-utils/libedit/map.h
cmd-line-utils/libedit/map.h
+1
-1
cmd-line-utils/libedit/np/fgetln.c
cmd-line-utils/libedit/np/fgetln.c
+88
-0
cmd-line-utils/libedit/np/strlcat.c
cmd-line-utils/libedit/np/strlcat.c
+75
-0
cmd-line-utils/libedit/np/strlcpy.c
cmd-line-utils/libedit/np/strlcpy.c
+75
-0
cmd-line-utils/libedit/np/unvis.c
cmd-line-utils/libedit/np/unvis.c
+321
-0
cmd-line-utils/libedit/np/vis.c
cmd-line-utils/libedit/np/vis.c
+347
-0
cmd-line-utils/libedit/np/vis.h
cmd-line-utils/libedit/np/vis.h
+96
-0
cmd-line-utils/libedit/parse.c
cmd-line-utils/libedit/parse.c
+10
-4
cmd-line-utils/libedit/prompt.c
cmd-line-utils/libedit/prompt.c
+9
-3
cmd-line-utils/libedit/read.c
cmd-line-utils/libedit/read.c
+90
-33
cmd-line-utils/libedit/read.h
cmd-line-utils/libedit/read.h
+55
-0
cmd-line-utils/libedit/readline.c
cmd-line-utils/libedit/readline.c
+179
-61
cmd-line-utils/libedit/readline/readline.h
cmd-line-utils/libedit/readline/readline.h
+8
-16
cmd-line-utils/libedit/refresh.c
cmd-line-utils/libedit/refresh.c
+36
-15
cmd-line-utils/libedit/search.c
cmd-line-utils/libedit/search.c
+58
-83
cmd-line-utils/libedit/search.h
cmd-line-utils/libedit/search.h
+3
-3
cmd-line-utils/libedit/sig.c
cmd-line-utils/libedit/sig.c
+12
-6
cmd-line-utils/libedit/sig.h
cmd-line-utils/libedit/sig.h
+3
-4
cmd-line-utils/libedit/sys.h
cmd-line-utils/libedit/sys.h
+51
-15
cmd-line-utils/libedit/term.c
cmd-line-utils/libedit/term.c
+32
-20
cmd-line-utils/libedit/term.h
cmd-line-utils/libedit/term.h
+124
-0
cmd-line-utils/libedit/tokenizer.c
cmd-line-utils/libedit/tokenizer.c
+40
-21
cmd-line-utils/libedit/tokenizer.h
cmd-line-utils/libedit/tokenizer.h
+1
-1
cmd-line-utils/libedit/tty.c
cmd-line-utils/libedit/tty.c
+11
-6
cmd-line-utils/libedit/tty.h
cmd-line-utils/libedit/tty.h
+5
-5
cmd-line-utils/libedit/vi.c
cmd-line-utils/libedit/vi.c
+461
-274
configure.in
configure.in
+36
-1
No files found.
.bzrignore
View file @
8459cd35
...
@@ -258,7 +258,7 @@ cmd-line-utils/libedit/common.h
...
@@ -258,7 +258,7 @@ cmd-line-utils/libedit/common.h
cmd-line-utils/libedit/makelist
cmd-line-utils/libedit/makelist
comon.h
comon.h
config.cache
config.cache
config.h
./
config.h
config.h.in
config.h.in
config.log
config.log
config.status
config.status
...
...
acinclude.m4
View file @
8459cd35
# Local macros for automake & autoconf
# Local macros for automake & autoconf
AC_DEFUN(MYSQL_CHECK_READLINE_DECLARES_HIST_ENTRY,[
AC_CACHE_CHECK([HIST_ENTRY is declared in readline/readline.h], mysql_cv_hist_entry_declared,
AC_TRY_COMPILE(
[
#include "stdio.h"
#undef __P // readline-4.2 declares own __P
#include "readline/readline.h"
],
[
HIST_ENTRY entry;
],
[
mysql_cv_hist_entry_declared=yes
AC_DEFINE_UNQUOTED(HAVE_HIST_ENTRY, [1],
[HIST_ENTRY is defined in the outer libeditreadline])
],
[mysql_cv_libedit_interface=no]
)
)
])
AC_DEFUN(MYSQL_CHECK_LIBEDIT_INTERFACE,[
AC_DEFUN(MYSQL_CHECK_LIBEDIT_INTERFACE,[
AC_CACHE_CHECK([libedit variant of rl_completion_entry_function], mysql_cv_libedit_interface,
AC_CACHE_CHECK([libedit variant of rl_completion_entry_function], mysql_cv_libedit_interface,
AC_TRY_COMPILE(
AC_TRY_COMPILE(
[
[
#include "stdio.h"
#include "stdio.h"
#undef __P // readline-4.2 declares own __P
#include "readline/readline.h"
#include "readline/readline.h"
],
],
[
[
...
@@ -26,6 +49,7 @@ AC_DEFUN(MYSQL_CHECK_NEW_RL_INTERFACE,[
...
@@ -26,6 +49,7 @@ AC_DEFUN(MYSQL_CHECK_NEW_RL_INTERFACE,[
AC_TRY_COMPILE(
AC_TRY_COMPILE(
[
[
#include "stdio.h"
#include "stdio.h"
#undef __P // readline-4.2 declares own __P
#include "readline/readline.h"
#include "readline/readline.h"
],
],
[
[
...
...
client/mysql.cc
View file @
8459cd35
...
@@ -84,6 +84,7 @@ extern "C" {
...
@@ -84,6 +84,7 @@ extern "C" {
#if defined( __WIN__) || defined(OS2)
#if defined( __WIN__) || defined(OS2)
#include <conio.h>
#include <conio.h>
#elif !defined(__NETWARE__)
#elif !defined(__NETWARE__)
#undef __P // readline-4.2 declares own __P
#include <readline/readline.h>
#include <readline/readline.h>
#define HAVE_READLINE
#define HAVE_READLINE
#endif
#endif
...
@@ -294,7 +295,7 @@ static const char *server_default_groups[]=
...
@@ -294,7 +295,7 @@ static const char *server_default_groups[]=
HIST_ENTRY is defined for libedit, but not for the real readline
HIST_ENTRY is defined for libedit, but not for the real readline
Need to redefine it for real readline to find it
Need to redefine it for real readline to find it
*/
*/
#if !defined(
USE_LIBEDIT_INTERFACE
)
#if !defined(
HAVE_HIST_ENTRY
)
typedef
struct
_hist_entry
{
typedef
struct
_hist_entry
{
const
char
*
line
;
const
char
*
line
;
const
char
*
data
;
const
char
*
data
;
...
...
cmd-line-utils/Makefile.am
View file @
8459cd35
# Copyright (C) 2004 MySQL AB
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This 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
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with this library; if not, write to the Free
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
# MA 02111-1307, USA
## Process this file with automake to create Makefile.in
## Process this file with automake to create Makefile.in
SUBDIRS
=
@readline_basedir@
SUBDIRS
=
@readline_basedir@
...
...
cmd-line-utils/libedit/Makefile.am
View file @
8459cd35
...
@@ -7,28 +7,30 @@ AHDR=vi.h emacs.h common.h
...
@@ -7,28 +7,30 @@ AHDR=vi.h emacs.h common.h
INCLUDES
=
-I
$(top_srcdir)
/include
-I
$(srcdir)
/../..
-I
..
INCLUDES
=
-I
$(top_srcdir)
/include
-I
$(srcdir)
/../..
-I
..
noinst_LIBRARIES
=
lib
lib
edit.a
noinst_LIBRARIES
=
libedit.a
liblibedit_a_SOURCES
=
chared.c el.c fgetln.c history.c map.c
\
libedit_a_SOURCES
=
chared.c el.c history.c map.c prompt.c readline.c
\
prompt.c readline.c search.c
\
search.c tokenizer.c vi.c common.c emacs.c
\
strlcpy.c tokenizer.c vi.c common.c
\
hist.c key.c parse.c read.c refresh.c sig.c term.c
\
emacs.c hist.c key.c parse.c read.c
\
tty.c help.c fcns.c
refresh.c sig.c term.c tty.c help.c
\
fcns.c
EXTRA_libedit_a_SOURCES
=
np/unvis.c np/strlcpy.c np/vis.c np/strlcat.c
\
np/fgetln.c
libedit_a_LIBADD
=
@LIBEDIT_LOBJECTS@
libedit_a_DEPENDENCIES
=
@LIBEDIT_LOBJECTS@
pkginclude_HEADERS
=
readline/readline.h
pkginclude_HEADERS
=
readline/readline.h
noinst_HEADERS
=
chared.h el.h histedit.h key.h
\
noinst_HEADERS
=
chared.h el.h histedit.h key.h parse.h refresh.h sig.h
\
parse.h refresh.h sig.h sys.h
\
sys.h tokenizer.h config.h hist.h map.h prompt.h
\
tokenizer.h compat.h compat_conf.h fgetln.h
\
search.h tty.h
hist.h map.h prompt.h search.h
\
strlcpy.h libedit_term.h tty.h
EXTRA_DIST
=
makelist.sh
EXTRA_DIST
=
makelist.sh
np/unvis.c np/strlcpy.c np/vis.c np/strlcat.c np/fgetln.c
CLEANFILES
=
makelist
CLEANFILES
=
makelist
common.h emacs.h vi.h fcns.h help.h fcns.c help.c
DEFS
=
-DUNDEF_THREADS_HACK
-DHAVE_CONFIG_H
-DNO_KILL_INTR
DEFS
=
-DUNDEF_THREADS_HACK
-DHAVE_CONFIG_H
-DNO_KILL_INTR
'-D__RCSID(x)='
'-D__COPYRIGHT(x)='
'-D__RENAME(x)='
'-D_DIAGASSERT(x)='
SUFFIXES
=
.sh
SUFFIXES
=
.sh
...
@@ -73,13 +75,11 @@ fcns.c: ${AHDR} fcns.h makelist
...
@@ -73,13 +75,11 @@ fcns.c: ${AHDR} fcns.h makelist
chared.o
:
vi.h emacs.h common.h help.h fcns.h
chared.o
:
vi.h emacs.h common.h help.h fcns.h
el.o
:
vi.h emacs.h common.h help.h fcns.h
el.o
:
vi.h emacs.h common.h help.h fcns.h
fgetln.o
:
vi.h emacs.h common.h help.h fcns.h
history.o
:
vi.h emacs.h common.h help.h fcns.h
history.o
:
vi.h emacs.h common.h help.h fcns.h
map.o
:
vi.h emacs.h common.h help.h fcns.h
map.o
:
vi.h emacs.h common.h help.h fcns.h
prompt.o
:
vi.h emacs.h common.h help.h fcns.h
prompt.o
:
vi.h emacs.h common.h help.h fcns.h
readline.o
:
vi.h emacs.h common.h help.h fcns.h
readline.o
:
vi.h emacs.h common.h help.h fcns.h
search.o
:
vi.h emacs.h common.h help.h fcns.h
search.o
:
vi.h emacs.h common.h help.h fcns.h
strlcpy.o
:
vi.h emacs.h common.h help.h fcns.h
tokenizer.o
:
vi.h emacs.h common.h help.h fcns.h
tokenizer.o
:
vi.h emacs.h common.h help.h fcns.h
vi.o
:
vi.h emacs.h common.h help.h fcns.h
vi.o
:
vi.h emacs.h common.h help.h fcns.h
common.o
:
vi.h emacs.h common.h help.h fcns.h
common.o
:
vi.h emacs.h common.h help.h fcns.h
...
...
cmd-line-utils/libedit/chared.c
View file @
8459cd35
/* $NetBSD: chared.c,v 1.1
4 2001/05/17 01:02:17
christos Exp $ */
/* $NetBSD: chared.c,v 1.1
8 2002/11/20 16:50:08
christos Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,13 +36,18 @@
...
@@ -36,13 +36,18 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)chared.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: chared.c,v 1.18 2002/11/20 16:50:08 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* chared.c: Character editor utilities
* chared.c: Character editor utilities
*/
*/
#include "sys.h"
#include <stdlib.h>
#include <stdlib.h>
#include "el.h"
#include "el.h"
...
@@ -53,17 +58,36 @@
...
@@ -53,17 +58,36 @@
* Handle state for the vi undo command
* Handle state for the vi undo command
*/
*/
protected
void
protected
void
cv_undo
(
EditLine
*
el
,
int
action
,
size_t
size
,
char
*
ptr
)
cv_undo
(
EditLine
*
el
)
{
{
c_undo_t
*
vu
=
&
el
->
el_chared
.
c_undo
;
c_undo_t
*
vu
=
&
el
->
el_chared
.
c_undo
;
vu
->
action
=
action
;
c_redo_t
*
r
=
&
el
->
el_chared
.
c_redo
;
vu
->
ptr
=
ptr
;
uint
size
;
vu
->
isize
=
size
;
(
void
)
memcpy
(
vu
->
buf
,
vu
->
ptr
,
size
);
/* Save entire line for undo */
#ifdef DEBUG_UNDO
size
=
el
->
el_line
.
lastchar
-
el
->
el_line
.
buffer
;
(
void
)
fprintf
(
el
->
el_errfile
,
"Undo buffer
\"
%s
\"
size = +%d -%d
\n
"
,
vu
->
len
=
size
;
vu
->
ptr
,
vu
->
isize
,
vu
->
dsize
);
vu
->
cursor
=
el
->
el_line
.
cursor
-
el
->
el_line
.
buffer
;
#endif
memcpy
(
vu
->
buf
,
el
->
el_line
.
buffer
,
size
);
/* save command info for redo */
r
->
count
=
el
->
el_state
.
doingarg
?
el
->
el_state
.
argument
:
0
;
r
->
action
=
el
->
el_chared
.
c_vcmd
.
action
;
r
->
pos
=
r
->
buf
;
r
->
cmd
=
el
->
el_state
.
thiscmd
;
r
->
ch
=
el
->
el_state
.
thisch
;
}
/* cv_yank():
* Save yank/delete data for paste
*/
protected
void
cv_yank
(
EditLine
*
el
,
const
char
*
ptr
,
int
size
)
{
c_kill_t
*
k
=
&
el
->
el_chared
.
c_kill
;
memcpy
(
k
->
buf
,
ptr
,
size
+
0u
);
k
->
last
=
k
->
buf
+
size
;
}
}
...
@@ -75,8 +99,10 @@ c_insert(EditLine *el, int num)
...
@@ -75,8 +99,10 @@ c_insert(EditLine *el, int num)
{
{
char
*
cp
;
char
*
cp
;
if
(
el
->
el_line
.
lastchar
+
num
>=
el
->
el_line
.
limit
)
if
(
el
->
el_line
.
lastchar
+
num
>=
el
->
el_line
.
limit
)
{
if
(
!
ch_enlargebufs
(
el
,
num
+
0u
))
return
;
/* can't go past end of buffer */
return
;
/* can't go past end of buffer */
}
if
(
el
->
el_line
.
cursor
<
el
->
el_line
.
lastchar
)
{
if
(
el
->
el_line
.
cursor
<
el
->
el_line
.
lastchar
)
{
/* if I must move chars */
/* if I must move chars */
...
@@ -97,12 +123,14 @@ c_delafter(EditLine *el, int num)
...
@@ -97,12 +123,14 @@ c_delafter(EditLine *el, int num)
if
(
el
->
el_line
.
cursor
+
num
>
el
->
el_line
.
lastchar
)
if
(
el
->
el_line
.
cursor
+
num
>
el
->
el_line
.
lastchar
)
num
=
el
->
el_line
.
lastchar
-
el
->
el_line
.
cursor
;
num
=
el
->
el_line
.
lastchar
-
el
->
el_line
.
cursor
;
if
(
el
->
el_map
.
current
!=
el
->
el_map
.
emacs
)
{
cv_undo
(
el
);
cv_yank
(
el
,
el
->
el_line
.
cursor
,
num
);
}
if
(
num
>
0
)
{
if
(
num
>
0
)
{
char
*
cp
;
char
*
cp
;
if
(
el
->
el_map
.
current
!=
el
->
el_map
.
emacs
)
cv_undo
(
el
,
INSERT
,
(
size_t
)
num
,
el
->
el_line
.
cursor
);
for
(
cp
=
el
->
el_line
.
cursor
;
cp
<=
el
->
el_line
.
lastchar
;
cp
++
)
for
(
cp
=
el
->
el_line
.
cursor
;
cp
<=
el
->
el_line
.
lastchar
;
cp
++
)
*
cp
=
cp
[
num
];
*
cp
=
cp
[
num
];
...
@@ -121,13 +149,14 @@ c_delbefore(EditLine *el, int num)
...
@@ -121,13 +149,14 @@ c_delbefore(EditLine *el, int num)
if
(
el
->
el_line
.
cursor
-
num
<
el
->
el_line
.
buffer
)
if
(
el
->
el_line
.
cursor
-
num
<
el
->
el_line
.
buffer
)
num
=
el
->
el_line
.
cursor
-
el
->
el_line
.
buffer
;
num
=
el
->
el_line
.
cursor
-
el
->
el_line
.
buffer
;
if
(
el
->
el_map
.
current
!=
el
->
el_map
.
emacs
)
{
cv_undo
(
el
);
cv_yank
(
el
,
el
->
el_line
.
cursor
-
num
,
num
);
}
if
(
num
>
0
)
{
if
(
num
>
0
)
{
char
*
cp
;
char
*
cp
;
if
(
el
->
el_map
.
current
!=
el
->
el_map
.
emacs
)
cv_undo
(
el
,
INSERT
,
(
size_t
)
num
,
el
->
el_line
.
cursor
-
num
);
for
(
cp
=
el
->
el_line
.
cursor
-
num
;
for
(
cp
=
el
->
el_line
.
cursor
-
num
;
cp
<=
el
->
el_line
.
lastchar
;
cp
<=
el
->
el_line
.
lastchar
;
cp
++
)
cp
++
)
...
@@ -144,7 +173,7 @@ c_delbefore(EditLine *el, int num)
...
@@ -144,7 +173,7 @@ c_delbefore(EditLine *el, int num)
protected
int
protected
int
ce__isword
(
int
p
)
ce__isword
(
int
p
)
{
{
return
(
isal
pha
(
p
)
||
isdigit
(
p
)
||
strchr
(
"*?_-.[]~="
,
p
)
!=
NULL
);
return
(
isal
num
(
p
)
||
strchr
(
"*?_-.[]~="
,
p
)
!=
NULL
);
}
}
...
@@ -153,6 +182,20 @@ ce__isword(int p)
...
@@ -153,6 +182,20 @@ ce__isword(int p)
*/
*/
protected
int
protected
int
cv__isword
(
int
p
)
cv__isword
(
int
p
)
{
if
(
isalnum
(
p
)
||
p
==
'_'
)
return
1
;
if
(
isgraph
(
p
))
return
2
;
return
0
;
}
/* cv__isWord():
* Return if p is part of a big word according to vi
*/
protected
int
cv__isWord
(
int
p
)
{
{
return
(
!
isspace
(
p
));
return
(
!
isspace
(
p
));
}
}
...
@@ -216,7 +259,7 @@ cv_next_word(EditLine *el, char *p, char *high, int n, int (*wtest)(int))
...
@@ -216,7 +259,7 @@ cv_next_word(EditLine *el, char *p, char *high, int n, int (*wtest)(int))
* vi historically deletes with cw only the word preserving the
* vi historically deletes with cw only the word preserving the
* trailing whitespace! This is not what 'w' does..
* trailing whitespace! This is not what 'w' does..
*/
*/
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
(
DELETE
|
INSERT
))
if
(
n
||
el
->
el_chared
.
c_vcmd
.
action
!=
(
DELETE
|
INSERT
))
while
((
p
<
high
)
&&
isspace
((
unsigned
char
)
*
p
))
while
((
p
<
high
)
&&
isspace
((
unsigned
char
)
*
p
))
p
++
;
p
++
;
}
}
...
@@ -233,26 +276,19 @@ cv_next_word(EditLine *el, char *p, char *high, int n, int (*wtest)(int))
...
@@ -233,26 +276,19 @@ cv_next_word(EditLine *el, char *p, char *high, int n, int (*wtest)(int))
* Find the previous word vi style
* Find the previous word vi style
*/
*/
protected
char
*
protected
char
*
cv_prev_word
(
EditLine
*
el
,
char
*
p
,
char
*
low
,
int
n
,
int
(
*
wtest
)(
int
))
cv_prev_word
(
char
*
p
,
char
*
low
,
int
n
,
int
(
*
wtest
)(
int
))
{
{
int
test
;
int
test
;
while
(
n
--
)
{
p
--
;
p
--
;
/*
while
(
n
--
)
{
* vi historically deletes with cb only the word preserving the
* leading whitespace! This is not what 'b' does..
*/
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
(
DELETE
|
INSERT
))
while
((
p
>
low
)
&&
isspace
((
unsigned
char
)
*
p
))
while
((
p
>
low
)
&&
isspace
((
unsigned
char
)
*
p
))
p
--
;
p
--
;
test
=
(
*
wtest
)((
unsigned
char
)
*
p
);
test
=
(
*
wtest
)((
unsigned
char
)
*
p
);
while
((
p
>=
low
)
&&
(
*
wtest
)((
unsigned
char
)
*
p
)
==
test
)
while
((
p
>=
low
)
&&
(
*
wtest
)((
unsigned
char
)
*
p
)
==
test
)
p
--
;
p
--
;
p
++
;
while
(
isspace
((
unsigned
char
)
*
p
))
p
++
;
}
}
p
++
;
/* p now points where we want it */
/* p now points where we want it */
if
(
p
<
low
)
if
(
p
<
low
)
...
@@ -303,47 +339,34 @@ protected void
...
@@ -303,47 +339,34 @@ protected void
cv_delfini
(
EditLine
*
el
)
cv_delfini
(
EditLine
*
el
)
{
{
int
size
;
int
size
;
int
o
action
;
int
action
=
el
->
el_chared
.
c_vcmd
.
action
;
if
(
el
->
el_chared
.
c_vcmd
.
action
&
INSERT
)
if
(
action
&
INSERT
)
el
->
el_map
.
current
=
el
->
el_map
.
key
;
el
->
el_map
.
current
=
el
->
el_map
.
key
;
oaction
=
el
->
el_chared
.
c_vcmd
.
action
;
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
if
(
el
->
el_chared
.
c_vcmd
.
pos
==
0
)
if
(
el
->
el_chared
.
c_vcmd
.
pos
==
0
)
/* sanity */
return
;
return
;
size
=
el
->
el_line
.
cursor
-
el
->
el_chared
.
c_vcmd
.
pos
;
if
(
el
->
el_line
.
cursor
>
el
->
el_chared
.
c_vcmd
.
pos
)
{
if
(
size
==
0
)
size
=
(
int
)
(
el
->
el_line
.
cursor
-
el
->
el_chared
.
c_vcmd
.
pos
);
size
=
1
;
c_delbefore
(
el
,
size
);
el
->
el_line
.
cursor
=
el
->
el_chared
.
c_vcmd
.
pos
;
el
->
el_line
.
cursor
=
el
->
el_chared
.
c_vcmd
.
pos
;
re_refresh_cursor
(
el
);
if
(
action
&
YANK
)
{
}
else
if
(
el
->
el_line
.
cursor
<
el
->
el_chared
.
c_vcmd
.
pos
)
{
if
(
size
>
0
)
size
=
(
int
)(
el
->
el_chared
.
c_vcmd
.
pos
-
el
->
el_line
.
cursor
);
cv_yank
(
el
,
el
->
el_line
.
cursor
,
size
);
c_delafter
(
el
,
size
);
else
cv_yank
(
el
,
el
->
el_line
.
cursor
+
size
,
-
size
);
}
else
{
}
else
{
size
=
1
;
if
(
size
>
0
)
{
c_delafter
(
el
,
size
);
c_delafter
(
el
,
size
);
re_refresh_cursor
(
el
);
}
else
{
c_delbefore
(
el
,
-
size
);
el
->
el_line
.
cursor
+=
size
;
}
}
switch
(
oaction
)
{
case
DELETE
|
INSERT
:
el
->
el_chared
.
c_undo
.
action
=
DELETE
|
INSERT
;
break
;
case
DELETE
:
el
->
el_chared
.
c_undo
.
action
=
INSERT
;
break
;
case
NOP
:
case
INSERT
:
default:
EL_ABORT
((
el
->
el_errfile
,
"Bad oaction %d
\n
"
,
oaction
));
break
;
}
}
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_undo
.
ptr
=
el
->
el_line
.
cursor
;
el
->
el_chared
.
c_undo
.
dsize
=
size
;
}
}
...
@@ -373,20 +396,18 @@ ce__endword(char *p, char *high, int n)
...
@@ -373,20 +396,18 @@ ce__endword(char *p, char *high, int n)
* Go to the end of this word according to vi
* Go to the end of this word according to vi
*/
*/
protected
char
*
protected
char
*
cv__endword
(
char
*
p
,
char
*
high
,
int
n
)
cv__endword
(
char
*
p
,
char
*
high
,
int
n
,
int
(
*
wtest
)(
int
)
)
{
{
int
test
;
p
++
;
p
++
;
while
(
n
--
)
{
while
(
n
--
)
{
while
((
p
<
high
)
&&
isspace
((
unsigned
char
)
*
p
))
while
((
p
<
high
)
&&
isspace
((
unsigned
char
)
*
p
))
p
++
;
p
++
;
if
(
isalnum
((
unsigned
char
)
*
p
))
test
=
(
*
wtest
)((
unsigned
char
)
*
p
);
while
((
p
<
high
)
&&
isalnum
((
unsigned
char
)
*
p
))
while
((
p
<
high
)
&&
(
*
wtest
)((
unsigned
char
)
*
p
)
==
test
)
p
++
;
else
while
((
p
<
high
)
&&
!
(
isspace
((
unsigned
char
)
*
p
)
||
isalnum
((
unsigned
char
)
*
p
)))
p
++
;
p
++
;
}
}
p
--
;
p
--
;
...
@@ -406,20 +427,23 @@ ch_init(EditLine *el)
...
@@ -406,20 +427,23 @@ ch_init(EditLine *el)
(
void
)
memset
(
el
->
el_line
.
buffer
,
0
,
EL_BUFSIZ
);
(
void
)
memset
(
el
->
el_line
.
buffer
,
0
,
EL_BUFSIZ
);
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
el
->
el_line
.
limit
=
&
el
->
el_line
.
buffer
[
EL_BUFSIZ
-
2
];
el
->
el_line
.
limit
=
&
el
->
el_line
.
buffer
[
EL_BUFSIZ
-
EL_LEAVE
];
el
->
el_chared
.
c_undo
.
buf
=
(
char
*
)
el_malloc
(
EL_BUFSIZ
);
el
->
el_chared
.
c_undo
.
buf
=
(
char
*
)
el_malloc
(
EL_BUFSIZ
);
if
(
el
->
el_chared
.
c_undo
.
buf
==
NULL
)
if
(
el
->
el_chared
.
c_undo
.
buf
==
NULL
)
return
(
-
1
);
return
(
-
1
);
(
void
)
memset
(
el
->
el_chared
.
c_undo
.
buf
,
0
,
EL_BUFSIZ
);
(
void
)
memset
(
el
->
el_chared
.
c_undo
.
buf
,
0
,
EL_BUFSIZ
);
el
->
el_chared
.
c_undo
.
action
=
NOP
;
el
->
el_chared
.
c_undo
.
len
=
-
1
;
el
->
el_chared
.
c_undo
.
isize
=
0
;
el
->
el_chared
.
c_undo
.
cursor
=
0
;
el
->
el_chared
.
c_undo
.
dsize
=
0
;
el
->
el_chared
.
c_redo
.
buf
=
(
char
*
)
el_malloc
(
EL_BUFSIZ
);
el
->
el_chared
.
c_undo
.
ptr
=
el
->
el_line
.
buffer
;
if
(
el
->
el_chared
.
c_redo
.
buf
==
NULL
)
return
(
-
1
);
el
->
el_chared
.
c_redo
.
pos
=
el
->
el_chared
.
c_redo
.
buf
;
el
->
el_chared
.
c_redo
.
lim
=
el
->
el_chared
.
c_redo
.
buf
+
EL_BUFSIZ
;
el
->
el_chared
.
c_redo
.
cmd
=
ED_UNASSIGNED
;
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_vcmd
.
pos
=
el
->
el_line
.
buffer
;
el
->
el_chared
.
c_vcmd
.
pos
=
el
->
el_line
.
buffer
;
el
->
el_chared
.
c_vcmd
.
ins
=
el
->
el_line
.
buffer
;
el
->
el_chared
.
c_kill
.
buf
=
(
char
*
)
el_malloc
(
EL_BUFSIZ
);
el
->
el_chared
.
c_kill
.
buf
=
(
char
*
)
el_malloc
(
EL_BUFSIZ
);
if
(
el
->
el_chared
.
c_kill
.
buf
==
NULL
)
if
(
el
->
el_chared
.
c_kill
.
buf
==
NULL
)
...
@@ -454,14 +478,11 @@ ch_reset(EditLine *el)
...
@@ -454,14 +478,11 @@ ch_reset(EditLine *el)
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
el
->
el_chared
.
c_undo
.
action
=
NOP
;
el
->
el_chared
.
c_undo
.
len
=
-
1
;
el
->
el_chared
.
c_undo
.
isize
=
0
;
el
->
el_chared
.
c_undo
.
cursor
=
0
;
el
->
el_chared
.
c_undo
.
dsize
=
0
;
el
->
el_chared
.
c_undo
.
ptr
=
el
->
el_line
.
buffer
;
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_vcmd
.
pos
=
el
->
el_line
.
buffer
;
el
->
el_chared
.
c_vcmd
.
pos
=
el
->
el_line
.
buffer
;
el
->
el_chared
.
c_vcmd
.
ins
=
el
->
el_line
.
buffer
;
el
->
el_chared
.
c_kill
.
mark
=
el
->
el_line
.
buffer
;
el
->
el_chared
.
c_kill
.
mark
=
el
->
el_line
.
buffer
;
...
@@ -516,7 +537,8 @@ ch_enlargebufs(el, addlen)
...
@@ -516,7 +537,8 @@ ch_enlargebufs(el, addlen)
el
->
el_line
.
buffer
=
newbuffer
;
el
->
el_line
.
buffer
=
newbuffer
;
el
->
el_line
.
cursor
=
newbuffer
+
(
el
->
el_line
.
cursor
-
oldbuf
);
el
->
el_line
.
cursor
=
newbuffer
+
(
el
->
el_line
.
cursor
-
oldbuf
);
el
->
el_line
.
lastchar
=
newbuffer
+
(
el
->
el_line
.
lastchar
-
oldbuf
);
el
->
el_line
.
lastchar
=
newbuffer
+
(
el
->
el_line
.
lastchar
-
oldbuf
);
el
->
el_line
.
limit
=
&
newbuffer
[
newsz
-
EL_LEAVE
];
/* don't set new size until all buffers are enlarged */
el
->
el_line
.
limit
=
&
newbuffer
[
sz
-
EL_LEAVE
];
/*
/*
* Reallocate kill buffer.
* Reallocate kill buffer.
...
@@ -545,14 +567,22 @@ ch_enlargebufs(el, addlen)
...
@@ -545,14 +567,22 @@ ch_enlargebufs(el, addlen)
/* zero the newly added memory, leave old data in */
/* zero the newly added memory, leave old data in */
(
void
)
memset
(
&
newbuffer
[
sz
],
0
,
newsz
-
sz
);
(
void
)
memset
(
&
newbuffer
[
sz
],
0
,
newsz
-
sz
);
el
->
el_chared
.
c_undo
.
ptr
=
el
->
el_line
.
buffer
+
(
el
->
el_chared
.
c_undo
.
ptr
-
oldbuf
);
el
->
el_chared
.
c_undo
.
buf
=
newbuffer
;
el
->
el_chared
.
c_undo
.
buf
=
newbuffer
;
newbuffer
=
el_realloc
(
el
->
el_chared
.
c_redo
.
buf
,
newsz
);
if
(
!
newbuffer
)
return
0
;
el
->
el_chared
.
c_redo
.
pos
=
newbuffer
+
(
el
->
el_chared
.
c_redo
.
pos
-
el
->
el_chared
.
c_redo
.
buf
);
el
->
el_chared
.
c_redo
.
lim
=
newbuffer
+
(
el
->
el_chared
.
c_redo
.
lim
-
el
->
el_chared
.
c_redo
.
buf
);
el
->
el_chared
.
c_redo
.
buf
=
newbuffer
;
if
(
!
hist_enlargebuf
(
el
,
sz
,
newsz
))
if
(
!
hist_enlargebuf
(
el
,
sz
,
newsz
))
return
0
;
return
0
;
/* Safe to set enlarged buffer size */
el
->
el_line
.
limit
=
&
newbuffer
[
newsz
-
EL_LEAVE
];
return
1
;
return
1
;
}
}
...
@@ -567,6 +597,11 @@ ch_end(EditLine *el)
...
@@ -567,6 +597,11 @@ ch_end(EditLine *el)
el
->
el_line
.
limit
=
NULL
;
el
->
el_line
.
limit
=
NULL
;
el_free
((
ptr_t
)
el
->
el_chared
.
c_undo
.
buf
);
el_free
((
ptr_t
)
el
->
el_chared
.
c_undo
.
buf
);
el
->
el_chared
.
c_undo
.
buf
=
NULL
;
el
->
el_chared
.
c_undo
.
buf
=
NULL
;
el_free
((
ptr_t
)
el
->
el_chared
.
c_redo
.
buf
);
el
->
el_chared
.
c_redo
.
buf
=
NULL
;
el
->
el_chared
.
c_redo
.
pos
=
NULL
;
el
->
el_chared
.
c_redo
.
lim
=
NULL
;
el
->
el_chared
.
c_redo
.
cmd
=
ED_UNASSIGNED
;
el_free
((
ptr_t
)
el
->
el_chared
.
c_kill
.
buf
);
el_free
((
ptr_t
)
el
->
el_chared
.
c_kill
.
buf
);
el
->
el_chared
.
c_kill
.
buf
=
NULL
;
el
->
el_chared
.
c_kill
.
buf
=
NULL
;
el_free
((
ptr_t
)
el
->
el_chared
.
c_macro
.
macro
);
el_free
((
ptr_t
)
el
->
el_chared
.
c_macro
.
macro
);
...
@@ -619,51 +654,64 @@ el_deletestr(EditLine *el, int n)
...
@@ -619,51 +654,64 @@ el_deletestr(EditLine *el, int n)
* Get a string
* Get a string
*/
*/
protected
int
protected
int
c_gets
(
EditLine
*
el
,
char
*
buf
)
c_gets
(
EditLine
*
el
,
char
*
buf
,
const
char
*
prompt
)
{
{
char
ch
;
char
ch
;
int
len
=
0
;
int
len
;
char
*
cp
=
el
->
el_line
.
buffer
;
if
(
prompt
)
{
len
=
strlen
(
prompt
);
memcpy
(
cp
,
prompt
,
len
+
0u
);
cp
+=
len
;
}
len
=
0
;
for
(;;)
{
el
->
el_line
.
cursor
=
cp
;
*
cp
=
' '
;
el
->
el_line
.
lastchar
=
cp
+
1
;
re_refresh
(
el
);
if
(
el_getc
(
el
,
&
ch
)
!=
1
)
{
ed_end_of_file
(
el
,
0
);
len
=
-
1
;
break
;
}
for
(
ch
=
0
;
ch
==
0
;)
{
if
(
el_getc
(
el
,
&
ch
)
!=
1
)
return
(
ed_end_of_file
(
el
,
0
));
switch
(
ch
)
{
switch
(
ch
)
{
case
0010
:
/* Delete and backspace */
case
0010
:
/* Delete and backspace */
case
0177
:
case
0177
:
if
(
len
>
1
)
{
if
(
len
<=
0
)
{
*
el
->
el_line
.
cursor
--
=
'\0'
;
len
=
-
1
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
cursor
;
buf
[
len
--
]
=
'\0'
;
}
else
{
el
->
el_line
.
buffer
[
0
]
=
'\0'
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
return
(
CC_REFRESH
);
}
re_refresh
(
el
);
ch
=
0
;
break
;
break
;
}
cp
--
;
continue
;
case
0033
:
/* ESC */
case
0033
:
/* ESC */
case
'\r'
:
/* Newline */
case
'\r'
:
/* Newline */
case
'\n'
:
case
'\n'
:
buf
[
len
]
=
ch
;
break
;
break
;
default:
default:
if
(
len
>=
EL_BUFSIZ
)
if
(
len
>=
EL_BUFSIZ
-
16
)
term_beep
(
el
);
term_beep
(
el
);
else
{
else
{
buf
[
len
++
]
=
ch
;
buf
[
len
++
]
=
ch
;
*
el
->
el_line
.
cursor
++
=
ch
;
*
cp
++
=
ch
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
cursor
;
}
}
re_refresh
(
el
);
continue
;
ch
=
0
;
break
;
}
}
break
;
}
}
buf
[
len
]
=
ch
;
return
(
len
);
el
->
el_line
.
buffer
[
0
]
=
'\0'
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
return
len
;
}
}
...
...
cmd-line-utils/libedit/chared.h
View file @
8459cd35
/* $NetBSD: chared.h,v 1.
6 2001/01/10 07:45:41 jdolecek
Exp $ */
/* $NetBSD: chared.h,v 1.
11 2002/11/20 16:50:08 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -71,23 +71,31 @@ typedef struct c_macro_t {
...
@@ -71,23 +71,31 @@ typedef struct c_macro_t {
}
c_macro_t
;
}
c_macro_t
;
/*
/*
* Undo information for
both vi and emacs
* Undo information for
vi - no undo in emacs (yet)
*/
*/
typedef
struct
c_undo_t
{
typedef
struct
c_undo_t
{
int
action
;
int
len
;
/* length of saved line */
size_t
isize
;
int
cursor
;
/* position of saved cursor */
size_t
dsize
;
char
*
buf
;
/* full saved text */
char
*
ptr
;
char
*
buf
;
}
c_undo_t
;
}
c_undo_t
;
/* redo for vi */
typedef
struct
c_redo_t
{
char
*
buf
;
/* redo insert key sequence */
char
*
pos
;
char
*
lim
;
el_action_t
cmd
;
/* command to redo */
char
ch
;
/* char that invoked it */
int
count
;
int
action
;
/* from cv_action() */
}
c_redo_t
;
/*
/*
* Current action information for vi
* Current action information for vi
*/
*/
typedef
struct
c_vcmd_t
{
typedef
struct
c_vcmd_t
{
int
action
;
int
action
;
char
*
pos
;
char
*
pos
;
char
*
ins
;
}
c_vcmd_t
;
}
c_vcmd_t
;
/*
/*
...
@@ -106,6 +114,7 @@ typedef struct c_kill_t {
...
@@ -106,6 +114,7 @@ typedef struct c_kill_t {
typedef
struct
el_chared_t
{
typedef
struct
el_chared_t
{
c_undo_t
c_undo
;
c_undo_t
c_undo
;
c_kill_t
c_kill
;
c_kill_t
c_kill
;
c_redo_t
c_redo
;
c_vcmd_t
c_vcmd
;
c_vcmd_t
c_vcmd
;
c_macro_t
c_macro
;
c_macro_t
c_macro
;
}
el_chared_t
;
}
el_chared_t
;
...
@@ -120,10 +129,10 @@ typedef struct el_chared_t {
...
@@ -120,10 +129,10 @@ typedef struct el_chared_t {
#define NOP 0x00
#define NOP 0x00
#define DELETE 0x01
#define DELETE 0x01
#define INSERT 0x02
#define INSERT 0x02
#define
CHANGE
0x04
#define
YANK
0x04
#define CHAR_FWD
0
#define CHAR_FWD
(+1)
#define CHAR_BACK
1
#define CHAR_BACK
(-1)
#define MODE_INSERT 0
#define MODE_INSERT 0
#define MODE_REPLACE 1
#define MODE_REPLACE 1
...
@@ -137,23 +146,25 @@ typedef struct el_chared_t {
...
@@ -137,23 +146,25 @@ typedef struct el_chared_t {
protected
int
cv__isword
(
int
);
protected
int
cv__isword
(
int
);
protected
int
cv__isWord
(
int
);
protected
void
cv_delfini
(
EditLine
*
);
protected
void
cv_delfini
(
EditLine
*
);
protected
char
*
cv__endword
(
char
*
,
char
*
,
int
);
protected
char
*
cv__endword
(
char
*
,
char
*
,
int
,
int
(
*
)(
int
)
);
protected
int
ce__isword
(
int
);
protected
int
ce__isword
(
int
);
protected
void
cv_undo
(
EditLine
*
,
int
,
size_t
,
char
*
);
protected
void
cv_undo
(
EditLine
*
);
protected
void
cv_yank
(
EditLine
*
,
const
char
*
,
int
);
protected
char
*
cv_next_word
(
EditLine
*
,
char
*
,
char
*
,
int
,
int
(
*
)(
int
));
protected
char
*
cv_next_word
(
EditLine
*
,
char
*
,
char
*
,
int
,
int
(
*
)(
int
));
protected
char
*
cv_prev_word
(
EditLine
*
,
char
*
,
char
*
,
int
,
int
(
*
)(
int
));
protected
char
*
cv_prev_word
(
char
*
,
char
*
,
int
,
int
(
*
)(
int
));
protected
char
*
c__next_word
(
char
*
,
char
*
,
int
,
int
(
*
)(
int
));
protected
char
*
c__next_word
(
char
*
,
char
*
,
int
,
int
(
*
)(
int
));
protected
char
*
c__prev_word
(
char
*
,
char
*
,
int
,
int
(
*
)(
int
));
protected
char
*
c__prev_word
(
char
*
,
char
*
,
int
,
int
(
*
)(
int
));
protected
void
c_insert
(
EditLine
*
,
int
);
protected
void
c_insert
(
EditLine
*
,
int
);
protected
void
c_delbefore
(
EditLine
*
,
int
);
protected
void
c_delbefore
(
EditLine
*
,
int
);
protected
void
c_delafter
(
EditLine
*
,
int
);
protected
void
c_delafter
(
EditLine
*
,
int
);
protected
int
c_gets
(
EditLine
*
,
char
*
);
protected
int
c_gets
(
EditLine
*
,
char
*
,
const
char
*
);
protected
int
c_hpos
(
EditLine
*
);
protected
int
c_hpos
(
EditLine
*
);
protected
int
ch_init
(
EditLine
*
);
protected
int
ch_init
(
EditLine
*
);
protected
void
ch_reset
(
EditLine
*
);
protected
void
ch_reset
(
EditLine
*
);
protected
int
ch_enlargebufs
__P
((
EditLine
*
,
size_t
)
);
protected
int
ch_enlargebufs
(
EditLine
*
,
size_t
);
protected
void
ch_end
(
EditLine
*
);
protected
void
ch_end
(
EditLine
*
);
#endif
/* _h_el_chared */
#endif
/* _h_el_chared */
cmd-line-utils/libedit/common.c
View file @
8459cd35
/* $NetBSD: common.c,v 1.1
0 2001/01/10 07:45:41 jdolecek
Exp $ */
/* $NetBSD: common.c,v 1.1
4 2002/11/20 16:50:08 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,12 +36,18 @@
...
@@ -36,12 +36,18 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)common.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: common.c,v 1.14 2002/11/20 16:50:08 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* common.c: Common Editor functions
* common.c: Common Editor functions
*/
*/
#include "sys.h"
#include "el.h"
#include "el.h"
/* ed_end_of_file():
/* ed_end_of_file():
...
@@ -66,7 +72,7 @@ ed_end_of_file(EditLine *el, int c __attribute__((unused)))
...
@@ -66,7 +72,7 @@ ed_end_of_file(EditLine *el, int c __attribute__((unused)))
protected
el_action_t
protected
el_action_t
ed_insert
(
EditLine
*
el
,
int
c
)
ed_insert
(
EditLine
*
el
,
int
c
)
{
{
int
i
;
int
count
=
el
->
el_state
.
argument
;
if
(
c
==
'\0'
)
if
(
c
==
'\0'
)
return
(
CC_ERROR
);
return
(
CC_ERROR
);
...
@@ -74,42 +80,28 @@ ed_insert(EditLine *el, int c)
...
@@ -74,42 +80,28 @@ ed_insert(EditLine *el, int c)
if
(
el
->
el_line
.
lastchar
+
el
->
el_state
.
argument
>=
if
(
el
->
el_line
.
lastchar
+
el
->
el_state
.
argument
>=
el
->
el_line
.
limit
)
{
el
->
el_line
.
limit
)
{
/* end of buffer space, try to allocate more */
/* end of buffer space, try to allocate more */
if
(
!
ch_enlargebufs
(
el
,
(
size_t
)
el
->
el_state
.
argume
nt
))
if
(
!
ch_enlargebufs
(
el
,
(
size_t
)
cou
nt
))
return
CC_ERROR
;
/* error allocating more */
return
CC_ERROR
;
/* error allocating more */
}
}
if
(
el
->
el_state
.
argument
==
1
)
{
if
(
count
==
1
)
{
if
(
el
->
el_state
.
inputmode
!=
MODE_INSERT
)
{
if
(
el
->
el_state
.
inputmode
==
MODE_INSERT
el
->
el_chared
.
c_undo
.
buf
[
el
->
el_chared
.
c_undo
.
isize
++
]
=
||
el
->
el_line
.
cursor
>=
el
->
el_line
.
lastchar
)
*
el
->
el_line
.
cursor
;
el
->
el_chared
.
c_undo
.
buf
[
el
->
el_chared
.
c_undo
.
isize
]
=
'\0'
;
c_delafter
(
el
,
1
);
}
c_insert
(
el
,
1
);
c_insert
(
el
,
1
);
*
el
->
el_line
.
cursor
++
=
c
;
*
el
->
el_line
.
cursor
++
=
c
;
el
->
el_state
.
doingarg
=
0
;
/* just in case */
re_fastaddc
(
el
);
/* fast refresh for one char. */
re_fastaddc
(
el
);
/* fast refresh for one char. */
}
else
{
}
else
{
if
(
el
->
el_state
.
inputmode
!=
MODE_INSERT
)
{
if
(
el
->
el_state
.
inputmode
!=
MODE_REPLACE_1
)
for
(
i
=
0
;
i
<
el
->
el_state
.
argument
;
i
++
)
el
->
el_chared
.
c_undo
.
buf
[
el
->
el_chared
.
c_undo
.
isize
++
]
=
el
->
el_line
.
cursor
[
i
];
el
->
el_chared
.
c_undo
.
buf
[
el
->
el_chared
.
c_undo
.
isize
]
=
'\0'
;
c_delafter
(
el
,
el
->
el_state
.
argument
);
}
c_insert
(
el
,
el
->
el_state
.
argument
);
c_insert
(
el
,
el
->
el_state
.
argument
);
while
(
el
->
el_state
.
argument
--
)
while
(
count
--
&&
el
->
el_line
.
cursor
<
el
->
el_line
.
lastchar
)
*
el
->
el_line
.
cursor
++
=
c
;
*
el
->
el_line
.
cursor
++
=
c
;
re_refresh
(
el
);
re_refresh
(
el
);
}
}
if
(
el
->
el_state
.
inputmode
==
MODE_REPLACE_1
)
if
(
el
->
el_state
.
inputmode
==
MODE_REPLACE_1
)
(
void
)
vi_command_mode
(
el
,
0
);
return
vi_command_mode
(
el
,
0
);
return
(
CC_NORM
);
return
(
CC_NORM
);
}
}
...
@@ -229,7 +221,7 @@ ed_move_to_end(EditLine *el, int c __attribute__((unused)))
...
@@ -229,7 +221,7 @@ ed_move_to_end(EditLine *el, int c __attribute__((unused)))
#ifdef VI_MOVE
#ifdef VI_MOVE
el
->
el_line
.
cursor
--
;
el
->
el_line
.
cursor
--
;
#endif
#endif
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
...
@@ -253,7 +245,7 @@ ed_move_to_beg(EditLine *el, int c __attribute__((unused)))
...
@@ -253,7 +245,7 @@ ed_move_to_beg(EditLine *el, int c __attribute__((unused)))
/* We want FIRST non space character */
/* We want FIRST non space character */
while
(
isspace
((
unsigned
char
)
*
el
->
el_line
.
cursor
))
while
(
isspace
((
unsigned
char
)
*
el
->
el_line
.
cursor
))
el
->
el_line
.
cursor
++
;
el
->
el_line
.
cursor
++
;
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
...
@@ -295,16 +287,20 @@ protected el_action_t
...
@@ -295,16 +287,20 @@ protected el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
ed_next_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
ed_next_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
char
*
lim
=
el
->
el_line
.
lastchar
;
if
(
el
->
el_line
.
cursor
>=
el
->
el_line
.
lastchar
)
if
(
el
->
el_line
.
cursor
>=
lim
||
(
el
->
el_line
.
cursor
==
lim
-
1
&&
el
->
el_map
.
type
==
MAP_VI
&&
el
->
el_chared
.
c_vcmd
.
action
==
NOP
))
return
(
CC_ERROR
);
return
(
CC_ERROR
);
el
->
el_line
.
cursor
+=
el
->
el_state
.
argument
;
el
->
el_line
.
cursor
+=
el
->
el_state
.
argument
;
if
(
el
->
el_line
.
cursor
>
el
->
el_line
.
lastchar
)
if
(
el
->
el_line
.
cursor
>
lim
)
el
->
el_line
.
cursor
=
el
->
el_line
.
lastchar
;
el
->
el_line
.
cursor
=
lim
;
if
(
el
->
el_map
.
type
==
MAP_VI
)
if
(
el
->
el_map
.
type
==
MAP_VI
)
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
...
@@ -330,7 +326,7 @@ ed_prev_word(EditLine *el, int c __attribute__((unused)))
...
@@ -330,7 +326,7 @@ ed_prev_word(EditLine *el, int c __attribute__((unused)))
ce__isword
);
ce__isword
);
if
(
el
->
el_map
.
type
==
MAP_VI
)
if
(
el
->
el_map
.
type
==
MAP_VI
)
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
...
@@ -353,7 +349,7 @@ ed_prev_char(EditLine *el, int c __attribute__((unused)))
...
@@ -353,7 +349,7 @@ ed_prev_char(EditLine *el, int c __attribute__((unused)))
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
if
(
el
->
el_map
.
type
==
MAP_VI
)
if
(
el
->
el_map
.
type
==
MAP_VI
)
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
...
@@ -405,25 +401,9 @@ ed_digit(EditLine *el, int c)
...
@@ -405,25 +401,9 @@ ed_digit(EditLine *el, int c)
(
el
->
el_state
.
argument
*
10
)
+
(
c
-
'0'
);
(
el
->
el_state
.
argument
*
10
)
+
(
c
-
'0'
);
}
}
return
(
CC_ARGHACK
);
return
(
CC_ARGHACK
);
}
else
{
if
(
el
->
el_line
.
lastchar
+
1
>=
el
->
el_line
.
limit
)
{
if
(
!
ch_enlargebufs
(
el
,
1
))
return
(
CC_ERROR
);
}
}
if
(
el
->
el_state
.
inputmode
!=
MODE_INSERT
)
{
return
ed_insert
(
el
,
c
);
el
->
el_chared
.
c_undo
.
buf
[
el
->
el_chared
.
c_undo
.
isize
++
]
=
*
el
->
el_line
.
cursor
;
el
->
el_chared
.
c_undo
.
buf
[
el
->
el_chared
.
c_undo
.
isize
]
=
'\0'
;
c_delafter
(
el
,
1
);
}
c_insert
(
el
,
1
);
*
el
->
el_line
.
cursor
++
=
c
;
el
->
el_state
.
doingarg
=
0
;
re_fastaddc
(
el
);
}
return
(
CC_NORM
);
}
}
...
@@ -457,12 +437,11 @@ ed_argument_digit(EditLine *el, int c)
...
@@ -457,12 +437,11 @@ ed_argument_digit(EditLine *el, int c)
*/
*/
protected
el_action_t
protected
el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
ed_unassigned
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
ed_unassigned
(
EditLine
*
el
__attribute__
((
unused
)),
int
c
__attribute__
((
unused
)))
{
{
term_beep
(
el
);
return
(
CC_ERROR
);
term__flush
();
return
(
CC_NORM
);
}
}
...
@@ -580,8 +559,6 @@ ed_newline(EditLine *el, int c __attribute__((unused)))
...
@@ -580,8 +559,6 @@ ed_newline(EditLine *el, int c __attribute__((unused)))
re_goto_bottom
(
el
);
re_goto_bottom
(
el
);
*
el
->
el_line
.
lastchar
++
=
'\n'
;
*
el
->
el_line
.
lastchar
++
=
'\n'
;
*
el
->
el_line
.
lastchar
=
'\0'
;
*
el
->
el_line
.
lastchar
=
'\0'
;
if
(
el
->
el_map
.
type
==
MAP_VI
)
el
->
el_chared
.
c_vcmd
.
ins
=
el
->
el_line
.
buffer
;
return
(
CC_NEWLINE
);
return
(
CC_NEWLINE
);
}
}
...
@@ -672,8 +649,9 @@ protected el_action_t
...
@@ -672,8 +649,9 @@ protected el_action_t
ed_prev_history
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
ed_prev_history
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
char
beep
=
0
;
char
beep
=
0
;
int
sv_event
=
el
->
el_history
.
eventno
;
el
->
el_chared
.
c_undo
.
action
=
NOP
;
el
->
el_chared
.
c_undo
.
len
=
-
1
;
*
el
->
el_line
.
lastchar
=
'\0'
;
/* just in case */
*
el
->
el_line
.
lastchar
=
'\0'
;
/* just in case */
if
(
el
->
el_history
.
eventno
==
0
)
{
/* save the current buffer
if
(
el
->
el_history
.
eventno
==
0
)
{
/* save the current buffer
...
@@ -686,15 +664,17 @@ ed_prev_history(EditLine *el, int c __attribute__((unused)))
...
@@ -686,15 +664,17 @@ ed_prev_history(EditLine *el, int c __attribute__((unused)))
el
->
el_history
.
eventno
+=
el
->
el_state
.
argument
;
el
->
el_history
.
eventno
+=
el
->
el_state
.
argument
;
if
(
hist_get
(
el
)
==
CC_ERROR
)
{
if
(
hist_get
(
el
)
==
CC_ERROR
)
{
if
(
el
->
el_map
.
type
==
MAP_VI
)
{
el
->
el_history
.
eventno
=
sv_event
;
return
CC_ERROR
;
}
beep
=
1
;
beep
=
1
;
/* el->el_history.eventno was fixed by first call */
/* el->el_history.eventno was fixed by first call */
(
void
)
hist_get
(
el
);
(
void
)
hist_get
(
el
);
}
}
re_refresh
(
el
);
if
(
beep
)
if
(
beep
)
return
(
CC_ERROR
);
return
CC_REFRESH_BEEP
;
else
return
CC_REFRESH
;
return
(
CC_NORM
);
/* was CC_UP_HIST */
}
}
...
@@ -706,17 +686,22 @@ protected el_action_t
...
@@ -706,17 +686,22 @@ protected el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
ed_next_history
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
ed_next_history
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
el_action_t
beep
=
CC_REFRESH
,
rval
;
el
->
el_chared
.
c_undo
.
action
=
NOP
;
el
->
el_chared
.
c_undo
.
len
=
-
1
;
*
el
->
el_line
.
lastchar
=
'\0'
;
/* just in case */
*
el
->
el_line
.
lastchar
=
'\0'
;
/* just in case */
el
->
el_history
.
eventno
-=
el
->
el_state
.
argument
;
el
->
el_history
.
eventno
-=
el
->
el_state
.
argument
;
if
(
el
->
el_history
.
eventno
<
0
)
{
if
(
el
->
el_history
.
eventno
<
0
)
{
el
->
el_history
.
eventno
=
0
;
el
->
el_history
.
eventno
=
0
;
return
(
CC_ERROR
);
/* make it beep */
beep
=
CC_REFRESH_BEEP
;
}
}
return
(
hist_get
(
el
));
rval
=
hist_get
(
el
);
if
(
rval
==
CC_REFRESH
)
return
beep
;
return
rval
;
}
}
...
@@ -733,7 +718,7 @@ ed_search_prev_history(EditLine *el, int c __attribute__((unused)))
...
@@ -733,7 +718,7 @@ ed_search_prev_history(EditLine *el, int c __attribute__((unused)))
bool_t
found
=
0
;
bool_t
found
=
0
;
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_undo
.
action
=
NOP
;
el
->
el_chared
.
c_undo
.
len
=
-
1
;
*
el
->
el_line
.
lastchar
=
'\0'
;
/* just in case */
*
el
->
el_line
.
lastchar
=
'\0'
;
/* just in case */
if
(
el
->
el_history
.
eventno
<
0
)
{
if
(
el
->
el_history
.
eventno
<
0
)
{
#ifdef DEBUG_EDIT
#ifdef DEBUG_EDIT
...
@@ -801,7 +786,7 @@ ed_search_next_history(EditLine *el, int c __attribute__((unused)))
...
@@ -801,7 +786,7 @@ ed_search_next_history(EditLine *el, int c __attribute__((unused)))
bool_t
found
=
0
;
bool_t
found
=
0
;
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_undo
.
action
=
NOP
;
el
->
el_chared
.
c_undo
.
len
=
-
1
;
*
el
->
el_line
.
lastchar
=
'\0'
;
/* just in case */
*
el
->
el_line
.
lastchar
=
'\0'
;
/* just in case */
if
(
el
->
el_history
.
eventno
==
0
)
if
(
el
->
el_history
.
eventno
==
0
)
...
@@ -930,25 +915,13 @@ ed_command(EditLine *el, int c __attribute__((unused)))
...
@@ -930,25 +915,13 @@ ed_command(EditLine *el, int c __attribute__((unused)))
char
tmpbuf
[
EL_BUFSIZ
];
char
tmpbuf
[
EL_BUFSIZ
];
int
tmplen
;
int
tmplen
;
el
->
el_line
.
buffer
[
0
]
=
'\0'
;
tmplen
=
c_gets
(
el
,
tmpbuf
,
"
\n
: "
);
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
term__putc
(
'\n'
);
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
c_insert
(
el
,
3
);
/* prompt + ": " */
if
(
tmplen
<
0
||
(
tmpbuf
[
tmplen
]
=
0
,
parse_line
(
el
,
tmpbuf
))
==
-
1
)
*
el
->
el_line
.
cursor
++
=
'\n'
;
term_beep
(
el
);
*
el
->
el_line
.
cursor
++
=
':'
;
*
el
->
el_line
.
cursor
++
=
' '
;
re_refresh
(
el
);
tmplen
=
c_gets
(
el
,
tmpbuf
);
tmpbuf
[
tmplen
]
=
'\0'
;
el
->
el_line
.
buffer
[
0
]
=
'\0'
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
if
(
parse_line
(
el
,
tmpbuf
)
==
-
1
)
el
->
el_map
.
current
=
el
->
el_map
.
key
;
return
(
CC_ERROR
);
re_clear_display
(
el
);
else
return
CC_REFRESH
;
return
(
CC_REFRESH
);
}
}
cmd-line-utils/libedit/el.c
View file @
8459cd35
/* $NetBSD: el.c,v 1.
21 2001/01/05 22:45:30 christos
Exp $ */
/* $NetBSD: el.c,v 1.
30 2002/11/12 00:00:23 thorpej
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,13 +36,18 @@
...
@@ -36,13 +36,18 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)el.c 8.2 (Berkeley) 1/3/94";
#else
__RCSID
(
"$NetBSD: el.c,v 1.30 2002/11/12 00:00:23 thorpej Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* el.c: EditLine interface functions
* el.c: EditLine interface functions
*/
*/
#include "sys.h"
#include <sys/types.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/param.h>
#include <string.h>
#include <string.h>
...
@@ -58,9 +63,6 @@ el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr)
...
@@ -58,9 +63,6 @@ el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr)
{
{
EditLine
*
el
=
(
EditLine
*
)
el_malloc
(
sizeof
(
EditLine
));
EditLine
*
el
=
(
EditLine
*
)
el_malloc
(
sizeof
(
EditLine
));
#ifdef DEBUG
char
*
tty
;
#endif
if
(
el
==
NULL
)
if
(
el
==
NULL
)
return
(
NULL
);
return
(
NULL
);
...
@@ -77,7 +79,11 @@ el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr)
...
@@ -77,7 +79,11 @@ el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr)
*/
*/
el
->
el_flags
=
0
;
el
->
el_flags
=
0
;
(
void
)
term_init
(
el
);
if
(
term_init
(
el
)
==
-
1
)
{
free
(
el
->
el_prog
);
el_free
(
el
);
return
NULL
;
}
(
void
)
key_init
(
el
);
(
void
)
key_init
(
el
);
(
void
)
map_init
(
el
);
(
void
)
map_init
(
el
);
if
(
tty_init
(
el
)
==
-
1
)
if
(
tty_init
(
el
)
==
-
1
)
...
@@ -87,6 +93,7 @@ el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr)
...
@@ -87,6 +93,7 @@ el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr)
(
void
)
hist_init
(
el
);
(
void
)
hist_init
(
el
);
(
void
)
prompt_init
(
el
);
(
void
)
prompt_init
(
el
);
(
void
)
sig_init
(
el
);
(
void
)
sig_init
(
el
);
(
void
)
read_init
(
el
);
return
(
el
);
return
(
el
);
}
}
...
@@ -138,11 +145,12 @@ public int
...
@@ -138,11 +145,12 @@ public int
el_set
(
EditLine
*
el
,
int
op
,
...)
el_set
(
EditLine
*
el
,
int
op
,
...)
{
{
va_list
va
;
va_list
va
;
int
rv
;
int
rv
=
0
;
va_start
(
va
,
op
);
if
(
el
==
NULL
)
if
(
el
==
NULL
)
return
(
-
1
);
return
(
-
1
);
va_start
(
va
,
op
);
switch
(
op
)
{
switch
(
op
)
{
case
EL_PROMPT
:
case
EL_PROMPT
:
case
EL_RPROMPT
:
case
EL_RPROMPT
:
...
@@ -162,7 +170,6 @@ el_set(EditLine *el, int op, ...)
...
@@ -162,7 +170,6 @@ el_set(EditLine *el, int op, ...)
el
->
el_flags
|=
HANDLE_SIGNALS
;
el
->
el_flags
|=
HANDLE_SIGNALS
;
else
else
el
->
el_flags
&=
~
HANDLE_SIGNALS
;
el
->
el_flags
&=
~
HANDLE_SIGNALS
;
rv
=
0
;
break
;
break
;
case
EL_BIND
:
case
EL_BIND
:
...
@@ -239,8 +246,20 @@ el_set(EditLine *el, int op, ...)
...
@@ -239,8 +246,20 @@ el_set(EditLine *el, int op, ...)
rv
=
0
;
rv
=
0
;
break
;
break
;
case
EL_GETCFN
:
{
el_rfunc_t
rc
=
va_arg
(
va
,
el_rfunc_t
);
rv
=
el_read_setfn
(
el
,
rc
);
break
;
}
case
EL_CLIENTDATA
:
el
->
el_data
=
va_arg
(
va
,
void
*
);
break
;
default:
default:
rv
=
-
1
;
rv
=
-
1
;
break
;
}
}
va_end
(
va
);
va_end
(
va
);
...
@@ -261,11 +280,11 @@ el_get(EditLine *el, int op, void *ret)
...
@@ -261,11 +280,11 @@ el_get(EditLine *el, int op, void *ret)
switch
(
op
)
{
switch
(
op
)
{
case
EL_PROMPT
:
case
EL_PROMPT
:
case
EL_RPROMPT
:
case
EL_RPROMPT
:
rv
=
prompt_get
(
el
,
(
el_pfunc_t
*
)
&
ret
,
op
);
rv
=
prompt_get
(
el
,
(
void
*
)
&
ret
,
op
);
break
;
break
;
case
EL_EDITOR
:
case
EL_EDITOR
:
rv
=
map_get_editor
(
el
,
(
const
char
*
*
)
&
ret
);
rv
=
map_get_editor
(
el
,
(
void
*
)
&
ret
);
break
;
break
;
case
EL_SIGNAL
:
case
EL_SIGNAL
:
...
@@ -349,6 +368,16 @@ el_get(EditLine *el, int op, void *ret)
...
@@ -349,6 +368,16 @@ el_get(EditLine *el, int op, void *ret)
break;
break;
#endif /* XXX */
#endif /* XXX */
case
EL_GETCFN
:
*
((
el_rfunc_t
*
)
ret
)
=
el_read_getfn
(
el
);
rv
=
0
;
break
;
case
EL_CLIENTDATA
:
*
((
void
**
)
ret
)
=
el
->
el_data
;
rv
=
0
;
break
;
default:
default:
rv
=
-
1
;
rv
=
-
1
;
}
}
...
@@ -367,15 +396,6 @@ el_line(EditLine *el)
...
@@ -367,15 +396,6 @@ el_line(EditLine *el)
return
(
const
LineInfo
*
)
(
void
*
)
&
el
->
el_line
;
return
(
const
LineInfo
*
)
(
void
*
)
&
el
->
el_line
;
}
}
static
const
char
elpath
[]
=
"/.editrc"
;
#if defined(MAXPATHLEN)
#define LIBEDIT_MAXPATHLEN MAXPATHLEN
#elif defined(PATH_MAX)
#define LIBEDIT_MAXPATHLEN PATH_MAX
#else
#define LIBEDIT_MAXPATHLEN 1024
#endif
/* el_source():
/* el_source():
* Source a file
* Source a file
...
@@ -385,10 +405,14 @@ el_source(EditLine *el, const char *fname)
...
@@ -385,10 +405,14 @@ el_source(EditLine *el, const char *fname)
{
{
FILE
*
fp
;
FILE
*
fp
;
size_t
len
;
size_t
len
;
char
*
ptr
,
path
[
LIBEDIT_MAXPATHLEN
]
;
char
*
ptr
;
fp
=
NULL
;
fp
=
NULL
;
if
(
fname
==
NULL
)
{
if
(
fname
==
NULL
)
{
#ifdef HAVE_ISSETUGID
static
const
char
elpath
[]
=
"/.editrc"
;
char
path
[
MAXPATHLEN
];
if
(
issetugid
())
if
(
issetugid
())
return
(
-
1
);
return
(
-
1
);
if
((
ptr
=
getenv
(
"HOME"
))
==
NULL
)
if
((
ptr
=
getenv
(
"HOME"
))
==
NULL
)
...
@@ -398,6 +422,14 @@ el_source(EditLine *el, const char *fname)
...
@@ -398,6 +422,14 @@ el_source(EditLine *el, const char *fname)
if
(
strlcat
(
path
,
elpath
,
sizeof
(
path
))
>=
sizeof
(
path
))
if
(
strlcat
(
path
,
elpath
,
sizeof
(
path
))
>=
sizeof
(
path
))
return
(
-
1
);
return
(
-
1
);
fname
=
path
;
fname
=
path
;
#else
/*
* If issetugid() is missing, always return an error, in order
* to keep from inadvertently opening up the user to a security
* hole.
*/
return
(
-
1
);
#endif
}
}
if
(
fp
==
NULL
)
if
(
fp
==
NULL
)
fp
=
fopen
(
fname
,
"r"
);
fp
=
fopen
(
fname
,
"r"
);
...
...
cmd-line-utils/libedit/el.h
View file @
8459cd35
/* $NetBSD: el.h,v 1.
8 2001/01/06 14:44:50 jdolecek
Exp $ */
/* $NetBSD: el.h,v 1.
13 2002/11/15 14:32:33 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -84,6 +84,8 @@ typedef struct el_state_t {
...
@@ -84,6 +84,8 @@ typedef struct el_state_t {
int
argument
;
/* Numeric argument */
int
argument
;
/* Numeric argument */
int
metanext
;
/* Is the next char a meta char */
int
metanext
;
/* Is the next char a meta char */
el_action_t
lastcmd
;
/* Previous command */
el_action_t
lastcmd
;
/* Previous command */
el_action_t
thiscmd
;
/* this command */
char
thisch
;
/* char that generated it */
}
el_state_t
;
}
el_state_t
;
/*
/*
...
@@ -96,7 +98,7 @@ typedef struct el_state_t {
...
@@ -96,7 +98,7 @@ typedef struct el_state_t {
#include "tty.h"
#include "tty.h"
#include "prompt.h"
#include "prompt.h"
#include "key.h"
#include "key.h"
#include "
libedit_
term.h"
#include "term.h"
#include "refresh.h"
#include "refresh.h"
#include "chared.h"
#include "chared.h"
#include "common.h"
#include "common.h"
...
@@ -106,6 +108,7 @@ typedef struct el_state_t {
...
@@ -106,6 +108,7 @@ typedef struct el_state_t {
#include "parse.h"
#include "parse.h"
#include "sig.h"
#include "sig.h"
#include "help.h"
#include "help.h"
#include "read.h"
struct
editline
{
struct
editline
{
char
*
el_prog
;
/* the program name */
char
*
el_prog
;
/* the program name */
...
@@ -116,6 +119,7 @@ struct editline {
...
@@ -116,6 +119,7 @@ struct editline {
coord_t
el_cursor
;
/* Cursor location */
coord_t
el_cursor
;
/* Cursor location */
char
**
el_display
;
/* Real screen image = what is there */
char
**
el_display
;
/* Real screen image = what is there */
char
**
el_vdisplay
;
/* Virtual screen image = what we see */
char
**
el_vdisplay
;
/* Virtual screen image = what we see */
void
*
el_data
;
/* Client data */
el_line_t
el_line
;
/* The current line information */
el_line_t
el_line
;
/* The current line information */
el_state_t
el_state
;
/* Current editor state */
el_state_t
el_state
;
/* Current editor state */
el_term_t
el_term
;
/* Terminal dependent stuff */
el_term_t
el_term
;
/* Terminal dependent stuff */
...
@@ -129,13 +133,18 @@ struct editline {
...
@@ -129,13 +133,18 @@ struct editline {
el_history_t
el_history
;
/* History stuff */
el_history_t
el_history
;
/* History stuff */
el_search_t
el_search
;
/* Search stuff */
el_search_t
el_search
;
/* Search stuff */
el_signal_t
el_signal
;
/* Signal handling stuff */
el_signal_t
el_signal
;
/* Signal handling stuff */
el_read_t
el_read
;
/* Character reading stuff */
};
};
protected
int
el_editmode
(
EditLine
*
,
int
,
const
char
**
);
protected
int
el_editmode
(
EditLine
*
,
int
,
const
char
**
);
#ifdef DEBUG
#ifdef DEBUG
#define EL_ABORT(a) (void) (fprintf(el->el_errfile, "%s, %d: ", \
#define EL_ABORT(a) do { \
__FILE__, __LINE__), fprintf a, abort())
fprintf(el->el_errfile, "%s, %d: ", \
__FILE__, __LINE__); \
fprintf a; \
abort(); \
} while(
/*CONSTCOND*/
0);
#else
#else
#define EL_ABORT(a) abort()
#define EL_ABORT(a) abort()
#endif
#endif
...
...
cmd-line-utils/libedit/emacs.c
View file @
8459cd35
/* $NetBSD: emacs.c,v 1.
9 2001/01/10 07:45:41 jdolecek
Exp $ */
/* $NetBSD: emacs.c,v 1.
12 2002/11/15 14:32:33 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,12 +36,18 @@
...
@@ -36,12 +36,18 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)emacs.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: emacs.c,v 1.12 2002/11/15 14:32:33 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* emacs.c: Emacs functions
* emacs.c: Emacs functions
*/
*/
#include "sys.h"
#include "el.h"
#include "el.h"
/* em_delete_or_list():
/* em_delete_or_list():
...
@@ -209,7 +215,7 @@ em_copy_region(EditLine *el, int c __attribute__((unused)))
...
@@ -209,7 +215,7 @@ em_copy_region(EditLine *el, int c __attribute__((unused)))
{
{
char
*
kp
,
*
cp
;
char
*
kp
,
*
cp
;
if
(
el
->
el_chared
.
c_kill
.
mark
)
if
(
!
el
->
el_chared
.
c_kill
.
mark
)
return
(
CC_ERROR
);
return
(
CC_ERROR
);
if
(
el
->
el_chared
.
c_kill
.
mark
>
el
->
el_line
.
cursor
)
{
if
(
el
->
el_chared
.
c_kill
.
mark
>
el
->
el_line
.
cursor
)
{
...
@@ -265,7 +271,7 @@ em_next_word(EditLine *el, int c __attribute__((unused)))
...
@@ -265,7 +271,7 @@ em_next_word(EditLine *el, int c __attribute__((unused)))
ce__isword
);
ce__isword
);
if
(
el
->
el_map
.
type
==
MAP_VI
)
if
(
el
->
el_map
.
type
==
MAP_VI
)
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
...
...
cmd-line-utils/libedit/hist.c
View file @
8459cd35
/* $NetBSD: hist.c,v 1.
9 2001/05/17 01:02:17
christos Exp $ */
/* $NetBSD: hist.c,v 1.
12 2003/01/21 18:40:23
christos Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,12 +36,18 @@
...
@@ -36,12 +36,18 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)hist.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: hist.c,v 1.12 2003/01/21 18:40:23 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* hist.c: History access functions
* hist.c: History access functions
*/
*/
#include "sys.h"
#include <stdlib.h>
#include <stdlib.h>
#include "el.h"
#include "el.h"
...
@@ -126,18 +132,16 @@ hist_get(EditLine *el)
...
@@ -126,18 +132,16 @@ hist_get(EditLine *el)
el
->
el_history
.
eventno
=
h
;
el
->
el_history
.
eventno
=
h
;
return
(
CC_ERROR
);
return
(
CC_ERROR
);
}
}
(
void
)
str
n
cpy
(
el
->
el_line
.
buffer
,
hp
,
(
void
)
str
l
cpy
(
el
->
el_line
.
buffer
,
hp
,
(
size_t
)(
el
->
el_line
.
limit
-
el
->
el_line
.
buffer
));
(
size_t
)(
el
->
el_line
.
limit
-
el
->
el_line
.
buffer
));
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
+
strlen
(
el
->
el_line
.
buffer
);
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
+
strlen
(
el
->
el_line
.
buffer
);
if
(
el
->
el_line
.
lastchar
>
el
->
el_line
.
buffer
)
{
if
(
el
->
el_line
.
lastchar
>
el
->
el_line
.
buffer
if
(
el
->
el_line
.
lastchar
[
-
1
]
==
'\n'
)
&&
el
->
el_line
.
lastchar
[
-
1
]
==
'\n'
)
el
->
el_line
.
lastchar
--
;
el
->
el_line
.
lastchar
--
;
if
(
el
->
el_line
.
lastchar
[
-
1
]
==
' '
)
if
(
el
->
el_line
.
lastchar
>
el
->
el_line
.
buffer
&&
el
->
el_line
.
lastchar
[
-
1
]
==
' '
)
el
->
el_line
.
lastchar
--
;
el
->
el_line
.
lastchar
--
;
if
(
el
->
el_line
.
lastchar
<
el
->
el_line
.
buffer
)
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
}
#ifdef KSHVI
#ifdef KSHVI
if
(
el
->
el_map
.
type
==
MAP_VI
)
if
(
el
->
el_map
.
type
==
MAP_VI
)
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
...
@@ -149,22 +153,41 @@ hist_get(EditLine *el)
...
@@ -149,22 +153,41 @@ hist_get(EditLine *el)
}
}
/* hist_
list
()
/* hist_
command
()
*
List history entries
*
process a history command
*/
*/
protected
int
protected
int
/*ARGSUSED*/
/*ARGSUSED*/
hist_list
(
EditLine
*
el
,
int
argc
__attribute__
((
unused
)),
hist_command
(
EditLine
*
el
,
int
argc
,
const
char
**
argv
)
const
char
**
argv
__attribute__
((
unused
)))
{
{
const
char
*
str
;
const
char
*
str
;
int
num
;
HistEvent
ev
;
if
(
el
->
el_history
.
ref
==
NULL
)
if
(
el
->
el_history
.
ref
==
NULL
)
return
(
-
1
);
return
(
-
1
);
if
(
argc
==
0
||
strcmp
(
argv
[
0
],
"list"
)
==
1
)
{
/* List history entries */
for
(
str
=
HIST_LAST
(
el
);
str
!=
NULL
;
str
=
HIST_PREV
(
el
))
for
(
str
=
HIST_LAST
(
el
);
str
!=
NULL
;
str
=
HIST_PREV
(
el
))
(
void
)
fprintf
(
el
->
el_outfile
,
"%d %s"
,
(
void
)
fprintf
(
el
->
el_outfile
,
"%d %s"
,
el
->
el_history
.
ev
.
num
,
str
);
el
->
el_history
.
ev
.
num
,
str
);
return
(
0
);
return
(
0
);
}
if
(
argc
!=
2
)
return
(
-
1
);
num
=
(
int
)
strtol
(
argv
[
1
],
NULL
,
0
);
if
(
strcmp
(
argv
[
0
],
"size"
)
==
0
)
return
history
(
el
->
el_history
.
ref
,
&
ev
,
H_SETSIZE
,
num
);
if
(
strcmp
(
argv
[
0
],
"unique"
)
==
0
)
return
history
(
el
->
el_history
.
ref
,
&
ev
,
H_SETUNIQUE
,
num
);
return
-
1
;
}
}
/* hist_enlargebuf()
/* hist_enlargebuf()
...
...
cmd-line-utils/libedit/hist.h
View file @
8459cd35
/* $NetBSD: hist.h,v 1.
6 2001/01/10 07:45:41 jdolecek
Exp $ */
/* $NetBSD: hist.h,v 1.
9 2003/01/21 18:40:23 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -66,7 +66,7 @@ typedef struct el_history_t {
...
@@ -66,7 +66,7 @@ typedef struct el_history_t {
#define HIST_FIRST(el) HIST_FUN(el, H_FIRST, NULL)
#define HIST_FIRST(el) HIST_FUN(el, H_FIRST, NULL)
#define HIST_LAST(el) HIST_FUN(el, H_LAST, NULL)
#define HIST_LAST(el) HIST_FUN(el, H_LAST, NULL)
#define HIST_PREV(el) HIST_FUN(el, H_PREV, NULL)
#define HIST_PREV(el) HIST_FUN(el, H_PREV, NULL)
#define HIST_
EVENT(el, num) HIST_FUN(el, H_EVEN
T, num)
#define HIST_
SET(el, num) HIST_FUN(el, H_SE
T, num)
#define HIST_LOAD(el, fname) HIST_FUN(el, H_LOAD fname)
#define HIST_LOAD(el, fname) HIST_FUN(el, H_LOAD fname)
#define HIST_SAVE(el, fname) HIST_FUN(el, H_SAVE fname)
#define HIST_SAVE(el, fname) HIST_FUN(el, H_SAVE fname)
...
@@ -74,7 +74,7 @@ protected int hist_init(EditLine *);
...
@@ -74,7 +74,7 @@ protected int hist_init(EditLine *);
protected
void
hist_end
(
EditLine
*
);
protected
void
hist_end
(
EditLine
*
);
protected
el_action_t
hist_get
(
EditLine
*
);
protected
el_action_t
hist_get
(
EditLine
*
);
protected
int
hist_set
(
EditLine
*
,
hist_fun_t
,
ptr_t
);
protected
int
hist_set
(
EditLine
*
,
hist_fun_t
,
ptr_t
);
protected
int
hist_
list
(
EditLine
*
,
int
,
const
char
**
);
protected
int
hist_
command
(
EditLine
*
,
int
,
const
char
**
);
protected
int
hist_enlargebuf
(
EditLine
*
,
size_t
,
size_t
);
protected
int
hist_enlargebuf
(
EditLine
*
,
size_t
,
size_t
);
#endif
/* _h_el_hist */
#endif
/* _h_el_hist */
cmd-line-utils/libedit/histedit.h
View file @
8459cd35
/* $NetBSD: histedit.h,v 1.
16 2000/09/04 22:06:30 lukem
Exp $ */
/* $NetBSD: histedit.h,v 1.
21 2003/01/21 18:40:24 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -44,6 +44,9 @@
...
@@ -44,6 +44,9 @@
#ifndef _HISTEDIT_H_
#ifndef _HISTEDIT_H_
#define _HISTEDIT_H_
#define _HISTEDIT_H_
#define LIBEDIT_MAJOR 2
#define LIBEDIT_MINOR 6
#include <sys/types.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdio.h>
...
@@ -90,7 +93,7 @@ void el_end(EditLine *);
...
@@ -90,7 +93,7 @@ void el_end(EditLine *);
*/
*/
const
char
*
el_gets
(
EditLine
*
,
int
*
);
const
char
*
el_gets
(
EditLine
*
,
int
*
);
int
el_getc
(
EditLine
*
,
char
*
);
int
el_getc
(
EditLine
*
,
char
*
);
void
el_push
(
EditLine
*
,
c
onst
c
har
*
);
void
el_push
(
EditLine
*
,
char
*
);
/*
/*
* Beep!
* Beep!
...
@@ -126,6 +129,10 @@ int el_get(EditLine *, int, void *);
...
@@ -126,6 +129,10 @@ int el_get(EditLine *, int, void *);
#define EL_HIST 10
/* , hist_fun_t, const char *); */
#define EL_HIST 10
/* , hist_fun_t, const char *); */
#define EL_EDITMODE 11
/* , int); */
#define EL_EDITMODE 11
/* , int); */
#define EL_RPROMPT 12
/* , el_pfunc_t); */
#define EL_RPROMPT 12
/* , el_pfunc_t); */
#define EL_GETCFN 13
/* , el_rfunc_t); */
#define EL_CLIENTDATA 14
/* , void *); */
#define EL_BUILTIN_GETCFN (NULL)
/*
/*
* Source named file or $PWD/.editrc or $HOME/.editrc
* Source named file or $PWD/.editrc or $HOME/.editrc
...
@@ -174,7 +181,7 @@ int history(History *, HistEvent *, int, ...);
...
@@ -174,7 +181,7 @@ int history(History *, HistEvent *, int, ...);
#define H_PREV 5
/* , void); */
#define H_PREV 5
/* , void); */
#define H_NEXT 6
/* , void); */
#define H_NEXT 6
/* , void); */
#define H_CURR 8
/* , const int); */
#define H_CURR 8
/* , const int); */
#define H_SET 7
/* ,
void
); */
#define H_SET 7
/* ,
int
); */
#define H_ADD 9
/* , const char *); */
#define H_ADD 9
/* , const char *); */
#define H_ENTER 10
/* , const char *); */
#define H_ENTER 10
/* , const char *); */
#define H_APPEND 11
/* , const char *); */
#define H_APPEND 11
/* , const char *); */
...
@@ -186,5 +193,7 @@ int history(History *, HistEvent *, int, ...);
...
@@ -186,5 +193,7 @@ int history(History *, HistEvent *, int, ...);
#define H_LOAD 17
/* , const char *); */
#define H_LOAD 17
/* , const char *); */
#define H_SAVE 18
/* , const char *); */
#define H_SAVE 18
/* , const char *); */
#define H_CLEAR 19
/* , void); */
#define H_CLEAR 19
/* , void); */
#define H_SETUNIQUE 20
/* , int); */
#define H_GETUNIQUE 21
/* , void); */
#endif
/* _HISTEDIT_H_ */
#endif
/* _HISTEDIT_H_ */
cmd-line-utils/libedit/history.c
View file @
8459cd35
/* $NetBSD: history.c,v 1.
17 2001/03/20 00:08:31
christos Exp $ */
/* $NetBSD: history.c,v 1.
22 2003/01/21 18:40:24
christos Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,18 +36,25 @@
...
@@ -36,18 +36,25 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)history.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: history.c,v 1.22 2003/01/21 18:40:24 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* hist.c: History access functions
* hist.c: History access functions
*/
*/
#include "sys.h"
#include <string.h>
#include <string.h>
#include <stdlib.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stdarg.h>
#ifdef HAVE_VIS_H
#ifdef HAVE_VIS_H
#include <vis.h>
#include <vis.h>
#else
#include "np/vis.h"
#endif
#endif
#include <sys/stat.h>
#include <sys/stat.h>
...
@@ -73,6 +80,7 @@ struct history {
...
@@ -73,6 +80,7 @@ struct history {
history_efun_t
h_enter
;
/* Add an element */
history_efun_t
h_enter
;
/* Add an element */
history_efun_t
h_add
;
/* Append to an element */
history_efun_t
h_add
;
/* Append to an element */
};
};
#define HNEXT(h, ev) (*(h)->h_next)((h)->h_ref, ev)
#define HNEXT(h, ev) (*(h)->h_next)((h)->h_ref, ev)
#define HFIRST(h, ev) (*(h)->h_first)((h)->h_ref, ev)
#define HFIRST(h, ev) (*(h)->h_first)((h)->h_ref, ev)
#define HPREV(h, ev) (*(h)->h_prev)((h)->h_ref, ev)
#define HPREV(h, ev) (*(h)->h_prev)((h)->h_ref, ev)
...
@@ -87,9 +95,17 @@ struct history {
...
@@ -87,9 +95,17 @@ struct history {
#define h_realloc(a, b) realloc((a), (b))
#define h_realloc(a, b) realloc((a), (b))
#define h_free(a) free(a)
#define h_free(a) free(a)
typedef
struct
{
int
num
;
char
*
str
;
}
HistEventPrivate
;
private
int
history_setsize
(
History
*
,
HistEvent
*
,
int
);
private
int
history_setsize
(
History
*
,
HistEvent
*
,
int
);
private
int
history_getsize
(
History
*
,
HistEvent
*
);
private
int
history_getsize
(
History
*
,
HistEvent
*
);
private
int
history_setunique
(
History
*
,
HistEvent
*
,
int
);
private
int
history_getunique
(
History
*
,
HistEvent
*
);
private
int
history_set_fun
(
History
*
,
History
*
);
private
int
history_set_fun
(
History
*
,
History
*
);
private
int
history_load
(
History
*
,
const
char
*
);
private
int
history_load
(
History
*
,
const
char
*
);
private
int
history_save
(
History
*
,
const
char
*
);
private
int
history_save
(
History
*
,
const
char
*
);
...
@@ -116,6 +132,8 @@ typedef struct history_t {
...
@@ -116,6 +132,8 @@ typedef struct history_t {
int
max
;
/* Maximum number of events */
int
max
;
/* Maximum number of events */
int
cur
;
/* Current number of events */
int
cur
;
/* Current number of events */
int
eventid
;
/* For generation of unique event id */
int
eventid
;
/* For generation of unique event id */
int
flags
;
/* History flags */
#define H_UNIQUE 1
/* Store only unique elements */
}
history_t
;
}
history_t
;
private
int
history_def_first
(
ptr_t
,
HistEvent
*
);
private
int
history_def_first
(
ptr_t
,
HistEvent
*
);
...
@@ -126,13 +144,19 @@ private int history_def_curr(ptr_t, HistEvent *);
...
@@ -126,13 +144,19 @@ private int history_def_curr(ptr_t, HistEvent *);
private
int
history_def_set
(
ptr_t
,
HistEvent
*
,
const
int
n
);
private
int
history_def_set
(
ptr_t
,
HistEvent
*
,
const
int
n
);
private
int
history_def_enter
(
ptr_t
,
HistEvent
*
,
const
char
*
);
private
int
history_def_enter
(
ptr_t
,
HistEvent
*
,
const
char
*
);
private
int
history_def_add
(
ptr_t
,
HistEvent
*
,
const
char
*
);
private
int
history_def_add
(
ptr_t
,
HistEvent
*
,
const
char
*
);
private
void
history_def_init
(
ptr_t
*
,
HistEvent
*
,
int
);
private
int
history_def_init
(
ptr_t
*
,
HistEvent
*
,
int
);
private
void
history_def_clear
(
ptr_t
,
HistEvent
*
);
private
void
history_def_clear
(
ptr_t
,
HistEvent
*
);
private
int
history_def_insert
(
history_t
*
,
HistEvent
*
,
const
char
*
);
private
int
history_def_insert
(
history_t
*
,
HistEvent
*
,
const
char
*
);
private
void
history_def_delete
(
history_t
*
,
HistEvent
*
,
hentry_t
*
);
private
void
history_def_delete
(
history_t
*
,
HistEvent
*
,
hentry_t
*
);
#define history_def_setsize(p, num)(void) (((history_t *) p)->max = (num))
#define history_def_setsize(p, num)(void) (((history_t *)p)->max = (num))
#define history_def_getsize(p) (((history_t *) p)->cur)
#define history_def_getsize(p) (((history_t *)p)->cur)
#define history_def_getunique(p) (((((history_t *)p)->flags) & H_UNIQUE) != 0)
#define history_def_setunique(p, uni) \
if (uni) \
(((history_t *)p)->flags) |= H_UNIQUE; \
else \
(((history_t *)p)->flags) &= ~H_UNIQUE
#define he_strerror(code) he_errlist[code]
#define he_strerror(code) he_errlist[code]
#define he_seterrev(evp, code) {\
#define he_seterrev(evp, code) {\
...
@@ -326,20 +350,20 @@ history_def_add(ptr_t p, HistEvent *ev, const char *str)
...
@@ -326,20 +350,20 @@ history_def_add(ptr_t p, HistEvent *ev, const char *str)
history_t
*
h
=
(
history_t
*
)
p
;
history_t
*
h
=
(
history_t
*
)
p
;
size_t
len
;
size_t
len
;
char
*
s
;
char
*
s
;
HistEventPrivate
*
evp
=
(
void
*
)
&
h
->
cursor
->
ev
;
if
(
h
->
cursor
==
&
h
->
list
)
if
(
h
->
cursor
==
&
h
->
list
)
return
(
history_def_enter
(
p
,
ev
,
str
));
return
(
history_def_enter
(
p
,
ev
,
str
));
len
=
strlen
(
h
->
cursor
->
ev
.
str
)
+
strlen
(
str
)
+
1
;
len
=
strlen
(
evp
->
str
)
+
strlen
(
str
)
+
1
;
s
=
(
char
*
)
h_malloc
(
len
);
s
=
(
char
*
)
h_malloc
(
len
);
if
(
!
s
)
{
if
(
s
==
NULL
)
{
he_seterrev
(
ev
,
_HE_MALLOC_FAILED
);
he_seterrev
(
ev
,
_HE_MALLOC_FAILED
);
return
(
-
1
);
return
(
-
1
);
}
}
(
void
)
strlcpy
(
s
,
h
->
cursor
->
ev
.
str
,
len
);
(
void
)
strlcpy
(
s
,
h
->
cursor
->
ev
.
str
,
len
);
(
void
)
strlcat
(
s
,
str
,
len
);
(
void
)
strlcat
(
s
,
str
,
len
);
/* LINTED const cast */
h_free
((
ptr_t
)
evp
->
str
);
h_free
((
ptr_t
)
h
->
cursor
->
ev
.
str
);
evp
->
str
=
s
;
h
->
cursor
->
ev
.
str
=
s
;
*
ev
=
h
->
cursor
->
ev
;
*
ev
=
h
->
cursor
->
ev
;
return
(
0
);
return
(
0
);
}
}
...
@@ -350,16 +374,14 @@ history_def_add(ptr_t p, HistEvent *ev, const char *str)
...
@@ -350,16 +374,14 @@ history_def_add(ptr_t p, HistEvent *ev, const char *str)
*/
*/
/* ARGSUSED */
/* ARGSUSED */
private
void
private
void
history_def_delete
(
history_t
*
h
,
history_def_delete
(
history_t
*
h
,
HistEvent
*
ev
__attribute__
((
unused
)),
hentry_t
*
hp
)
HistEvent
*
ev
__attribute__
((
unused
)),
hentry_t
*
hp
)
{
{
HistEventPrivate
*
evp
=
(
void
*
)
&
hp
->
ev
;
if
(
hp
==
&
h
->
list
)
if
(
hp
==
&
h
->
list
)
abort
();
abort
();
hp
->
prev
->
next
=
hp
->
next
;
hp
->
prev
->
next
=
hp
->
next
;
hp
->
next
->
prev
=
hp
->
prev
;
hp
->
next
->
prev
=
hp
->
prev
;
/* LINTED const cast */
h_free
((
ptr_t
)
evp
->
str
);
h_free
((
ptr_t
)
hp
->
ev
.
str
);
h_free
(
hp
);
h_free
(
hp
);
h
->
cur
--
;
h
->
cur
--
;
}
}
...
@@ -373,11 +395,11 @@ history_def_insert(history_t *h, HistEvent *ev, const char *str)
...
@@ -373,11 +395,11 @@ history_def_insert(history_t *h, HistEvent *ev, const char *str)
{
{
h
->
cursor
=
(
hentry_t
*
)
h_malloc
(
sizeof
(
hentry_t
));
h
->
cursor
=
(
hentry_t
*
)
h_malloc
(
sizeof
(
hentry_t
));
if
(
h
->
cursor
)
if
(
h
->
cursor
==
NULL
)
h
->
cursor
->
ev
.
str
=
strdup
(
str
)
;
goto
oomem
;
if
(
!
h
->
cursor
||
!
h
->
cursor
->
ev
.
str
)
{
if
(
(
h
->
cursor
->
ev
.
str
=
strdup
(
str
))
==
NULL
)
{
h
e_seterrev
(
ev
,
_HE_MALLOC_FAILED
);
h
_free
((
ptr_t
)
h
->
cursor
);
return
(
-
1
)
;
goto
oomem
;
}
}
h
->
cursor
->
ev
.
num
=
++
h
->
eventid
;
h
->
cursor
->
ev
.
num
=
++
h
->
eventid
;
h
->
cursor
->
next
=
h
->
list
.
next
;
h
->
cursor
->
next
=
h
->
list
.
next
;
...
@@ -388,6 +410,9 @@ history_def_insert(history_t *h, HistEvent *ev, const char *str)
...
@@ -388,6 +410,9 @@ history_def_insert(history_t *h, HistEvent *ev, const char *str)
*
ev
=
h
->
cursor
->
ev
;
*
ev
=
h
->
cursor
->
ev
;
return
(
0
);
return
(
0
);
oomem:
he_seterrev
(
ev
,
_HE_MALLOC_FAILED
);
return
(
-
1
);
}
}
...
@@ -399,6 +424,10 @@ history_def_enter(ptr_t p, HistEvent *ev, const char *str)
...
@@ -399,6 +424,10 @@ history_def_enter(ptr_t p, HistEvent *ev, const char *str)
{
{
history_t
*
h
=
(
history_t
*
)
p
;
history_t
*
h
=
(
history_t
*
)
p
;
if
((
h
->
flags
&
H_UNIQUE
)
!=
0
&&
h
->
list
.
next
!=
&
h
->
list
&&
strcmp
(
h
->
list
.
next
->
ev
.
str
,
str
)
==
0
)
return
(
0
);
if
(
history_def_insert
(
h
,
ev
,
str
)
==
-
1
)
if
(
history_def_insert
(
h
,
ev
,
str
)
==
-
1
)
return
(
-
1
);
/* error, keep error message */
return
(
-
1
);
/* error, keep error message */
...
@@ -406,10 +435,10 @@ history_def_enter(ptr_t p, HistEvent *ev, const char *str)
...
@@ -406,10 +435,10 @@ history_def_enter(ptr_t p, HistEvent *ev, const char *str)
* Always keep at least one entry.
* Always keep at least one entry.
* This way we don't have to check for the empty list.
* This way we don't have to check for the empty list.
*/
*/
while
(
h
->
cur
-
1
>
h
->
max
)
while
(
h
->
cur
>
h
->
max
&&
h
->
cur
>
0
)
history_def_delete
(
h
,
ev
,
h
->
list
.
prev
);
history_def_delete
(
h
,
ev
,
h
->
list
.
prev
);
return
(
0
);
return
(
1
);
}
}
...
@@ -417,10 +446,12 @@ history_def_enter(ptr_t p, HistEvent *ev, const char *str)
...
@@ -417,10 +446,12 @@ history_def_enter(ptr_t p, HistEvent *ev, const char *str)
* Default history initialization function
* Default history initialization function
*/
*/
/* ARGSUSED */
/* ARGSUSED */
private
void
private
int
history_def_init
(
ptr_t
*
p
,
HistEvent
*
ev
__attribute__
((
unused
)),
int
n
)
history_def_init
(
ptr_t
*
p
,
HistEvent
*
ev
__attribute__
((
unused
)),
int
n
)
{
{
history_t
*
h
=
(
history_t
*
)
h_malloc
(
sizeof
(
history_t
));
history_t
*
h
=
(
history_t
*
)
h_malloc
(
sizeof
(
history_t
));
if
(
h
==
NULL
)
return
-
1
;
if
(
n
<=
0
)
if
(
n
<=
0
)
n
=
0
;
n
=
0
;
...
@@ -431,7 +462,9 @@ history_def_init(ptr_t *p, HistEvent *ev __attribute__((unused)), int n)
...
@@ -431,7 +462,9 @@ history_def_init(ptr_t *p, HistEvent *ev __attribute__((unused)), int n)
h
->
list
.
ev
.
str
=
NULL
;
h
->
list
.
ev
.
str
=
NULL
;
h
->
list
.
ev
.
num
=
0
;
h
->
list
.
ev
.
num
=
0
;
h
->
cursor
=
&
h
->
list
;
h
->
cursor
=
&
h
->
list
;
h
->
flags
=
0
;
*
p
=
(
ptr_t
)
h
;
*
p
=
(
ptr_t
)
h
;
return
0
;
}
}
...
@@ -460,10 +493,15 @@ history_def_clear(ptr_t p, HistEvent *ev)
...
@@ -460,10 +493,15 @@ history_def_clear(ptr_t p, HistEvent *ev)
public
History
*
public
History
*
history_init
(
void
)
history_init
(
void
)
{
{
History
*
h
=
(
History
*
)
h_malloc
(
sizeof
(
History
));
HistEvent
ev
;
HistEvent
ev
;
History
*
h
=
(
History
*
)
h_malloc
(
sizeof
(
History
));
if
(
h
==
NULL
)
return
NULL
;
history_def_init
(
&
h
->
h_ref
,
&
ev
,
0
);
if
(
history_def_init
(
&
h
->
h_ref
,
&
ev
,
0
)
==
-
1
)
{
h_free
((
ptr_t
)
h
);
return
NULL
;
}
h
->
h_ent
=
-
1
;
h
->
h_ent
=
-
1
;
h
->
h_next
=
history_def_next
;
h
->
h_next
=
history_def_next
;
h
->
h_first
=
history_def_first
;
h
->
h_first
=
history_def_first
;
...
@@ -519,18 +557,46 @@ history_setsize(History *h, HistEvent *ev, int num)
...
@@ -519,18 +557,46 @@ history_setsize(History *h, HistEvent *ev, int num)
private
int
private
int
history_getsize
(
History
*
h
,
HistEvent
*
ev
)
history_getsize
(
History
*
h
,
HistEvent
*
ev
)
{
{
int
retval
=
0
;
if
(
h
->
h_next
!=
history_def_next
)
{
if
(
h
->
h_next
!=
history_def_next
)
{
he_seterrev
(
ev
,
_HE_NOT_ALLOWED
);
he_seterrev
(
ev
,
_HE_NOT_ALLOWED
);
return
(
-
1
);
return
(
-
1
);
}
}
retval
=
history_def_getsize
(
h
->
h_ref
);
ev
->
num
=
history_def_getsize
(
h
->
h_ref
);
if
(
retval
<
-
1
)
{
if
(
ev
->
num
<
-
1
)
{
he_seterrev
(
ev
,
_HE_SIZE_NEGATIVE
);
he_seterrev
(
ev
,
_HE_SIZE_NEGATIVE
);
return
(
-
1
);
return
(
-
1
);
}
}
ev
->
num
=
retval
;
return
(
0
);
}
/* history_setunique():
* Set if adjacent equal events should not be entered in history.
*/
private
int
history_setunique
(
History
*
h
,
HistEvent
*
ev
,
int
uni
)
{
if
(
h
->
h_next
!=
history_def_next
)
{
he_seterrev
(
ev
,
_HE_NOT_ALLOWED
);
return
(
-
1
);
}
history_def_setunique
(
h
->
h_ref
,
uni
);
return
(
0
);
}
/* history_getunique():
* Get if adjacent equal events should not be entered in history.
*/
private
int
history_getunique
(
History
*
h
,
HistEvent
*
ev
)
{
if
(
h
->
h_next
!=
history_def_next
)
{
he_seterrev
(
ev
,
_HE_NOT_ALLOWED
);
return
(
-
1
);
}
ev
->
num
=
history_def_getunique
(
h
->
h_ref
);
return
(
0
);
return
(
0
);
}
}
...
@@ -602,6 +668,8 @@ history_load(History *h, const char *fname)
...
@@ -602,6 +668,8 @@ history_load(History *h, const char *fname)
goto
done
;
goto
done
;
ptr
=
h_malloc
(
max_size
=
1024
);
ptr
=
h_malloc
(
max_size
=
1024
);
if
(
ptr
==
NULL
)
goto
done
;
for
(
i
=
0
;
(
line
=
fgetln
(
fp
,
&
sz
))
!=
NULL
;
i
++
)
{
for
(
i
=
0
;
(
line
=
fgetln
(
fp
,
&
sz
))
!=
NULL
;
i
++
)
{
char
c
=
line
[
sz
];
char
c
=
line
[
sz
];
...
@@ -611,15 +679,24 @@ history_load(History *h, const char *fname)
...
@@ -611,15 +679,24 @@ history_load(History *h, const char *fname)
line
[
sz
]
=
'\0'
;
line
[
sz
]
=
'\0'
;
if
(
max_size
<
sz
)
{
if
(
max_size
<
sz
)
{
char
*
nptr
;
max_size
=
(
sz
+
1023
)
&
~
1023
;
max_size
=
(
sz
+
1023
)
&
~
1023
;
ptr
=
h_realloc
(
ptr
,
max_size
);
nptr
=
h_realloc
(
ptr
,
max_size
);
if
(
nptr
==
NULL
)
{
i
=
-
1
;
goto
oomem
;
}
ptr
=
nptr
;
}
}
(
void
)
strunvis
(
ptr
,
line
);
(
void
)
strunvis
(
ptr
,
line
);
line
[
sz
]
=
c
;
line
[
sz
]
=
c
;
HENTER
(
h
,
&
ev
,
ptr
);
if
(
HENTER
(
h
,
&
ev
,
ptr
)
==
-
1
)
{
h_free
((
ptr_t
)
ptr
);
return
-
1
;
}
}
h_free
(
ptr
);
}
oomem:
h_free
((
ptr_t
)
ptr
);
done:
done:
(
void
)
fclose
(
fp
);
(
void
)
fclose
(
fp
);
return
(
i
);
return
(
i
);
...
@@ -634,28 +711,40 @@ history_save(History *h, const char *fname)
...
@@ -634,28 +711,40 @@ history_save(History *h, const char *fname)
{
{
FILE
*
fp
;
FILE
*
fp
;
HistEvent
ev
;
HistEvent
ev
;
int
i
=
0
,
retval
;
int
i
=
-
1
,
retval
;
size_t
len
,
max_size
;
size_t
len
,
max_size
;
char
*
ptr
;
char
*
ptr
;
if
((
fp
=
fopen
(
fname
,
"w"
))
==
NULL
)
if
((
fp
=
fopen
(
fname
,
"w"
))
==
NULL
)
return
(
-
1
);
return
(
-
1
);
(
void
)
fchmod
(
fileno
(
fp
),
S_IRUSR
|
S_IWUSR
);
if
(
fchmod
(
fileno
(
fp
),
S_IRUSR
|
S_IWUSR
)
==
-
1
)
(
void
)
fputs
(
hist_cookie
,
fp
);
goto
done
;
if
(
fputs
(
hist_cookie
,
fp
)
==
EOF
)
goto
done
;
ptr
=
h_malloc
(
max_size
=
1024
);
ptr
=
h_malloc
(
max_size
=
1024
);
for
(
retval
=
HLAST
(
h
,
&
ev
);
if
(
ptr
==
NULL
)
goto
done
;
for
(
i
=
0
,
retval
=
HLAST
(
h
,
&
ev
);
retval
!=
-
1
;
retval
!=
-
1
;
retval
=
HPREV
(
h
,
&
ev
),
i
++
)
{
retval
=
HPREV
(
h
,
&
ev
),
i
++
)
{
len
=
strlen
(
ev
.
str
)
*
4
+
1
;
len
=
strlen
(
ev
.
str
)
*
4
+
1
;
if
(
len
>=
max_size
)
{
if
(
len
>=
max_size
)
{
char
*
nptr
;
max_size
=
(
len
+
1023
)
&
~
1023
;
max_size
=
(
len
+
1023
)
&
~
1023
;
ptr
=
h_realloc
(
ptr
,
max_size
);
nptr
=
h_realloc
(
ptr
,
max_size
);
if
(
nptr
==
NULL
)
{
i
=
-
1
;
goto
oomem
;
}
ptr
=
nptr
;
}
}
(
void
)
strvis
(
ptr
,
ev
.
str
,
VIS_WHITE
);
(
void
)
strvis
(
ptr
,
ev
.
str
,
VIS_WHITE
);
(
void
)
fprintf
(
fp
,
"%s
\n
"
,
ev
.
s
tr
);
(
void
)
fprintf
(
fp
,
"%s
\n
"
,
p
tr
);
}
}
h_free
(
ptr
);
oomem:
h_free
((
ptr_t
)
ptr
);
done:
(
void
)
fclose
(
fp
);
(
void
)
fclose
(
fp
);
return
(
i
);
return
(
i
);
}
}
...
@@ -754,6 +843,14 @@ history(History *h, HistEvent *ev, int fun, ...)
...
@@ -754,6 +843,14 @@ history(History *h, HistEvent *ev, int fun, ...)
retval
=
history_setsize
(
h
,
ev
,
va_arg
(
va
,
int
));
retval
=
history_setsize
(
h
,
ev
,
va_arg
(
va
,
int
));
break
;
break
;
case
H_GETUNIQUE
:
retval
=
history_getunique
(
h
,
ev
);
break
;
case
H_SETUNIQUE
:
retval
=
history_setunique
(
h
,
ev
,
va_arg
(
va
,
int
));
break
;
case
H_ADD
:
case
H_ADD
:
str
=
va_arg
(
va
,
const
char
*
);
str
=
va_arg
(
va
,
const
char
*
);
retval
=
HADD
(
h
,
ev
,
str
);
retval
=
HADD
(
h
,
ev
,
str
);
...
...
cmd-line-utils/libedit/key.c
View file @
8459cd35
/* $NetBSD: key.c,v 1.1
2 2001/05/17 01:02:17
christos Exp $ */
/* $NetBSD: key.c,v 1.1
3 2002/03/18 16:00:55
christos Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,7 +36,14 @@
...
@@ -36,7 +36,14 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)key.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: key.c,v 1.13 2002/03/18 16:00:55 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* key.c: This module contains the procedures for maintaining
* key.c: This module contains the procedures for maintaining
...
@@ -59,7 +66,6 @@
...
@@ -59,7 +66,6 @@
* 1) It is not possible to have one key that is a
* 1) It is not possible to have one key that is a
* substr of another.
* substr of another.
*/
*/
#include "sys.h"
#include <string.h>
#include <string.h>
#include <stdlib.h>
#include <stdlib.h>
...
@@ -85,8 +91,8 @@ private int node__try(EditLine *, key_node_t *, const char *,
...
@@ -85,8 +91,8 @@ private int node__try(EditLine *, key_node_t *, const char *,
private
key_node_t
*
node__get
(
int
);
private
key_node_t
*
node__get
(
int
);
private
void
node__put
(
EditLine
*
,
key_node_t
*
);
private
void
node__put
(
EditLine
*
,
key_node_t
*
);
private
int
node__delete
(
EditLine
*
,
key_node_t
**
,
const
char
*
);
private
int
node__delete
(
EditLine
*
,
key_node_t
**
,
const
char
*
);
private
int
node_lookup
(
EditLine
*
,
const
char
*
,
private
int
node_lookup
(
EditLine
*
,
const
char
*
,
key_node_t
*
,
key_node_t
*
,
int
);
int
);
private
int
node_enum
(
EditLine
*
,
key_node_t
*
,
int
);
private
int
node_enum
(
EditLine
*
,
key_node_t
*
,
int
);
private
int
key__decode_char
(
char
*
,
int
,
int
);
private
int
key__decode_char
(
char
*
,
int
,
int
);
...
...
cmd-line-utils/libedit/key.h
View file @
8459cd35
/* $NetBSD: key.h,v 1.
5 2001/01/23 15:55:30 jdolecek
Exp $ */
/* $NetBSD: key.h,v 1.
6 2002/03/18 16:00:55 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -62,10 +62,6 @@ typedef struct el_key_t {
...
@@ -62,10 +62,6 @@ typedef struct el_key_t {
#define XK_NOD 2
#define XK_NOD 2
#define XK_EXE 3
#define XK_EXE 3
#undef key_end
#undef key_clear
#undef key_print
protected
int
key_init
(
EditLine
*
);
protected
int
key_init
(
EditLine
*
);
protected
void
key_end
(
EditLine
*
);
protected
void
key_end
(
EditLine
*
);
protected
key_value_t
*
key_map_cmd
(
EditLine
*
,
int
);
protected
key_value_t
*
key_map_cmd
(
EditLine
*
,
int
);
...
@@ -76,8 +72,8 @@ protected void key_add(EditLine *, const char *, key_value_t *, int);
...
@@ -76,8 +72,8 @@ protected void key_add(EditLine *, const char *, key_value_t *, int);
protected
void
key_clear
(
EditLine
*
,
el_action_t
*
,
const
char
*
);
protected
void
key_clear
(
EditLine
*
,
el_action_t
*
,
const
char
*
);
protected
int
key_delete
(
EditLine
*
,
const
char
*
);
protected
int
key_delete
(
EditLine
*
,
const
char
*
);
protected
void
key_print
(
EditLine
*
,
const
char
*
);
protected
void
key_print
(
EditLine
*
,
const
char
*
);
protected
void
key_kprint
(
EditLine
*
,
const
char
*
,
protected
void
key_kprint
(
EditLine
*
,
const
char
*
,
key_value_t
*
,
key_value_t
*
,
int
);
int
);
protected
char
*
key__decode_str
(
const
char
*
,
char
*
,
const
char
*
);
protected
char
*
key__decode_str
(
const
char
*
,
char
*
,
const
char
*
);
#endif
/* _h_el_key */
#endif
/* _h_el_key */
cmd-line-utils/libedit/makelist.sh
View file @
8459cd35
#!/bin/sh -
#!/bin/sh -
# $NetBSD: makelist,v 1.
7 2001/01/09 19:22:31 jdolecek
Exp $
# $NetBSD: makelist,v 1.
8 2003/03/10 21:21:10 christos
Exp $
#
#
# Copyright (c) 1992, 1993
# Copyright (c) 1992, 1993
# The Regents of the University of California. All rights reserved.
# The Regents of the University of California. All rights reserved.
...
@@ -87,7 +87,6 @@ case $FLAG in
...
@@ -87,7 +87,6 @@ case $FLAG in
cat
$FILES
|
$AWK
'
cat
$FILES
|
$AWK
'
BEGIN {
BEGIN {
printf("/* Automatically generated file, do not edit */\n");
printf("/* Automatically generated file, do not edit */\n");
printf("#include \"compat.h\"\n");
printf("#include \"sys.h\"\n#include \"el.h\"\n");
printf("#include \"sys.h\"\n#include \"el.h\"\n");
printf("private const struct el_bindings_t el_func_help[] = {\n");
printf("private const struct el_bindings_t el_func_help[] = {\n");
low = "abcdefghijklmnopqrstuvwxyz_";
low = "abcdefghijklmnopqrstuvwxyz_";
...
@@ -170,7 +169,6 @@ case $FLAG in
...
@@ -170,7 +169,6 @@ case $FLAG in
cat
$FILES
|
$AWK
'/el_action_t/ { print $3 }'
|
sort
|
$AWK
'
cat
$FILES
|
$AWK
'/el_action_t/ { print $3 }'
|
sort
|
$AWK
'
BEGIN {
BEGIN {
printf("/* Automatically generated file, do not edit */\n");
printf("/* Automatically generated file, do not edit */\n");
printf("#include \"compat.h\"\n");
printf("#include \"sys.h\"\n#include \"el.h\"\n");
printf("#include \"sys.h\"\n#include \"el.h\"\n");
printf("private const el_func_t el_func[] = {");
printf("private const el_func_t el_func[] = {");
maxlen = 80;
maxlen = 80;
...
...
cmd-line-utils/libedit/map.c
View file @
8459cd35
/* $NetBSD: map.c,v 1.1
4 2001/01/09 17:22:09 jdolecek
Exp $ */
/* $NetBSD: map.c,v 1.1
8 2002/11/15 14:32:33 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,12 +36,18 @@
...
@@ -36,12 +36,18 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)map.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: map.c,v 1.18 2002/11/15 14:32:33 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* map.c: Editor function definitions
* map.c: Editor function definitions
*/
*/
#include "sys.h"
#include <stdlib.h>
#include <stdlib.h>
#include "el.h"
#include "el.h"
...
@@ -373,7 +379,7 @@ private const el_action_t el_map_vi_insert[] = {
...
@@ -373,7 +379,7 @@ private const el_action_t el_map_vi_insert[] = {
/* 5 */
ED_MOVE_TO_END
,
/* ^E */
/* 5 */
ED_MOVE_TO_END
,
/* ^E */
/* 6 */
ED_NEXT_CHAR
,
/* ^F */
/* 6 */
ED_NEXT_CHAR
,
/* ^F */
/* 7 */
ED_UNASSIGNED
,
/* ^G */
/* 7 */
ED_UNASSIGNED
,
/* ^G */
/* 8 */
ED
_DELETE_PREV_CHAR
,
/* ^H */
/* BackSpace key */
/* 8 */
VI
_DELETE_PREV_CHAR
,
/* ^H */
/* BackSpace key */
/* 9 */
ED_UNASSIGNED
,
/* ^I */
/* Tab Key */
/* 9 */
ED_UNASSIGNED
,
/* ^I */
/* Tab Key */
/* 10 */
ED_NEWLINE
,
/* ^J */
/* 10 */
ED_NEWLINE
,
/* ^J */
/* 11 */
ED_KILL_LINE
,
/* ^K */
/* 11 */
ED_KILL_LINE
,
/* ^K */
...
@@ -493,135 +499,135 @@ private const el_action_t el_map_vi_insert[] = {
...
@@ -493,135 +499,135 @@ private const el_action_t el_map_vi_insert[] = {
/* 124 */
ED_INSERT
,
/* | */
/* 124 */
ED_INSERT
,
/* | */
/* 125 */
ED_INSERT
,
/* } */
/* 125 */
ED_INSERT
,
/* } */
/* 126 */
ED_INSERT
,
/* ~ */
/* 126 */
ED_INSERT
,
/* ~ */
/* 127 */
ED
_DELETE_PREV_CHAR
,
/* ^? */
/* 127 */
VI
_DELETE_PREV_CHAR
,
/* ^? */
/* 128 */
ED_
UNASSIGNED
,
/* M-^@ */
/* 128 */
ED_
INSERT
,
/* M-^@ */
/* 129 */
ED_
UNASSIGNED
,
/* M-^A */
/* 129 */
ED_
INSERT
,
/* M-^A */
/* 130 */
ED_
UNASSIGNED
,
/* M-^B */
/* 130 */
ED_
INSERT
,
/* M-^B */
/* 131 */
ED_
UNASSIGNED
,
/* M-^C */
/* 131 */
ED_
INSERT
,
/* M-^C */
/* 132 */
ED_
UNASSIGNED
,
/* M-^D */
/* 132 */
ED_
INSERT
,
/* M-^D */
/* 133 */
ED_
UNASSIGNED
,
/* M-^E */
/* 133 */
ED_
INSERT
,
/* M-^E */
/* 134 */
ED_
UNASSIGNED
,
/* M-^F */
/* 134 */
ED_
INSERT
,
/* M-^F */
/* 135 */
ED_
UNASSIGNED
,
/* M-^G */
/* 135 */
ED_
INSERT
,
/* M-^G */
/* 136 */
ED_
UNASSIGNED
,
/* M-^H */
/* 136 */
ED_
INSERT
,
/* M-^H */
/* 137 */
ED_
UNASSIGNED
,
/* M-^I */
/* 137 */
ED_
INSERT
,
/* M-^I */
/* 138 */
ED_
UNASSIGNED
,
/* M-^J */
/* 138 */
ED_
INSERT
,
/* M-^J */
/* 139 */
ED_
UNASSIGNED
,
/* M-^K */
/* 139 */
ED_
INSERT
,
/* M-^K */
/* 140 */
ED_
UNASSIGNED
,
/* M-^L */
/* 140 */
ED_
INSERT
,
/* M-^L */
/* 141 */
ED_
UNASSIGNED
,
/* M-^M */
/* 141 */
ED_
INSERT
,
/* M-^M */
/* 142 */
ED_
UNASSIGNED
,
/* M-^N */
/* 142 */
ED_
INSERT
,
/* M-^N */
/* 143 */
ED_
UNASSIGNED
,
/* M-^O */
/* 143 */
ED_
INSERT
,
/* M-^O */
/* 144 */
ED_
UNASSIGNED
,
/* M-^P */
/* 144 */
ED_
INSERT
,
/* M-^P */
/* 145 */
ED_
UNASSIGNED
,
/* M-^Q */
/* 145 */
ED_
INSERT
,
/* M-^Q */
/* 146 */
ED_
UNASSIGNED
,
/* M-^R */
/* 146 */
ED_
INSERT
,
/* M-^R */
/* 147 */
ED_
UNASSIGNED
,
/* M-^S */
/* 147 */
ED_
INSERT
,
/* M-^S */
/* 148 */
ED_
UNASSIGNED
,
/* M-^T */
/* 148 */
ED_
INSERT
,
/* M-^T */
/* 149 */
ED_
UNASSIGNED
,
/* M-^U */
/* 149 */
ED_
INSERT
,
/* M-^U */
/* 150 */
ED_
UNASSIGNED
,
/* M-^V */
/* 150 */
ED_
INSERT
,
/* M-^V */
/* 151 */
ED_
UNASSIGNED
,
/* M-^W */
/* 151 */
ED_
INSERT
,
/* M-^W */
/* 152 */
ED_
UNASSIGNED
,
/* M-^X */
/* 152 */
ED_
INSERT
,
/* M-^X */
/* 153 */
ED_
UNASSIGNED
,
/* M-^Y */
/* 153 */
ED_
INSERT
,
/* M-^Y */
/* 154 */
ED_
UNASSIGNED
,
/* M-^Z */
/* 154 */
ED_
INSERT
,
/* M-^Z */
/* 155 */
ED_
UNASSIGNED
,
/* M-^[ */
/* 155 */
ED_
INSERT
,
/* M-^[ */
/* 156 */
ED_
UNASSIGNED
,
/* M-^\ */
/* 156 */
ED_
INSERT
,
/* M-^\ */
/* 157 */
ED_
UNASSIGNED
,
/* M-^] */
/* 157 */
ED_
INSERT
,
/* M-^] */
/* 158 */
ED_
UNASSIGNED
,
/* M-^^ */
/* 158 */
ED_
INSERT
,
/* M-^^ */
/* 159 */
ED_
UNASSIGNED
,
/* M-^_ */
/* 159 */
ED_
INSERT
,
/* M-^_ */
/* 160 */
ED_
UNASSIGNED
,
/* M-SPACE */
/* 160 */
ED_
INSERT
,
/* M-SPACE */
/* 161 */
ED_
UNASSIGNED
,
/* M-! */
/* 161 */
ED_
INSERT
,
/* M-! */
/* 162 */
ED_
UNASSIGNED
,
/* M-" */
/* 162 */
ED_
INSERT
,
/* M-" */
/* 163 */
ED_
UNASSIGNED
,
/* M-# */
/* 163 */
ED_
INSERT
,
/* M-# */
/* 164 */
ED_
UNASSIGNED
,
/* M-$ */
/* 164 */
ED_
INSERT
,
/* M-$ */
/* 165 */
ED_
UNASSIGNED
,
/* M-% */
/* 165 */
ED_
INSERT
,
/* M-% */
/* 166 */
ED_
UNASSIGNED
,
/* M-& */
/* 166 */
ED_
INSERT
,
/* M-& */
/* 167 */
ED_
UNASSIGNED
,
/* M-' */
/* 167 */
ED_
INSERT
,
/* M-' */
/* 168 */
ED_
UNASSIGNED
,
/* M-( */
/* 168 */
ED_
INSERT
,
/* M-( */
/* 169 */
ED_
UNASSIGNED
,
/* M-) */
/* 169 */
ED_
INSERT
,
/* M-) */
/* 170 */
ED_
UNASSIGNED
,
/* M-* */
/* 170 */
ED_
INSERT
,
/* M-* */
/* 171 */
ED_
UNASSIGNED
,
/* M-+ */
/* 171 */
ED_
INSERT
,
/* M-+ */
/* 172 */
ED_
UNASSIGNED
,
/* M-, */
/* 172 */
ED_
INSERT
,
/* M-, */
/* 173 */
ED_
UNASSIGNED
,
/* M-- */
/* 173 */
ED_
INSERT
,
/* M-- */
/* 174 */
ED_
UNASSIGNED
,
/* M-. */
/* 174 */
ED_
INSERT
,
/* M-. */
/* 175 */
ED_
UNASSIGNED
,
/* M-/ */
/* 175 */
ED_
INSERT
,
/* M-/ */
/* 176 */
ED_
UNASSIGNED
,
/* M-0 */
/* 176 */
ED_
INSERT
,
/* M-0 */
/* 177 */
ED_
UNASSIGNED
,
/* M-1 */
/* 177 */
ED_
INSERT
,
/* M-1 */
/* 178 */
ED_
UNASSIGNED
,
/* M-2 */
/* 178 */
ED_
INSERT
,
/* M-2 */
/* 179 */
ED_
UNASSIGNED
,
/* M-3 */
/* 179 */
ED_
INSERT
,
/* M-3 */
/* 180 */
ED_
UNASSIGNED
,
/* M-4 */
/* 180 */
ED_
INSERT
,
/* M-4 */
/* 181 */
ED_
UNASSIGNED
,
/* M-5 */
/* 181 */
ED_
INSERT
,
/* M-5 */
/* 182 */
ED_
UNASSIGNED
,
/* M-6 */
/* 182 */
ED_
INSERT
,
/* M-6 */
/* 183 */
ED_
UNASSIGNED
,
/* M-7 */
/* 183 */
ED_
INSERT
,
/* M-7 */
/* 184 */
ED_
UNASSIGNED
,
/* M-8 */
/* 184 */
ED_
INSERT
,
/* M-8 */
/* 185 */
ED_
UNASSIGNED
,
/* M-9 */
/* 185 */
ED_
INSERT
,
/* M-9 */
/* 186 */
ED_
UNASSIGNED
,
/* M-: */
/* 186 */
ED_
INSERT
,
/* M-: */
/* 187 */
ED_
UNASSIGNED
,
/* M-; */
/* 187 */
ED_
INSERT
,
/* M-; */
/* 188 */
ED_
UNASSIGNED
,
/* M-< */
/* 188 */
ED_
INSERT
,
/* M-< */
/* 189 */
ED_
UNASSIGNED
,
/* M-= */
/* 189 */
ED_
INSERT
,
/* M-= */
/* 190 */
ED_
UNASSIGNED
,
/* M-> */
/* 190 */
ED_
INSERT
,
/* M-> */
/* 191 */
ED_
UNASSIGNED
,
/* M-? */
/* 191 */
ED_
INSERT
,
/* M-? */
/* 192 */
ED_
UNASSIGNED
,
/* M-@ */
/* 192 */
ED_
INSERT
,
/* M-@ */
/* 193 */
ED_
UNASSIGNED
,
/* M-A */
/* 193 */
ED_
INSERT
,
/* M-A */
/* 194 */
ED_
UNASSIGNED
,
/* M-B */
/* 194 */
ED_
INSERT
,
/* M-B */
/* 195 */
ED_
UNASSIGNED
,
/* M-C */
/* 195 */
ED_
INSERT
,
/* M-C */
/* 196 */
ED_
UNASSIGNED
,
/* M-D */
/* 196 */
ED_
INSERT
,
/* M-D */
/* 197 */
ED_
UNASSIGNED
,
/* M-E */
/* 197 */
ED_
INSERT
,
/* M-E */
/* 198 */
ED_
UNASSIGNED
,
/* M-F */
/* 198 */
ED_
INSERT
,
/* M-F */
/* 199 */
ED_
UNASSIGNED
,
/* M-G */
/* 199 */
ED_
INSERT
,
/* M-G */
/* 200 */
ED_
UNASSIGNED
,
/* M-H */
/* 200 */
ED_
INSERT
,
/* M-H */
/* 201 */
ED_
UNASSIGNED
,
/* M-I */
/* 201 */
ED_
INSERT
,
/* M-I */
/* 202 */
ED_
UNASSIGNED
,
/* M-J */
/* 202 */
ED_
INSERT
,
/* M-J */
/* 203 */
ED_
UNASSIGNED
,
/* M-K */
/* 203 */
ED_
INSERT
,
/* M-K */
/* 204 */
ED_
UNASSIGNED
,
/* M-L */
/* 204 */
ED_
INSERT
,
/* M-L */
/* 205 */
ED_
UNASSIGNED
,
/* M-M */
/* 205 */
ED_
INSERT
,
/* M-M */
/* 206 */
ED_
UNASSIGNED
,
/* M-N */
/* 206 */
ED_
INSERT
,
/* M-N */
/* 207 */
ED_
UNASSIGNED
,
/* M-O */
/* 207 */
ED_
INSERT
,
/* M-O */
/* 208 */
ED_
UNASSIGNED
,
/* M-P */
/* 208 */
ED_
INSERT
,
/* M-P */
/* 209 */
ED_
UNASSIGNED
,
/* M-Q */
/* 209 */
ED_
INSERT
,
/* M-Q */
/* 210 */
ED_
UNASSIGNED
,
/* M-R */
/* 210 */
ED_
INSERT
,
/* M-R */
/* 211 */
ED_
UNASSIGNED
,
/* M-S */
/* 211 */
ED_
INSERT
,
/* M-S */
/* 212 */
ED_
UNASSIGNED
,
/* M-T */
/* 212 */
ED_
INSERT
,
/* M-T */
/* 213 */
ED_
UNASSIGNED
,
/* M-U */
/* 213 */
ED_
INSERT
,
/* M-U */
/* 214 */
ED_
UNASSIGNED
,
/* M-V */
/* 214 */
ED_
INSERT
,
/* M-V */
/* 215 */
ED_
UNASSIGNED
,
/* M-W */
/* 215 */
ED_
INSERT
,
/* M-W */
/* 216 */
ED_
UNASSIGNED
,
/* M-X */
/* 216 */
ED_
INSERT
,
/* M-X */
/* 217 */
ED_
UNASSIGNED
,
/* M-Y */
/* 217 */
ED_
INSERT
,
/* M-Y */
/* 218 */
ED_
UNASSIGNED
,
/* M-Z */
/* 218 */
ED_
INSERT
,
/* M-Z */
/* 219 */
ED_
UNASSIGNED
,
/* M-[ */
/* 219 */
ED_
INSERT
,
/* M-[ */
/* 220 */
ED_
UNASSIGNED
,
/* M-\ */
/* 220 */
ED_
INSERT
,
/* M-\ */
/* 221 */
ED_
UNASSIGNED
,
/* M-] */
/* 221 */
ED_
INSERT
,
/* M-] */
/* 222 */
ED_
UNASSIGNED
,
/* M-^ */
/* 222 */
ED_
INSERT
,
/* M-^ */
/* 223 */
ED_
UNASSIGNED
,
/* M-_ */
/* 223 */
ED_
INSERT
,
/* M-_ */
/* 224 */
ED_
UNASSIGNED
,
/* M-` */
/* 224 */
ED_
INSERT
,
/* M-` */
/* 225 */
ED_
UNASSIGNED
,
/* M-a */
/* 225 */
ED_
INSERT
,
/* M-a */
/* 226 */
ED_
UNASSIGNED
,
/* M-b */
/* 226 */
ED_
INSERT
,
/* M-b */
/* 227 */
ED_
UNASSIGNED
,
/* M-c */
/* 227 */
ED_
INSERT
,
/* M-c */
/* 228 */
ED_
UNASSIGNED
,
/* M-d */
/* 228 */
ED_
INSERT
,
/* M-d */
/* 229 */
ED_
UNASSIGNED
,
/* M-e */
/* 229 */
ED_
INSERT
,
/* M-e */
/* 230 */
ED_
UNASSIGNED
,
/* M-f */
/* 230 */
ED_
INSERT
,
/* M-f */
/* 231 */
ED_
UNASSIGNED
,
/* M-g */
/* 231 */
ED_
INSERT
,
/* M-g */
/* 232 */
ED_
UNASSIGNED
,
/* M-h */
/* 232 */
ED_
INSERT
,
/* M-h */
/* 233 */
ED_
UNASSIGNED
,
/* M-i */
/* 233 */
ED_
INSERT
,
/* M-i */
/* 234 */
ED_
UNASSIGNED
,
/* M-j */
/* 234 */
ED_
INSERT
,
/* M-j */
/* 235 */
ED_
UNASSIGNED
,
/* M-k */
/* 235 */
ED_
INSERT
,
/* M-k */
/* 236 */
ED_
UNASSIGNED
,
/* M-l */
/* 236 */
ED_
INSERT
,
/* M-l */
/* 237 */
ED_
UNASSIGNED
,
/* M-m */
/* 237 */
ED_
INSERT
,
/* M-m */
/* 238 */
ED_
UNASSIGNED
,
/* M-n */
/* 238 */
ED_
INSERT
,
/* M-n */
/* 239 */
ED_
UNASSIGNED
,
/* M-o */
/* 239 */
ED_
INSERT
,
/* M-o */
/* 240 */
ED_
UNASSIGNED
,
/* M-p */
/* 240 */
ED_
INSERT
,
/* M-p */
/* 241 */
ED_
UNASSIGNED
,
/* M-q */
/* 241 */
ED_
INSERT
,
/* M-q */
/* 242 */
ED_
UNASSIGNED
,
/* M-r */
/* 242 */
ED_
INSERT
,
/* M-r */
/* 243 */
ED_
UNASSIGNED
,
/* M-s */
/* 243 */
ED_
INSERT
,
/* M-s */
/* 244 */
ED_
UNASSIGNED
,
/* M-t */
/* 244 */
ED_
INSERT
,
/* M-t */
/* 245 */
ED_
UNASSIGNED
,
/* M-u */
/* 245 */
ED_
INSERT
,
/* M-u */
/* 246 */
ED_
UNASSIGNED
,
/* M-v */
/* 246 */
ED_
INSERT
,
/* M-v */
/* 247 */
ED_
UNASSIGNED
,
/* M-w */
/* 247 */
ED_
INSERT
,
/* M-w */
/* 248 */
ED_
UNASSIGNED
,
/* M-x */
/* 248 */
ED_
INSERT
,
/* M-x */
/* 249 */
ED_
UNASSIGNED
,
/* M-y */
/* 249 */
ED_
INSERT
,
/* M-y */
/* 250 */
ED_
UNASSIGNED
,
/* M-z */
/* 250 */
ED_
INSERT
,
/* M-z */
/* 251 */
ED_
UNASSIGNED
,
/* M-{ */
/* 251 */
ED_
INSERT
,
/* M-{ */
/* 252 */
ED_
UNASSIGNED
,
/* M-| */
/* 252 */
ED_
INSERT
,
/* M-| */
/* 253 */
ED_
UNASSIGNED
,
/* M-} */
/* 253 */
ED_
INSERT
,
/* M-} */
/* 254 */
ED_
UNASSIGNED
,
/* M-~ */
/* 254 */
ED_
INSERT
,
/* M-~ */
/* 255 */
ED_
UNASSIGNED
/* M-^? */
/* 255 */
ED_
INSERT
/* M-^? */
};
};
private
const
el_action_t
el_map_vi_command
[]
=
{
private
const
el_action_t
el_map_vi_command
[]
=
{
...
@@ -633,7 +639,7 @@ private const el_action_t el_map_vi_command[] = {
...
@@ -633,7 +639,7 @@ private const el_action_t el_map_vi_command[] = {
/* 5 */
ED_MOVE_TO_END
,
/* ^E */
/* 5 */
ED_MOVE_TO_END
,
/* ^E */
/* 6 */
ED_UNASSIGNED
,
/* ^F */
/* 6 */
ED_UNASSIGNED
,
/* ^F */
/* 7 */
ED_UNASSIGNED
,
/* ^G */
/* 7 */
ED_UNASSIGNED
,
/* ^G */
/* 8 */
ED_
PREV_CHAR
,
/* ^H */
/* 8 */
ED_
DELETE_PREV_CHAR
,
/* ^H */
/* 9 */
ED_UNASSIGNED
,
/* ^I */
/* 9 */
ED_UNASSIGNED
,
/* ^I */
/* 10 */
ED_NEWLINE
,
/* ^J */
/* 10 */
ED_NEWLINE
,
/* ^J */
/* 11 */
ED_KILL_LINE
,
/* ^K */
/* 11 */
ED_KILL_LINE
,
/* ^K */
...
@@ -660,9 +666,9 @@ private const el_action_t el_map_vi_command[] = {
...
@@ -660,9 +666,9 @@ private const el_action_t el_map_vi_command[] = {
/* 32 */
ED_NEXT_CHAR
,
/* SPACE */
/* 32 */
ED_NEXT_CHAR
,
/* SPACE */
/* 33 */
ED_UNASSIGNED
,
/* ! */
/* 33 */
ED_UNASSIGNED
,
/* ! */
/* 34 */
ED_UNASSIGNED
,
/* " */
/* 34 */
ED_UNASSIGNED
,
/* " */
/* 35 */
ED_UNASSIGNED
,
/* # */
/* 35 */
VI_COMMENT_OUT
,
/* # */
/* 36 */
ED_MOVE_TO_END
,
/* $ */
/* 36 */
ED_MOVE_TO_END
,
/* $ */
/* 37 */
ED_UNASSIGNED
,
/* % */
/* 37 */
VI_MATCH
,
/* % */
/* 38 */
ED_UNASSIGNED
,
/* & */
/* 38 */
ED_UNASSIGNED
,
/* & */
/* 39 */
ED_UNASSIGNED
,
/* ' */
/* 39 */
ED_UNASSIGNED
,
/* ' */
/* 40 */
ED_UNASSIGNED
,
/* ( */
/* 40 */
ED_UNASSIGNED
,
/* ( */
...
@@ -671,7 +677,7 @@ private const el_action_t el_map_vi_command[] = {
...
@@ -671,7 +677,7 @@ private const el_action_t el_map_vi_command[] = {
/* 43 */
ED_NEXT_HISTORY
,
/* + */
/* 43 */
ED_NEXT_HISTORY
,
/* + */
/* 44 */
VI_REPEAT_PREV_CHAR
,
/* , */
/* 44 */
VI_REPEAT_PREV_CHAR
,
/* , */
/* 45 */
ED_PREV_HISTORY
,
/* - */
/* 45 */
ED_PREV_HISTORY
,
/* - */
/* 46 */
ED_UNASSIGNED
,
/* . */
/* 46 */
VI_REDO
,
/* . */
/* 47 */
VI_SEARCH_PREV
,
/* / */
/* 47 */
VI_SEARCH_PREV
,
/* / */
/* 48 */
VI_ZERO
,
/* 0 */
/* 48 */
VI_ZERO
,
/* 0 */
/* 49 */
ED_ARGUMENT_DIGIT
,
/* 1 */
/* 49 */
ED_ARGUMENT_DIGIT
,
/* 1 */
...
@@ -689,14 +695,14 @@ private const el_action_t el_map_vi_command[] = {
...
@@ -689,14 +695,14 @@ private const el_action_t el_map_vi_command[] = {
/* 61 */
ED_UNASSIGNED
,
/* = */
/* 61 */
ED_UNASSIGNED
,
/* = */
/* 62 */
ED_UNASSIGNED
,
/* > */
/* 62 */
ED_UNASSIGNED
,
/* > */
/* 63 */
VI_SEARCH_NEXT
,
/* ? */
/* 63 */
VI_SEARCH_NEXT
,
/* ? */
/* 64 */
ED_UNASSIGNED
,
/* @ */
/* 64 */
VI_ALIAS
,
/* @ */
/* 65 */
VI_ADD_AT_EOL
,
/* A */
/* 65 */
VI_ADD_AT_EOL
,
/* A */
/* 66 */
VI_PREV_
SPACE
_WORD
,
/* B */
/* 66 */
VI_PREV_
BIG
_WORD
,
/* B */
/* 67 */
VI_CHANGE_TO_EOL
,
/* C */
/* 67 */
VI_CHANGE_TO_EOL
,
/* C */
/* 68 */
ED_KILL_LINE
,
/* D */
/* 68 */
ED_KILL_LINE
,
/* D */
/* 69 */
VI_
TO_END_WORD
,
/* E */
/* 69 */
VI_
END_BIG_WORD
,
/* E */
/* 70 */
VI_PREV_CHAR
,
/* F */
/* 70 */
VI_PREV_CHAR
,
/* F */
/* 71 */
ED_UNASSIGNED
,
/* G */
/* 71 */
VI_TO_HISTORY_LINE
,
/* G */
/* 72 */
ED_UNASSIGNED
,
/* H */
/* 72 */
ED_UNASSIGNED
,
/* H */
/* 73 */
VI_INSERT_AT_BOL
,
/* I */
/* 73 */
VI_INSERT_AT_BOL
,
/* I */
/* 74 */
ED_SEARCH_NEXT_HISTORY
,
/* J */
/* 74 */
ED_SEARCH_NEXT_HISTORY
,
/* J */
...
@@ -710,17 +716,17 @@ private const el_action_t el_map_vi_command[] = {
...
@@ -710,17 +716,17 @@ private const el_action_t el_map_vi_command[] = {
/* 82 */
VI_REPLACE_MODE
,
/* R */
/* 82 */
VI_REPLACE_MODE
,
/* R */
/* 83 */
VI_SUBSTITUTE_LINE
,
/* S */
/* 83 */
VI_SUBSTITUTE_LINE
,
/* S */
/* 84 */
VI_TO_PREV_CHAR
,
/* T */
/* 84 */
VI_TO_PREV_CHAR
,
/* T */
/* 85 */
ED_UNASSIGNED
,
/* U */
/* 85 */
VI_UNDO_LINE
,
/* U */
/* 86 */
ED_UNASSIGNED
,
/* V */
/* 86 */
ED_UNASSIGNED
,
/* V */
/* 87 */
VI_NEXT_
SPACE
_WORD
,
/* W */
/* 87 */
VI_NEXT_
BIG
_WORD
,
/* W */
/* 88 */
ED_DELETE_PREV_CHAR
,
/* X */
/* 88 */
ED_DELETE_PREV_CHAR
,
/* X */
/* 89 */
ED_UNASSIGNE
D
,
/* Y */
/* 89 */
VI_YANK_EN
D
,
/* Y */
/* 90 */
ED_UNASSIGNED
,
/* Z */
/* 90 */
ED_UNASSIGNED
,
/* Z */
/* 91 */
ED_SEQUENCE_LEAD_IN
,
/* [ */
/* 91 */
ED_SEQUENCE_LEAD_IN
,
/* [ */
/* 92 */
ED_UNASSIGNED
,
/* \ */
/* 92 */
ED_UNASSIGNED
,
/* \ */
/* 93 */
ED_UNASSIGNED
,
/* ] */
/* 93 */
ED_UNASSIGNED
,
/* ] */
/* 94 */
ED_MOVE_TO_BEG
,
/* ^ */
/* 94 */
ED_MOVE_TO_BEG
,
/* ^ */
/* 95 */
ED_UNASSIGNED
,
/* _ */
/* 95 */
VI_HISTORY_WORD
,
/* _ */
/* 96 */
ED_UNASSIGNED
,
/* ` */
/* 96 */
ED_UNASSIGNED
,
/* ` */
/* 97 */
VI_ADD
,
/* a */
/* 97 */
VI_ADD
,
/* a */
/* 98 */
VI_PREV_WORD
,
/* b */
/* 98 */
VI_PREV_WORD
,
/* b */
...
@@ -743,13 +749,13 @@ private const el_action_t el_map_vi_command[] = {
...
@@ -743,13 +749,13 @@ private const el_action_t el_map_vi_command[] = {
/* 115 */
VI_SUBSTITUTE_CHAR
,
/* s */
/* 115 */
VI_SUBSTITUTE_CHAR
,
/* s */
/* 116 */
VI_TO_NEXT_CHAR
,
/* t */
/* 116 */
VI_TO_NEXT_CHAR
,
/* t */
/* 117 */
VI_UNDO
,
/* u */
/* 117 */
VI_UNDO
,
/* u */
/* 118 */
ED_UNASSIGNED
,
/* v */
/* 118 */
VI_HISTEDIT
,
/* v */
/* 119 */
VI_NEXT_WORD
,
/* w */
/* 119 */
VI_NEXT_WORD
,
/* w */
/* 120 */
ED_DELETE_NEXT_CHAR
,
/* x */
/* 120 */
ED_DELETE_NEXT_CHAR
,
/* x */
/* 121 */
ED_UNASSIGNED
,
/* y */
/* 121 */
VI_YANK
,
/* y */
/* 122 */
ED_UNASSIGNED
,
/* z */
/* 122 */
ED_UNASSIGNED
,
/* z */
/* 123 */
ED_UNASSIGNED
,
/* { */
/* 123 */
ED_UNASSIGNED
,
/* { */
/* 124 */
ED_UNASSIGNED
,
/* | */
/* 124 */
VI_TO_COLUMN
,
/* | */
/* 125 */
ED_UNASSIGNED
,
/* } */
/* 125 */
ED_UNASSIGNED
,
/* } */
/* 126 */
VI_CHANGE_CASE
,
/* ~ */
/* 126 */
VI_CHANGE_CASE
,
/* ~ */
/* 127 */
ED_DELETE_PREV_CHAR
,
/* ^? */
/* 127 */
ED_DELETE_PREV_CHAR
,
/* ^? */
...
...
cmd-line-utils/libedit/map.h
View file @
8459cd35
/* $NetBSD: map.h,v 1.
6 2001/01/09 17:22:09 jdolecek
Exp $ */
/* $NetBSD: map.h,v 1.
7 2002/03/18 16:00:56 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
...
cmd-line-utils/libedit/np/fgetln.c
0 → 100644
View file @
8459cd35
/* $NetBSD: fgetln.c,v 1.1.1.1 1999/04/12 07:43:21 crooksa Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Christos Zoulas.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
char
*
fgetln
(
fp
,
len
)
FILE
*
fp
;
size_t
*
len
;
{
static
char
*
buf
=
NULL
;
static
size_t
bufsiz
=
0
;
char
*
ptr
;
if
(
buf
==
NULL
)
{
bufsiz
=
BUFSIZ
;
if
((
buf
=
malloc
(
bufsiz
))
==
NULL
)
return
NULL
;
}
if
(
fgets
(
buf
,
bufsiz
,
fp
)
==
NULL
)
return
NULL
;
*
len
=
0
;
while
((
ptr
=
strchr
(
&
buf
[
*
len
],
'\n'
))
==
NULL
)
{
size_t
nbufsiz
=
bufsiz
+
BUFSIZ
;
char
*
nbuf
=
realloc
(
buf
,
nbufsiz
);
if
(
nbuf
==
NULL
)
{
int
oerrno
=
errno
;
free
(
buf
);
errno
=
oerrno
;
buf
=
NULL
;
return
NULL
;
}
else
buf
=
nbuf
;
*
len
=
bufsiz
;
if
(
fgets
(
&
buf
[
bufsiz
],
BUFSIZ
,
fp
)
==
NULL
)
return
buf
;
bufsiz
=
nbufsiz
;
}
*
len
=
(
ptr
-
buf
)
+
1
;
return
buf
;
}
cmd-line-utils/libedit/np/strlcat.c
0 → 100644
View file @
8459cd35
/*
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#if defined(LIBC_SCCS) && !defined(lint)
static
char
*
rcsid
=
"$OpenBSD: strlcat.c,v 1.2 1999/06/17 16:28:58 millert Exp $"
;
#endif
/* LIBC_SCCS and not lint */
#ifndef lint
static
const
char
rcsid
[]
=
"$FreeBSD: src/lib/libc/string/strlcat.c,v 1.2.4.2 2001/07/09 23:30:06 obrien Exp $"
;
#endif
#include <sys/types.h>
#include <string.h>
/*
* Appends src to string dst of size siz (unlike strncat, siz is the
* full size of dst, not space left). At most siz-1 characters
* will be copied. Always NUL terminates (unless siz <= strlen(dst)).
* Returns strlen(initial dst) + strlen(src); if retval >= siz,
* truncation occurred.
*/
size_t
strlcat
(
dst
,
src
,
siz
)
char
*
dst
;
const
char
*
src
;
size_t
siz
;
{
register
char
*
d
=
dst
;
register
const
char
*
s
=
src
;
register
size_t
n
=
siz
;
size_t
dlen
;
/* Find the end of dst and adjust bytes left but don't go past end */
while
(
n
--
!=
0
&&
*
d
!=
'\0'
)
d
++
;
dlen
=
d
-
dst
;
n
=
siz
-
dlen
;
if
(
n
==
0
)
return
(
dlen
+
strlen
(
s
));
while
(
*
s
!=
'\0'
)
{
if
(
n
!=
1
)
{
*
d
++
=
*
s
;
n
--
;
}
s
++
;
}
*
d
=
'\0'
;
return
(
dlen
+
(
s
-
src
));
/* count does not include NUL */
}
cmd-line-utils/libedit/np/strlcpy.c
0 → 100644
View file @
8459cd35
/* $OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp $ */
/*
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#if defined(LIBC_SCCS) && !defined(lint)
#if 0
static char *rcsid = "$OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp $";
#endif
#endif
/* LIBC_SCCS and not lint */
#ifndef lint
static
const
char
rcsid
[]
=
"$FreeBSD: src/lib/libc/string/strlcpy.c,v 1.2.4.1 2001/07/09 23:30:06 obrien Exp $"
;
#endif
#include <sys/types.h>
#include <string.h>
/*
* Copy src to string dst of size siz. At most siz-1 characters
* will be copied. Always NUL terminates (unless siz == 0).
* Returns strlen(src); if retval >= siz, truncation occurred.
*/
size_t
strlcpy
(
dst
,
src
,
siz
)
char
*
dst
;
const
char
*
src
;
size_t
siz
;
{
register
char
*
d
=
dst
;
register
const
char
*
s
=
src
;
register
size_t
n
=
siz
;
/* Copy as many bytes as will fit */
if
(
n
!=
0
&&
--
n
!=
0
)
{
do
{
if
((
*
d
++
=
*
s
++
)
==
0
)
break
;
}
while
(
--
n
!=
0
);
}
/* Not enough room in dst, add NUL and traverse rest of src */
if
(
n
==
0
)
{
if
(
siz
!=
0
)
*
d
=
'\0'
;
/* NUL-terminate dst */
while
(
*
s
++
)
;
}
return
(
s
-
src
-
1
);
/* count does not include NUL */
}
cmd-line-utils/libedit/np/unvis.c
0 → 100644
View file @
8459cd35
/* $NetBSD: unvis.c,v 1.22 2002/03/23 17:38:27 christos Exp $ */
/*-
* Copyright (c) 1989, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#if defined(LIBC_SCCS) && !defined(lint)
#if 0
static char sccsid[] = "@(#)unvis.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: unvis.c,v 1.22 2002/03/23 17:38:27 christos Exp $"
);
#endif
#endif
/* LIBC_SCCS and not lint */
#define __LIBC12_SOURCE__
#include <sys/types.h>
#include <assert.h>
#include <ctype.h>
#include <stdio.h>
#include "np/vis.h"
#ifdef __weak_alias
__weak_alias
(
strunvis
,
_strunvis
)
__weak_alias
(
unvis
,
_unvis
)
#endif
#ifdef __warn_references
__warn_references
(
unvis
,
"warning: reference to compatibility unvis(); include <vis.h> for correct reference"
)
#endif
#if !HAVE_VIS_H
/*
* decode driven by state machine
*/
#define S_GROUND 0
/* haven't seen escape char */
#define S_START 1
/* start decoding special sequence */
#define S_META 2
/* metachar started (M) */
#define S_META1 3
/* metachar more, regular char (-) */
#define S_CTRL 4
/* control char started (^) */
#define S_OCTAL2 5
/* octal digit 2 */
#define S_OCTAL3 6
/* octal digit 3 */
#define S_HEX1 7
/* hex digit */
#define S_HEX2 8
/* hex digit 2 */
#define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7')
#define xtod(c) (isdigit(c) ? (c - '0') : ((tolower(c) - 'a') + 10))
int
unvis
(
cp
,
c
,
astate
,
flag
)
char
*
cp
;
int
c
;
int
*
astate
,
flag
;
{
return
__unvis13
(
cp
,
(
int
)
c
,
astate
,
flag
);
}
/*
* unvis - decode characters previously encoded by vis
*/
int
__unvis13
(
cp
,
c
,
astate
,
flag
)
char
*
cp
;
int
c
;
int
*
astate
,
flag
;
{
_DIAGASSERT
(
cp
!=
NULL
);
_DIAGASSERT
(
astate
!=
NULL
);
if
(
flag
&
UNVIS_END
)
{
if
(
*
astate
==
S_OCTAL2
||
*
astate
==
S_OCTAL3
||
*
astate
==
S_HEX2
)
{
*
astate
=
S_GROUND
;
return
(
UNVIS_VALID
);
}
return
(
*
astate
==
S_GROUND
?
UNVIS_NOCHAR
:
UNVIS_SYNBAD
);
}
switch
(
*
astate
)
{
case
S_GROUND
:
*
cp
=
0
;
if
(
c
==
'\\'
)
{
*
astate
=
S_START
;
return
(
0
);
}
if
((
flag
&
VIS_HTTPSTYLE
)
&&
c
==
'%'
)
{
*
astate
=
S_HEX1
;
return
(
0
);
}
*
cp
=
c
;
return
(
UNVIS_VALID
);
case
S_START
:
switch
(
c
)
{
case
'\\'
:
*
cp
=
c
;
*
astate
=
S_GROUND
;
return
(
UNVIS_VALID
);
case
'0'
:
case
'1'
:
case
'2'
:
case
'3'
:
case
'4'
:
case
'5'
:
case
'6'
:
case
'7'
:
*
cp
=
(
c
-
'0'
);
*
astate
=
S_OCTAL2
;
return
(
0
);
case
'M'
:
*
cp
=
(
char
)
0200
;
*
astate
=
S_META
;
return
(
0
);
case
'^'
:
*
astate
=
S_CTRL
;
return
(
0
);
case
'n'
:
*
cp
=
'\n'
;
*
astate
=
S_GROUND
;
return
(
UNVIS_VALID
);
case
'r'
:
*
cp
=
'\r'
;
*
astate
=
S_GROUND
;
return
(
UNVIS_VALID
);
case
'b'
:
*
cp
=
'\b'
;
*
astate
=
S_GROUND
;
return
(
UNVIS_VALID
);
case
'a'
:
*
cp
=
'\007'
;
*
astate
=
S_GROUND
;
return
(
UNVIS_VALID
);
case
'v'
:
*
cp
=
'\v'
;
*
astate
=
S_GROUND
;
return
(
UNVIS_VALID
);
case
't'
:
*
cp
=
'\t'
;
*
astate
=
S_GROUND
;
return
(
UNVIS_VALID
);
case
'f'
:
*
cp
=
'\f'
;
*
astate
=
S_GROUND
;
return
(
UNVIS_VALID
);
case
's'
:
*
cp
=
' '
;
*
astate
=
S_GROUND
;
return
(
UNVIS_VALID
);
case
'E'
:
*
cp
=
'\033'
;
*
astate
=
S_GROUND
;
return
(
UNVIS_VALID
);
case
'\n'
:
/*
* hidden newline
*/
*
astate
=
S_GROUND
;
return
(
UNVIS_NOCHAR
);
case
'$'
:
/*
* hidden marker
*/
*
astate
=
S_GROUND
;
return
(
UNVIS_NOCHAR
);
}
*
astate
=
S_GROUND
;
return
(
UNVIS_SYNBAD
);
case
S_META
:
if
(
c
==
'-'
)
*
astate
=
S_META1
;
else
if
(
c
==
'^'
)
*
astate
=
S_CTRL
;
else
{
*
astate
=
S_GROUND
;
return
(
UNVIS_SYNBAD
);
}
return
(
0
);
case
S_META1
:
*
astate
=
S_GROUND
;
*
cp
|=
c
;
return
(
UNVIS_VALID
);
case
S_CTRL
:
if
(
c
==
'?'
)
*
cp
|=
0177
;
else
*
cp
|=
c
&
037
;
*
astate
=
S_GROUND
;
return
(
UNVIS_VALID
);
case
S_OCTAL2
:
/* second possible octal digit */
if
(
isoctal
(
c
))
{
/*
* yes - and maybe a third
*/
*
cp
=
(
*
cp
<<
3
)
+
(
c
-
'0'
);
*
astate
=
S_OCTAL3
;
return
(
0
);
}
/*
* no - done with current sequence, push back passed char
*/
*
astate
=
S_GROUND
;
return
(
UNVIS_VALIDPUSH
);
case
S_OCTAL3
:
/* third possible octal digit */
*
astate
=
S_GROUND
;
if
(
isoctal
(
c
))
{
*
cp
=
(
*
cp
<<
3
)
+
(
c
-
'0'
);
return
(
UNVIS_VALID
);
}
/*
* we were done, push back passed char
*/
return
(
UNVIS_VALIDPUSH
);
case
S_HEX1
:
if
(
isxdigit
(
c
))
{
*
cp
=
xtod
(
c
);
*
astate
=
S_HEX2
;
return
(
0
);
}
/*
* no - done with current sequence, push back passed char
*/
*
astate
=
S_GROUND
;
return
(
UNVIS_VALIDPUSH
);
case
S_HEX2
:
*
astate
=
S_GROUND
;
if
(
isxdigit
(
c
))
{
*
cp
=
xtod
(
c
)
|
(
*
cp
<<
4
);
return
(
UNVIS_VALID
);
}
return
(
UNVIS_VALIDPUSH
);
default:
/*
* decoder in unknown state - (probably uninitialized)
*/
*
astate
=
S_GROUND
;
return
(
UNVIS_SYNBAD
);
}
}
/*
* strunvis - decode src into dst
*
* Number of chars decoded into dst is returned, -1 on error.
* Dst is null terminated.
*/
int
strunvisx
(
dst
,
src
,
flag
)
char
*
dst
;
const
char
*
src
;
int
flag
;
{
char
c
;
char
*
start
=
dst
;
int
state
=
0
;
_DIAGASSERT
(
src
!=
NULL
);
_DIAGASSERT
(
dst
!=
NULL
);
while
((
c
=
*
src
++
)
!=
'\0'
)
{
again:
switch
(
__unvis13
(
dst
,
c
,
&
state
,
flag
))
{
case
UNVIS_VALID
:
dst
++
;
break
;
case
UNVIS_VALIDPUSH
:
dst
++
;
goto
again
;
case
0
:
case
UNVIS_NOCHAR
:
break
;
default:
return
(
-
1
);
}
}
if
(
__unvis13
(
dst
,
c
,
&
state
,
UNVIS_END
)
==
UNVIS_VALID
)
dst
++
;
*
dst
=
'\0'
;
return
(
dst
-
start
);
}
int
strunvis
(
dst
,
src
)
char
*
dst
;
const
char
*
src
;
{
return
strunvisx
(
dst
,
src
,
0
);
}
#endif
cmd-line-utils/libedit/np/vis.c
0 → 100644
View file @
8459cd35
/* $NetBSD: vis.c,v 1.22 2002/03/23 17:38:27 christos Exp $ */
/*-
* Copyright (c) 1999 The NetBSD Foundation, Inc.
* Copyright (c) 1989, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#if defined(LIBC_SCCS) && !defined(lint)
__RCSID
(
"$NetBSD: vis.c,v 1.22 2002/03/23 17:38:27 christos Exp $"
);
#endif
/* LIBC_SCCS and not lint */
#include "config.h"
#include <sys/types.h>
#include <assert.h>
#ifdef HAVE_ALLOCA_H
#include <alloca.h>
#endif
#include <stdlib.h>
#include "np/vis.h"
#ifdef __weak_alias
__weak_alias
(
strsvis
,
_strsvis
)
__weak_alias
(
strsvisx
,
_strsvisx
)
__weak_alias
(
strvis
,
_strvis
)
__weak_alias
(
strvisx
,
_strvisx
)
__weak_alias
(
svis
,
_svis
)
__weak_alias
(
vis
,
_vis
)
#endif
#if !HAVE_VIS_H
#include <ctype.h>
#include <limits.h>
#include <stdio.h>
#include <string.h>
#undef BELL
#if defined(__STDC__)
#define BELL '\a'
#else
#define BELL '\007'
#endif
#define isoctal(c) (((unsigned char)(c)) >= '0' && ((unsigned char)(c)) <= '7')
#define iswhite(c) (c == ' ' || c == '\t' || c == '\n')
#define issafe(c) (c == '\b' || c == BELL || c == '\r')
#define xtoa(c) "0123456789abcdef"[c]
#define MAXEXTRAS 5
#define MAKEEXTRALIST(flag, extra, orig) \
do { \
const char *o = orig; \
char *e; \
while (*o++) \
continue; \
extra = alloca((size_t)((o - orig) + MAXEXTRAS)); \
for (o = orig, e = extra; (*e++ = *o++) != '\0';) \
continue; \
e--; \
if (flag & VIS_SP) *e++ = ' '; \
if (flag & VIS_TAB) *e++ = '\t'; \
if (flag & VIS_NL) *e++ = '\n'; \
if ((flag & VIS_NOSLASH) == 0) *e++ = '\\'; \
*e = '\0'; \
} while (
/*CONSTCOND*/
0)
/*
* This is HVIS, the macro of vis used to HTTP style (RFC 1808)
*/
#define HVIS(dst, c, flag, nextc, extra) \
do \
if (!isascii(c) || !isalnum(c) || strchr("$-_.+!*'(),", c) != NULL) { \
*dst++ = '%'; \
*dst++ = xtoa(((unsigned int)c >> 4) & 0xf); \
*dst++ = xtoa((unsigned int)c & 0xf); \
} else { \
SVIS(dst, c, flag, nextc, extra); \
} \
while (
/*CONSTCOND*/
0)
/*
* This is SVIS, the central macro of vis.
* dst: Pointer to the destination buffer
* c: Character to encode
* flag: Flag word
* nextc: The character following 'c'
* extra: Pointer to the list of extra characters to be
* backslash-protected.
*/
#define SVIS(dst, c, flag, nextc, extra) \
do { \
int isextra, isc; \
isextra = strchr(extra, c) != NULL; \
if (!isextra && isascii(c) && (isgraph(c) || iswhite(c) || \
((flag & VIS_SAFE) && issafe(c)))) { \
*dst++ = c; \
break; \
} \
isc = 0; \
if (flag & VIS_CSTYLE) { \
switch (c) { \
case '\n': \
isc = 1; *dst++ = '\\'; *dst++ = 'n'; \
break; \
case '\r': \
isc = 1; *dst++ = '\\'; *dst++ = 'r'; \
break; \
case '\b': \
isc = 1; *dst++ = '\\'; *dst++ = 'b'; \
break; \
case BELL: \
isc = 1; *dst++ = '\\'; *dst++ = 'a'; \
break; \
case '\v': \
isc = 1; *dst++ = '\\'; *dst++ = 'v'; \
break; \
case '\t': \
isc = 1; *dst++ = '\\'; *dst++ = 't'; \
break; \
case '\f': \
isc = 1; *dst++ = '\\'; *dst++ = 'f'; \
break; \
case ' ': \
isc = 1; *dst++ = '\\'; *dst++ = 's'; \
break; \
case '\0': \
isc = 1; *dst++ = '\\'; *dst++ = '0'; \
if (isoctal(nextc)) { \
*dst++ = '0'; \
*dst++ = '0'; \
} \
} \
} \
if (isc) break; \
if (isextra || ((c & 0177) == ' ') || (flag & VIS_OCTAL)) { \
*dst++ = '\\'; \
*dst++ = (unsigned char)(((unsigned int)(unsigned char)c >> 6) & 03) + '0'; \
*dst++ = (unsigned char)(((unsigned int)(unsigned char)c >> 3) & 07) + '0'; \
*dst++ = (c & 07) + '0'; \
} else { \
if ((flag & VIS_NOSLASH) == 0) *dst++ = '\\'; \
if (c & 0200) { \
c &= 0177; *dst++ = 'M'; \
} \
if (iscntrl(c)) { \
*dst++ = '^'; \
if (c == 0177) \
*dst++ = '?'; \
else \
*dst++ = c + '@'; \
} else { \
*dst++ = '-'; *dst++ = c; \
} \
} \
} while (
/*CONSTCOND*/
0)
/*
* svis - visually encode characters, also encoding the characters
* pointed to by `extra'
*/
char
*
svis
(
dst
,
c
,
flag
,
nextc
,
extra
)
char
*
dst
;
int
c
,
flag
,
nextc
;
const
char
*
extra
;
{
char
*
nextra
;
_DIAGASSERT
(
dst
!=
NULL
);
_DIAGASSERT
(
extra
!=
NULL
);
MAKEEXTRALIST
(
flag
,
nextra
,
extra
);
if
(
flag
&
VIS_HTTPSTYLE
)
HVIS
(
dst
,
c
,
flag
,
nextc
,
nextra
);
else
SVIS
(
dst
,
c
,
flag
,
nextc
,
nextra
);
*
dst
=
'\0'
;
return
(
dst
);
}
/*
* strsvis, strsvisx - visually encode characters from src into dst
*
* Extra is a pointer to a \0-terminated list of characters to
* be encoded, too. These functions are useful e. g. to
* encode strings in such a way so that they are not interpreted
* by a shell.
*
* Dst must be 4 times the size of src to account for possible
* expansion. The length of dst, not including the trailing NULL,
* is returned.
*
* Strsvisx encodes exactly len bytes from src into dst.
* This is useful for encoding a block of data.
*/
int
strsvis
(
dst
,
src
,
flag
,
extra
)
char
*
dst
;
const
char
*
src
;
int
flag
;
const
char
*
extra
;
{
char
c
;
char
*
start
;
char
*
nextra
;
_DIAGASSERT
(
dst
!=
NULL
);
_DIAGASSERT
(
src
!=
NULL
);
_DIAGASSERT
(
extra
!=
NULL
);
MAKEEXTRALIST
(
flag
,
nextra
,
extra
);
if
(
flag
&
VIS_HTTPSTYLE
)
{
for
(
start
=
dst
;
(
c
=
*
src
++
)
!=
'\0'
;
/* empty */
)
HVIS
(
dst
,
c
,
flag
,
*
src
,
nextra
);
}
else
{
for
(
start
=
dst
;
(
c
=
*
src
++
)
!=
'\0'
;
/* empty */
)
SVIS
(
dst
,
c
,
flag
,
*
src
,
nextra
);
}
*
dst
=
'\0'
;
return
(
dst
-
start
);
}
int
strsvisx
(
dst
,
src
,
len
,
flag
,
extra
)
char
*
dst
;
const
char
*
src
;
size_t
len
;
int
flag
;
const
char
*
extra
;
{
char
c
;
char
*
start
;
char
*
nextra
;
_DIAGASSERT
(
dst
!=
NULL
);
_DIAGASSERT
(
src
!=
NULL
);
_DIAGASSERT
(
extra
!=
NULL
);
MAKEEXTRALIST
(
flag
,
nextra
,
extra
);
if
(
flag
&
VIS_HTTPSTYLE
)
{
for
(
start
=
dst
;
len
>
0
;
len
--
)
{
c
=
*
src
++
;
HVIS
(
dst
,
c
,
flag
,
len
?
*
src
:
'\0'
,
nextra
);
}
}
else
{
for
(
start
=
dst
;
len
>
0
;
len
--
)
{
c
=
*
src
++
;
SVIS
(
dst
,
c
,
flag
,
len
?
*
src
:
'\0'
,
nextra
);
}
}
*
dst
=
'\0'
;
return
(
dst
-
start
);
}
/*
* vis - visually encode characters
*/
char
*
vis
(
dst
,
c
,
flag
,
nextc
)
char
*
dst
;
int
c
,
flag
,
nextc
;
{
char
*
extra
;
_DIAGASSERT
(
dst
!=
NULL
);
MAKEEXTRALIST
(
flag
,
extra
,
""
);
if
(
flag
&
VIS_HTTPSTYLE
)
HVIS
(
dst
,
c
,
flag
,
nextc
,
extra
);
else
SVIS
(
dst
,
c
,
flag
,
nextc
,
extra
);
*
dst
=
'\0'
;
return
(
dst
);
}
/*
* strvis, strvisx - visually encode characters from src into dst
*
* Dst must be 4 times the size of src to account for possible
* expansion. The length of dst, not including the trailing NULL,
* is returned.
*
* Strvisx encodes exactly len bytes from src into dst.
* This is useful for encoding a block of data.
*/
int
strvis
(
dst
,
src
,
flag
)
char
*
dst
;
const
char
*
src
;
int
flag
;
{
char
*
extra
;
MAKEEXTRALIST
(
flag
,
extra
,
""
);
return
(
strsvis
(
dst
,
src
,
flag
,
extra
));
}
int
strvisx
(
dst
,
src
,
len
,
flag
)
char
*
dst
;
const
char
*
src
;
size_t
len
;
int
flag
;
{
char
*
extra
;
MAKEEXTRALIST
(
flag
,
extra
,
""
);
return
(
strsvisx
(
dst
,
src
,
len
,
flag
,
extra
));
}
#endif
cmd-line-utils/libedit/np/vis.h
0 → 100644
View file @
8459cd35
/* $NetBSD: vis.h,v 1.12 2002/03/23 17:39:05 christos Exp $ */
/*-
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)vis.h 8.1 (Berkeley) 6/2/93
*/
#ifndef _VIS_H_
#define _VIS_H_
#ifdef HAVE_SYS_CDEFS_H
#include <sys/cdefs.h>
#endif
/*
* to select alternate encoding format
*/
#define VIS_OCTAL 0x01
/* use octal \ddd format */
#define VIS_CSTYLE 0x02
/* use \[nrft0..] where appropiate */
/*
* to alter set of characters encoded (default is to encode all
* non-graphic except space, tab, and newline).
*/
#define VIS_SP 0x04
/* also encode space */
#define VIS_TAB 0x08
/* also encode tab */
#define VIS_NL 0x10
/* also encode newline */
#define VIS_WHITE (VIS_SP | VIS_TAB | VIS_NL)
#define VIS_SAFE 0x20
/* only encode "unsafe" characters */
/*
* other
*/
#define VIS_NOSLASH 0x40
/* inhibit printing '\' */
#define VIS_HTTPSTYLE 0x80
/* http-style escape % HEX HEX */
/*
* unvis return codes
*/
#define UNVIS_VALID 1
/* character valid */
#define UNVIS_VALIDPUSH 2
/* character valid, push back passed char */
#define UNVIS_NOCHAR 3
/* valid sequence, no character produced */
#define UNVIS_SYNBAD -1
/* unrecognized escape sequence */
#define UNVIS_ERROR -2
/* decoder in unknown state (unrecoverable) */
/*
* unvis flags
*/
#define UNVIS_END 1
/* no more characters */
char
*
vis
(
char
*
,
int
,
int
,
int
);
char
*
svis
(
char
*
,
int
,
int
,
int
,
const
char
*
);
int
strvis
(
char
*
,
const
char
*
,
int
);
int
strsvis
(
char
*
,
const
char
*
,
int
,
const
char
*
);
int
strvisx
(
char
*
,
const
char
*
,
size_t
,
int
);
int
strsvisx
(
char
*
,
const
char
*
,
size_t
,
int
,
const
char
*
);
int
strunvis
(
char
*
,
const
char
*
);
int
strunvisx
(
char
*
,
const
char
*
,
int
);
#ifdef __LIBC12_SOURCE__
int
unvis
(
char
*
,
int
,
int
*
,
int
);
int
__unvis13
(
char
*
,
int
,
int
*
,
int
);
#else
int
unvis
(
char
*
,
int
,
int
*
,
int
)
__RENAME
(
__unvis13
);
#endif
#endif
/* !_VIS_H_ */
cmd-line-utils/libedit/parse.c
View file @
8459cd35
/* $NetBSD: parse.c,v 1.1
4 2001/01/23 15:55:30 jdolecek
Exp $ */
/* $NetBSD: parse.c,v 1.1
6 2003/01/21 18:40:24 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,7 +36,14 @@
...
@@ -36,7 +36,14 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)parse.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: parse.c,v 1.16 2003/01/21 18:40:24 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* parse.c: parse an editline extended command
* parse.c: parse an editline extended command
...
@@ -51,7 +58,6 @@
...
@@ -51,7 +58,6 @@
* settc
* settc
* setty
* setty
*/
*/
#include "sys.h"
#include "el.h"
#include "el.h"
#include "tokenizer.h"
#include "tokenizer.h"
#include <stdlib.h>
#include <stdlib.h>
...
@@ -63,7 +69,7 @@ private const struct {
...
@@ -63,7 +69,7 @@ private const struct {
{
"bind"
,
map_bind
},
{
"bind"
,
map_bind
},
{
"echotc"
,
term_echotc
},
{
"echotc"
,
term_echotc
},
{
"edit"
,
el_editmode
},
{
"edit"
,
el_editmode
},
{
"history"
,
hist_
list
},
{
"history"
,
hist_
command
},
{
"telltc"
,
term_telltc
},
{
"telltc"
,
term_telltc
},
{
"settc"
,
term_settc
},
{
"settc"
,
term_settc
},
{
"setty"
,
tty_stty
},
{
"setty"
,
tty_stty
},
...
...
cmd-line-utils/libedit/prompt.c
View file @
8459cd35
/* $NetBSD: prompt.c,v 1.
8 2001/01/10 07:45:41 jdolecek
Exp $ */
/* $NetBSD: prompt.c,v 1.
9 2002/03/18 16:00:56 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,12 +36,18 @@
...
@@ -36,12 +36,18 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)prompt.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: prompt.c,v 1.9 2002/03/18 16:00:56 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* prompt.c: Prompt printing functions
* prompt.c: Prompt printing functions
*/
*/
#include "sys.h"
#include <stdio.h>
#include <stdio.h>
#include "el.h"
#include "el.h"
...
...
cmd-line-utils/libedit/read.c
View file @
8459cd35
/* $NetBSD: read.c,v 1.
19 2001/01/10 07:45:41 jdolecek
Exp $ */
/* $NetBSD: read.c,v 1.
24 2002/11/20 16:50:08 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,13 +36,19 @@
...
@@ -36,13 +36,19 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)read.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: read.c,v 1.24 2002/11/20 16:50:08 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* read.c: Clean this junk up! This is horrible code.
* read.c: Clean this junk up! This is horrible code.
* Terminal read functions
* Terminal read functions
*/
*/
#include "sys.h"
#include <errno.h>
#include <errno.h>
#include <unistd.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdlib.h>
...
@@ -52,12 +58,44 @@
...
@@ -52,12 +58,44 @@
private
int
read__fixio
(
int
,
int
);
private
int
read__fixio
(
int
,
int
);
private
int
read_preread
(
EditLine
*
);
private
int
read_preread
(
EditLine
*
);
private
int
read_getcmd
(
EditLine
*
,
el_action_t
*
,
char
*
);
private
int
read_char
(
EditLine
*
,
char
*
);
private
int
read_char
(
EditLine
*
,
char
*
);
private
int
read_getcmd
(
EditLine
*
,
el_action_t
*
,
char
*
);
/* read_init():
* Initialize the read stuff
*/
protected
int
read_init
(
EditLine
*
el
)
{
/* builtin read_char */
el
->
el_read
.
read_char
=
read_char
;
return
0
;
}
/* el_read_setfn():
* Set the read char function to the one provided.
* If it is set to EL_BUILTIN_GETCFN, then reset to the builtin one.
*/
protected
int
el_read_setfn
(
EditLine
*
el
,
el_rfunc_t
rc
)
{
el
->
el_read
.
read_char
=
(
rc
==
EL_BUILTIN_GETCFN
)
?
read_char
:
rc
;
return
0
;
}
/* el_read_getfn():
* return the current read char function, or EL_BUILTIN_GETCFN
* if it is the default one
*/
protected
el_rfunc_t
el_read_getfn
(
EditLine
*
el
)
{
return
(
el
->
el_read
.
read_char
==
read_char
)
?
EL_BUILTIN_GETCFN
:
el
->
el_read
.
read_char
;
}
#ifndef MIN
#define MIN(A,B) ((A) < (B) ? (A) : (B))
#endif
#ifdef DEBUG_EDIT
#ifdef DEBUG_EDIT
private
void
private
void
...
@@ -83,7 +121,11 @@ read_debug(EditLine *el)
...
@@ -83,7 +121,11 @@ read_debug(EditLine *el)
*/
*/
/* ARGSUSED */
/* ARGSUSED */
private
int
private
int
read__fixio
(
int
fd
__attribute__
((
unused
)),
int
e
)
read__fixio
(
int
fd
#if !(defined(TRY_AGAIN) && (defined(FIONBIO) || (defined(F_SETFL) && defined(O_NDELAY))))
__attribute__
((
unused
))
#endif
/* !(defined(TRY_AGAIN) && (defined(FIONBIO) || (defined(F_SETFL) && defined(O_NDELAY)))) */
,
int
e
)
{
{
switch
(
e
)
{
switch
(
e
)
{
...
@@ -178,14 +220,13 @@ read_preread(EditLine *el)
...
@@ -178,14 +220,13 @@ read_preread(EditLine *el)
* Push a macro
* Push a macro
*/
*/
public
void
public
void
el_push
(
EditLine
*
el
,
c
onst
c
har
*
str
)
el_push
(
EditLine
*
el
,
char
*
str
)
{
{
c_macro_t
*
ma
=
&
el
->
el_chared
.
c_macro
;
c_macro_t
*
ma
=
&
el
->
el_chared
.
c_macro
;
if
(
str
!=
NULL
&&
ma
->
level
+
1
<
EL_MAXMACRO
)
{
if
(
str
!=
NULL
&&
ma
->
level
+
1
<
EL_MAXMACRO
)
{
ma
->
level
++
;
ma
->
level
++
;
/* LINTED const cast */
ma
->
macro
[
ma
->
level
]
=
str
;
ma
->
macro
[
ma
->
level
]
=
(
char
*
)
str
;
}
else
{
}
else
{
term_beep
(
el
);
term_beep
(
el
);
term__flush
();
term__flush
();
...
@@ -199,10 +240,10 @@ el_push(EditLine *el, const char *str)
...
@@ -199,10 +240,10 @@ el_push(EditLine *el, const char *str)
private
int
private
int
read_getcmd
(
EditLine
*
el
,
el_action_t
*
cmdnum
,
char
*
ch
)
read_getcmd
(
EditLine
*
el
,
el_action_t
*
cmdnum
,
char
*
ch
)
{
{
el_action_t
cmd
=
ED_UNASSIGNED
;
el_action_t
cmd
;
int
num
;
int
num
;
while
(
cmd
==
ED_UNASSIGNED
||
cmd
==
ED_SEQUENCE_LEAD_IN
)
{
do
{
if
((
num
=
el_getc
(
el
,
ch
))
!=
1
)
/* if EOF or error */
if
((
num
=
el_getc
(
el
,
ch
))
!=
1
)
/* if EOF or error */
return
(
num
);
return
(
num
);
...
@@ -241,7 +282,7 @@ read_getcmd(EditLine *el, el_action_t *cmdnum, char *ch)
...
@@ -241,7 +282,7 @@ read_getcmd(EditLine *el, el_action_t *cmdnum, char *ch)
}
}
if
(
el
->
el_map
.
alt
==
NULL
)
if
(
el
->
el_map
.
alt
==
NULL
)
el
->
el_map
.
current
=
el
->
el_map
.
key
;
el
->
el_map
.
current
=
el
->
el_map
.
key
;
}
}
while
(
cmd
==
ED_SEQUENCE_LEAD_IN
);
*
cmdnum
=
cmd
;
*
cmdnum
=
cmd
;
return
(
OKCMD
);
return
(
OKCMD
);
}
}
...
@@ -307,7 +348,7 @@ el_getc(EditLine *el, char *cp)
...
@@ -307,7 +348,7 @@ el_getc(EditLine *el, char *cp)
#ifdef DEBUG_READ
#ifdef DEBUG_READ
(
void
)
fprintf
(
el
->
el_errfile
,
"Reading a character
\n
"
);
(
void
)
fprintf
(
el
->
el_errfile
,
"Reading a character
\n
"
);
#endif
/* DEBUG_READ */
#endif
/* DEBUG_READ */
num_read
=
read_char
(
el
,
cp
);
num_read
=
(
*
el
->
el_read
.
read_char
)
(
el
,
cp
);
#ifdef DEBUG_READ
#ifdef DEBUG_READ
(
void
)
fprintf
(
el
->
el_errfile
,
"Got it %c
\n
"
,
*
cp
);
(
void
)
fprintf
(
el
->
el_errfile
,
"Got it %c
\n
"
,
*
cp
);
#endif
/* DEBUG_READ */
#endif
/* DEBUG_READ */
...
@@ -333,7 +374,7 @@ el_gets(EditLine *el, int *nread)
...
@@ -333,7 +374,7 @@ el_gets(EditLine *el, int *nread)
char
*
cp
=
el
->
el_line
.
buffer
;
char
*
cp
=
el
->
el_line
.
buffer
;
size_t
idx
;
size_t
idx
;
while
(
read_char
(
el
,
cp
)
==
1
)
{
while
(
(
*
el
->
el_read
.
read_char
)
(
el
,
cp
)
==
1
)
{
/* make sure there is space for next character */
/* make sure there is space for next character */
if
(
cp
+
1
>=
el
->
el_line
.
limit
)
{
if
(
cp
+
1
>=
el
->
el_line
.
limit
)
{
idx
=
(
cp
-
el
->
el_line
.
buffer
);
idx
=
(
cp
-
el
->
el_line
.
buffer
);
...
@@ -352,6 +393,11 @@ el_gets(EditLine *el, int *nread)
...
@@ -352,6 +393,11 @@ el_gets(EditLine *el, int *nread)
*
nread
=
el
->
el_line
.
cursor
-
el
->
el_line
.
buffer
;
*
nread
=
el
->
el_line
.
cursor
-
el
->
el_line
.
buffer
;
return
(
el
->
el_line
.
buffer
);
return
(
el
->
el_line
.
buffer
);
}
}
/* This is relatively cheap, and things go terribly wrong if
we have the wrong size. */
el_resize
(
el
);
re_clear_display
(
el
);
/* reset the display stuff */
re_clear_display
(
el
);
/* reset the display stuff */
ch_reset
(
el
);
ch_reset
(
el
);
...
@@ -378,7 +424,7 @@ el_gets(EditLine *el, int *nread)
...
@@ -378,7 +424,7 @@ el_gets(EditLine *el, int *nread)
term__flush
();
term__flush
();
while
(
read_char
(
el
,
cp
)
==
1
)
{
while
(
(
*
el
->
el_read
.
read_char
)
(
el
,
cp
)
==
1
)
{
/* make sure there is space next character */
/* make sure there is space next character */
if
(
cp
+
1
>=
el
->
el_line
.
limit
)
{
if
(
cp
+
1
>=
el
->
el_line
.
limit
)
{
idx
=
(
cp
-
el
->
el_line
.
buffer
);
idx
=
(
cp
-
el
->
el_line
.
buffer
);
...
@@ -386,6 +432,8 @@ el_gets(EditLine *el, int *nread)
...
@@ -386,6 +432,8 @@ el_gets(EditLine *el, int *nread)
break
;
break
;
cp
=
&
el
->
el_line
.
buffer
[
idx
];
cp
=
&
el
->
el_line
.
buffer
[
idx
];
}
}
if
(
*
cp
==
4
)
/* ought to be stty eof */
break
;
cp
++
;
cp
++
;
if
(
cp
[
-
1
]
==
'\r'
||
cp
[
-
1
]
==
'\n'
)
if
(
cp
[
-
1
]
==
'\r'
||
cp
[
-
1
]
==
'\n'
)
break
;
break
;
...
@@ -397,6 +445,7 @@ el_gets(EditLine *el, int *nread)
...
@@ -397,6 +445,7 @@ el_gets(EditLine *el, int *nread)
*
nread
=
el
->
el_line
.
cursor
-
el
->
el_line
.
buffer
;
*
nread
=
el
->
el_line
.
cursor
-
el
->
el_line
.
buffer
;
return
(
el
->
el_line
.
buffer
);
return
(
el
->
el_line
.
buffer
);
}
}
for
(
num
=
OKCMD
;
num
==
OKCMD
;)
{
/* while still editing this
for
(
num
=
OKCMD
;
num
==
OKCMD
;)
{
/* while still editing this
* line */
* line */
#ifdef DEBUG_EDIT
#ifdef DEBUG_EDIT
...
@@ -410,7 +459,7 @@ el_gets(EditLine *el, int *nread)
...
@@ -410,7 +459,7 @@ el_gets(EditLine *el, int *nread)
#endif
/* DEBUG_READ */
#endif
/* DEBUG_READ */
break
;
break
;
}
}
if
((
int
)
cmdnum
>=
el
->
el_map
.
nfunc
)
{
/* BUG CHECK command */
if
((
uint
)
cmdnum
>=
(
uint
)(
el
->
el_map
.
nfunc
)
)
{
/* BUG CHECK command */
#ifdef DEBUG_EDIT
#ifdef DEBUG_EDIT
(
void
)
fprintf
(
el
->
el_errfile
,
(
void
)
fprintf
(
el
->
el_errfile
,
"ERROR: illegal command from key 0%o
\r\n
"
,
ch
);
"ERROR: illegal command from key 0%o
\r\n
"
,
ch
);
...
@@ -432,7 +481,24 @@ el_gets(EditLine *el, int *nread)
...
@@ -432,7 +481,24 @@ el_gets(EditLine *el, int *nread)
"Error command = %d
\n
"
,
cmdnum
);
"Error command = %d
\n
"
,
cmdnum
);
}
}
#endif
/* DEBUG_READ */
#endif
/* DEBUG_READ */
/* vi redo needs these way down the levels... */
el
->
el_state
.
thiscmd
=
cmdnum
;
el
->
el_state
.
thisch
=
ch
;
if
(
el
->
el_map
.
type
==
MAP_VI
&&
el
->
el_map
.
current
==
el
->
el_map
.
key
&&
el
->
el_chared
.
c_redo
.
pos
<
el
->
el_chared
.
c_redo
.
lim
)
{
if
(
cmdnum
==
VI_DELETE_PREV_CHAR
&&
el
->
el_chared
.
c_redo
.
pos
!=
el
->
el_chared
.
c_redo
.
buf
&&
isprint
(
el
->
el_chared
.
c_redo
.
pos
[
-
1
]))
el
->
el_chared
.
c_redo
.
pos
--
;
else
*
el
->
el_chared
.
c_redo
.
pos
++
=
ch
;
}
retval
=
(
*
el
->
el_map
.
func
[
cmdnum
])
(
el
,
ch
);
retval
=
(
*
el
->
el_map
.
func
[
cmdnum
])
(
el
,
ch
);
#ifdef DEBUG_READ
(
void
)
fprintf
(
el
->
el_errfile
,
"Returned state %d
\n
"
,
retval
);
#endif
/* DEBUG_READ */
/* save the last command here */
/* save the last command here */
el
->
el_state
.
lastcmd
=
cmdnum
;
el
->
el_state
.
lastcmd
=
cmdnum
;
...
@@ -440,8 +506,6 @@ el_gets(EditLine *el, int *nread)
...
@@ -440,8 +506,6 @@ el_gets(EditLine *el, int *nread)
/* use any return value */
/* use any return value */
switch
(
retval
)
{
switch
(
retval
)
{
case
CC_CURSOR
:
case
CC_CURSOR
:
el
->
el_state
.
argument
=
1
;
el
->
el_state
.
doingarg
=
0
;
re_refresh_cursor
(
el
);
re_refresh_cursor
(
el
);
break
;
break
;
...
@@ -451,26 +515,20 @@ el_gets(EditLine *el, int *nread)
...
@@ -451,26 +515,20 @@ el_gets(EditLine *el, int *nread)
/* FALLTHROUGH */
/* FALLTHROUGH */
case
CC_REFRESH
:
case
CC_REFRESH
:
el
->
el_state
.
argument
=
1
;
el
->
el_state
.
doingarg
=
0
;
re_refresh
(
el
);
re_refresh
(
el
);
break
;
break
;
case
CC_REFRESH_BEEP
:
case
CC_REFRESH_BEEP
:
el
->
el_state
.
argument
=
1
;
el
->
el_state
.
doingarg
=
0
;
re_refresh
(
el
);
re_refresh
(
el
);
term_beep
(
el
);
term_beep
(
el
);
break
;
break
;
case
CC_NORM
:
/* normal char */
case
CC_NORM
:
/* normal char */
el
->
el_state
.
argument
=
1
;
el
->
el_state
.
doingarg
=
0
;
break
;
break
;
case
CC_ARGHACK
:
/* Suggested by Rich Salz */
case
CC_ARGHACK
:
/* Suggested by Rich Salz */
/* <rsalz@pineapple.bbn.com> */
/* <rsalz@pineapple.bbn.com> */
break
;
/* keep going... */
continue
;
/* keep going... */
case
CC_EOF
:
/* end of file typed */
case
CC_EOF
:
/* end of file typed */
num
=
0
;
num
=
0
;
...
@@ -489,8 +547,6 @@ el_gets(EditLine *el, int *nread)
...
@@ -489,8 +547,6 @@ el_gets(EditLine *el, int *nread)
re_clear_display
(
el
);
/* reset the display stuff */
re_clear_display
(
el
);
/* reset the display stuff */
ch_reset
(
el
);
/* reset the input pointers */
ch_reset
(
el
);
/* reset the input pointers */
re_refresh
(
el
);
/* print the prompt again */
re_refresh
(
el
);
/* print the prompt again */
el
->
el_state
.
argument
=
1
;
el
->
el_state
.
doingarg
=
0
;
break
;
break
;
case
CC_ERROR
:
case
CC_ERROR
:
...
@@ -499,17 +555,18 @@ el_gets(EditLine *el, int *nread)
...
@@ -499,17 +555,18 @@ el_gets(EditLine *el, int *nread)
(
void
)
fprintf
(
el
->
el_errfile
,
(
void
)
fprintf
(
el
->
el_errfile
,
"*** editor ERROR ***
\r\n\n
"
);
"*** editor ERROR ***
\r\n\n
"
);
#endif
/* DEBUG_READ */
#endif
/* DEBUG_READ */
el
->
el_state
.
argument
=
1
;
el
->
el_state
.
doingarg
=
0
;
term_beep
(
el
);
term_beep
(
el
);
term__flush
();
term__flush
();
break
;
break
;
}
}
el
->
el_state
.
argument
=
1
;
el
->
el_state
.
doingarg
=
0
;
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
}
}
term__flush
();
/* flush any buffered output */
/* make sure the tty is set up correctly */
/* make sure the tty is set up correctly */
(
void
)
tty_cookedmode
(
el
);
(
void
)
tty_cookedmode
(
el
);
term__flush
();
/* flush any buffered output */
if
(
el
->
el_flags
&
HANDLE_SIGNALS
)
if
(
el
->
el_flags
&
HANDLE_SIGNALS
)
sig_clr
(
el
);
sig_clr
(
el
);
if
(
nread
)
if
(
nread
)
...
...
cmd-line-utils/libedit/read.h
0 → 100644
View file @
8459cd35
/* $NetBSD: read.h,v 1.1 2001/09/27 19:29:50 christos Exp $ */
/*-
* Copyright (c) 2001 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Anthony Mallet.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/*
* el.read.h: Character reading functions
*/
#ifndef _h_el_read
#define _h_el_read
typedef
int
(
*
el_rfunc_t
)(
EditLine
*
,
char
*
);
typedef
struct
el_read_t
{
el_rfunc_t
read_char
;
/* Function to read a character */
}
el_read_t
;
protected
int
read_init
(
EditLine
*
);
protected
int
el_read_setfn
(
EditLine
*
,
el_rfunc_t
);
protected
el_rfunc_t
el_read_getfn
(
EditLine
*
);
#endif
/* _h_el_read */
cmd-line-utils/libedit/readline.c
View file @
8459cd35
/* $NetBSD: readline.c,v 1.
19 2001/01/10 08:10:45 jdolecek
Exp $ */
/* $NetBSD: readline.c,v 1.
28 2003/03/10 01:14:54 christos
Exp $ */
/*-
/*-
* Copyright (c) 1997 The NetBSD Foundation, Inc.
* Copyright (c) 1997 The NetBSD Foundation, Inc.
...
@@ -36,7 +36,11 @@
...
@@ -36,7 +36,11 @@
* POSSIBILITY OF SUCH DAMAGE.
* POSSIBILITY OF SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
__RCSID
(
"$NetBSD: readline.c,v 1.28 2003/03/10 01:14:54 christos Exp $"
);
#endif
/* not lint && not SCCSID */
#include <sys/types.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdio.h>
...
@@ -47,14 +51,13 @@
...
@@ -47,14 +51,13 @@
#include <stdlib.h>
#include <stdlib.h>
#include <unistd.h>
#include <unistd.h>
#include <limits.h>
#include <limits.h>
#ifdef HAVE_ALLOCA_H
#include <alloca.h>
#endif
#include "histedit.h"
#include "histedit.h"
#include "readline/readline.h"
#include "readline/readline.h"
#include "sys.h"
#include "el.h"
#include "el.h"
#include "fcns.h"
/* for EL_NUM_FCNS */
#include "fcns.h"
/* for EL_NUM_FCNS */
#ifdef HAVE_ALLOCA_H
#include <alloca.h>
#endif
/* for rl_complete() */
/* for rl_complete() */
#define TAB '\r'
#define TAB '\r'
...
@@ -65,7 +68,11 @@
...
@@ -65,7 +68,11 @@
/* readline compatibility stuff - look at readline sources/documentation */
/* readline compatibility stuff - look at readline sources/documentation */
/* to see what these variables mean */
/* to see what these variables mean */
const
char
*
rl_library_version
=
"EditLine wrapper"
;
const
char
*
rl_library_version
=
"EditLine wrapper"
;
const
char
*
rl_readline_name
=
""
;
static
char
empty
[]
=
{
'\0'
};
static
char
expand_chars
[]
=
{
' '
,
'\t'
,
'\n'
,
'='
,
'('
,
'\0'
};
static
char
break_chars
[]
=
{
' '
,
'\t'
,
'\n'
,
'"'
,
'\\'
,
'\''
,
'`'
,
'@'
,
'$'
,
'>'
,
'<'
,
'='
,
';'
,
'|'
,
'&'
,
'{'
,
'('
,
'\0'
};
char
*
rl_readline_name
=
empty
;
FILE
*
rl_instream
=
NULL
;
FILE
*
rl_instream
=
NULL
;
FILE
*
rl_outstream
=
NULL
;
FILE
*
rl_outstream
=
NULL
;
int
rl_point
=
0
;
int
rl_point
=
0
;
...
@@ -77,12 +84,12 @@ int history_length = 0;
...
@@ -77,12 +84,12 @@ int history_length = 0;
int
max_input_history
=
0
;
int
max_input_history
=
0
;
char
history_expansion_char
=
'!'
;
char
history_expansion_char
=
'!'
;
char
history_subst_char
=
'^'
;
char
history_subst_char
=
'^'
;
c
onst
char
*
history_no_expand_chars
=
"
\t\n
=("
;
c
har
*
history_no_expand_chars
=
expand_chars
;
Function
*
history_inhibit_expansion_function
=
NULL
;
Function
*
history_inhibit_expansion_function
=
NULL
;
int
rl_inhibit_completion
=
0
;
int
rl_inhibit_completion
=
0
;
int
rl_attempted_completion_over
=
0
;
int
rl_attempted_completion_over
=
0
;
c
onst
char
*
rl_basic_word_break_characters
=
"
\t\n\"\\
'`@$><=;|&{("
;
c
har
*
rl_basic_word_break_characters
=
break_chars
;
char
*
rl_completer_word_break_characters
=
NULL
;
char
*
rl_completer_word_break_characters
=
NULL
;
char
*
rl_completer_quote_characters
=
NULL
;
char
*
rl_completer_quote_characters
=
NULL
;
CPFunction
*
rl_completion_entry_function
=
NULL
;
CPFunction
*
rl_completion_entry_function
=
NULL
;
...
@@ -215,6 +222,11 @@ rl_initialize(void)
...
@@ -215,6 +222,11 @@ rl_initialize(void)
/* for proper prompt printing in readline() */
/* for proper prompt printing in readline() */
el_rl_prompt
=
strdup
(
""
);
el_rl_prompt
=
strdup
(
""
);
if
(
el_rl_prompt
==
NULL
)
{
history_end
(
h
);
el_end
(
e
);
return
-
1
;
}
el_set
(
e
,
EL_PROMPT
,
_get_prompt
);
el_set
(
e
,
EL_PROMPT
,
_get_prompt
);
el_set
(
e
,
EL_SIGNAL
,
1
);
el_set
(
e
,
EL_SIGNAL
,
1
);
...
@@ -250,8 +262,8 @@ rl_initialize(void)
...
@@ -250,8 +262,8 @@ rl_initialize(void)
* and rl_line_buffer directly.
* and rl_line_buffer directly.
*/
*/
li
=
el_line
(
e
);
li
=
el_line
(
e
);
/*
LINTED const cast
*/
/*
a cheesy way to get rid of const cast.
*/
rl_line_buffer
=
(
char
*
)
li
->
buffer
;
rl_line_buffer
=
memchr
(
li
->
buffer
,
*
li
->
buffer
,
1
)
;
rl_point
=
rl_end
=
0
;
rl_point
=
rl_end
=
0
;
return
(
0
);
return
(
0
);
...
@@ -268,6 +280,7 @@ readline(const char *prompt)
...
@@ -268,6 +280,7 @@ readline(const char *prompt)
HistEvent
ev
;
HistEvent
ev
;
int
count
;
int
count
;
const
char
*
ret
;
const
char
*
ret
;
char
*
buf
;
if
(
e
==
NULL
||
h
==
NULL
)
if
(
e
==
NULL
||
h
==
NULL
)
rl_initialize
();
rl_initialize
();
...
@@ -278,28 +291,28 @@ readline(const char *prompt)
...
@@ -278,28 +291,28 @@ readline(const char *prompt)
if
(
strcmp
(
el_rl_prompt
,
prompt
)
!=
0
)
{
if
(
strcmp
(
el_rl_prompt
,
prompt
)
!=
0
)
{
free
(
el_rl_prompt
);
free
(
el_rl_prompt
);
el_rl_prompt
=
strdup
(
prompt
);
el_rl_prompt
=
strdup
(
prompt
);
if
(
el_rl_prompt
==
NULL
)
return
NULL
;
}
}
/* get one line from input stream */
/* get one line from input stream */
ret
=
el_gets
(
e
,
&
count
);
ret
=
el_gets
(
e
,
&
count
);
if
(
ret
&&
count
>
0
)
{
if
(
ret
&&
count
>
0
)
{
char
*
foo
;
int
lastidx
;
int
lastidx
;
foo
=
strdup
(
ret
);
buf
=
strdup
(
ret
);
if
(
buf
==
NULL
)
return
NULL
;
lastidx
=
count
-
1
;
lastidx
=
count
-
1
;
if
(
foo
[
lastidx
]
==
'\n'
)
if
(
buf
[
lastidx
]
==
'\n'
)
foo
[
lastidx
]
=
'\0'
;
buf
[
lastidx
]
=
'\0'
;
ret
=
foo
;
}
else
}
else
ret
=
NULL
;
buf
=
NULL
;
history
(
h
,
&
ev
,
H_GETSIZE
);
history
(
h
,
&
ev
,
H_GETSIZE
);
history_length
=
ev
.
num
;
history_length
=
ev
.
num
;
/* LINTED const cast */
return
buf
;
return
(
char
*
)
ret
;
}
}
/*
/*
...
@@ -333,6 +346,8 @@ _rl_compat_sub(const char *str, const char *what, const char *with,
...
@@ -333,6 +346,8 @@ _rl_compat_sub(const char *str, const char *what, const char *with,
size_t
size
,
i
;
size_t
size
,
i
;
result
=
malloc
((
size
=
16
));
result
=
malloc
((
size
=
16
));
if
(
result
==
NULL
)
return
NULL
;
temp
=
str
;
temp
=
str
;
with_len
=
strlen
(
with
);
with_len
=
strlen
(
with
);
what_len
=
strlen
(
what
);
what_len
=
strlen
(
what
);
...
@@ -343,8 +358,14 @@ _rl_compat_sub(const char *str, const char *what, const char *with,
...
@@ -343,8 +358,14 @@ _rl_compat_sub(const char *str, const char *what, const char *with,
i
=
new
-
temp
;
i
=
new
-
temp
;
add
=
i
+
with_len
;
add
=
i
+
with_len
;
if
(
i
+
add
+
1
>=
size
)
{
if
(
i
+
add
+
1
>=
size
)
{
char
*
nresult
;
size
+=
add
+
1
;
size
+=
add
+
1
;
result
=
realloc
(
result
,
size
);
nresult
=
realloc
(
result
,
size
);
if
(
nresult
==
NULL
)
{
free
(
result
);
return
NULL
;
}
result
=
nresult
;
}
}
(
void
)
strncpy
(
&
result
[
len
],
temp
,
i
);
(
void
)
strncpy
(
&
result
[
len
],
temp
,
i
);
len
+=
i
;
len
+=
i
;
...
@@ -354,8 +375,14 @@ _rl_compat_sub(const char *str, const char *what, const char *with,
...
@@ -354,8 +375,14 @@ _rl_compat_sub(const char *str, const char *what, const char *with,
}
else
{
}
else
{
add
=
strlen
(
temp
);
add
=
strlen
(
temp
);
if
(
len
+
add
+
1
>=
size
)
{
if
(
len
+
add
+
1
>=
size
)
{
char
*
nresult
;
size
+=
add
+
1
;
size
+=
add
+
1
;
result
=
realloc
(
result
,
size
);
nresult
=
realloc
(
result
,
size
);
if
(
nresult
==
NULL
)
{
free
(
result
);
return
NULL
;
}
result
=
nresult
;
}
}
(
void
)
strcpy
(
&
result
[
len
],
temp
);
/* safe */
(
void
)
strcpy
(
&
result
[
len
],
temp
);
/* safe */
len
+=
add
;
len
+=
add
;
...
@@ -392,7 +419,7 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
...
@@ -392,7 +419,7 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
*
result
=
NULL
;
*
result
=
NULL
;
cmd
=
(
char
*
)
alloca
(
cmdlen
+
1
);
cmd
=
alloca
(
cmdlen
+
1
);
(
void
)
strncpy
(
cmd
,
command
,
cmdlen
);
(
void
)
strncpy
(
cmd
,
command
,
cmdlen
);
cmd
[
cmdlen
]
=
0
;
cmd
[
cmdlen
]
=
0
;
...
@@ -425,7 +452,7 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
...
@@ -425,7 +452,7 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
return
(
-
1
);
return
(
-
1
);
prefix
=
0
;
prefix
=
0
;
}
}
search
=
(
char
*
)
alloca
(
len
+
1
);
search
=
alloca
(
len
+
1
);
(
void
)
strncpy
(
search
,
&
cmd
[
idx
],
len
);
(
void
)
strncpy
(
search
,
&
cmd
[
idx
],
len
);
search
[
len
]
=
'\0'
;
search
[
len
]
=
'\0'
;
...
@@ -498,6 +525,8 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
...
@@ -498,6 +525,8 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
cmd
++
;
cmd
++
;
line
=
strdup
(
event_data
);
line
=
strdup
(
event_data
);
if
(
line
==
NULL
)
return
0
;
for
(;
*
cmd
;
cmd
++
)
{
for
(;
*
cmd
;
cmd
++
)
{
if
(
*
cmd
==
':'
)
if
(
*
cmd
==
':'
)
continue
;
continue
;
...
@@ -515,7 +544,7 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
...
@@ -515,7 +544,7 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
g_on
=
2
;
g_on
=
2
;
else
if
(
*
cmd
==
's'
||
*
cmd
==
'&'
)
{
else
if
(
*
cmd
==
's'
||
*
cmd
==
'&'
)
{
char
*
what
,
*
with
,
delim
;
char
*
what
,
*
with
,
delim
;
size_
t
len
,
from_len
;
unsigned
in
t
len
,
from_len
;
size_t
size
;
size_t
size
;
if
(
*
cmd
==
'&'
&&
(
from
==
NULL
||
to
==
NULL
))
if
(
*
cmd
==
'&'
&&
(
from
==
NULL
||
to
==
NULL
))
...
@@ -524,23 +553,36 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
...
@@ -524,23 +553,36 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
delim
=
*
(
++
cmd
),
cmd
++
;
delim
=
*
(
++
cmd
),
cmd
++
;
size
=
16
;
size
=
16
;
what
=
realloc
(
from
,
size
);
what
=
realloc
(
from
,
size
);
if
(
what
==
NULL
)
{
free
(
from
);
return
0
;
}
len
=
0
;
len
=
0
;
for
(;
*
cmd
&&
*
cmd
!=
delim
;
cmd
++
)
{
for
(;
*
cmd
&&
*
cmd
!=
delim
;
cmd
++
)
{
if
(
*
cmd
==
'\\'
if
(
*
cmd
==
'\\'
&&
*
(
cmd
+
1
)
==
delim
)
&&
*
(
cmd
+
1
)
==
delim
)
cmd
++
;
cmd
++
;
if
(
len
>=
size
)
if
(
len
>=
size
)
{
what
=
realloc
(
what
,
char
*
nwhat
;
nwhat
=
realloc
(
what
,
(
size
<<=
1
));
(
size
<<=
1
));
if
(
nwhat
==
NULL
)
{
free
(
what
);
return
0
;
}
what
=
nwhat
;
}
what
[
len
++
]
=
*
cmd
;
what
[
len
++
]
=
*
cmd
;
}
}
what
[
len
]
=
'\0'
;
what
[
len
]
=
'\0'
;
from
=
what
;
from
=
what
;
if
(
*
what
==
'\0'
)
{
if
(
*
what
==
'\0'
)
{
free
(
what
);
free
(
what
);
if
(
search
)
if
(
search
)
{
from
=
strdup
(
search
);
from
=
strdup
(
search
);
else
{
if
(
from
==
NULL
)
return
0
;
}
else
{
from
=
NULL
;
from
=
NULL
;
return
(
-
1
);
return
(
-
1
);
}
}
...
@@ -551,12 +593,22 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
...
@@ -551,12 +593,22 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
size
=
16
;
size
=
16
;
with
=
realloc
(
to
,
size
);
with
=
realloc
(
to
,
size
);
if
(
with
==
NULL
)
{
free
(
to
);
return
-
1
;
}
len
=
0
;
len
=
0
;
from_len
=
strlen
(
from
);
from_len
=
strlen
(
from
);
for
(;
*
cmd
&&
*
cmd
!=
delim
;
cmd
++
)
{
for
(;
*
cmd
&&
*
cmd
!=
delim
;
cmd
++
)
{
if
(
len
+
from_len
+
1
>=
size
)
{
if
(
len
+
from_len
+
1
>=
size
)
{
char
*
nwith
;
size
+=
from_len
+
1
;
size
+=
from_len
+
1
;
with
=
realloc
(
with
,
size
);
nwith
=
realloc
(
with
,
size
);
if
(
nwith
==
NULL
)
{
free
(
with
);
return
-
1
;
}
with
=
nwith
;
}
}
if
(
*
cmd
==
'&'
)
{
if
(
*
cmd
==
'&'
)
{
/* safe */
/* safe */
...
@@ -575,8 +627,10 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
...
@@ -575,8 +627,10 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
tempcmd
=
_rl_compat_sub
(
line
,
from
,
to
,
tempcmd
=
_rl_compat_sub
(
line
,
from
,
to
,
(
g_on
)
?
1
:
0
);
(
g_on
)
?
1
:
0
);
if
(
tempcmd
)
{
free
(
line
);
free
(
line
);
line
=
tempcmd
;
line
=
tempcmd
;
}
g_on
=
0
;
g_on
=
0
;
}
}
}
}
...
@@ -622,14 +676,21 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
...
@@ -622,14 +676,21 @@ _history_expand_command(const char *command, size_t cmdlen, char **result)
}
}
cmdsize
=
1
,
cmdlen
=
0
;
cmdsize
=
1
,
cmdlen
=
0
;
tempcmd
=
malloc
(
cmdsize
);
if
((
tempcmd
=
malloc
(
cmdsize
))
==
NULL
)
return
0
;
for
(
i
=
start
;
start
<=
i
&&
i
<=
end
;
i
++
)
{
for
(
i
=
start
;
start
<=
i
&&
i
<=
end
;
i
++
)
{
int
arr_len
;
int
arr_len
;
arr_len
=
strlen
(
arr
[
i
]);
arr_len
=
strlen
(
arr
[
i
]);
if
(
cmdlen
+
arr_len
+
1
>=
cmdsize
)
{
if
(
cmdlen
+
arr_len
+
1
>=
cmdsize
)
{
char
*
ntempcmd
;
cmdsize
+=
arr_len
+
1
;
cmdsize
+=
arr_len
+
1
;
tempcmd
=
realloc
(
tempcmd
,
cmdsize
);
ntempcmd
=
realloc
(
tempcmd
,
cmdsize
);
if
(
ntempcmd
==
NULL
)
{
free
(
tempcmd
);
return
0
;
}
tempcmd
=
ntempcmd
;
}
}
(
void
)
strcpy
(
&
tempcmd
[
cmdlen
],
arr
[
i
]);
/* safe */
(
void
)
strcpy
(
&
tempcmd
[
cmdlen
],
arr
[
i
]);
/* safe */
cmdlen
+=
arr_len
;
cmdlen
+=
arr_len
;
...
@@ -662,10 +723,12 @@ history_expand(char *str, char **output)
...
@@ -662,10 +723,12 @@ history_expand(char *str, char **output)
rl_initialize
();
rl_initialize
();
*
output
=
strdup
(
str
);
/* do it early */
*
output
=
strdup
(
str
);
/* do it early */
if
(
*
output
==
NULL
)
return
0
;
if
(
str
[
0
]
==
history_subst_char
)
{
if
(
str
[
0
]
==
history_subst_char
)
{
/* ^foo^foo2^ is equivalent to !!:s^foo^foo2^ */
/* ^foo^foo2^ is equivalent to !!:s^foo^foo2^ */
temp
=
(
char
*
)
alloca
(
4
+
strlen
(
str
)
+
1
);
temp
=
alloca
(
4
+
strlen
(
str
)
+
1
);
temp
[
0
]
=
temp
[
1
]
=
history_expansion_char
;
temp
[
0
]
=
temp
[
1
]
=
history_expansion_char
;
temp
[
2
]
=
':'
;
temp
[
2
]
=
':'
;
temp
[
3
]
=
's'
;
temp
[
3
]
=
's'
;
...
@@ -674,8 +737,14 @@ history_expand(char *str, char **output)
...
@@ -674,8 +737,14 @@ history_expand(char *str, char **output)
}
}
#define ADD_STRING(what, len) \
#define ADD_STRING(what, len) \
{ \
{ \
if (idx + len + 1 > size) \
if (idx + len + 1 > size) { \
result = realloc(result, (size += len + 1)); \
char *nresult = realloc(result, (size += len + 1));\
if (nresult == NULL) { \
free(*output); \
return 0; \
} \
result = nresult; \
} \
(void)strncpy(&result[idx], what, len); \
(void)strncpy(&result[idx], what, len); \
idx += len; \
idx += len; \
result[idx] = '\0'; \
result[idx] = '\0'; \
...
@@ -789,11 +858,21 @@ history_tokenize(const char *str)
...
@@ -789,11 +858,21 @@ history_tokenize(const char *str)
}
}
if
(
result_idx
+
2
>=
size
)
{
if
(
result_idx
+
2
>=
size
)
{
char
**
nresult
;
size
<<=
1
;
size
<<=
1
;
result
=
realloc
(
result
,
size
*
sizeof
(
char
*
));
nresult
=
realloc
(
result
,
size
*
sizeof
(
char
*
));
if
(
nresult
==
NULL
)
{
free
(
result
);
return
NULL
;
}
result
=
nresult
;
}
}
len
=
i
-
start
;
len
=
i
-
start
;
temp
=
malloc
(
len
+
1
);
temp
=
malloc
(
len
+
1
);
if
(
temp
==
NULL
)
{
free
(
result
);
return
NULL
;
}
(
void
)
strncpy
(
temp
,
&
str
[
start
],
len
);
(
void
)
strncpy
(
temp
,
&
str
[
start
],
len
);
temp
[
len
]
=
'\0'
;
temp
[
len
]
=
'\0'
;
result
[
result_idx
++
]
=
temp
;
result
[
result_idx
++
]
=
temp
;
...
@@ -1158,11 +1237,15 @@ tilde_expand(char *txt)
...
@@ -1158,11 +1237,15 @@ tilde_expand(char *txt)
return
(
strdup
(
txt
));
return
(
strdup
(
txt
));
temp
=
strchr
(
txt
+
1
,
'/'
);
temp
=
strchr
(
txt
+
1
,
'/'
);
if
(
temp
==
NULL
)
if
(
temp
==
NULL
)
{
temp
=
strdup
(
txt
+
1
);
temp
=
strdup
(
txt
+
1
);
else
{
if
(
temp
==
NULL
)
return
NULL
;
}
else
{
len
=
temp
-
txt
+
1
;
/* text until string after slash */
len
=
temp
-
txt
+
1
;
/* text until string after slash */
temp
=
malloc
(
len
);
temp
=
malloc
(
len
);
if
(
temp
==
NULL
)
return
NULL
;
(
void
)
strncpy
(
temp
,
txt
+
1
,
len
-
2
);
(
void
)
strncpy
(
temp
,
txt
+
1
,
len
-
2
);
temp
[
len
-
2
]
=
'\0'
;
temp
[
len
-
2
]
=
'\0'
;
}
}
...
@@ -1176,6 +1259,8 @@ tilde_expand(char *txt)
...
@@ -1176,6 +1259,8 @@ tilde_expand(char *txt)
txt
+=
len
;
txt
+=
len
;
temp
=
malloc
(
strlen
(
pass
->
pw_dir
)
+
1
+
strlen
(
txt
)
+
1
);
temp
=
malloc
(
strlen
(
pass
->
pw_dir
)
+
1
+
strlen
(
txt
)
+
1
);
if
(
temp
==
NULL
)
return
NULL
;
(
void
)
sprintf
(
temp
,
"%s/%s"
,
pass
->
pw_dir
,
txt
);
(
void
)
sprintf
(
temp
,
"%s/%s"
,
pass
->
pw_dir
,
txt
);
return
(
temp
);
return
(
temp
);
...
@@ -1200,28 +1285,45 @@ filename_completion_function(const char *text, int state)
...
@@ -1200,28 +1285,45 @@ filename_completion_function(const char *text, int state)
size_t
len
;
size_t
len
;
if
(
state
==
0
||
dir
==
NULL
)
{
if
(
state
==
0
||
dir
==
NULL
)
{
if
(
dir
!=
NULL
)
{
closedir
(
dir
);
dir
=
NULL
;
}
temp
=
strrchr
(
text
,
'/'
);
temp
=
strrchr
(
text
,
'/'
);
if
(
temp
)
{
if
(
temp
)
{
char
*
nptr
;
temp
++
;
temp
++
;
filename
=
realloc
(
filename
,
strlen
(
temp
)
+
1
);
nptr
=
realloc
(
filename
,
strlen
(
temp
)
+
1
);
if
(
nptr
==
NULL
)
{
free
(
filename
);
return
NULL
;
}
filename
=
nptr
;
(
void
)
strcpy
(
filename
,
temp
);
(
void
)
strcpy
(
filename
,
temp
);
len
=
temp
-
text
;
/* including last slash */
len
=
temp
-
text
;
/* including last slash */
dirname
=
realloc
(
dirname
,
len
+
1
);
nptr
=
realloc
(
dirname
,
len
+
1
);
if
(
nptr
==
NULL
)
{
free
(
filename
);
return
NULL
;
}
dirname
=
nptr
;
(
void
)
strncpy
(
dirname
,
text
,
len
);
(
void
)
strncpy
(
dirname
,
text
,
len
);
dirname
[
len
]
=
'\0'
;
dirname
[
len
]
=
'\0'
;
}
else
{
}
else
{
filename
=
strdup
(
text
);
filename
=
strdup
(
text
);
if
(
filename
==
NULL
)
return
NULL
;
dirname
=
NULL
;
dirname
=
NULL
;
}
}
/* support for ``~user'' syntax */
/* support for ``~user'' syntax */
if
(
dirname
&&
*
dirname
==
'~'
)
{
if
(
dirname
&&
*
dirname
==
'~'
)
{
char
*
nptr
;
temp
=
tilde_expand
(
dirname
);
temp
=
tilde_expand
(
dirname
);
dirname
=
realloc
(
dirname
,
strlen
(
temp
)
+
1
);
if
(
temp
==
NULL
)
return
NULL
;
nptr
=
realloc
(
dirname
,
strlen
(
temp
)
+
1
);
if
(
nptr
==
NULL
)
{
free
(
dirname
);
return
NULL
;
}
dirname
=
nptr
;
(
void
)
strcpy
(
dirname
,
temp
);
/* safe */
(
void
)
strcpy
(
dirname
,
temp
);
/* safe */
free
(
temp
);
/* no longer needed */
free
(
temp
);
/* no longer needed */
}
}
...
@@ -1230,6 +1332,10 @@ filename_completion_function(const char *text, int state)
...
@@ -1230,6 +1332,10 @@ filename_completion_function(const char *text, int state)
if
(
filename_len
==
0
)
if
(
filename_len
==
0
)
return
(
NULL
);
/* no expansion possible */
return
(
NULL
);
/* no expansion possible */
if
(
dir
!=
NULL
)
{
(
void
)
closedir
(
dir
);
dir
=
NULL
;
}
dir
=
opendir
(
dirname
?
dirname
:
"."
);
dir
=
opendir
(
dirname
?
dirname
:
"."
);
if
(
!
dir
)
if
(
!
dir
)
return
(
NULL
);
/* cannot open the directory */
return
(
NULL
);
/* cannot open the directory */
...
@@ -1239,7 +1345,7 @@ filename_completion_function(const char *text, int state)
...
@@ -1239,7 +1345,7 @@ filename_completion_function(const char *text, int state)
/* otherwise, get first entry where first */
/* otherwise, get first entry where first */
/* filename_len characters are equal */
/* filename_len characters are equal */
if
(
entry
->
d_name
[
0
]
==
filename
[
0
]
if
(
entry
->
d_name
[
0
]
==
filename
[
0
]
#if
def HAVE_DIRENT_H
#if
defined(__SVR4) || defined(__linux__)
&&
strlen
(
entry
->
d_name
)
>=
filename_len
&&
strlen
(
entry
->
d_name
)
>=
filename_len
#else
#else
&&
entry
->
d_namlen
>=
filename_len
&&
entry
->
d_namlen
>=
filename_len
...
@@ -1252,21 +1358,26 @@ filename_completion_function(const char *text, int state)
...
@@ -1252,21 +1358,26 @@ filename_completion_function(const char *text, int state)
if
(
entry
)
{
/* match found */
if
(
entry
)
{
/* match found */
struct
stat
stbuf
;
struct
stat
stbuf
;
#if
def HAVE_DIRENT_H
#if
defined(__SVR4) || defined(__linux__)
len
=
strlen
(
entry
->
d_name
)
+
len
=
strlen
(
entry
->
d_name
)
+
#else
#else
len
=
entry
->
d_namlen
+
len
=
entry
->
d_namlen
+
#endif
#endif
((
dirname
)
?
strlen
(
dirname
)
:
0
)
+
1
+
1
;
((
dirname
)
?
strlen
(
dirname
)
:
0
)
+
1
+
1
;
temp
=
malloc
(
len
);
temp
=
malloc
(
len
);
if
(
temp
==
NULL
)
return
NULL
;
(
void
)
sprintf
(
temp
,
"%s%s"
,
(
void
)
sprintf
(
temp
,
"%s%s"
,
dirname
?
dirname
:
""
,
entry
->
d_name
);
/* safe */
dirname
?
dirname
:
""
,
entry
->
d_name
);
/* safe */
/* test, if it's directory */
/* test, if it's directory */
if
(
stat
(
temp
,
&
stbuf
)
==
0
&&
S_ISDIR
(
stbuf
.
st_mode
))
if
(
stat
(
temp
,
&
stbuf
)
==
0
&&
S_ISDIR
(
stbuf
.
st_mode
))
strcat
(
temp
,
"/"
);
/* safe */
strcat
(
temp
,
"/"
);
/* safe */
}
else
}
else
{
(
void
)
closedir
(
dir
);
dir
=
NULL
;
temp
=
NULL
;
temp
=
NULL
;
}
return
(
temp
);
return
(
temp
);
}
}
...
@@ -1331,16 +1442,24 @@ completion_matches(const char *text, CPFunction *genfunc)
...
@@ -1331,16 +1442,24 @@ completion_matches(const char *text, CPFunction *genfunc)
matches
=
0
;
matches
=
0
;
match_list_len
=
1
;
match_list_len
=
1
;
while
((
retstr
=
(
*
genfunc
)
(
text
,
matches
))
!=
NULL
)
{
while
((
retstr
=
(
*
genfunc
)
(
text
,
matches
))
!=
NULL
)
{
if
(
matches
+
1
>=
match_list_len
)
{
/* allow for list terminator here */
if
(
matches
+
2
>=
match_list_len
)
{
char
**
nmatch_list
;
match_list_len
<<=
1
;
match_list_len
<<=
1
;
match_list
=
realloc
(
match_list
,
n
match_list
=
realloc
(
match_list
,
match_list_len
*
sizeof
(
char
*
));
match_list_len
*
sizeof
(
char
*
));
if
(
nmatch_list
==
NULL
)
{
free
(
match_list
);
return
NULL
;
}
match_list
=
nmatch_list
;
}
}
match_list
[
++
matches
]
=
retstr
;
match_list
[
++
matches
]
=
retstr
;
}
}
if
(
!
match_list
)
if
(
!
match_list
)
return
(
char
**
)
NULL
;
/* nothing found */
return
NULL
;
/* nothing found */
/* find least denominator and insert it to match_list[0] */
/* find least denominator and insert it to match_list[0] */
which
=
2
;
which
=
2
;
...
@@ -1354,14 +1473,15 @@ completion_matches(const char *text, CPFunction *genfunc)
...
@@ -1354,14 +1473,15 @@ completion_matches(const char *text, CPFunction *genfunc)
}
}
retstr
=
malloc
(
max_equal
+
1
);
retstr
=
malloc
(
max_equal
+
1
);
if
(
retstr
==
NULL
)
{
free
(
match_list
);
return
NULL
;
}
(
void
)
strncpy
(
retstr
,
match_list
[
1
],
max_equal
);
(
void
)
strncpy
(
retstr
,
match_list
[
1
],
max_equal
);
retstr
[
max_equal
]
=
'\0'
;
retstr
[
max_equal
]
=
'\0'
;
match_list
[
0
]
=
retstr
;
match_list
[
0
]
=
retstr
;
/* add NULL as last pointer to the array */
/* add NULL as last pointer to the array */
if
(
matches
+
1
>=
match_list_len
)
match_list
=
realloc
(
match_list
,
(
match_list_len
+
1
)
*
sizeof
(
char
*
));
match_list
[
matches
+
1
]
=
(
char
*
)
NULL
;
match_list
[
matches
+
1
]
=
(
char
*
)
NULL
;
return
(
match_list
);
return
(
match_list
);
...
@@ -1374,10 +1494,8 @@ static int
...
@@ -1374,10 +1494,8 @@ static int
_rl_qsort_string_compare
(
i1
,
i2
)
_rl_qsort_string_compare
(
i1
,
i2
)
const
void
*
i1
,
*
i2
;
const
void
*
i1
,
*
i2
;
{
{
/*LINTED const castaway*/
const
char
*
s1
=
((
const
char
*
const
*
)
i1
)[
0
];
const
char
*
s1
=
((
const
char
**
)
i1
)[
0
];
const
char
*
s2
=
((
const
char
*
const
*
)
i2
)[
0
];
/*LINTED const castaway*/
const
char
*
s2
=
((
const
char
**
)
i2
)[
0
];
return
strcasecmp
(
s1
,
s2
);
return
strcasecmp
(
s1
,
s2
);
}
}
...
@@ -1459,7 +1577,7 @@ rl_complete_internal(int what_to_do)
...
@@ -1459,7 +1577,7 @@ rl_complete_internal(int what_to_do)
ctemp
--
;
ctemp
--
;
len
=
li
->
cursor
-
ctemp
;
len
=
li
->
cursor
-
ctemp
;
temp
=
(
char
*
)
alloca
(
len
+
1
);
temp
=
alloca
(
len
+
1
);
(
void
)
strncpy
(
temp
,
ctemp
,
len
);
(
void
)
strncpy
(
temp
,
ctemp
,
len
);
temp
[
len
]
=
'\0'
;
temp
[
len
]
=
'\0'
;
...
...
cmd-line-utils/libedit/readline/readline.h
View file @
8459cd35
...
@@ -39,18 +39,6 @@
...
@@ -39,18 +39,6 @@
#define _READLINE_H_
#define _READLINE_H_
#include <sys/types.h>
#include <sys/types.h>
#if HAVE_SYS_CDEFS_H
#include <sys/cdefs.h>
#endif
#ifndef __BEGIN_DECLS
#if defined(__cplusplus)
#define __BEGIN_DECLS extern "C" {
#define __END_DECLS }
#else
#define __BEGIN_DECLS
#define __END_DECLS
#endif
#endif
/* list of readline stuff supported by editline library's readline wrapper */
/* list of readline stuff supported by editline library's readline wrapper */
...
@@ -66,16 +54,18 @@ typedef struct _hist_entry {
...
@@ -66,16 +54,18 @@ typedef struct _hist_entry {
}
HIST_ENTRY
;
}
HIST_ENTRY
;
/* global variables used by readline enabled applications */
/* global variables used by readline enabled applications */
__BEGIN_DECLS
#ifdef __cplusplus
extern
"C"
{
#endif
extern
const
char
*
rl_library_version
;
extern
const
char
*
rl_library_version
;
extern
c
onst
char
*
rl_readline_name
;
extern
c
har
*
rl_readline_name
;
extern
FILE
*
rl_instream
;
extern
FILE
*
rl_instream
;
extern
FILE
*
rl_outstream
;
extern
FILE
*
rl_outstream
;
extern
char
*
rl_line_buffer
;
extern
char
*
rl_line_buffer
;
extern
int
rl_point
,
rl_end
;
extern
int
rl_point
,
rl_end
;
extern
int
history_base
,
history_length
;
extern
int
history_base
,
history_length
;
extern
int
max_input_history
;
extern
int
max_input_history
;
extern
c
onst
char
*
rl_basic_word_break_characters
;
extern
c
har
*
rl_basic_word_break_characters
;
extern
char
*
rl_completer_word_break_characters
;
extern
char
*
rl_completer_word_break_characters
;
extern
char
*
rl_completer_quote_characters
;
extern
char
*
rl_completer_quote_characters
;
extern
CPFunction
*
rl_completion_entry_function
;
extern
CPFunction
*
rl_completion_entry_function
;
...
@@ -121,6 +111,8 @@ void rl_display_match_list(char **, int, int);
...
@@ -121,6 +111,8 @@ void rl_display_match_list(char **, int, int);
int
rl_insert
(
int
,
int
);
int
rl_insert
(
int
,
int
);
void
rl_reset_terminal
(
const
char
*
);
void
rl_reset_terminal
(
const
char
*
);
int
rl_bind_key
(
int
,
int
(
*
)(
int
,
int
));
int
rl_bind_key
(
int
,
int
(
*
)(
int
,
int
));
__END_DECLS
#ifdef __cplusplus
}
#endif
#endif
/* _READLINE_H_ */
#endif
/* _READLINE_H_ */
cmd-line-utils/libedit/refresh.c
View file @
8459cd35
/* $NetBSD: refresh.c,v 1.
17 2001/04/13 00:53:11 lukem
Exp $ */
/* $NetBSD: refresh.c,v 1.
24 2003/03/10 21:18:49 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,12 +36,18 @@
...
@@ -36,12 +36,18 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)refresh.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: refresh.c,v 1.24 2003/03/10 21:18:49 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* refresh.c: Lower level screen refreshing functions
* refresh.c: Lower level screen refreshing functions
*/
*/
#include "sys.h"
#include <stdio.h>
#include <stdio.h>
#include <ctype.h>
#include <ctype.h>
#include <unistd.h>
#include <unistd.h>
...
@@ -51,28 +57,28 @@
...
@@ -51,28 +57,28 @@
private
void
re_addc
(
EditLine
*
,
int
);
private
void
re_addc
(
EditLine
*
,
int
);
private
void
re_update_line
(
EditLine
*
,
char
*
,
char
*
,
int
);
private
void
re_update_line
(
EditLine
*
,
char
*
,
char
*
,
int
);
private
void
re_insert
(
EditLine
*
,
char
*
,
int
,
int
,
char
*
,
int
);
private
void
re_insert
(
EditLine
*
el
,
char
*
,
int
,
int
,
char
*
,
int
);
private
void
re_delete
(
EditLine
*
,
char
*
,
int
,
int
,
int
);
private
void
re_delete
(
EditLine
*
el
,
char
*
,
int
,
int
,
int
);
private
void
re_fastputc
(
EditLine
*
,
int
);
private
void
re_fastputc
(
EditLine
*
,
int
);
private
void
re__strncopy
(
char
*
,
char
*
,
size_t
);
private
void
re__strncopy
(
char
*
,
char
*
,
size_t
);
private
void
re__copy_and_pad
(
char
*
,
const
char
*
,
size_t
);
private
void
re__copy_and_pad
(
char
*
,
const
char
*
,
size_t
);
#ifdef DEBUG_REFRESH
#ifdef DEBUG_REFRESH
private
void
re_printstr
(
EditLine
*
,
char
*
,
char
*
,
char
*
);
private
void
re_printstr
(
EditLine
*
,
c
onst
c
har
*
,
char
*
,
char
*
);
#define __F el->el_errfile
#define __F el->el_errfile
#define ELRE_ASSERT(a, b, c) do \
#define ELRE_ASSERT(a, b, c) do \
if (
a) {
\
if (
/*CONSTCOND*/
a) {
\
(void) fprintf b; \
(void) fprintf b; \
c; \
c; \
} \
} \
while (0)
while (
/*CONSTCOND*/
0)
#define ELRE_DEBUG(a, b) ELRE_ASSERT(a,b,;)
#define ELRE_DEBUG(a, b) ELRE_ASSERT(a,b,;)
/* re_printstr():
/* re_printstr():
* Print a string on the debugging pty
* Print a string on the debugging pty
*/
*/
private
void
private
void
re_printstr
(
EditLine
*
el
,
char
*
str
,
char
*
f
,
char
*
t
)
re_printstr
(
EditLine
*
el
,
c
onst
c
har
*
str
,
char
*
f
,
char
*
t
)
{
{
ELRE_DEBUG
(
1
,
(
__F
,
"%s:
\"
"
,
str
));
ELRE_DEBUG
(
1
,
(
__F
,
"%s:
\"
"
,
str
));
...
@@ -203,6 +209,14 @@ re_refresh(EditLine *el)
...
@@ -203,6 +209,14 @@ re_refresh(EditLine *el)
el
->
el_refresh
.
r_cursor
.
h
=
0
;
el
->
el_refresh
.
r_cursor
.
h
=
0
;
el
->
el_refresh
.
r_cursor
.
v
=
0
;
el
->
el_refresh
.
r_cursor
.
v
=
0
;
if
(
el
->
el_line
.
cursor
>=
el
->
el_line
.
lastchar
)
{
if
(
el
->
el_map
.
current
==
el
->
el_map
.
alt
&&
el
->
el_line
.
lastchar
!=
el
->
el_line
.
buffer
)
el
->
el_line
.
cursor
=
el
->
el_line
.
lastchar
-
1
;
else
el
->
el_line
.
cursor
=
el
->
el_line
.
lastchar
;
}
cur
.
h
=
-
1
;
/* set flag in case I'm not set */
cur
.
h
=
-
1
;
/* set flag in case I'm not set */
cur
.
v
=
0
;
cur
.
v
=
0
;
...
@@ -312,7 +326,6 @@ re_goto_bottom(EditLine *el)
...
@@ -312,7 +326,6 @@ re_goto_bottom(EditLine *el)
{
{
term_move_to_line
(
el
,
el
->
el_refresh
.
r_oldcv
);
term_move_to_line
(
el
,
el
->
el_refresh
.
r_oldcv
);
term__putc
(
'\r'
);
term__putc
(
'\n'
);
term__putc
(
'\n'
);
re_clear_display
(
el
);
re_clear_display
(
el
);
term__flush
();
term__flush
();
...
@@ -905,7 +918,7 @@ re_update_line(EditLine *el, char *old, char *new, int i)
...
@@ -905,7 +918,7 @@ re_update_line(EditLine *el, char *old, char *new, int i)
private
void
private
void
re__copy_and_pad
(
char
*
dst
,
const
char
*
src
,
size_t
width
)
re__copy_and_pad
(
char
*
dst
,
const
char
*
src
,
size_t
width
)
{
{
unsigned
in
t
i
;
size_
t
i
;
for
(
i
=
0
;
i
<
width
;
i
++
)
{
for
(
i
=
0
;
i
<
width
;
i
++
)
{
if
(
*
src
==
'\0'
)
if
(
*
src
==
'\0'
)
...
@@ -929,6 +942,14 @@ re_refresh_cursor(EditLine *el)
...
@@ -929,6 +942,14 @@ re_refresh_cursor(EditLine *el)
char
*
cp
,
c
;
char
*
cp
,
c
;
int
h
,
v
,
th
;
int
h
,
v
,
th
;
if
(
el
->
el_line
.
cursor
>=
el
->
el_line
.
lastchar
)
{
if
(
el
->
el_map
.
current
==
el
->
el_map
.
alt
&&
el
->
el_line
.
lastchar
!=
el
->
el_line
.
buffer
)
el
->
el_line
.
cursor
=
el
->
el_line
.
lastchar
-
1
;
else
el
->
el_line
.
cursor
=
el
->
el_line
.
lastchar
;
}
/* first we must find where the cursor is... */
/* first we must find where the cursor is... */
h
=
el
->
el_prompt
.
p_pos
.
h
;
h
=
el
->
el_prompt
.
p_pos
.
h
;
v
=
el
->
el_prompt
.
p_pos
.
v
;
v
=
el
->
el_prompt
.
p_pos
.
v
;
...
@@ -1051,8 +1072,8 @@ re_fastaddc(EditLine *el)
...
@@ -1051,8 +1072,8 @@ re_fastaddc(EditLine *el)
re_fastputc
(
el
,
c
);
re_fastputc
(
el
,
c
);
}
else
{
}
else
{
re_fastputc
(
el
,
'\\'
);
re_fastputc
(
el
,
'\\'
);
re_fastputc
(
el
,
(
int
)
((((
unsigned
int
)
c
>>
6
)
&
7
)
+
'0'
));
re_fastputc
(
el
,
(
int
)
(((((
unsigned
int
)
c
)
>>
6
)
&
3
)
+
'0'
));
re_fastputc
(
el
,
(
int
)
((((
unsigned
int
)
c
>>
3
)
&
7
)
+
'0'
));
re_fastputc
(
el
,
(
int
)
(((((
unsigned
int
)
c
)
>>
3
)
&
7
)
+
'0'
));
re_fastputc
(
el
,
(
c
&
7
)
+
'0'
);
re_fastputc
(
el
,
(
c
&
7
)
+
'0'
);
}
}
term__flush
();
term__flush
();
...
...
cmd-line-utils/libedit/search.c
View file @
8459cd35
/* $NetBSD: search.c,v 1.1
1 2001/01/23 15:55:31 jdolecek
Exp $ */
/* $NetBSD: search.c,v 1.1
4 2002/11/20 16:50:08 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,16 +36,19 @@
...
@@ -36,16 +36,19 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)search.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: search.c,v 1.14 2002/11/20 16:50:08 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* search.c: History and character search functions
* search.c: History and character search functions
*/
*/
#include "sys.h"
#include <stdlib.h>
#include <stdlib.h>
#if HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#if defined(REGEX)
#if defined(REGEX)
#include <regex.h>
#include <regex.h>
#elif defined(REGEXP)
#elif defined(REGEXP)
...
@@ -73,7 +76,8 @@ search_init(EditLine *el)
...
@@ -73,7 +76,8 @@ search_init(EditLine *el)
el
->
el_search
.
patlen
=
0
;
el
->
el_search
.
patlen
=
0
;
el
->
el_search
.
patdir
=
-
1
;
el
->
el_search
.
patdir
=
-
1
;
el
->
el_search
.
chacha
=
'\0'
;
el
->
el_search
.
chacha
=
'\0'
;
el
->
el_search
.
chadir
=
-
1
;
el
->
el_search
.
chadir
=
CHAR_FWD
;
el
->
el_search
.
chatflg
=
0
;
return
(
0
);
return
(
0
);
}
}
...
@@ -445,29 +449,23 @@ cv_search(EditLine *el, int dir)
...
@@ -445,29 +449,23 @@ cv_search(EditLine *el, int dir)
char
tmpbuf
[
EL_BUFSIZ
];
char
tmpbuf
[
EL_BUFSIZ
];
int
tmplen
;
int
tmplen
;
tmplen
=
0
;
#ifdef ANCHOR
tmpbuf
[
tmplen
++
]
=
'.'
;
tmpbuf
[
tmplen
++
]
=
'*'
;
#endif
el
->
el_line
.
buffer
[
0
]
=
'\0'
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
el
->
el_search
.
patdir
=
dir
;
c_insert
(
el
,
2
);
/* prompt + '\n' */
*
el
->
el_line
.
cursor
++
=
'\n'
;
*
el
->
el_line
.
cursor
++
=
dir
==
ED_SEARCH_PREV_HISTORY
?
'/'
:
'?'
;
re_refresh
(
el
);
#ifdef ANCHOR
#ifdef ANCHOR
tmpbuf
[
0
]
=
'.'
;
tmpbuf
[
1
]
=
'*'
;
#define LEN 2
#define LEN 2
#else
#else
#define LEN 0
#define LEN 0
#endif
#endif
tmplen
=
LEN
;
tmplen
=
c_gets
(
el
,
&
tmpbuf
[
LEN
])
+
LEN
;
el
->
el_search
.
patdir
=
dir
;
tmplen
=
c_gets
(
el
,
&
tmpbuf
[
LEN
],
dir
==
ED_SEARCH_PREV_HISTORY
?
"
\n
/"
:
"
\n
?"
);
if
(
tmplen
==
-
1
)
return
CC_REFRESH
;
tmplen
+=
LEN
;
ch
=
tmpbuf
[
tmplen
];
ch
=
tmpbuf
[
tmplen
];
tmpbuf
[
tmplen
]
=
'\0'
;
tmpbuf
[
tmplen
]
=
'\0'
;
...
@@ -476,9 +474,6 @@ cv_search(EditLine *el, int dir)
...
@@ -476,9 +474,6 @@ cv_search(EditLine *el, int dir)
* Use the old pattern, but wild-card it.
* Use the old pattern, but wild-card it.
*/
*/
if
(
el
->
el_search
.
patlen
==
0
)
{
if
(
el
->
el_search
.
patlen
==
0
)
{
el
->
el_line
.
buffer
[
0
]
=
'\0'
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
re_refresh
(
el
);
re_refresh
(
el
);
return
(
CC_ERROR
);
return
(
CC_ERROR
);
}
}
...
@@ -512,16 +507,12 @@ cv_search(EditLine *el, int dir)
...
@@ -512,16 +507,12 @@ cv_search(EditLine *el, int dir)
ed_search_next_history
(
el
,
0
))
==
CC_ERROR
)
{
ed_search_next_history
(
el
,
0
))
==
CC_ERROR
)
{
re_refresh
(
el
);
re_refresh
(
el
);
return
(
CC_ERROR
);
return
(
CC_ERROR
);
}
else
{
}
if
(
ch
==
0033
)
{
if
(
ch
==
0033
)
{
re_refresh
(
el
);
re_refresh
(
el
);
*
el
->
el_line
.
lastchar
++
=
'\n'
;
return
ed_newline
(
el
,
0
);
*
el
->
el_line
.
lastchar
=
'\0'
;
re_goto_bottom
(
el
);
return
(
CC_NEWLINE
);
}
else
return
(
CC_REFRESH
);
}
}
return
(
CC_REFRESH
);
}
}
...
@@ -578,69 +569,53 @@ cv_repeat_srch(EditLine *el, int c)
...
@@ -578,69 +569,53 @@ cv_repeat_srch(EditLine *el, int c)
}
}
/* cv_csearch
_back
():
/* cv_csearch():
* Vi character search
reverse
* Vi character search
*/
*/
protected
el_action_t
protected
el_action_t
cv_csearch
_back
(
EditLine
*
el
,
int
ch
,
int
count
,
int
tflag
)
cv_csearch
(
EditLine
*
el
,
int
direction
,
int
ch
,
int
count
,
int
tflag
)
{
{
char
*
cp
;
char
*
cp
;
cp
=
el
->
el_line
.
cursor
;
if
(
ch
==
0
)
while
(
count
--
)
{
return
CC_ERROR
;
if
(
*
cp
==
ch
)
cp
--
;
while
(
cp
>
el
->
el_line
.
buffer
&&
*
cp
!=
ch
)
cp
--
;
}
if
(
cp
<
el
->
el_line
.
buffer
||
(
cp
==
el
->
el_line
.
buffer
&&
*
cp
!=
ch
))
return
(
CC_ERROR
);
if
(
*
cp
==
ch
&&
tflag
)
cp
++
;
el
->
el_line
.
cursor
=
cp
;
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
ch
==
-
1
)
{
el
->
el_line
.
cursor
++
;
char
c
;
cv_delfini
(
el
);
if
(
el_getc
(
el
,
&
c
)
!=
1
)
return
(
CC_REFRESH
);
return
ed_end_of_file
(
el
,
0
);
ch
=
c
;
}
}
re_refresh_cursor
(
el
);
return
(
CC_NORM
);
}
/* cv_csearch_fwd():
/* Save for ';' and ',' commands */
* Vi character search forward
el
->
el_search
.
chacha
=
ch
;
*/
el
->
el_search
.
chadir
=
direction
;
protected
el_action_t
el
->
el_search
.
chatflg
=
tflag
;
cv_csearch_fwd
(
EditLine
*
el
,
int
ch
,
int
count
,
int
tflag
)
{
char
*
cp
;
cp
=
el
->
el_line
.
cursor
;
cp
=
el
->
el_line
.
cursor
;
while
(
count
--
)
{
while
(
count
--
)
{
if
(
*
cp
==
ch
)
if
(
*
cp
==
ch
)
cp
++
;
cp
+=
direction
;
while
(
cp
<
el
->
el_line
.
lastchar
&&
*
cp
!=
ch
)
for
(;;
cp
+=
direction
)
{
cp
++
;
}
if
(
cp
>=
el
->
el_line
.
lastchar
)
if
(
cp
>=
el
->
el_line
.
lastchar
)
return
(
CC_ERROR
);
return
CC_ERROR
;
if
(
cp
<
el
->
el_line
.
buffer
)
return
CC_ERROR
;
if
(
*
cp
==
ch
)
break
;
}
}
if
(
*
cp
==
ch
&&
tflag
)
if
(
tflag
)
cp
--
;
cp
-=
direction
;
el
->
el_line
.
cursor
=
cp
;
el
->
el_line
.
cursor
=
cp
;
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
if
(
direction
>
0
)
el
->
el_line
.
cursor
++
;
el
->
el_line
.
cursor
++
;
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
)
;
return
CC_REFRESH
;
}
}
re_refresh_cursor
(
el
);
return
CC_CURSOR
;
return
(
CC_NORM
);
}
}
cmd-line-utils/libedit/search.h
View file @
8459cd35
/* $NetBSD: search.h,v 1.
5 2000/09/04 22:06:32 lukem
Exp $ */
/* $NetBSD: search.h,v 1.
6 2002/11/15 14:32:34 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -52,6 +52,7 @@ typedef struct el_search_t {
...
@@ -52,6 +52,7 @@ typedef struct el_search_t {
int
patdir
;
/* Direction of the last search */
int
patdir
;
/* Direction of the last search */
int
chadir
;
/* Character search direction */
int
chadir
;
/* Character search direction */
char
chacha
;
/* Character we are looking for */
char
chacha
;
/* Character we are looking for */
char
chatflg
;
/* 0 if f, 1 if t */
}
el_search_t
;
}
el_search_t
;
...
@@ -64,7 +65,6 @@ protected el_action_t ce_inc_search(EditLine *, int);
...
@@ -64,7 +65,6 @@ protected el_action_t ce_inc_search(EditLine *, int);
protected
el_action_t
cv_search
(
EditLine
*
,
int
);
protected
el_action_t
cv_search
(
EditLine
*
,
int
);
protected
el_action_t
ce_search_line
(
EditLine
*
,
char
*
,
int
);
protected
el_action_t
ce_search_line
(
EditLine
*
,
char
*
,
int
);
protected
el_action_t
cv_repeat_srch
(
EditLine
*
,
int
);
protected
el_action_t
cv_repeat_srch
(
EditLine
*
,
int
);
protected
el_action_t
cv_csearch_back
(
EditLine
*
,
int
,
int
,
int
);
protected
el_action_t
cv_csearch
(
EditLine
*
,
int
,
int
,
int
,
int
);
protected
el_action_t
cv_csearch_fwd
(
EditLine
*
,
int
,
int
,
int
);
#endif
/* _h_el_search */
#endif
/* _h_el_search */
cmd-line-utils/libedit/sig.c
View file @
8459cd35
/* $NetBSD: sig.c,v 1.
8 2001/01/09 17:31:04 jdolecek
Exp $ */
/* $NetBSD: sig.c,v 1.
10 2003/03/10 00:58:05 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,14 +36,20 @@
...
@@ -36,14 +36,20 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)sig.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: sig.c,v 1.10 2003/03/10 00:58:05 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* sig.c: Signal handling stuff.
* sig.c: Signal handling stuff.
* our policy is to trap all signals, set a good state
* our policy is to trap all signals, set a good state
* and pass the ball to our caller.
* and pass the ball to our caller.
*/
*/
#include "sys.h"
#include "el.h"
#include "el.h"
#include <stdlib.h>
#include <stdlib.h>
...
@@ -115,9 +121,9 @@ sig_init(EditLine *el)
...
@@ -115,9 +121,9 @@ sig_init(EditLine *el)
#undef _DO
#undef _DO
(
void
)
sigprocmask
(
SIG_BLOCK
,
&
nset
,
&
oset
);
(
void
)
sigprocmask
(
SIG_BLOCK
,
&
nset
,
&
oset
);
#define SIGSIZE (sizeof(sighdl) / sizeof(sighdl[0]) * sizeof(
libedit_sig
_t))
#define SIGSIZE (sizeof(sighdl) / sizeof(sighdl[0]) * sizeof(
el_signalhandler
_t))
el
->
el_signal
=
(
el_signal
_t
)
el_malloc
(
SIGSIZE
);
el
->
el_signal
=
(
el_signal
handler_t
*
)
el_malloc
(
SIGSIZE
);
if
(
el
->
el_signal
==
NULL
)
if
(
el
->
el_signal
==
NULL
)
return
(
-
1
);
return
(
-
1
);
for
(
i
=
0
;
sighdl
[
i
]
!=
-
1
;
i
++
)
for
(
i
=
0
;
sighdl
[
i
]
!=
-
1
;
i
++
)
...
@@ -157,7 +163,7 @@ sig_set(EditLine *el)
...
@@ -157,7 +163,7 @@ sig_set(EditLine *el)
(
void
)
sigprocmask
(
SIG_BLOCK
,
&
nset
,
&
oset
);
(
void
)
sigprocmask
(
SIG_BLOCK
,
&
nset
,
&
oset
);
for
(
i
=
0
;
sighdl
[
i
]
!=
-
1
;
i
++
)
{
for
(
i
=
0
;
sighdl
[
i
]
!=
-
1
;
i
++
)
{
libedit_sig
_t
s
;
el_signalhandler
_t
s
;
/* This could happen if we get interrupted */
/* This could happen if we get interrupted */
if
((
s
=
signal
(
sighdl
[
i
],
sig_handler
))
!=
sig_handler
)
if
((
s
=
signal
(
sighdl
[
i
],
sig_handler
))
!=
sig_handler
)
el
->
el_signal
[
i
]
=
s
;
el
->
el_signal
[
i
]
=
s
;
...
...
cmd-line-utils/libedit/sig.h
View file @
8459cd35
/* $NetBSD: sig.h,v 1.
3 2000/09/04 22:06:32 lukem
Exp $ */
/* $NetBSD: sig.h,v 1.
4 2003/03/10 00:58:05 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -62,9 +62,8 @@
...
@@ -62,9 +62,8 @@
_DO(SIGCONT) \
_DO(SIGCONT) \
_DO(SIGWINCH)
_DO(SIGWINCH)
typedef
RETSIGTYPE
(
*
libedit_sig_t
)();
typedef
void
(
*
el_signalhandler_t
)(
int
);
typedef
libedit_sig_t
*
el_signal_t
;
typedef
el_signalhandler_t
*
el_signal_t
;
protected
void
sig_end
(
EditLine
*
);
protected
void
sig_end
(
EditLine
*
);
protected
int
sig_init
(
EditLine
*
);
protected
int
sig_init
(
EditLine
*
);
...
...
cmd-line-utils/libedit/sys.h
View file @
8459cd35
/* $NetBSD: sys.h,v 1.
4 2000/09/04 22:06:32 lukem
Exp $ */
/* $NetBSD: sys.h,v 1.
6 2003/03/10 00:57:38 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -44,6 +44,10 @@
...
@@ -44,6 +44,10 @@
#ifndef _h_sys
#ifndef _h_sys
#define _h_sys
#define _h_sys
#ifdef HAVE_SYS_CDEFS_H
#include <sys/cdefs.h>
#endif
#ifndef public
#ifndef public
# define public
/* Externally visible functions/variables */
# define public
/* Externally visible functions/variables */
#endif
#endif
...
@@ -57,10 +61,6 @@
...
@@ -57,10 +61,6 @@
/* When we want to hide everything */
/* When we want to hide everything */
#endif
#endif
#if HAVE_SYS_CDEFS_H
#include <sys/cdefs.h>
#endif
#ifndef _PTR_T
#ifndef _PTR_T
# define _PTR_T
# define _PTR_T
typedef
void
*
ptr_t
;
typedef
void
*
ptr_t
;
...
@@ -73,22 +73,58 @@ typedef void *ioctl_t;
...
@@ -73,22 +73,58 @@ typedef void *ioctl_t;
#include <stdio.h>
#include <stdio.h>
#ifndef HAVE_STRLCAT
#define strlcat libedit_strlcat
size_t
strlcat
(
char
*
dst
,
const
char
*
src
,
size_t
size
);
#endif
#ifndef HAVE_STRLCPY
#define strlcpy libedit_strlcpy
size_t
strlcpy
(
char
*
dst
,
const
char
*
src
,
size_t
size
);
#endif
#ifndef HAVE_FGETLN
#define fgetln libedit_fgetln
char
*
fgetln
(
FILE
*
fp
,
size_t
*
len
);
#endif
#define REGEX
/* Use POSIX.2 regular expression functions */
#define REGEX
/* Use POSIX.2 regular expression functions */
#undef REGEXP
/* Use UNIX V8 regular expression functions */
#undef REGEXP
/* Use UNIX V8 regular expression functions */
#if
defined(__sun__) && defined(__SVR4)
#if
def notdef
# undef REGEX
# undef REGEX
# undef REGEXP
# undef REGEXP
# include <malloc.h>
# include <malloc.h>
typedef
void
(
*
sig_t
)(
int
);
# ifdef __GNUC__
#endif
/*
* Broken hdrs.
#ifndef __P
*/
#ifdef __STDC__
extern
int
tgetent
(
const
char
*
bp
,
char
*
name
);
#define __P(x) x
extern
int
tgetflag
(
const
char
*
id
);
#else
extern
int
tgetnum
(
const
char
*
id
);
#define __P(x) ()
extern
char
*
tgetstr
(
const
char
*
id
,
char
**
area
);
#endif
extern
char
*
tgoto
(
const
char
*
cap
,
int
col
,
int
row
);
extern
int
tputs
(
const
char
*
str
,
int
affcnt
,
int
(
*
putc
)(
int
));
extern
char
*
getenv
(
const
char
*
);
extern
int
fprintf
(
FILE
*
,
const
char
*
,
...);
extern
int
sigsetmask
(
int
);
extern
int
sigblock
(
int
);
extern
int
fputc
(
int
,
FILE
*
);
extern
int
fgetc
(
FILE
*
);
extern
int
fflush
(
FILE
*
);
extern
int
tolower
(
int
);
extern
int
toupper
(
int
);
extern
int
errno
,
sys_nerr
;
extern
char
*
sys_errlist
[];
extern
void
perror
(
const
char
*
);
# include <string.h>
# define strerror(e) sys_errlist[e]
# endif
# ifdef SABER
extern
ptr_t
memcpy
(
ptr_t
,
const
ptr_t
,
size_t
);
extern
ptr_t
memset
(
ptr_t
,
int
,
size_t
);
# endif
extern
char
*
fgetline
(
FILE
*
,
int
*
);
#endif
#endif
#endif
/* _h_sys */
#endif
/* _h_sys */
cmd-line-utils/libedit/term.c
View file @
8459cd35
/* $NetBSD: term.c,v 1.3
2 2001/01/23 15:55:31 jdolecek
Exp $ */
/* $NetBSD: term.c,v 1.3
5 2002/03/18 16:00:59 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,31 +36,44 @@
...
@@ -36,31 +36,44 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)term.c 8.2 (Berkeley) 4/30/95";
#else
__RCSID
(
"$NetBSD: term.c,v 1.35 2002/03/18 16:00:59 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* term.c: Editor/termcap-curses interface
* term.c: Editor/termcap-curses interface
* We have to declare a static variable here, since the
* We have to declare a static variable here, since the
* termcap putchar routine does not take an argument!
* termcap putchar routine does not take an argument!
*/
*/
#include "sys.h"
#include <stdio.h>
#include <stdio.h>
#include <signal.h>
#include <signal.h>
#include <string.h>
#include <string.h>
#include <stdlib.h>
#include <stdlib.h>
#include <unistd.h>
#include <unistd.h>
#if
defined(HAVE_TERMCAP_H)
#if
def HAVE_TERMCAP_H
#include <termcap.h>
#include <termcap.h>
#elif defined(HAVE_CURSES_H) && defined(HAVE_TERM_H)
/* For HPUX11 */
#endif
#ifdef HAVE_CURSES_H
#include <curses.h>
#include <curses.h>
#endif
#ifdef HAVE_NCURSES_H
#include <ncurses.h>
#endif
#include "el.h"
/* Solaris's term.h does horrid things. */
#if (defined(HAVE_TERM_H) && !defined(SUNOS))
#include <term.h>
#include <term.h>
#endif
#endif
#include <sys/types.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/ioctl.h>
#include "el.h"
/*
/*
* IMPORTANT NOTE: these routines are allowed to look at the current screen
* IMPORTANT NOTE: these routines are allowed to look at the current screen
* and the current possition assuming that it is correct. If this is not
* and the current possition assuming that it is correct. If this is not
...
@@ -340,8 +353,7 @@ term_init(EditLine *el)
...
@@ -340,8 +353,7 @@ term_init(EditLine *el)
return
(
-
1
);
return
(
-
1
);
(
void
)
memset
(
el
->
el_term
.
t_val
,
0
,
T_val
*
sizeof
(
int
));
(
void
)
memset
(
el
->
el_term
.
t_val
,
0
,
T_val
*
sizeof
(
int
));
term_outfile
=
el
->
el_outfile
;
term_outfile
=
el
->
el_outfile
;
if
(
term_set
(
el
,
NULL
)
==
-
1
)
(
void
)
term_set
(
el
,
NULL
);
return
(
-
1
);
term_init_arrow
(
el
);
term_init_arrow
(
el
);
return
(
0
);
return
(
0
);
}
}
...
@@ -637,7 +649,7 @@ mc_again:
...
@@ -637,7 +649,7 @@ mc_again:
* from col 0
* from col 0
*/
*/
if
(
EL_CAN_TAB
?
if
(
EL_CAN_TAB
?
((
unsigned
int
)
-
del
>
(((
unsigned
int
)
where
>>
3
)
+
((
(
unsigned
int
)
-
del
)
>
(((
unsigned
int
)
where
>>
3
)
+
(
where
&
07
)))
(
where
&
07
)))
:
(
-
del
>
where
))
{
:
(
-
del
>
where
))
{
term__putc
(
'\r'
);
/* do a CR */
term__putc
(
'\r'
);
/* do a CR */
...
@@ -897,7 +909,7 @@ term_set(EditLine *el, const char *term)
...
@@ -897,7 +909,7 @@ term_set(EditLine *el, const char *term)
memset
(
el
->
el_term
.
t_cap
,
0
,
TC_BUFSIZE
);
memset
(
el
->
el_term
.
t_cap
,
0
,
TC_BUFSIZE
);
i
=
tgetent
(
el
->
el_term
.
t_cap
,
(
char
*
)
term
);
i
=
tgetent
(
el
->
el_term
.
t_cap
,
term
);
if
(
i
<=
0
)
{
if
(
i
<=
0
)
{
if
(
i
==
-
1
)
if
(
i
==
-
1
)
...
@@ -927,7 +939,7 @@ term_set(EditLine *el, const char *term)
...
@@ -927,7 +939,7 @@ term_set(EditLine *el, const char *term)
Val
(
T_co
)
=
tgetnum
(
"co"
);
Val
(
T_co
)
=
tgetnum
(
"co"
);
Val
(
T_li
)
=
tgetnum
(
"li"
);
Val
(
T_li
)
=
tgetnum
(
"li"
);
for
(
t
=
tstr
;
t
->
name
!=
NULL
;
t
++
)
for
(
t
=
tstr
;
t
->
name
!=
NULL
;
t
++
)
term_alloc
(
el
,
t
,
tgetstr
(
(
char
*
)
t
->
name
,
&
area
));
term_alloc
(
el
,
t
,
tgetstr
(
t
->
name
,
&
area
));
}
}
if
(
Val
(
T_co
)
<
2
)
if
(
Val
(
T_co
)
<
2
)
...
@@ -1067,8 +1079,6 @@ term_reset_arrow(EditLine *el)
...
@@ -1067,8 +1079,6 @@ term_reset_arrow(EditLine *el)
static
const
char
stOH
[]
=
{
033
,
'O'
,
'H'
,
'\0'
};
static
const
char
stOH
[]
=
{
033
,
'O'
,
'H'
,
'\0'
};
static
const
char
stOF
[]
=
{
033
,
'O'
,
'F'
,
'\0'
};
static
const
char
stOF
[]
=
{
033
,
'O'
,
'F'
,
'\0'
};
term_init_arrow
(
el
);
/* Init arrow struct */
key_add
(
el
,
strA
,
&
arrow
[
A_K_UP
].
fun
,
arrow
[
A_K_UP
].
type
);
key_add
(
el
,
strA
,
&
arrow
[
A_K_UP
].
fun
,
arrow
[
A_K_UP
].
type
);
key_add
(
el
,
strB
,
&
arrow
[
A_K_DN
].
fun
,
arrow
[
A_K_DN
].
type
);
key_add
(
el
,
strB
,
&
arrow
[
A_K_DN
].
fun
,
arrow
[
A_K_DN
].
type
);
key_add
(
el
,
strC
,
&
arrow
[
A_K_RT
].
fun
,
arrow
[
A_K_RT
].
type
);
key_add
(
el
,
strC
,
&
arrow
[
A_K_RT
].
fun
,
arrow
[
A_K_RT
].
type
);
...
@@ -1237,8 +1247,7 @@ term__flush(void)
...
@@ -1237,8 +1247,7 @@ term__flush(void)
*/
*/
protected
int
protected
int
/*ARGSUSED*/
/*ARGSUSED*/
term_telltc
(
EditLine
*
el
,
int
term_telltc
(
EditLine
*
el
,
int
argc
__attribute__
((
unused
)),
argc
__attribute__
((
unused
)),
const
char
**
argv
__attribute__
((
unused
)))
const
char
**
argv
__attribute__
((
unused
)))
{
{
const
struct
termcapstr
*
t
;
const
struct
termcapstr
*
t
;
...
@@ -1274,7 +1283,8 @@ term_telltc(EditLine *el, int
...
@@ -1274,7 +1283,8 @@ term_telltc(EditLine *el, int
*/
*/
protected
int
protected
int
/*ARGSUSED*/
/*ARGSUSED*/
term_settc
(
EditLine
*
el
,
int
argc
__attribute__
((
unused
)),
const
char
**
argv
)
term_settc
(
EditLine
*
el
,
int
argc
__attribute__
((
unused
)),
const
char
**
argv
__attribute__
((
unused
)))
{
{
const
struct
termcapstr
*
ts
;
const
struct
termcapstr
*
ts
;
const
struct
termcapval
*
tv
;
const
struct
termcapval
*
tv
;
...
@@ -1350,7 +1360,9 @@ term_settc(EditLine *el, int argc __attribute__((unused)), const char **argv)
...
@@ -1350,7 +1360,9 @@ term_settc(EditLine *el, int argc __attribute__((unused)), const char **argv)
*/
*/
protected
int
protected
int
/*ARGSUSED*/
/*ARGSUSED*/
term_echotc
(
EditLine
*
el
,
int
argc
__attribute__
((
unused
)),
const
char
**
argv
)
term_echotc
(
EditLine
*
el
__attribute__
((
unused
)),
int
argc
__attribute__
((
unused
)),
const
char
**
argv
__attribute__
((
unused
)))
{
{
char
*
cap
,
*
scap
,
*
ep
;
char
*
cap
,
*
scap
,
*
ep
;
int
arg_need
,
arg_cols
,
arg_rows
;
int
arg_need
,
arg_cols
,
arg_rows
;
...
@@ -1429,7 +1441,7 @@ term_echotc(EditLine *el, int argc __attribute__((unused)), const char **argv)
...
@@ -1429,7 +1441,7 @@ term_echotc(EditLine *el, int argc __attribute__((unused)), const char **argv)
break
;
break
;
}
}
if
(
t
->
name
==
NULL
)
if
(
t
->
name
==
NULL
)
scap
=
tgetstr
(
(
char
*
)
*
argv
,
&
area
);
scap
=
tgetstr
(
*
argv
,
&
area
);
if
(
!
scap
||
scap
[
0
]
==
'\0'
)
{
if
(
!
scap
||
scap
[
0
]
==
'\0'
)
{
if
(
!
silent
)
if
(
!
silent
)
(
void
)
fprintf
(
el
->
el_errfile
,
(
void
)
fprintf
(
el
->
el_errfile
,
...
...
cmd-line-utils/libedit/term.h
0 → 100644
View file @
8459cd35
/* $NetBSD: term.h,v 1.13 2002/03/18 16:01:00 christos Exp $ */
/*-
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Christos Zoulas of Cornell University.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)term.h 8.1 (Berkeley) 6/4/93
*/
/*
* el.term.h: Termcap header
*/
#ifndef _h_el_term
#define _h_el_term
#include "histedit.h"
typedef
struct
{
/* Symbolic function key bindings */
const
char
*
name
;
/* name of the key */
int
key
;
/* Index in termcap table */
key_value_t
fun
;
/* Function bound to it */
int
type
;
/* Type of function */
}
fkey_t
;
typedef
struct
{
coord_t
t_size
;
/* # lines and cols */
int
t_flags
;
#define TERM_CAN_INSERT 0x001
/* Has insert cap */
#define TERM_CAN_DELETE 0x002
/* Has delete cap */
#define TERM_CAN_CEOL 0x004
/* Has CEOL cap */
#define TERM_CAN_TAB 0x008
/* Can use tabs */
#define TERM_CAN_ME 0x010
/* Can turn all attrs. */
#define TERM_CAN_UP 0x020
/* Can move up */
#define TERM_HAS_META 0x040
/* Has a meta key */
#define TERM_HAS_AUTO_MARGINS 0x080
/* Has auto margins */
#define TERM_HAS_MAGIC_MARGINS 0x100
/* Has magic margins */
char
*
t_buf
;
/* Termcap buffer */
int
t_loc
;
/* location used */
char
**
t_str
;
/* termcap strings */
int
*
t_val
;
/* termcap values */
char
*
t_cap
;
/* Termcap buffer */
fkey_t
*
t_fkey
;
/* Array of keys */
}
el_term_t
;
/*
* fKey indexes
*/
#define A_K_DN 0
#define A_K_UP 1
#define A_K_LT 2
#define A_K_RT 3
#define A_K_HO 4
#define A_K_EN 5
#define A_K_NKEYS 6
protected
void
term_move_to_line
(
EditLine
*
,
int
);
protected
void
term_move_to_char
(
EditLine
*
,
int
);
protected
void
term_clear_EOL
(
EditLine
*
,
int
);
protected
void
term_overwrite
(
EditLine
*
,
const
char
*
,
int
);
protected
void
term_insertwrite
(
EditLine
*
,
char
*
,
int
);
protected
void
term_deletechars
(
EditLine
*
,
int
);
protected
void
term_clear_screen
(
EditLine
*
);
protected
void
term_beep
(
EditLine
*
);
protected
int
term_change_size
(
EditLine
*
,
int
,
int
);
protected
int
term_get_size
(
EditLine
*
,
int
*
,
int
*
);
protected
int
term_init
(
EditLine
*
);
protected
void
term_bind_arrow
(
EditLine
*
);
protected
void
term_print_arrow
(
EditLine
*
,
const
char
*
);
protected
int
term_clear_arrow
(
EditLine
*
,
const
char
*
);
protected
int
term_set_arrow
(
EditLine
*
,
const
char
*
,
key_value_t
*
,
int
);
protected
void
term_end
(
EditLine
*
);
protected
int
term_set
(
EditLine
*
,
const
char
*
);
protected
int
term_settc
(
EditLine
*
,
int
,
const
char
**
);
protected
int
term_telltc
(
EditLine
*
,
int
,
const
char
**
);
protected
int
term_echotc
(
EditLine
*
,
int
,
const
char
**
);
protected
int
term__putc
(
int
);
protected
void
term__flush
(
void
);
/*
* Easy access macros
*/
#define EL_FLAGS (el)->el_term.t_flags
#define EL_CAN_INSERT (EL_FLAGS & TERM_CAN_INSERT)
#define EL_CAN_DELETE (EL_FLAGS & TERM_CAN_DELETE)
#define EL_CAN_CEOL (EL_FLAGS & TERM_CAN_CEOL)
#define EL_CAN_TAB (EL_FLAGS & TERM_CAN_TAB)
#define EL_CAN_ME (EL_FLAGS & TERM_CAN_ME)
#define EL_HAS_META (EL_FLAGS & TERM_HAS_META)
#define EL_HAS_AUTO_MARGINS (EL_FLAGS & TERM_HAS_AUTO_MARGINS)
#define EL_HAS_MAGIC_MARGINS (EL_FLAGS & TERM_HAS_MAGIC_MARGINS)
#endif
/* _h_el_term */
cmd-line-utils/libedit/tokenizer.c
View file @
8459cd35
/* $NetBSD: tokenizer.c,v 1.
7 2001/01/04 15:56:32
christos Exp $ */
/* $NetBSD: tokenizer.c,v 1.
11 2002/10/27 20:24:29
christos Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,12 +36,18 @@
...
@@ -36,12 +36,18 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)tokenizer.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: tokenizer.c,v 1.11 2002/10/27 20:24:29 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* tokenize.c: Bourne shell like tokenizer
* tokenize.c: Bourne shell like tokenizer
*/
*/
#include "sys.h"
#include <string.h>
#include <string.h>
#include <stdlib.h>
#include <stdlib.h>
#include "tokenizer.h"
#include "tokenizer.h"
...
@@ -66,7 +72,7 @@ typedef enum {
...
@@ -66,7 +72,7 @@ typedef enum {
struct
tokenizer
{
struct
tokenizer
{
char
*
ifs
;
/* In field separator */
char
*
ifs
;
/* In field separator */
int
argc
,
amax
;
/* Current and maximum number of args */
int
argc
,
amax
;
/* Current and maximum number of args */
c
onst
char
**
argv
;
/* Argument list */
c
har
**
argv
;
/* Argument list */
char
*
wptr
,
*
wmax
;
/* Space and limit on the word buffer */
char
*
wptr
,
*
wmax
;
/* Space and limit on the word buffer */
char
*
wstart
;
/* Beginning of next word */
char
*
wstart
;
/* Beginning of next word */
char
*
wspace
;
/* Space of word buffer */
char
*
wspace
;
/* Space of word buffer */
...
@@ -103,16 +109,29 @@ tok_init(const char *ifs)
...
@@ -103,16 +109,29 @@ tok_init(const char *ifs)
{
{
Tokenizer
*
tok
=
(
Tokenizer
*
)
tok_malloc
(
sizeof
(
Tokenizer
));
Tokenizer
*
tok
=
(
Tokenizer
*
)
tok_malloc
(
sizeof
(
Tokenizer
));
if
(
tok
==
NULL
)
return
NULL
;
tok
->
ifs
=
strdup
(
ifs
?
ifs
:
IFS
);
tok
->
ifs
=
strdup
(
ifs
?
ifs
:
IFS
);
if
(
tok
->
ifs
==
NULL
)
{
tok_free
((
ptr_t
)
tok
);
return
NULL
;
}
tok
->
argc
=
0
;
tok
->
argc
=
0
;
tok
->
amax
=
AINCR
;
tok
->
amax
=
AINCR
;
tok
->
argv
=
(
const
char
**
)
tok_malloc
(
sizeof
(
char
*
)
*
tok
->
amax
);
tok
->
argv
=
(
char
**
)
tok_malloc
(
sizeof
(
char
*
)
*
tok
->
amax
);
if
(
tok
->
argv
==
NULL
)
if
(
tok
->
argv
==
NULL
)
{
return
(
NULL
);
tok_free
((
ptr_t
)
tok
->
ifs
);
tok_free
((
ptr_t
)
tok
);
return
NULL
;
}
tok
->
argv
[
0
]
=
NULL
;
tok
->
argv
[
0
]
=
NULL
;
tok
->
wspace
=
(
char
*
)
tok_malloc
(
WINCR
);
tok
->
wspace
=
(
char
*
)
tok_malloc
(
WINCR
);
if
(
tok
->
wspace
==
NULL
)
if
(
tok
->
wspace
==
NULL
)
{
return
(
NULL
);
tok_free
((
ptr_t
)
tok
->
argv
);
tok_free
((
ptr_t
)
tok
->
ifs
);
tok_free
((
ptr_t
)
tok
);
return
NULL
;
}
tok
->
wmax
=
tok
->
wspace
+
WINCR
;
tok
->
wmax
=
tok
->
wspace
+
WINCR
;
tok
->
wstart
=
tok
->
wspace
;
tok
->
wstart
=
tok
->
wspace
;
tok
->
wptr
=
tok
->
wspace
;
tok
->
wptr
=
tok
->
wspace
;
...
@@ -268,7 +287,7 @@ tok_line(Tokenizer *tok, const char *line, int *argc, const char ***argv)
...
@@ -268,7 +287,7 @@ tok_line(Tokenizer *tok, const char *line, int *argc, const char ***argv)
switch
(
tok
->
quote
)
{
switch
(
tok
->
quote
)
{
case
Q_none
:
case
Q_none
:
tok_finish
(
tok
);
tok_finish
(
tok
);
*
argv
=
tok
->
argv
;
*
argv
=
(
const
char
**
)
tok
->
argv
;
*
argc
=
tok
->
argc
;
*
argc
=
tok
->
argc
;
return
(
0
);
return
(
0
);
...
@@ -301,7 +320,7 @@ tok_line(Tokenizer *tok, const char *line, int *argc, const char ***argv)
...
@@ -301,7 +320,7 @@ tok_line(Tokenizer *tok, const char *line, int *argc, const char ***argv)
return
(
3
);
return
(
3
);
}
}
tok_finish
(
tok
);
tok_finish
(
tok
);
*
argv
=
tok
->
argv
;
*
argv
=
(
const
char
**
)
tok
->
argv
;
*
argc
=
tok
->
argc
;
*
argc
=
tok
->
argc
;
return
(
0
);
return
(
0
);
...
@@ -363,25 +382,25 @@ tok_line(Tokenizer *tok, const char *line, int *argc, const char ***argv)
...
@@ -363,25 +382,25 @@ tok_line(Tokenizer *tok, const char *line, int *argc, const char ***argv)
if
(
tok
->
wptr
>=
tok
->
wmax
-
4
)
{
if
(
tok
->
wptr
>=
tok
->
wmax
-
4
)
{
size_t
size
=
tok
->
wmax
-
tok
->
wspace
+
WINCR
;
size_t
size
=
tok
->
wmax
-
tok
->
wspace
+
WINCR
;
char
*
s
=
(
char
*
)
tok_realloc
(
tok
->
wspace
,
size
);
char
*
s
=
(
char
*
)
tok_realloc
(
tok
->
wspace
,
size
);
/* SUPPRESS 22 */
int
offs
=
s
-
tok
->
wspace
;
if
(
s
==
NULL
)
if
(
s
==
NULL
)
return
(
-
1
);
return
(
-
1
);
if
(
offs
!=
0
)
{
if
(
s
!=
tok
->
wspace
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
tok
->
argc
;
i
++
)
for
(
i
=
0
;
i
<
tok
->
argc
;
i
++
)
{
tok
->
argv
[
i
]
=
tok
->
argv
[
i
]
+
offs
;
tok
->
argv
[
i
]
=
tok
->
wptr
=
tok
->
wptr
+
offs
;
(
tok
->
argv
[
i
]
-
tok
->
wspace
)
+
s
;
tok
->
wstart
=
tok
->
wstart
+
offs
;
}
tok
->
wmax
=
s
+
size
;
tok
->
wptr
=
(
tok
->
wptr
-
tok
->
wspace
)
+
s
;
tok
->
wstart
=
(
tok
->
wstart
-
tok
->
wspace
)
+
s
;
tok
->
wspace
=
s
;
tok
->
wspace
=
s
;
}
}
tok
->
wmax
=
s
+
size
;
}
}
if
(
tok
->
argc
>=
tok
->
amax
-
4
)
{
if
(
tok
->
argc
>=
tok
->
amax
-
4
)
{
c
onst
c
har
**
p
;
char
**
p
;
tok
->
amax
+=
AINCR
;
tok
->
amax
+=
AINCR
;
p
=
(
c
onst
c
har
**
)
tok_realloc
(
tok
->
argv
,
p
=
(
char
**
)
tok_realloc
(
tok
->
argv
,
tok
->
amax
*
sizeof
(
char
*
));
tok
->
amax
*
sizeof
(
char
*
));
if
(
p
==
NULL
)
if
(
p
==
NULL
)
return
(
-
1
);
return
(
-
1
);
...
...
cmd-line-utils/libedit/tokenizer.h
View file @
8459cd35
/* $NetBSD: tokenizer.h,v 1.
4 2000/09/04 22:06:33 lukem
Exp $ */
/* $NetBSD: tokenizer.h,v 1.
5 2002/03/18 16:01:00 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
...
cmd-line-utils/libedit/tty.c
View file @
8459cd35
/* $NetBSD: tty.c,v 1.1
5 2001/05/17 01:02:17
christos Exp $ */
/* $NetBSD: tty.c,v 1.1
6 2002/03/18 16:01:01
christos Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,12 +36,18 @@
...
@@ -36,12 +36,18 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)tty.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: tty.c,v 1.16 2002/03/18 16:01:01 christos Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* tty.c: tty interface stuff
* tty.c: tty interface stuff
*/
*/
#include "sys.h"
#include "tty.h"
#include "tty.h"
#include "el.h"
#include "el.h"
...
@@ -1039,9 +1045,8 @@ tty_stty(EditLine *el, int argc __attribute__((unused)), const char **argv)
...
@@ -1039,9 +1045,8 @@ tty_stty(EditLine *el, int argc __attribute__((unused)), const char **argv)
{
{
const
ttymodes_t
*
m
;
const
ttymodes_t
*
m
;
char
x
;
char
x
;
const
char
*
d
;
int
aflag
=
0
;
int
aflag
=
0
;
const
char
*
s
;
const
char
*
s
,
*
d
;
const
char
*
name
;
const
char
*
name
;
int
z
=
EX_IO
;
int
z
=
EX_IO
;
...
...
cmd-line-utils/libedit/tty.h
View file @
8459cd35
/* $NetBSD: tty.h,v 1.
8 2000/09/04 22:06:33 lukem
Exp $ */
/* $NetBSD: tty.h,v 1.
9 2002/03/18 16:01:01 christos
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -462,7 +462,7 @@ typedef unsigned char ttychar_t[NN_IO][C_NCC];
...
@@ -462,7 +462,7 @@ typedef unsigned char ttychar_t[NN_IO][C_NCC];
protected
int
tty_init
(
EditLine
*
);
protected
int
tty_init
(
EditLine
*
);
protected
void
tty_end
(
EditLine
*
);
protected
void
tty_end
(
EditLine
*
);
protected
int
tty_stty
(
EditLine
*
,
int
,
const
char
**
);
protected
int
tty_stty
(
EditLine
*
,
int
,
const
char
**
);
protected
int
tty_rawmode
(
EditLine
*
);
protected
int
tty_rawmode
(
EditLine
*
);
protected
int
tty_cookedmode
(
EditLine
*
);
protected
int
tty_cookedmode
(
EditLine
*
);
protected
int
tty_quotemode
(
EditLine
*
);
protected
int
tty_quotemode
(
EditLine
*
);
...
...
cmd-line-utils/libedit/vi.c
View file @
8459cd35
/* $NetBSD: vi.c,v 1.
8 2000/09/04 22:06:33 lukem
Exp $ */
/* $NetBSD: vi.c,v 1.
16 2003/03/10 11:09:25 dsl
Exp $ */
/*-
/*-
* Copyright (c) 1992, 1993
* Copyright (c) 1992, 1993
...
@@ -36,12 +36,22 @@
...
@@ -36,12 +36,22 @@
* SUCH DAMAGE.
* SUCH DAMAGE.
*/
*/
#include "compat.h"
#include "config.h"
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)vi.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: vi.c,v 1.16 2003/03/10 11:09:25 dsl Exp $"
);
#endif
#endif
/* not lint && not SCCSID */
/*
/*
* vi.c: Vi mode commands.
* vi.c: Vi mode commands.
*/
*/
#include "sys.h"
#include "el.h"
#include "el.h"
private
el_action_t
cv_action
(
EditLine
*
,
int
);
private
el_action_t
cv_action
(
EditLine
*
,
int
);
...
@@ -53,22 +63,18 @@ private el_action_t cv_paste(EditLine *, int);
...
@@ -53,22 +63,18 @@ private el_action_t cv_paste(EditLine *, int);
private
el_action_t
private
el_action_t
cv_action
(
EditLine
*
el
,
int
c
)
cv_action
(
EditLine
*
el
,
int
c
)
{
{
char
*
cp
,
*
kp
;
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
/* 'cc', 'dd' and (possibly) friends */
if
(
c
!=
el
->
el_chared
.
c_vcmd
.
action
)
return
CC_ERROR
;
if
(
!
(
c
&
YANK
))
cv_undo
(
el
);
cv_yank
(
el
,
el
->
el_line
.
buffer
,
el
->
el_line
.
lastchar
-
el
->
el_line
.
buffer
);
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_vcmd
.
pos
=
0
;
el
->
el_chared
.
c_vcmd
.
pos
=
0
;
el
->
el_chared
.
c_undo
.
isize
=
0
;
el
->
el_chared
.
c_undo
.
dsize
=
0
;
kp
=
el
->
el_chared
.
c_undo
.
buf
;
for
(
cp
=
el
->
el_line
.
buffer
;
cp
<
el
->
el_line
.
lastchar
;
cp
++
)
{
*
kp
++
=
*
cp
;
el
->
el_chared
.
c_undo
.
dsize
++
;
}
el
->
el_chared
.
c_undo
.
action
=
INSERT
;
el
->
el_chared
.
c_undo
.
ptr
=
el
->
el_line
.
buffer
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
if
(
c
&
INSERT
)
if
(
c
&
INSERT
)
...
@@ -79,25 +85,8 @@ cv_action(EditLine *el, int c)
...
@@ -79,25 +85,8 @@ cv_action(EditLine *el, int c)
el
->
el_chared
.
c_vcmd
.
pos
=
el
->
el_line
.
cursor
;
el
->
el_chared
.
c_vcmd
.
pos
=
el
->
el_line
.
cursor
;
el
->
el_chared
.
c_vcmd
.
action
=
c
;
el
->
el_chared
.
c_vcmd
.
action
=
c
;
return
(
CC_ARGHACK
);
return
(
CC_ARGHACK
);
#ifdef notdef
/*
* I don't think that this is needed. But we keep it for now
*/
else
if
(
el_chared
.
c_vcmd
.
action
==
NOP
)
{
el
->
el_chared
.
c_vcmd
.
pos
=
el
->
el_line
.
cursor
;
el
->
el_chared
.
c_vcmd
.
action
=
c
;
return
(
CC_ARGHACK
);
}
else
{
el
->
el_chared
.
c_vcmd
.
action
=
0
;
el
->
el_chared
.
c_vcmd
.
pos
=
0
;
return
(
CC_ERROR
);
}
#endif
}
}
/* cv_paste():
/* cv_paste():
* Paste previous deletion before or after the cursor
* Paste previous deletion before or after the cursor
*/
*/
...
@@ -105,23 +94,25 @@ private el_action_t
...
@@ -105,23 +94,25 @@ private el_action_t
cv_paste
(
EditLine
*
el
,
int
c
)
cv_paste
(
EditLine
*
el
,
int
c
)
{
{
char
*
ptr
;
char
*
ptr
;
c_undo_t
*
un
=
&
el
->
el_chared
.
c_undo
;
c_kill_t
*
k
=
&
el
->
el_chared
.
c_kill
;
int
len
=
k
->
last
-
k
->
buf
;
if
(
k
->
buf
==
NULL
||
len
==
0
)
return
(
CC_ERROR
);
#ifdef DEBUG_PASTE
#ifdef DEBUG_PASTE
(
void
)
fprintf
(
el
->
el_errfile
,
"Paste: %x
\"
%s
\"
+%d -%d
\n
"
,
(
void
)
fprintf
(
el
->
el_errfile
,
"Paste:
\"
%.*s
\"\n
"
,
len
,
k
->
buf
);
un
->
action
,
un
->
buf
,
un
->
isize
,
un
->
dsize
);
#endif
#endif
if
(
un
->
isize
==
0
)
return
(
CC_ERROR
);
cv_undo
(
el
);
if
(
!
c
&&
el
->
el_line
.
cursor
<
el
->
el_line
.
lastchar
)
if
(
!
c
&&
el
->
el_line
.
cursor
<
el
->
el_line
.
lastchar
)
el
->
el_line
.
cursor
++
;
el
->
el_line
.
cursor
++
;
ptr
=
el
->
el_line
.
cursor
;
ptr
=
el
->
el_line
.
cursor
;
c_insert
(
el
,
(
int
)
un
->
isize
);
c_insert
(
el
,
len
);
if
(
el
->
el_line
.
cursor
+
un
->
isize
>
el
->
el_line
.
lastchar
)
if
(
el
->
el_line
.
cursor
+
len
>
el
->
el_line
.
lastchar
)
return
(
CC_ERROR
);
return
(
CC_ERROR
);
(
void
)
memcpy
(
ptr
,
un
->
buf
,
un
->
isize
);
(
void
)
memcpy
(
ptr
,
k
->
buf
,
len
+
0u
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
...
@@ -152,24 +143,24 @@ vi_paste_prev(EditLine *el, int c __attribute__((unused)))
...
@@ -152,24 +143,24 @@ vi_paste_prev(EditLine *el, int c __attribute__((unused)))
}
}
/* vi_prev_
space
_word():
/* vi_prev_
big
_word():
* Vi move to the previous space delimited word
* Vi move to the previous space delimited word
* [B]
* [B]
*/
*/
protected
el_action_t
protected
el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
vi_prev_
space
_word
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_prev_
big
_word
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
buffer
)
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
buffer
)
return
(
CC_ERROR
);
return
(
CC_ERROR
);
el
->
el_line
.
cursor
=
cv_prev_word
(
el
,
el
->
el_line
.
cursor
,
el
->
el_line
.
cursor
=
cv_prev_word
(
el
->
el_line
.
cursor
,
el
->
el_line
.
buffer
,
el
->
el_line
.
buffer
,
el
->
el_state
.
argument
,
el
->
el_state
.
argument
,
cv__is
w
ord
);
cv__is
W
ord
);
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
...
@@ -179,7 +170,7 @@ vi_prev_space_word(EditLine *el, int c __attribute__((unused)))
...
@@ -179,7 +170,7 @@ vi_prev_space_word(EditLine *el, int c __attribute__((unused)))
/* vi_prev_word():
/* vi_prev_word():
* Vi move to the previous word
* Vi move to the previous word
* [
B
]
* [
b
]
*/
*/
protected
el_action_t
protected
el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
...
@@ -189,12 +180,12 @@ vi_prev_word(EditLine *el, int c __attribute__((unused)))
...
@@ -189,12 +180,12 @@ vi_prev_word(EditLine *el, int c __attribute__((unused)))
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
buffer
)
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
buffer
)
return
(
CC_ERROR
);
return
(
CC_ERROR
);
el
->
el_line
.
cursor
=
cv_prev_word
(
el
,
el
->
el_line
.
cursor
,
el
->
el_line
.
cursor
=
cv_prev_word
(
el
->
el_line
.
cursor
,
el
->
el_line
.
buffer
,
el
->
el_line
.
buffer
,
el
->
el_state
.
argument
,
el
->
el_state
.
argument
,
c
e
__isword
);
c
v
__isword
);
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
...
@@ -202,25 +193,23 @@ vi_prev_word(EditLine *el, int c __attribute__((unused)))
...
@@ -202,25 +193,23 @@ vi_prev_word(EditLine *el, int c __attribute__((unused)))
}
}
/* vi_next_
space
_word():
/* vi_next_
big
_word():
* Vi move to the next space delimited word
* Vi move to the next space delimited word
* [W]
* [W]
*/
*/
protected
el_action_t
protected
el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
vi_next_
space
_word
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_next_
big
_word
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
lastchar
)
if
(
el
->
el_line
.
cursor
>=
el
->
el_line
.
lastchar
-
1
)
return
(
CC_ERROR
);
return
(
CC_ERROR
);
el
->
el_line
.
cursor
=
cv_next_word
(
el
,
el
->
el_line
.
cursor
,
el
->
el_line
.
cursor
=
cv_next_word
(
el
,
el
->
el_line
.
cursor
,
el
->
el_line
.
lastchar
,
el
->
el_line
.
lastchar
,
el
->
el_state
.
argument
,
cv__isWord
);
el
->
el_state
.
argument
,
cv__isword
);
if
(
el
->
el_map
.
type
==
MAP_VI
)
if
(
el
->
el_map
.
type
==
MAP_VI
)
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
...
@@ -237,16 +226,14 @@ protected el_action_t
...
@@ -237,16 +226,14 @@ protected el_action_t
vi_next_word
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_next_word
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
lastchar
)
if
(
el
->
el_line
.
cursor
>=
el
->
el_line
.
lastchar
-
1
)
return
(
CC_ERROR
);
return
(
CC_ERROR
);
el
->
el_line
.
cursor
=
cv_next_word
(
el
,
el
->
el_line
.
cursor
,
el
->
el_line
.
cursor
=
cv_next_word
(
el
,
el
->
el_line
.
cursor
,
el
->
el_line
.
lastchar
,
el
->
el_line
.
lastchar
,
el
->
el_state
.
argument
,
cv__isword
);
el
->
el_state
.
argument
,
ce__isword
);
if
(
el
->
el_map
.
type
==
MAP_VI
)
if
(
el
->
el_map
.
type
==
MAP_VI
)
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
...
@@ -261,19 +248,27 @@ vi_next_word(EditLine *el, int c __attribute__((unused)))
...
@@ -261,19 +248,27 @@ vi_next_word(EditLine *el, int c __attribute__((unused)))
protected
el_action_t
protected
el_action_t
vi_change_case
(
EditLine
*
el
,
int
c
)
vi_change_case
(
EditLine
*
el
,
int
c
)
{
{
int
i
;
if
(
el
->
el_line
.
cursor
<
el
->
el_line
.
lastchar
)
{
if
(
el
->
el_line
.
cursor
>=
el
->
el_line
.
lastchar
)
c
=
*
el
->
el_line
.
cursor
;
return
(
CC_ERROR
);
cv_undo
(
el
);
for
(
i
=
0
;
i
<
el
->
el_state
.
argument
;
i
++
)
{
c
=
*
(
unsigned
char
*
)
el
->
el_line
.
cursor
;
if
(
isupper
(
c
))
if
(
isupper
(
c
))
*
el
->
el_line
.
cursor
++
=
tolower
(
c
);
*
el
->
el_line
.
cursor
=
tolower
(
c
);
else
if
(
islower
(
c
))
else
if
(
islower
(
c
))
*
el
->
el_line
.
cursor
++
=
toupper
(
c
);
*
el
->
el_line
.
cursor
=
toupper
(
c
);
else
el
->
el_line
.
cursor
++
;
if
(
++
el
->
el_line
.
cursor
>=
el
->
el_line
.
lastchar
)
{
el
->
el_line
.
cursor
--
;
re_fastaddc
(
el
);
re_fastaddc
(
el
);
return
(
CC_NORM
)
;
break
;
}
}
return
(
CC_ERROR
);
re_fastaddc
(
el
);
}
return
CC_NORM
;
}
}
...
@@ -304,11 +299,7 @@ vi_insert_at_bol(EditLine *el, int c __attribute__((unused)))
...
@@ -304,11 +299,7 @@ vi_insert_at_bol(EditLine *el, int c __attribute__((unused)))
{
{
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
el
->
el_chared
.
c_vcmd
.
ins
=
el
->
el_line
.
cursor
;
cv_undo
(
el
);
el
->
el_chared
.
c_undo
.
ptr
=
el
->
el_line
.
cursor
;
el
->
el_chared
.
c_undo
.
action
=
DELETE
;
el
->
el_map
.
current
=
el
->
el_map
.
key
;
el
->
el_map
.
current
=
el
->
el_map
.
key
;
return
(
CC_CURSOR
);
return
(
CC_CURSOR
);
}
}
...
@@ -323,13 +314,13 @@ protected el_action_t
...
@@ -323,13 +314,13 @@ protected el_action_t
vi_replace_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_replace_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
if
(
el
->
el_line
.
cursor
>=
el
->
el_line
.
lastchar
)
return
CC_ERROR
;
el
->
el_map
.
current
=
el
->
el_map
.
key
;
el
->
el_map
.
current
=
el
->
el_map
.
key
;
el
->
el_state
.
inputmode
=
MODE_REPLACE_1
;
el
->
el_state
.
inputmode
=
MODE_REPLACE_1
;
el
->
el_chared
.
c_undo
.
action
=
CHANGE
;
cv_undo
(
el
);
el
->
el_chared
.
c_undo
.
ptr
=
el
->
el_line
.
cursor
;
return
(
CC_ARGHACK
);
el
->
el_chared
.
c_undo
.
isize
=
0
;
el
->
el_chared
.
c_undo
.
dsize
=
0
;
return
(
CC_NORM
);
}
}
...
@@ -344,17 +335,14 @@ vi_replace_mode(EditLine *el, int c __attribute__((unused)))
...
@@ -344,17 +335,14 @@ vi_replace_mode(EditLine *el, int c __attribute__((unused)))
el
->
el_map
.
current
=
el
->
el_map
.
key
;
el
->
el_map
.
current
=
el
->
el_map
.
key
;
el
->
el_state
.
inputmode
=
MODE_REPLACE
;
el
->
el_state
.
inputmode
=
MODE_REPLACE
;
el
->
el_chared
.
c_undo
.
action
=
CHANGE
;
cv_undo
(
el
);
el
->
el_chared
.
c_undo
.
ptr
=
el
->
el_line
.
cursor
;
el
->
el_chared
.
c_undo
.
isize
=
0
;
el
->
el_chared
.
c_undo
.
dsize
=
0
;
return
(
CC_NORM
);
return
(
CC_NORM
);
}
}
/* vi_substitute_char():
/* vi_substitute_char():
* Vi replace character under the cursor and enter insert mode
* Vi replace character under the cursor and enter insert mode
* [
r
]
* [
s
]
*/
*/
protected
el_action_t
protected
el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
...
@@ -376,6 +364,9 @@ protected el_action_t
...
@@ -376,6 +364,9 @@ protected el_action_t
vi_substitute_line
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_substitute_line
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
cv_undo
(
el
);
cv_yank
(
el
,
el
->
el_line
.
buffer
,
el
->
el_line
.
lastchar
-
el
->
el_line
.
buffer
);
(
void
)
em_kill_line
(
el
,
0
);
(
void
)
em_kill_line
(
el
,
0
);
el
->
el_map
.
current
=
el
->
el_map
.
key
;
el
->
el_map
.
current
=
el
->
el_map
.
key
;
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
...
@@ -391,6 +382,9 @@ protected el_action_t
...
@@ -391,6 +382,9 @@ protected el_action_t
vi_change_to_eol
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_change_to_eol
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
cv_undo
(
el
);
cv_yank
(
el
,
el
->
el_line
.
cursor
,
el
->
el_line
.
lastchar
-
el
->
el_line
.
cursor
);
(
void
)
ed_kill_line
(
el
,
0
);
(
void
)
ed_kill_line
(
el
,
0
);
el
->
el_map
.
current
=
el
->
el_map
.
key
;
el
->
el_map
.
current
=
el
->
el_map
.
key
;
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
...
@@ -407,11 +401,7 @@ vi_insert(EditLine *el, int c __attribute__((unused)))
...
@@ -407,11 +401,7 @@ vi_insert(EditLine *el, int c __attribute__((unused)))
{
{
el
->
el_map
.
current
=
el
->
el_map
.
key
;
el
->
el_map
.
current
=
el
->
el_map
.
key
;
cv_undo
(
el
);
el
->
el_chared
.
c_vcmd
.
ins
=
el
->
el_line
.
cursor
;
el
->
el_chared
.
c_undo
.
ptr
=
el
->
el_line
.
cursor
;
el
->
el_chared
.
c_undo
.
action
=
DELETE
;
return
(
CC_NORM
);
return
(
CC_NORM
);
}
}
...
@@ -435,9 +425,7 @@ vi_add(EditLine *el, int c __attribute__((unused)))
...
@@ -435,9 +425,7 @@ vi_add(EditLine *el, int c __attribute__((unused)))
}
else
}
else
ret
=
CC_NORM
;
ret
=
CC_NORM
;
el
->
el_chared
.
c_vcmd
.
ins
=
el
->
el_line
.
cursor
;
cv_undo
(
el
);
el
->
el_chared
.
c_undo
.
ptr
=
el
->
el_line
.
cursor
;
el
->
el_chared
.
c_undo
.
action
=
DELETE
;
return
(
ret
);
return
(
ret
);
}
}
...
@@ -454,11 +442,7 @@ vi_add_at_eol(EditLine *el, int c __attribute__((unused)))
...
@@ -454,11 +442,7 @@ vi_add_at_eol(EditLine *el, int c __attribute__((unused)))
el
->
el_map
.
current
=
el
->
el_map
.
key
;
el
->
el_map
.
current
=
el
->
el_map
.
key
;
el
->
el_line
.
cursor
=
el
->
el_line
.
lastchar
;
el
->
el_line
.
cursor
=
el
->
el_line
.
lastchar
;
cv_undo
(
el
);
/* Mark where insertion begins */
el
->
el_chared
.
c_vcmd
.
ins
=
el
->
el_line
.
lastchar
;
el
->
el_chared
.
c_undo
.
ptr
=
el
->
el_line
.
lastchar
;
el
->
el_chared
.
c_undo
.
action
=
DELETE
;
return
(
CC_CURSOR
);
return
(
CC_CURSOR
);
}
}
...
@@ -476,22 +460,22 @@ vi_delete_meta(EditLine *el, int c __attribute__((unused)))
...
@@ -476,22 +460,22 @@ vi_delete_meta(EditLine *el, int c __attribute__((unused)))
}
}
/* vi_end_word():
/* vi_end_
big_
word():
* Vi move to the end of the current space delimited word
* Vi move to the end of the current space delimited word
* [E]
* [E]
*/
*/
protected
el_action_t
protected
el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
vi_end_word
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_end_
big_
word
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
lastchar
)
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
lastchar
)
return
(
CC_ERROR
);
return
(
CC_ERROR
);
el
->
el_line
.
cursor
=
cv__endword
(
el
->
el_line
.
cursor
,
el
->
el_line
.
cursor
=
cv__endword
(
el
->
el_line
.
cursor
,
el
->
el_line
.
lastchar
,
el
->
el_state
.
argument
);
el
->
el_line
.
lastchar
,
el
->
el_state
.
argument
,
cv__isWord
);
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
el
->
el_line
.
cursor
++
;
el
->
el_line
.
cursor
++
;
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
...
@@ -500,22 +484,22 @@ vi_end_word(EditLine *el, int c __attribute__((unused)))
...
@@ -500,22 +484,22 @@ vi_end_word(EditLine *el, int c __attribute__((unused)))
}
}
/* vi_
to_
end_word():
/* vi_end_word():
* Vi move to the end of the current word
* Vi move to the end of the current word
* [e]
* [e]
*/
*/
protected
el_action_t
protected
el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
vi_
to_
end_word
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_end_word
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
lastchar
)
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
lastchar
)
return
(
CC_ERROR
);
return
(
CC_ERROR
);
el
->
el_line
.
cursor
=
cv__endword
(
el
->
el_line
.
cursor
,
el
->
el_line
.
cursor
=
cv__endword
(
el
->
el_line
.
cursor
,
el
->
el_line
.
lastchar
,
el
->
el_state
.
argument
);
el
->
el_line
.
lastchar
,
el
->
el_state
.
argument
,
cv__isword
);
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
el
->
el_line
.
cursor
++
;
el
->
el_line
.
cursor
++
;
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
...
@@ -532,100 +516,19 @@ protected el_action_t
...
@@ -532,100 +516,19 @@ protected el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
vi_undo
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_undo
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
char
*
cp
,
*
kp
;
c_undo_t
un
=
el
->
el_chared
.
c_undo
;
char
temp
;
int
i
,
size
;
c_undo_t
*
un
=
&
el
->
el_chared
.
c_undo
;
#ifdef DEBUG_UNDO
(
void
)
fprintf
(
el
->
el_errfile
,
"Undo: %x
\"
%s
\"
+%d -%d
\n
"
,
un
->
action
,
un
->
buf
,
un
->
isize
,
un
->
dsize
);
#endif
switch
(
un
->
action
)
{
case
DELETE
:
if
(
un
->
dsize
==
0
)
return
(
CC_NORM
);
(
void
)
memcpy
(
un
->
buf
,
un
->
ptr
,
un
->
dsize
);
for
(
cp
=
un
->
ptr
;
cp
<=
el
->
el_line
.
lastchar
;
cp
++
)
*
cp
=
cp
[
un
->
dsize
];
el
->
el_line
.
lastchar
-=
un
->
dsize
;
el
->
el_line
.
cursor
=
un
->
ptr
;
un
->
action
=
INSERT
;
un
->
isize
=
un
->
dsize
;
un
->
dsize
=
0
;
break
;
case
DELETE
|
INSERT
:
size
=
un
->
isize
-
un
->
dsize
;
if
(
size
>
0
)
i
=
un
->
dsize
;
else
i
=
un
->
isize
;
cp
=
un
->
ptr
;
kp
=
un
->
buf
;
while
(
i
--
>
0
)
{
temp
=
*
kp
;
*
kp
++
=
*
cp
;
*
cp
++
=
temp
;
}
if
(
size
>
0
)
{
el
->
el_line
.
cursor
=
cp
;
c_insert
(
el
,
size
);
while
(
size
--
>
0
&&
cp
<
el
->
el_line
.
lastchar
)
{
temp
=
*
kp
;
*
kp
++
=
*
cp
;
*
cp
++
=
temp
;
}
}
else
if
(
size
<
0
)
{
size
=
-
size
;
for
(;
cp
<=
el
->
el_line
.
lastchar
;
cp
++
)
{
*
kp
++
=
*
cp
;
*
cp
=
cp
[
size
];
}
el
->
el_line
.
lastchar
-=
size
;
}
el
->
el_line
.
cursor
=
un
->
ptr
;
i
=
un
->
dsize
;
un
->
dsize
=
un
->
isize
;
un
->
isize
=
i
;
break
;
case
INSERT
:
if
(
un
.
len
==
-
1
)
if
(
un
->
isize
==
0
)
return
CC_ERROR
;
return
(
CC_NORM
);
el
->
el_line
.
cursor
=
un
->
ptr
;
c_insert
(
el
,
(
int
)
un
->
isize
);
(
void
)
memcpy
(
un
->
ptr
,
un
->
buf
,
un
->
isize
);
un
->
action
=
DELETE
;
un
->
dsize
=
un
->
isize
;
un
->
isize
=
0
;
break
;
case
CHANGE
:
if
(
un
->
isize
==
0
)
return
(
CC_NORM
);
el
->
el_line
.
cursor
=
un
->
ptr
;
size
=
(
int
)
(
el
->
el_line
.
cursor
-
el
->
el_line
.
lastchar
);
if
(
size
<
(
int
)
un
->
isize
)
size
=
un
->
isize
;
cp
=
un
->
ptr
;
kp
=
un
->
buf
;
for
(
i
=
0
;
i
<
size
;
i
++
)
{
temp
=
*
kp
;
*
kp
++
=
*
cp
;
*
cp
++
=
temp
;
}
un
->
dsize
=
0
;
break
;
default:
/* switch line buffer and undo buffer */
return
(
CC_ERROR
);
el
->
el_chared
.
c_undo
.
buf
=
el
->
el_line
.
buffer
;
}
el
->
el_chared
.
c_undo
.
len
=
el
->
el_line
.
lastchar
-
el
->
el_line
.
buffer
;
el
->
el_chared
.
c_undo
.
cursor
=
el
->
el_line
.
cursor
-
el
->
el_line
.
buffer
;
el
->
el_line
.
limit
=
un
.
buf
+
(
el
->
el_line
.
limit
-
el
->
el_line
.
buffer
);
el
->
el_line
.
buffer
=
un
.
buf
;
el
->
el_line
.
cursor
=
un
.
buf
+
un
.
cursor
;
el
->
el_line
.
lastchar
=
un
.
buf
+
un
.
len
;
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
...
@@ -639,22 +542,12 @@ protected el_action_t
...
@@ -639,22 +542,12 @@ protected el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
vi_command_mode
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_command_mode
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
int
size
;
/* [Esc] cancels pending action */
/* [Esc] cancels pending action */
el
->
el_chared
.
c_vcmd
.
ins
=
0
;
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_vcmd
.
pos
=
0
;
el
->
el_chared
.
c_vcmd
.
pos
=
0
;
el
->
el_state
.
doingarg
=
0
;
el
->
el_state
.
doingarg
=
0
;
size
=
el
->
el_chared
.
c_undo
.
ptr
-
el
->
el_line
.
cursor
;
if
(
size
<
0
)
size
=
-
size
;
if
(
el
->
el_chared
.
c_undo
.
action
==
(
INSERT
|
DELETE
)
||
el
->
el_chared
.
c_undo
.
action
==
DELETE
)
el
->
el_chared
.
c_undo
.
dsize
=
size
;
else
el
->
el_chared
.
c_undo
.
isize
=
size
;
el
->
el_state
.
inputmode
=
MODE_INSERT
;
el
->
el_state
.
inputmode
=
MODE_INSERT
;
el
->
el_map
.
current
=
el
->
el_map
.
alt
;
el
->
el_map
.
current
=
el
->
el_map
.
alt
;
...
@@ -674,41 +567,37 @@ protected el_action_t
...
@@ -674,41 +567,37 @@ protected el_action_t
vi_zero
(
EditLine
*
el
,
int
c
)
vi_zero
(
EditLine
*
el
,
int
c
)
{
{
if
(
el
->
el_state
.
doingarg
)
{
if
(
el
->
el_state
.
doingarg
)
if
(
el
->
el_state
.
argument
>
1000000
)
return
ed_argument_digit
(
el
,
c
);
return
(
CC_ERROR
);
el
->
el_state
.
argument
=
(
el
->
el_state
.
argument
*
10
)
+
(
c
-
'0'
);
return
(
CC_ARGHACK
);
}
else
{
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
if
(
el
->
el_chared
.
c_vcmd
.
action
&
DELETE
)
{
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
cv_delfini
(
el
);
cv_delfini
(
el
);
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
return
(
CC_CURSOR
);
return
(
CC_CURSOR
);
}
}
}
/* vi_delete_prev_char():
/* vi_delete_prev_char():
* Vi move to previous character (backspace)
* Vi move to previous character (backspace)
* [^H]
* [^H]
in insert mode only
*/
*/
protected
el_action_t
protected
el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
vi_delete_prev_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_delete_prev_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
char
*
cp
;
if
(
el
->
el_chared
.
c_vcmd
.
ins
==
0
)
cp
=
el
->
el_line
.
cursor
;
if
(
cp
<=
el
->
el_line
.
buffer
)
return
(
CC_ERROR
);
return
(
CC_ERROR
);
if
(
el
->
el_chared
.
c_vcmd
.
ins
>
/* do the delete here so we dont mess up the undo and paste buffers */
el
->
el_line
.
cursor
-
el
->
el_state
.
argument
)
el
->
el_line
.
cursor
=
--
cp
;
return
(
CC_ERROR
);
for
(;
cp
<
el
->
el_line
.
lastchar
;
cp
++
)
cp
[
0
]
=
cp
[
1
];
c_delbefore
(
el
,
el
->
el_state
.
argument
);
el
->
el_line
.
lastchar
=
cp
-
1
;
el
->
el_line
.
cursor
-=
el
->
el_state
.
argument
;
return
(
CC_REFRESH
);
return
(
CC_REFRESH
);
}
}
...
@@ -829,16 +718,7 @@ protected el_action_t
...
@@ -829,16 +718,7 @@ protected el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
vi_next_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_next_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
char
ch
;
return
cv_csearch
(
el
,
CHAR_FWD
,
-
1
,
el
->
el_state
.
argument
,
0
);
if
(
el_getc
(
el
,
&
ch
)
!=
1
)
return
(
ed_end_of_file
(
el
,
0
));
el
->
el_search
.
chadir
=
CHAR_FWD
;
el
->
el_search
.
chacha
=
ch
;
return
(
cv_csearch_fwd
(
el
,
ch
,
el
->
el_state
.
argument
,
0
));
}
}
...
@@ -850,15 +730,7 @@ protected el_action_t
...
@@ -850,15 +730,7 @@ protected el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
vi_prev_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_prev_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
char
ch
;
return
cv_csearch
(
el
,
CHAR_BACK
,
-
1
,
el
->
el_state
.
argument
,
0
);
if
(
el_getc
(
el
,
&
ch
)
!=
1
)
return
(
ed_end_of_file
(
el
,
0
));
el
->
el_search
.
chadir
=
CHAR_BACK
;
el
->
el_search
.
chacha
=
ch
;
return
(
cv_csearch_back
(
el
,
ch
,
el
->
el_state
.
argument
,
0
));
}
}
...
@@ -870,13 +742,7 @@ protected el_action_t
...
@@ -870,13 +742,7 @@ protected el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
vi_to_next_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_to_next_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
char
ch
;
return
cv_csearch
(
el
,
CHAR_FWD
,
-
1
,
el
->
el_state
.
argument
,
1
);
if
(
el_getc
(
el
,
&
ch
)
!=
1
)
return
(
ed_end_of_file
(
el
,
0
));
return
(
cv_csearch_fwd
(
el
,
ch
,
el
->
el_state
.
argument
,
1
));
}
}
...
@@ -888,12 +754,7 @@ protected el_action_t
...
@@ -888,12 +754,7 @@ protected el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
vi_to_prev_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_to_prev_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
char
ch
;
return
cv_csearch
(
el
,
CHAR_BACK
,
-
1
,
el
->
el_state
.
argument
,
1
);
if
(
el_getc
(
el
,
&
ch
)
!=
1
)
return
(
ed_end_of_file
(
el
,
0
));
return
(
cv_csearch_back
(
el
,
ch
,
el
->
el_state
.
argument
,
1
));
}
}
...
@@ -906,14 +767,8 @@ protected el_action_t
...
@@ -906,14 +767,8 @@ protected el_action_t
vi_repeat_next_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_repeat_next_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
if
(
el
->
el_search
.
chacha
==
0
)
return
cv_csearch
(
el
,
el
->
el_search
.
chadir
,
el
->
el_search
.
chacha
,
return
(
CC_ERROR
);
el
->
el_state
.
argument
,
el
->
el_search
.
chatflg
);
return
(
el
->
el_search
.
chadir
==
CHAR_FWD
?
cv_csearch_fwd
(
el
,
el
->
el_search
.
chacha
,
el
->
el_state
.
argument
,
0
)
:
cv_csearch_back
(
el
,
el
->
el_search
.
chacha
,
el
->
el_state
.
argument
,
0
));
}
}
...
@@ -925,11 +780,343 @@ protected el_action_t
...
@@ -925,11 +780,343 @@ protected el_action_t
/*ARGSUSED*/
/*ARGSUSED*/
vi_repeat_prev_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
vi_repeat_prev_char
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
{
el_action_t
r
;
int
dir
=
el
->
el_search
.
chadir
;
if
(
el
->
el_search
.
chacha
==
0
)
r
=
cv_csearch
(
el
,
-
dir
,
el
->
el_search
.
chacha
,
return
(
CC_ERROR
);
el
->
el_state
.
argument
,
el
->
el_search
.
chatflg
);
el
->
el_search
.
chadir
=
dir
;
return
r
;
}
/* vi_match():
* Vi go to matching () {} or []
* [%]
*/
protected
el_action_t
/*ARGSUSED*/
vi_match
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
const
char
match_chars
[]
=
"()[]{}"
;
char
*
cp
;
int
delta
,
i
,
count
;
char
o_ch
,
c_ch
;
*
el
->
el_line
.
lastchar
=
'\0'
;
/* just in case */
i
=
strcspn
(
el
->
el_line
.
cursor
,
match_chars
);
o_ch
=
el
->
el_line
.
cursor
[
i
];
if
(
o_ch
==
0
)
return
CC_ERROR
;
delta
=
strchr
(
match_chars
,
o_ch
)
-
match_chars
;
c_ch
=
match_chars
[
delta
^
1
];
count
=
1
;
delta
=
1
-
(
delta
&
1
)
*
2
;
for
(
cp
=
&
el
->
el_line
.
cursor
[
i
];
count
;
)
{
cp
+=
delta
;
if
(
cp
<
el
->
el_line
.
buffer
||
cp
>=
el
->
el_line
.
lastchar
)
return
CC_ERROR
;
if
(
*
cp
==
o_ch
)
count
++
;
else
if
(
*
cp
==
c_ch
)
count
--
;
}
el
->
el_line
.
cursor
=
cp
;
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
/* NB posix says char under cursor should NOT be deleted
for -ve delta - this is different to netbsd vi. */
if
(
delta
>
0
)
el
->
el_line
.
cursor
++
;
cv_delfini
(
el
);
return
(
CC_REFRESH
);
}
return
(
CC_CURSOR
);
}
/* vi_undo_line():
* Vi undo all changes to line
* [U]
*/
protected
el_action_t
/*ARGSUSED*/
vi_undo_line
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
cv_undo
(
el
);
return
hist_get
(
el
);
}
/* vi_to_column():
* Vi go to specified column
* [|]
* NB netbsd vi goes to screen column 'n', posix says nth character
*/
protected
el_action_t
/*ARGSUSED*/
vi_to_column
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
el
->
el_state
.
argument
--
;
return
ed_next_char
(
el
,
0
);
}
/* vi_yank_end():
* Vi yank to end of line
* [Y]
*/
protected
el_action_t
/*ARGSUSED*/
vi_yank_end
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
cv_yank
(
el
,
el
->
el_line
.
cursor
,
el
->
el_line
.
lastchar
-
el
->
el_line
.
cursor
);
return
CC_REFRESH
;
}
/* vi_yank():
* Vi yank
* [y]
*/
protected
el_action_t
/*ARGSUSED*/
vi_yank
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
return
cv_action
(
el
,
YANK
);
}
/* vi_comment_out():
* Vi comment out current command
* [c]
*/
protected
el_action_t
/*ARGSUSED*/
vi_comment_out
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
c_insert
(
el
,
1
);
*
el
->
el_line
.
cursor
=
'#'
;
re_refresh
(
el
);
return
ed_newline
(
el
,
0
);
}
/* vi_alias():
* Vi include shell alias
* [@]
* NB: posix impiles that we should enter insert mode, however
* this is against historical precedent...
*/
protected
el_action_t
/*ARGSUSED*/
vi_alias
(
EditLine
*
el
__attribute__
((
unused
)),
int
c
__attribute__
((
unused
)))
{
#ifdef __weak_extern
char
alias_name
[
3
];
char
*
alias_text
;
extern
char
*
get_alias_text
(
const
char
*
);
__weak_extern
(
get_alias_text
);
if
(
get_alias_text
==
0
)
{
return
CC_ERROR
;
}
alias_name
[
0
]
=
'_'
;
alias_name
[
2
]
=
0
;
if
(
el_getc
(
el
,
&
alias_name
[
1
])
!=
1
)
return
CC_ERROR
;
alias_text
=
get_alias_text
(
alias_name
);
if
(
alias_text
!=
NULL
)
el_push
(
el
,
alias_text
);
return
CC_NORM
;
#else
return
CC_ERROR
;
#endif
}
/* vi_to_history_line():
* Vi go to specified history file line.
* [G]
*/
protected
el_action_t
/*ARGSUSED*/
vi_to_history_line
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
int
sv_event_no
=
el
->
el_history
.
eventno
;
el_action_t
rval
;
if
(
el
->
el_history
.
eventno
==
0
)
{
(
void
)
strncpy
(
el
->
el_history
.
buf
,
el
->
el_line
.
buffer
,
EL_BUFSIZ
);
el
->
el_history
.
last
=
el
->
el_history
.
buf
+
(
el
->
el_line
.
lastchar
-
el
->
el_line
.
buffer
);
}
/* Lack of a 'count' means oldest, not 1 */
if
(
!
el
->
el_state
.
doingarg
)
{
el
->
el_history
.
eventno
=
0x7fffffff
;
hist_get
(
el
);
}
else
{
/* This is brain dead, all the rest of this code counts
* upwards going into the past. Here we need count in the
* other direction (to match the output of fc -l).
* I could change the world, but this seems to suffice.
*/
el
->
el_history
.
eventno
=
1
;
if
(
hist_get
(
el
)
==
CC_ERROR
)
return
CC_ERROR
;
el
->
el_history
.
eventno
=
1
+
el
->
el_history
.
ev
.
num
-
el
->
el_state
.
argument
;
if
(
el
->
el_history
.
eventno
<
0
)
{
el
->
el_history
.
eventno
=
sv_event_no
;
return
CC_ERROR
;
}
}
rval
=
hist_get
(
el
);
if
(
rval
==
CC_ERROR
)
el
->
el_history
.
eventno
=
sv_event_no
;
return
rval
;
}
/* vi_histedit():
* Vi edit history line with vi
* [v]
*/
protected
el_action_t
/*ARGSUSED*/
vi_histedit
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
int
fd
;
pid_t
pid
;
int
st
;
char
tempfile
[]
=
"/tmp/histedit.XXXXXXXXXX"
;
char
*
cp
;
if
(
el
->
el_state
.
doingarg
)
{
if
(
vi_to_history_line
(
el
,
0
)
==
CC_ERROR
)
return
CC_ERROR
;
}
fd
=
mkstemp
(
tempfile
);
if
(
fd
<
0
)
return
CC_ERROR
;
cp
=
el
->
el_line
.
buffer
;
write
(
fd
,
cp
,
el
->
el_line
.
lastchar
-
cp
+
0u
);
write
(
fd
,
"
\n
"
,
1
);
pid
=
fork
();
switch
(
pid
)
{
case
-
1
:
close
(
fd
);
unlink
(
tempfile
);
return
CC_ERROR
;
case
0
:
close
(
fd
);
execlp
(
"vi"
,
"vi"
,
tempfile
,
0
);
exit
(
0
);
/*NOTREACHED*/
default:
while
(
waitpid
(
pid
,
&
st
,
0
)
!=
pid
)
continue
;
lseek
(
fd
,
0ll
,
SEEK_SET
);
st
=
read
(
fd
,
cp
,
el
->
el_line
.
limit
-
cp
+
0u
);
if
(
st
>
0
&&
cp
[
st
-
1
]
==
'\n'
)
st
--
;
el
->
el_line
.
cursor
=
cp
;
el
->
el_line
.
lastchar
=
cp
+
st
;
break
;
}
close
(
fd
);
unlink
(
tempfile
);
/* return CC_REFRESH; */
return
ed_newline
(
el
,
0
);
}
/* vi_history_word():
* Vi append word from previous input line
* [_]
* Who knows where this one came from!
* '_' in vi means 'entire current line', so 'cc' is a synonym for 'c_'
*/
protected
el_action_t
/*ARGSUSED*/
vi_history_word
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
const
char
*
wp
=
HIST_FIRST
(
el
);
const
char
*
wep
,
*
wsp
;
int
len
;
char
*
cp
;
const
char
*
lim
;
if
(
wp
==
NULL
)
return
CC_ERROR
;
wep
=
wsp
=
0
;
do
{
while
(
isspace
((
unsigned
char
)
*
wp
))
wp
++
;
if
(
*
wp
==
0
)
break
;
wsp
=
wp
;
while
(
*
wp
&&
!
isspace
((
unsigned
char
)
*
wp
))
wp
++
;
wep
=
wp
;
}
while
((
!
el
->
el_state
.
doingarg
||
--
el
->
el_state
.
argument
>
0
)
&&
*
wp
!=
0
);
if
(
wsp
==
0
||
(
el
->
el_state
.
doingarg
&&
el
->
el_state
.
argument
!=
0
))
return
CC_ERROR
;
cv_undo
(
el
);
len
=
wep
-
wsp
;
if
(
el
->
el_line
.
cursor
<
el
->
el_line
.
lastchar
)
el
->
el_line
.
cursor
++
;
c_insert
(
el
,
len
+
1
);
cp
=
el
->
el_line
.
cursor
;
lim
=
el
->
el_line
.
limit
;
if
(
cp
<
lim
)
*
cp
++
=
' '
;
while
(
wsp
<
wep
&&
cp
<
lim
)
*
cp
++
=
*
wsp
++
;
el
->
el_line
.
cursor
=
cp
;
el
->
el_map
.
current
=
el
->
el_map
.
key
;
return
CC_REFRESH
;
}
/* vi_redo():
* Vi redo last non-motion command
* [.]
*/
protected
el_action_t
/*ARGSUSED*/
vi_redo
(
EditLine
*
el
,
int
c
__attribute__
((
unused
)))
{
c_redo_t
*
r
=
&
el
->
el_chared
.
c_redo
;
if
(
!
el
->
el_state
.
doingarg
&&
r
->
count
)
{
el
->
el_state
.
doingarg
=
1
;
el
->
el_state
.
argument
=
r
->
count
;
}
el
->
el_chared
.
c_vcmd
.
pos
=
el
->
el_line
.
cursor
;
el
->
el_chared
.
c_vcmd
.
action
=
r
->
action
;
if
(
r
->
pos
!=
r
->
buf
)
{
if
(
r
->
pos
+
1
>
r
->
lim
)
/* sanity */
r
->
pos
=
r
->
lim
-
1
;
r
->
pos
[
0
]
=
0
;
el_push
(
el
,
r
->
buf
);
}
return
el
->
el_search
.
chadir
==
CHAR_BACK
?
el
->
el_state
.
thiscmd
=
r
->
cmd
;
cv_csearch_fwd
(
el
,
el
->
el_search
.
chacha
,
el
->
el_state
.
argument
,
0
)
:
el
->
el_state
.
thisch
=
r
->
ch
;
cv_csearch_back
(
el
,
el
->
el_search
.
chacha
,
el
->
el_state
.
argument
,
0
);
return
(
*
el
->
el_map
.
func
[
r
->
cmd
])(
el
,
r
->
ch
);
}
}
configure.in
View file @
8459cd35
...
@@ -1874,6 +1874,22 @@ else
...
@@ -1874,6 +1874,22 @@ else
fi
fi
AC_SUBST(TERMCAP_LIB)
AC_SUBST(TERMCAP_LIB)
# for libedit 2.6.7
case "
${
host
}
" in
*-*-solaris2*)
AC_DEFINE_UNQUOTED(SUNOS, 1, [macro for libedit-2.6.7, current platform is solaris-2])
;;
esac
LIBEDIT_LOBJECTS=""
AC_CHECK_FUNC(strunvis, ,[LIBEDIT_LOBJECTS="
$LIBEDIT_LOBJECTS
unvis.o
"])
AC_CHECK_FUNC(strvis, ,[LIBEDIT_LOBJECTS="
$LIBEDIT_LOBJECTS
vis.o
"])
AC_CHECK_FUNC(strlcpy, ,[LIBEDIT_LOBJECTS="
$LIBEDIT_LOBJECTS
strlcpy.o
"])
AC_CHECK_FUNC(strlcat, ,[LIBEDIT_LOBJECTS="
$LIBEDIT_LOBJECTS
strlcat.o
"])
AC_CHECK_FUNC(fgetln, ,[LIBEDIT_LOBJECTS="
$LIBEDIT_LOBJECTS
fgetln.o
"])
AC_SUBST(LIBEDIT_LOBJECTS)
enable_readline="
yes
"
# End of readline/libedit stuff
# End of readline/libedit stuff
#########################################################################
#########################################################################
...
@@ -2303,6 +2319,20 @@ AC_ARG_WITH(libedit,
...
@@ -2303,6 +2319,20 @@ AC_ARG_WITH(libedit,
[
with_libedit
=
undefined
]
[
with_libedit
=
undefined
]
)
)
#
# We support next variants of compilation:
# --with-readline
# | yes | no | undefined
# --with-libedit | | |
# ---------------+----------------+------+----------------------------------
# yes | ERROR! | use libedit from mysql sources
# ---------------+----------------+------+----------------------------------
# no | use readline | use system readline or external libedit
# | from mysql | according to results of m4 tests
# ---------------+ sources (if it + +----------------------------------
# undefined | is presented) | | use libedit from mysql sources
compile_readline
=
"no"
compile_readline
=
"no"
compile_libedit
=
"no"
compile_libedit
=
"no"
...
@@ -2327,9 +2357,10 @@ then
...
@@ -2327,9 +2357,10 @@ then
readline_topdir
=
"cmd-line-utils"
readline_topdir
=
"cmd-line-utils"
readline_basedir
=
"libedit"
readline_basedir
=
"libedit"
readline_dir
=
"
$readline_topdir
/
$readline_basedir
"
readline_dir
=
"
$readline_topdir
/
$readline_basedir
"
readline_link
=
"
\$
(top_builddir)/cmd-line-utils/libedit/lib
lib
edit.a"
readline_link
=
"
\$
(top_builddir)/cmd-line-utils/libedit/libedit.a"
readline_h_ln_cmd
=
"
\$
(LN) -s
\$
(top_builddir)/cmd-line-utils/libedit/readline readline"
readline_h_ln_cmd
=
"
\$
(LN) -s
\$
(top_builddir)/cmd-line-utils/libedit/readline readline"
compile_libedit
=
yes
compile_libedit
=
yes
AC_DEFINE_UNQUOTED
(
HAVE_HIST_ENTRY, 1
)
AC_DEFINE_UNQUOTED
(
USE_LIBEDIT_INTERFACE, 1
)
AC_DEFINE_UNQUOTED
(
USE_LIBEDIT_INTERFACE, 1
)
elif
test
"
$with_readline
"
=
"yes"
elif
test
"
$with_readline
"
=
"yes"
then
then
...
@@ -2341,8 +2372,12 @@ then
...
@@ -2341,8 +2372,12 @@ then
compile_readline
=
yes
compile_readline
=
yes
AC_DEFINE_UNQUOTED
(
USE_NEW_READLINE_INTERFACE, 1
)
AC_DEFINE_UNQUOTED
(
USE_NEW_READLINE_INTERFACE, 1
)
else
else
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
MYSQL_CHECK_LIBEDIT_INTERFACE
MYSQL_CHECK_LIBEDIT_INTERFACE
MYSQL_CHECK_NEW_RL_INTERFACE
MYSQL_CHECK_NEW_RL_INTERFACE
MYSQL_CHECK_READLINE_DECLARES_HIST_ENTRY
AC_LANG_RESTORE
if
[
test
"
$mysql_cv_new_rl_interface
"
=
"yes"
]
||
[
test
"
$mysql_cv_libedit_interface
"
=
"no"
]
if
[
test
"
$mysql_cv_new_rl_interface
"
=
"yes"
]
||
[
test
"
$mysql_cv_libedit_interface
"
=
"no"
]
then
then
readline_link
=
"-lreadline"
readline_link
=
"-lreadline"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment