Upgrade to libedit-2.9

parent e0fe3e75
...@@ -1306,7 +1306,7 @@ static void initialize_readline (char *name) ...@@ -1306,7 +1306,7 @@ static void initialize_readline (char *name)
setlocale(LC_ALL,""); /* so as libedit use isprint */ setlocale(LC_ALL,""); /* so as libedit use isprint */
#endif #endif
rl_attempted_completion_function= (CPPFunction*)&new_mysql_completion; rl_attempted_completion_function= (CPPFunction*)&new_mysql_completion;
rl_completion_entry_function= (CPFunction*)&no_completion; rl_completion_entry_function= (Function*)&no_completion;
#else #else
rl_attempted_completion_function= (CPPFunction*)&new_mysql_completion; rl_attempted_completion_function= (CPPFunction*)&new_mysql_completion;
rl_completion_entry_function= (Function*)&no_completion; rl_completion_entry_function= (Function*)&no_completion;
......
...@@ -20,7 +20,7 @@ EXTRA_libedit_a_SOURCES = np/unvis.c np/strlcpy.c np/vis.c np/strlcat.c \ ...@@ -20,7 +20,7 @@ EXTRA_libedit_a_SOURCES = np/unvis.c np/strlcpy.c np/vis.c np/strlcat.c \
libedit_a_LIBADD = @LIBEDIT_LOBJECTS@ libedit_a_LIBADD = @LIBEDIT_LOBJECTS@
libedit_a_DEPENDENCIES = @LIBEDIT_LOBJECTS@ libedit_a_DEPENDENCIES = @LIBEDIT_LOBJECTS@
pkginclude_HEADERS = readline/readline.h pkginclude_HEADERS = editline/readline.h
noinst_HEADERS = chared.h el.h histedit.h key.h parse.h refresh.h sig.h \ noinst_HEADERS = chared.h el.h histedit.h key.h parse.h refresh.h sig.h \
sys.h tokenizer.h config.h hist.h map.h prompt.h read.h \ sys.h tokenizer.h config.h hist.h map.h prompt.h read.h \
......
/* $NetBSD: chared.c,v 1.18 2002/11/20 16:50:08 christos Exp $ */ /* $NetBSD: chared.c,v 1.22 2004/08/13 12:10:38 mycroft Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -36,14 +32,7 @@ ...@@ -36,14 +32,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "config.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
...@@ -62,13 +51,13 @@ cv_undo(EditLine *el) ...@@ -62,13 +51,13 @@ cv_undo(EditLine *el)
{ {
c_undo_t *vu = &el->el_chared.c_undo; c_undo_t *vu = &el->el_chared.c_undo;
c_redo_t *r = &el->el_chared.c_redo; c_redo_t *r = &el->el_chared.c_redo;
int size; uint size;
/* Save entire line for undo */ /* Save entire line for undo */
size = el->el_line.lastchar - el->el_line.buffer; size = el->el_line.lastchar - el->el_line.buffer;
vu->len = size; vu->len = size;
vu->cursor = el->el_line.cursor - el->el_line.buffer; vu->cursor = el->el_line.cursor - el->el_line.buffer;
memcpy(vu->buf, el->el_line.buffer, (size_t)size); memcpy(vu->buf, el->el_line.buffer, size);
/* save command info for redo */ /* save command info for redo */
r->count = el->el_state.doingarg ? el->el_state.argument : 0; r->count = el->el_state.doingarg ? el->el_state.argument : 0;
...@@ -139,6 +128,21 @@ c_delafter(EditLine *el, int num) ...@@ -139,6 +128,21 @@ c_delafter(EditLine *el, int num)
} }
/* c_delafter1():
* Delete the character after the cursor, do not yank
*/
protected void
c_delafter1(EditLine *el)
{
char *cp;
for (cp = el->el_line.cursor; cp <= el->el_line.lastchar; cp++)
*cp = cp[1];
el->el_line.lastchar--;
}
/* c_delbefore(): /* c_delbefore():
* Delete num characters before the cursor * Delete num characters before the cursor
*/ */
...@@ -167,6 +171,21 @@ c_delbefore(EditLine *el, int num) ...@@ -167,6 +171,21 @@ c_delbefore(EditLine *el, int num)
} }
/* c_delbefore1():
* Delete the character before the cursor, do not yank
*/
protected void
c_delbefore1(EditLine *el)
{
char *cp;
for (cp = el->el_line.cursor - 1; cp <= el->el_line.lastchar; cp++)
*cp = cp[1];
el->el_line.lastchar--;
}
/* ce__isword(): /* ce__isword():
* Return if p is part of a word according to emacs * Return if p is part of a word according to emacs
*/ */
...@@ -460,8 +479,8 @@ ch_init(EditLine *el) ...@@ -460,8 +479,8 @@ ch_init(EditLine *el)
el->el_state.argument = 1; el->el_state.argument = 1;
el->el_state.lastcmd = ED_UNASSIGNED; el->el_state.lastcmd = ED_UNASSIGNED;
el->el_chared.c_macro.nline = NULL;
el->el_chared.c_macro.level = -1; el->el_chared.c_macro.level = -1;
el->el_chared.c_macro.offset = 0;
el->el_chared.c_macro.macro = (char **) el_malloc(EL_MAXMACRO * el->el_chared.c_macro.macro = (char **) el_malloc(EL_MAXMACRO *
sizeof(char *)); sizeof(char *));
if (el->el_chared.c_macro.macro == NULL) if (el->el_chared.c_macro.macro == NULL)
...@@ -582,7 +601,7 @@ ch_enlargebufs(el, addlen) ...@@ -582,7 +601,7 @@ ch_enlargebufs(el, addlen)
return 0; return 0;
/* Safe to set enlarged buffer size */ /* Safe to set enlarged buffer size */
el->el_line.limit = &newbuffer[newsz - EL_LEAVE]; el->el_line.limit = &el->el_line.buffer[newsz - EL_LEAVE];
return 1; return 1;
} }
......
/* $NetBSD: chared.h,v 1.11 2002/11/20 16:50:08 christos Exp $ */ /* $NetBSD: chared.h,v 1.14 2004/08/13 12:10:39 mycroft Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -66,8 +62,8 @@ ...@@ -66,8 +62,8 @@
typedef struct c_macro_t { typedef struct c_macro_t {
int level; int level;
int offset;
char **macro; char **macro;
char *nline;
} c_macro_t; } c_macro_t;
/* /*
...@@ -158,7 +154,9 @@ protected char *c__next_word(char *, char *, int, int (*)(int)); ...@@ -158,7 +154,9 @@ 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_delbefore1(EditLine *);
protected void c_delafter(EditLine *, int); protected void c_delafter(EditLine *, int);
protected void c_delafter1(EditLine *);
protected int c_gets(EditLine *, char *, const char *); protected int c_gets(EditLine *, char *, const char *);
protected int c_hpos(EditLine *); protected int c_hpos(EditLine *);
......
This diff is collapsed.
/* $NetBSD: readline.h,v 1.1 2001/01/05 21:15:50 jdolecek Exp $ */ /* $NetBSD: readline.h,v 1.12 2004/09/08 18:15:37 christos Exp $ */
/*- /*-
* Copyright (c) 1997 The NetBSD Foundation, Inc. * Copyright (c) 1997 The NetBSD Foundation, Inc.
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
*/ */
#ifndef _READLINE_H_ #ifndef _READLINE_H_
#define _READLINE_H_ #define _READLINE_H_
#include <sys/types.h> #include <sys/types.h>
...@@ -48,11 +48,45 @@ typedef void VFunction(void); ...@@ -48,11 +48,45 @@ typedef void VFunction(void);
typedef char *CPFunction(const char *, int); typedef char *CPFunction(const char *, int);
typedef char **CPPFunction(const char *, int, int); typedef char **CPPFunction(const char *, int, int);
typedef void *histdata_t;
typedef struct _hist_entry { typedef struct _hist_entry {
const char *line; const char *line;
const char *data; histdata_t *data;
} HIST_ENTRY; } HIST_ENTRY;
typedef struct _keymap_entry {
char type;
#define ISFUNC 0
#define ISKMAP 1
#define ISMACR 2
Function *function;
} KEYMAP_ENTRY;
#define KEYMAP_SIZE 256
typedef KEYMAP_ENTRY KEYMAP_ENTRY_ARRAY[KEYMAP_SIZE];
typedef KEYMAP_ENTRY *Keymap;
#define control_character_threshold 0x20
#define control_character_bit 0x40
#ifndef CTRL
#include <sys/ioctl.h>
#ifdef __GLIBC__
#include <sys/ttydefaults.h>
#endif
#ifndef CTRL
#define CTRL(c) ((c) & 037)
#endif
#endif
#ifndef UNCTRL
#define UNCTRL(c) (((c) - 'a' + 'A')|control_character_bit)
#endif
#define RUBOUT 0x7f
#define ABORT_CHAR CTRL('G')
/* global variables used by readline enabled applications */ /* global variables used by readline enabled applications */
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
...@@ -68,12 +102,31 @@ extern int max_input_history; ...@@ -68,12 +102,31 @@ extern int max_input_history;
extern char *rl_basic_word_break_characters; extern char *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 Function *rl_completion_entry_function;
extern CPPFunction *rl_attempted_completion_function; extern CPPFunction *rl_attempted_completion_function;
extern int rl_completion_type; extern int rl_completion_type;
extern int rl_completion_query_items; extern int rl_completion_query_items;
extern char *rl_special_prefixes; extern char *rl_special_prefixes;
extern int rl_completion_append_character; extern int rl_completion_append_character;
extern int rl_inhibit_completion;
extern Function *rl_pre_input_hook;
extern Function *rl_startup_hook;
extern char *rl_terminal_name;
extern int rl_already_prompted;
extern char *rl_prompt;
/*
* The following is not implemented
*/
extern KEYMAP_ENTRY_ARRAY emacs_standard_keymap,
emacs_meta_keymap,
emacs_ctlx_keymap;
extern int rl_filename_completion_desired;
extern int rl_ignore_completion_duplicates;
extern Function *rl_getc_function;
extern VFunction *rl_redisplay_function;
extern VFunction *rl_completion_display_matches_hook;
extern VFunction *rl_prep_term_function;
extern VFunction *rl_deprep_term_function;
/* supported functions */ /* supported functions */
char *readline(const char *); char *readline(const char *);
...@@ -99,6 +152,8 @@ int read_history(const char *); ...@@ -99,6 +152,8 @@ int read_history(const char *);
int write_history(const char *); int write_history(const char *);
int history_expand(char *, char **); int history_expand(char *, char **);
char **history_tokenize(const char *); char **history_tokenize(const char *);
const char *get_history_event(const char *, int *, int);
char *history_arg_extract(int, int, const char *);
char *tilde_expand(char *); char *tilde_expand(char *);
char *filename_completion_function(const char *, int); char *filename_completion_function(const char *, int);
...@@ -111,6 +166,26 @@ void rl_display_match_list(char **, int, int); ...@@ -111,6 +166,26 @@ 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));
int rl_newline(int, int);
void rl_callback_read_char(void);
void rl_callback_handler_install(const char *, VFunction *);
void rl_callback_handler_remove(void);
void rl_redisplay(void);
int rl_get_previous_history(int, int);
void rl_prep_terminal(int);
void rl_deprep_terminal(void);
int rl_read_init_file(const char *);
int rl_parse_and_bind(const char *);
void rl_stuff_char(int);
int rl_add_defun(const char *, Function *, int);
/*
* The following are not implemented
*/
Keymap rl_get_keymap(void);
Keymap rl_make_bare_keymap(void);
int rl_generic_bind(int, const char *, const char *, Keymap);
int rl_bind_key_in_map(int, Function *, Keymap);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
/* $NetBSD: el.c,v 1.30 2002/11/12 00:00:23 thorpej Exp $ */ /* $NetBSD: el.c,v 1.39 2004/07/08 00:51:36 christos Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -36,14 +32,7 @@ ...@@ -36,14 +32,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "config.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
...@@ -72,7 +61,10 @@ el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr) ...@@ -72,7 +61,10 @@ el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr)
el->el_infd = fileno(fin); el->el_infd = fileno(fin);
el->el_outfile = fout; el->el_outfile = fout;
el->el_errfile = ferr; el->el_errfile = ferr;
el->el_prog = strdup(prog); if ((el->el_prog = el_strdup(prog)) == NULL) {
el_free(el);
return NULL;
}
/* /*
* Initialize all the modules. Order is important!!! * Initialize all the modules. Order is important!!!
...@@ -80,11 +72,11 @@ el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr) ...@@ -80,11 +72,11 @@ el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr)
el->el_flags = 0; el->el_flags = 0;
if (term_init(el) == -1) { if (term_init(el) == -1) {
free(el->el_prog); el_free(el->el_prog);
el_free(el); el_free(el);
return NULL; return NULL;
} }
(void) el_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)
el->el_flags |= NO_TTY; el->el_flags |= NO_TTY;
...@@ -112,7 +104,7 @@ el_end(EditLine *el) ...@@ -112,7 +104,7 @@ el_end(EditLine *el)
el_reset(el); el_reset(el);
term_end(el); term_end(el);
el_key_end(el); key_end(el);
map_end(el); map_end(el);
tty_end(el); tty_end(el);
ch_end(el); ch_end(el);
...@@ -257,6 +249,27 @@ el_set(EditLine *el, int op, ...) ...@@ -257,6 +249,27 @@ el_set(EditLine *el, int op, ...)
el->el_data = va_arg(va, void *); el->el_data = va_arg(va, void *);
break; break;
case EL_UNBUFFERED:
rv = va_arg(va, int);
if (rv && !(el->el_flags & UNBUFFERED)) {
el->el_flags |= UNBUFFERED;
read_prepare(el);
} else if (!rv && (el->el_flags & UNBUFFERED)) {
el->el_flags &= ~UNBUFFERED;
read_finish(el);
}
rv = 0;
break;
case EL_PREP_TERM:
rv = va_arg(va, int);
if (rv)
(void) tty_rawmode(el);
else
(void) tty_cookedmode(el);
rv = 0;
break;
default: default:
rv = -1; rv = -1;
break; break;
...@@ -297,21 +310,22 @@ el_get(EditLine *el, int op, void *ret) ...@@ -297,21 +310,22 @@ el_get(EditLine *el, int op, void *ret)
rv = 0; rv = 0;
break; break;
#if 0 /* XXX */
case EL_TERMINAL: case EL_TERMINAL:
rv = term_get(el, (const char *) &ret); term_get(el, (const char **)ret);
rv = 0;
break; break;
#if 0 /* XXX */
case EL_BIND: case EL_BIND:
case EL_TELLTC: case EL_TELLTC:
case EL_SETTC: case EL_SETTC:
case EL_ECHOTC: case EL_ECHOTC:
case EL_SETTY: case EL_SETTY:
{ {
char *argv[20]; const char *argv[20];
int i; int i;
for (i = 1; i < 20; i++) for (i = 1; i < sizeof(argv) / sizeof(argv[0]); i++)
if ((argv[i] = va_arg(va, char *)) == NULL) if ((argv[i] = va_arg(va, char *)) == NULL)
break; break;
...@@ -378,6 +392,11 @@ el_get(EditLine *el, int op, void *ret) ...@@ -378,6 +392,11 @@ el_get(EditLine *el, int op, void *ret)
rv = 0; rv = 0;
break; break;
case EL_UNBUFFERED:
*((int *) ret) = (!(el->el_flags & UNBUFFERED));
rv = 0;
break;
default: default:
rv = -1; rv = -1;
} }
...@@ -409,12 +428,17 @@ el_source(EditLine *el, const char *fname) ...@@ -409,12 +428,17 @@ el_source(EditLine *el, const char *fname)
fp = NULL; fp = NULL;
if (fname == NULL) { if (fname == NULL) {
#ifdef HAVE_ISSETUGID
static const char elpath[] = "/.editrc"; static const char elpath[] = "/.editrc";
#ifdef MAXPATHLEN
char path[MAXPATHLEN]; char path[MAXPATHLEN];
#else
char path[4096];
#endif
#ifdef HAVE_ISSETUGID
if (issetugid()) if (issetugid())
return (-1); return (-1);
#endif
if ((ptr = getenv("HOME")) == NULL) if ((ptr = getenv("HOME")) == NULL)
return (-1); return (-1);
if (strlcpy(path, ptr, sizeof(path)) >= sizeof(path)) if (strlcpy(path, ptr, sizeof(path)) >= sizeof(path))
...@@ -422,14 +446,6 @@ el_source(EditLine *el, const char *fname) ...@@ -422,14 +446,6 @@ 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");
...@@ -496,10 +512,13 @@ el_editmode(EditLine *el, int argc, const char **argv) ...@@ -496,10 +512,13 @@ el_editmode(EditLine *el, int argc, const char **argv)
return (-1); return (-1);
how = argv[1]; how = argv[1];
if (strcmp(how, "on") == 0) if (strcmp(how, "on") == 0) {
el->el_flags &= ~EDIT_DISABLED; el->el_flags &= ~EDIT_DISABLED;
else if (strcmp(how, "off") == 0) tty_rawmode(el);
} else if (strcmp(how, "off") == 0) {
tty_cookedmode(el);
el->el_flags |= EDIT_DISABLED; el->el_flags |= EDIT_DISABLED;
}
else { else {
(void) fprintf(el->el_errfile, "edit: Bad value `%s'.\n", how); (void) fprintf(el->el_errfile, "edit: Bad value `%s'.\n", how);
return (-1); return (-1);
......
/* $NetBSD: el.h,v 1.13 2002/11/15 14:32:33 christos Exp $ */ /* $NetBSD: el.h,v 1.16 2003/10/18 23:48:42 christos Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -55,9 +51,10 @@ ...@@ -55,9 +51,10 @@
#define EL_BUFSIZ 1024 /* Maximum line size */ #define EL_BUFSIZ 1024 /* Maximum line size */
#define HANDLE_SIGNALS 1<<0 #define HANDLE_SIGNALS 0x01
#define NO_TTY 1<<1 #define NO_TTY 0x02
#define EDIT_DISABLED 1<<2 #define EDIT_DISABLED 0x04
#define UNBUFFERED 0x08
typedef int bool_t; /* True or not */ typedef int bool_t; /* True or not */
...@@ -91,6 +88,7 @@ typedef struct el_state_t { ...@@ -91,6 +88,7 @@ typedef struct el_state_t {
/* /*
* Until we come up with something better... * Until we come up with something better...
*/ */
#define el_strdup(a) strdup(a)
#define el_malloc(a) malloc(a) #define el_malloc(a) malloc(a)
#define el_realloc(a,b) realloc(a, b) #define el_realloc(a,b) realloc(a, b)
#define el_free(a) free(a) #define el_free(a) free(a)
...@@ -98,7 +96,7 @@ typedef struct el_state_t { ...@@ -98,7 +96,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 "el_term.h"
#include "refresh.h" #include "refresh.h"
#include "chared.h" #include "chared.h"
#include "common.h" #include "common.h"
......
/* $NetBSD: term.h,v 1.15 2003/09/14 21:48:55 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. 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 {
const char *t_name; /* the terminal name */
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
#ifdef _SUNOS
extern int tgetent(char *, const char *);
extern int tgetflag(char *);
extern int tgetnum(char *);
extern int tputs(const char *, int, int (*)(int));
extern char* tgoto(const char*, int, int);
extern char* tgetstr(char*, char**);
#endif
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 void term_get(EditLine *, const char **);
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 */
/* $NetBSD: emacs.c,v 1.12 2002/11/15 14:32:33 christos Exp $ */ /* $NetBSD: emacs.c,v 1.19 2004/10/28 21:14:52 dsl Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -36,14 +32,7 @@ ...@@ -36,14 +32,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "config.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
...@@ -56,7 +45,7 @@ __RCSID("$NetBSD: emacs.c,v 1.12 2002/11/15 14:32:33 christos Exp $"); ...@@ -56,7 +45,7 @@ __RCSID("$NetBSD: emacs.c,v 1.12 2002/11/15 14:32:33 christos Exp $");
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_delete_or_list(EditLine *el, int c __attribute__((unused))) em_delete_or_list(EditLine *el, int c __attribute__((__unused__)))
{ {
if (el->el_line.cursor == el->el_line.lastchar) { if (el->el_line.cursor == el->el_line.lastchar) {
...@@ -75,7 +64,10 @@ em_delete_or_list(EditLine *el, int c __attribute__((unused))) ...@@ -75,7 +64,10 @@ em_delete_or_list(EditLine *el, int c __attribute__((unused)))
return (CC_ERROR); return (CC_ERROR);
} }
} else { } else {
c_delafter(el, el->el_state.argument); /* delete after dot */ if (el->el_state.doingarg)
c_delafter(el, el->el_state.argument);
else
c_delafter1(el);
if (el->el_line.cursor > el->el_line.lastchar) if (el->el_line.cursor > el->el_line.lastchar)
el->el_line.cursor = el->el_line.lastchar; el->el_line.cursor = el->el_line.lastchar;
/* bounds check */ /* bounds check */
...@@ -90,7 +82,7 @@ em_delete_or_list(EditLine *el, int c __attribute__((unused))) ...@@ -90,7 +82,7 @@ em_delete_or_list(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_delete_next_word(EditLine *el, int c __attribute__((unused))) em_delete_next_word(EditLine *el, int c __attribute__((__unused__)))
{ {
char *cp, *p, *kp; char *cp, *p, *kp;
...@@ -119,14 +111,12 @@ em_delete_next_word(EditLine *el, int c __attribute__((unused))) ...@@ -119,14 +111,12 @@ em_delete_next_word(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_yank(EditLine *el, int c __attribute__((unused))) em_yank(EditLine *el, int c __attribute__((__unused__)))
{ {
char *kp, *cp; char *kp, *cp;
if (el->el_chared.c_kill.last == el->el_chared.c_kill.buf) { if (el->el_chared.c_kill.last == el->el_chared.c_kill.buf)
if (!ch_enlargebufs(el, 1)) return (CC_NORM);
return (CC_ERROR);
}
if (el->el_line.lastchar + if (el->el_line.lastchar +
(el->el_chared.c_kill.last - el->el_chared.c_kill.buf) >= (el->el_chared.c_kill.last - el->el_chared.c_kill.buf) >=
...@@ -156,7 +146,7 @@ em_yank(EditLine *el, int c __attribute__((unused))) ...@@ -156,7 +146,7 @@ em_yank(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_kill_line(EditLine *el, int c __attribute__((unused))) em_kill_line(EditLine *el, int c __attribute__((__unused__)))
{ {
char *kp, *cp; char *kp, *cp;
...@@ -178,7 +168,7 @@ em_kill_line(EditLine *el, int c __attribute__((unused))) ...@@ -178,7 +168,7 @@ em_kill_line(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_kill_region(EditLine *el, int c __attribute__((unused))) em_kill_region(EditLine *el, int c __attribute__((__unused__)))
{ {
char *kp, *cp; char *kp, *cp;
...@@ -211,7 +201,7 @@ em_kill_region(EditLine *el, int c __attribute__((unused))) ...@@ -211,7 +201,7 @@ em_kill_region(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_copy_region(EditLine *el, int c __attribute__((unused))) em_copy_region(EditLine *el, int c __attribute__((__unused__)))
{ {
char *kp, *cp; char *kp, *cp;
...@@ -235,12 +225,12 @@ em_copy_region(EditLine *el, int c __attribute__((unused))) ...@@ -235,12 +225,12 @@ em_copy_region(EditLine *el, int c __attribute__((unused)))
} }
/* em_gosmacs_traspose(): /* em_gosmacs_transpose():
* Exchange the two characters before the cursor * Exchange the two characters before the cursor
* Gosling emacs transpose chars [^T] * Gosling emacs transpose chars [^T]
*/ */
protected el_action_t protected el_action_t
em_gosmacs_traspose(EditLine *el, int c) em_gosmacs_transpose(EditLine *el, int c)
{ {
if (el->el_line.cursor > &el->el_line.buffer[1]) { if (el->el_line.cursor > &el->el_line.buffer[1]) {
...@@ -260,7 +250,7 @@ em_gosmacs_traspose(EditLine *el, int c) ...@@ -260,7 +250,7 @@ em_gosmacs_traspose(EditLine *el, int c)
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_next_word(EditLine *el, int c __attribute__((unused))) em_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)
return (CC_ERROR); return (CC_ERROR);
...@@ -285,7 +275,7 @@ em_next_word(EditLine *el, int c __attribute__((unused))) ...@@ -285,7 +275,7 @@ em_next_word(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_upper_case(EditLine *el, int c __attribute__((unused))) em_upper_case(EditLine *el, int c __attribute__((__unused__)))
{ {
char *cp, *ep; char *cp, *ep;
...@@ -293,8 +283,8 @@ em_upper_case(EditLine *el, int c __attribute__((unused))) ...@@ -293,8 +283,8 @@ em_upper_case(EditLine *el, int c __attribute__((unused)))
el->el_state.argument, ce__isword); el->el_state.argument, ce__isword);
for (cp = el->el_line.cursor; cp < ep; cp++) for (cp = el->el_line.cursor; cp < ep; cp++)
if (islower((unsigned char) *cp)) if (islower((unsigned char)*cp))
*cp = toupper(*cp); *cp = toupper((unsigned char)*cp);
el->el_line.cursor = ep; el->el_line.cursor = ep;
if (el->el_line.cursor > el->el_line.lastchar) if (el->el_line.cursor > el->el_line.lastchar)
...@@ -309,7 +299,7 @@ em_upper_case(EditLine *el, int c __attribute__((unused))) ...@@ -309,7 +299,7 @@ em_upper_case(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_capitol_case(EditLine *el, int c __attribute__((unused))) em_capitol_case(EditLine *el, int c __attribute__((__unused__)))
{ {
char *cp, *ep; char *cp, *ep;
...@@ -317,16 +307,16 @@ em_capitol_case(EditLine *el, int c __attribute__((unused))) ...@@ -317,16 +307,16 @@ em_capitol_case(EditLine *el, int c __attribute__((unused)))
el->el_state.argument, ce__isword); el->el_state.argument, ce__isword);
for (cp = el->el_line.cursor; cp < ep; cp++) { for (cp = el->el_line.cursor; cp < ep; cp++) {
if (isalpha((unsigned char) *cp)) { if (isalpha((unsigned char)*cp)) {
if (islower((unsigned char) *cp)) if (islower((unsigned char)*cp))
*cp = toupper(*cp); *cp = toupper((unsigned char)*cp);
cp++; cp++;
break; break;
} }
} }
for (; cp < ep; cp++) for (; cp < ep; cp++)
if (isupper((unsigned char) *cp)) if (isupper((unsigned char)*cp))
*cp = tolower(*cp); *cp = tolower((unsigned char)*cp);
el->el_line.cursor = ep; el->el_line.cursor = ep;
if (el->el_line.cursor > el->el_line.lastchar) if (el->el_line.cursor > el->el_line.lastchar)
...@@ -341,7 +331,7 @@ em_capitol_case(EditLine *el, int c __attribute__((unused))) ...@@ -341,7 +331,7 @@ em_capitol_case(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_lower_case(EditLine *el, int c __attribute__((unused))) em_lower_case(EditLine *el, int c __attribute__((__unused__)))
{ {
char *cp, *ep; char *cp, *ep;
...@@ -349,8 +339,8 @@ em_lower_case(EditLine *el, int c __attribute__((unused))) ...@@ -349,8 +339,8 @@ em_lower_case(EditLine *el, int c __attribute__((unused)))
el->el_state.argument, ce__isword); el->el_state.argument, ce__isword);
for (cp = el->el_line.cursor; cp < ep; cp++) for (cp = el->el_line.cursor; cp < ep; cp++)
if (isupper((unsigned char) *cp)) if (isupper((unsigned char)*cp))
*cp = tolower(*cp); *cp = tolower((unsigned char)*cp);
el->el_line.cursor = ep; el->el_line.cursor = ep;
if (el->el_line.cursor > el->el_line.lastchar) if (el->el_line.cursor > el->el_line.lastchar)
...@@ -365,7 +355,7 @@ em_lower_case(EditLine *el, int c __attribute__((unused))) ...@@ -365,7 +355,7 @@ em_lower_case(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_set_mark(EditLine *el, int c __attribute__((unused))) em_set_mark(EditLine *el, int c __attribute__((__unused__)))
{ {
el->el_chared.c_kill.mark = el->el_line.cursor; el->el_chared.c_kill.mark = el->el_line.cursor;
...@@ -379,7 +369,7 @@ em_set_mark(EditLine *el, int c __attribute__((unused))) ...@@ -379,7 +369,7 @@ em_set_mark(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_exchange_mark(EditLine *el, int c __attribute__((unused))) em_exchange_mark(EditLine *el, int c __attribute__((__unused__)))
{ {
char *cp; char *cp;
...@@ -396,7 +386,7 @@ em_exchange_mark(EditLine *el, int c __attribute__((unused))) ...@@ -396,7 +386,7 @@ em_exchange_mark(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_universal_argument(EditLine *el, int c __attribute__((unused))) em_universal_argument(EditLine *el, int c __attribute__((__unused__)))
{ /* multiply current argument by 4 */ { /* multiply current argument by 4 */
if (el->el_state.argument > 1000000) if (el->el_state.argument > 1000000)
...@@ -413,7 +403,7 @@ em_universal_argument(EditLine *el, int c __attribute__((unused))) ...@@ -413,7 +403,7 @@ em_universal_argument(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_meta_next(EditLine *el, int c __attribute__((unused))) em_meta_next(EditLine *el, int c __attribute__((__unused__)))
{ {
el->el_state.metanext = 1; el->el_state.metanext = 1;
...@@ -426,7 +416,7 @@ em_meta_next(EditLine *el, int c __attribute__((unused))) ...@@ -426,7 +416,7 @@ em_meta_next(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_toggle_overwrite(EditLine *el, int c __attribute__((unused))) em_toggle_overwrite(EditLine *el, int c __attribute__((__unused__)))
{ {
el->el_state.inputmode = (el->el_state.inputmode == MODE_INSERT) ? el->el_state.inputmode = (el->el_state.inputmode == MODE_INSERT) ?
...@@ -440,7 +430,7 @@ em_toggle_overwrite(EditLine *el, int c __attribute__((unused))) ...@@ -440,7 +430,7 @@ em_toggle_overwrite(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_copy_prev_word(EditLine *el, int c __attribute__((unused))) em_copy_prev_word(EditLine *el, int c __attribute__((__unused__)))
{ {
char *cp, *oldc, *dp; char *cp, *oldc, *dp;
...@@ -467,7 +457,7 @@ em_copy_prev_word(EditLine *el, int c __attribute__((unused))) ...@@ -467,7 +457,7 @@ em_copy_prev_word(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_inc_search_next(EditLine *el, int c __attribute__((unused))) em_inc_search_next(EditLine *el, int c __attribute__((__unused__)))
{ {
el->el_search.patlen = 0; el->el_search.patlen = 0;
...@@ -480,9 +470,32 @@ em_inc_search_next(EditLine *el, int c __attribute__((unused))) ...@@ -480,9 +470,32 @@ em_inc_search_next(EditLine *el, int c __attribute__((unused)))
*/ */
protected el_action_t protected el_action_t
/*ARGSUSED*/ /*ARGSUSED*/
em_inc_search_prev(EditLine *el, int c __attribute__((unused))) em_inc_search_prev(EditLine *el, int c __attribute__((__unused__)))
{ {
el->el_search.patlen = 0; el->el_search.patlen = 0;
return (ce_inc_search(el, ED_SEARCH_PREV_HISTORY)); return (ce_inc_search(el, ED_SEARCH_PREV_HISTORY));
} }
/* em_delete_prev_char():
* Delete the character to the left of the cursor
* [^?]
*/
protected el_action_t
/*ARGSUSED*/
em_delete_prev_char(EditLine *el, int c __attribute__((__unused__)))
{
if (el->el_line.cursor <= el->el_line.buffer)
return (CC_ERROR);
if (el->el_state.doingarg)
c_delbefore(el, el->el_state.argument);
else
c_delbefore1(el);
el->el_line.cursor -= el->el_state.argument;
if (el->el_line.cursor < el->el_line.buffer)
el->el_line.cursor = el->el_line.buffer;
return (CC_REFRESH);
}
/* $NetBSD: fgetln.c,v 1.2 2003/12/10 01:30:27 lukem 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 <stdio.h>
#include "compat.h" #include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#ifndef HAVE_FGETLN
#ifdef HAVE_GETLINE char *
fgetln(FILE *fp, size_t *len)
extern int getline (char **lineptr, size_t *n, FILE *stream);
#else
/* The interface here is that of GNU libc's getline */
static int
getline (char **lineptr, size_t *n, FILE *stream)
{ {
#define EXPAND_CHUNK 16 static char *buf = NULL;
static size_t bufsiz = 0;
int n_read = 0; char *ptr;
char *line = *lineptr;
if (lineptr == NULL) return -1; if (buf == NULL) {
if (n == NULL) return -1; bufsiz = BUFSIZ;
if (stream == NULL) return -1; if ((buf = malloc(bufsiz)) == NULL)
if (*lineptr == NULL || *n == 0) return -1; return NULL;
}
#ifdef HAVE_FLOCKFILE
flockfile (stream); if (fgets(buf, bufsiz, fp) == NULL)
#endif return NULL;
*len = 0;
while (1)
{ while ((ptr = strchr(&buf[*len], '\n')) == NULL) {
int c; size_t nbufsiz = bufsiz + BUFSIZ;
char *nbuf = realloc(buf, nbufsiz);
#ifdef HAVE_FLOCKFILE
c = getc_unlocked (stream); if (nbuf == NULL) {
#else int oerrno = errno;
c = getc (stream); free(buf);
#endif errno = oerrno;
buf = NULL;
if (c == EOF) return NULL;
{ } else
if (n_read > 0) buf = nbuf;
line[n_read] = '\0';
break; *len = bufsiz;
} if (fgets(&buf[bufsiz], BUFSIZ, fp) == NULL)
return buf;
if (n_read + 2 >= *n)
{ bufsiz = nbufsiz;
size_t new_size; }
if (*n == 0) *len = (ptr - buf) + 1;
new_size = 16; return buf;
else
new_size = *n * 2;
if (*n >= new_size) /* Overflowed size_t */
line = NULL;
else
line = (char *) (*lineptr ? (char*) realloc(*lineptr, new_size) :
(char*) malloc(new_size));
if (line)
{
*lineptr = line;
*n = new_size;
}
else
{
if (*n > 0)
{
(*lineptr)[*n - 1] = '\0';
n_read = *n - 2;
}
break;
}
}
line[n_read] = c;
n_read++;
if (c == '\n')
{
line[n_read] = '\0';
break;
}
}
#ifdef HAVE_FLOCKFILE
funlockfile (stream);
#endif
return n_read - 1;
} }
#endif /* ! HAVE_GETLINE */
char *fgetln(FILE *stream, size_t *len)
{
char *ptr = NULL;
int sz;
size_t length= 0;
sz = getline(&ptr, &length, stream);
if(len) {
*len = sz;
}
return sz >= 0 ? ptr : NULL;
}
#endif
/* $NetBSD: hist.c,v 1.12 2003/01/21 18:40:23 christos Exp $ */ /* $NetBSD: hist.c,v 1.15 2003/11/01 23:36:39 christos Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -36,14 +32,7 @@ ...@@ -36,14 +32,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "config.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
...@@ -157,7 +146,6 @@ hist_get(EditLine *el) ...@@ -157,7 +146,6 @@ hist_get(EditLine *el)
* process a history command * process a history command
*/ */
protected int protected int
/*ARGSUSED*/
hist_command(EditLine *el, int argc, const char **argv) hist_command(EditLine *el, int argc, const char **argv)
{ {
const char *str; const char *str;
...@@ -167,7 +155,7 @@ hist_command(EditLine *el, int argc, const char **argv) ...@@ -167,7 +155,7 @@ hist_command(EditLine *el, int argc, const char **argv)
if (el->el_history.ref == NULL) if (el->el_history.ref == NULL)
return (-1); return (-1);
if (argc == 0 || strcmp(argv[0], "list") == 1) { if (argc == 1 || strcmp(argv[1], "list") == 0) {
/* List history entries */ /* 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))
...@@ -176,15 +164,15 @@ hist_command(EditLine *el, int argc, const char **argv) ...@@ -176,15 +164,15 @@ hist_command(EditLine *el, int argc, const char **argv)
return (0); return (0);
} }
if (argc != 2) if (argc != 3)
return (-1); return (-1);
num = (int)strtol(argv[1], NULL, 0); num = (int)strtol(argv[2], NULL, 0);
if (strcmp(argv[0], "size") == 0) if (strcmp(argv[1], "size") == 0)
return history(el->el_history.ref, &ev, H_SETSIZE, num); return history(el->el_history.ref, &ev, H_SETSIZE, num);
if (strcmp(argv[0], "unique") == 0) if (strcmp(argv[1], "unique") == 0)
return history(el->el_history.ref, &ev, H_SETUNIQUE, num); return history(el->el_history.ref, &ev, H_SETUNIQUE, num);
return -1; return -1;
......
/* $NetBSD: hist.h,v 1.9 2003/01/21 18:40:23 christos Exp $ */ /* $NetBSD: hist.h,v 1.10 2003/08/07 16:44:31 agc Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
......
/* $NetBSD: histedit.h,v 1.21 2003/01/21 18:40:24 christos Exp $ */ /* $NetBSD: histedit.h,v 1.25 2003/12/05 13:37:48 lukem Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -45,7 +41,7 @@ ...@@ -45,7 +41,7 @@
#define _HISTEDIT_H_ #define _HISTEDIT_H_
#define LIBEDIT_MAJOR 2 #define LIBEDIT_MAJOR 2
#define LIBEDIT_MINOR 6 #define LIBEDIT_MINOR 9
#include <sys/types.h> #include <sys/types.h>
#include <stdio.h> #include <stdio.h>
...@@ -53,6 +49,7 @@ ...@@ -53,6 +49,7 @@
/* /*
* ==== Editing ==== * ==== Editing ====
*/ */
typedef struct editline EditLine; typedef struct editline EditLine;
/* /*
...@@ -64,7 +61,6 @@ typedef struct lineinfo { ...@@ -64,7 +61,6 @@ typedef struct lineinfo {
const char *lastchar; const char *lastchar;
} LineInfo; } LineInfo;
/* /*
* EditLine editor function return codes. * EditLine editor function return codes.
* For user-defined function interface * For user-defined function interface
...@@ -84,9 +80,8 @@ typedef struct lineinfo { ...@@ -84,9 +80,8 @@ typedef struct lineinfo {
* Initialization, cleanup, and resetting * Initialization, cleanup, and resetting
*/ */
EditLine *el_init(const char *, FILE *, FILE *, FILE *); EditLine *el_init(const char *, FILE *, FILE *, FILE *);
void el_reset(EditLine *);
void el_end(EditLine *); void el_end(EditLine *);
void el_reset(EditLine *);
/* /*
* Get a line, a character or push a string back in the input queue * Get a line, a character or push a string back in the input queue
...@@ -131,6 +126,8 @@ int el_get(EditLine *, int, void *); ...@@ -131,6 +126,8 @@ int el_get(EditLine *, int, void *);
#define EL_RPROMPT 12 /* , el_pfunc_t); */ #define EL_RPROMPT 12 /* , el_pfunc_t); */
#define EL_GETCFN 13 /* , el_rfunc_t); */ #define EL_GETCFN 13 /* , el_rfunc_t); */
#define EL_CLIENTDATA 14 /* , void *); */ #define EL_CLIENTDATA 14 /* , void *); */
#define EL_UNBUFFERED 15 /* , int); */
#define EL_PREP_TERM 16 /* , int); */
#define EL_BUILTIN_GETCFN (NULL) #define EL_BUILTIN_GETCFN (NULL)
...@@ -146,7 +143,6 @@ int el_source(EditLine *, const char *); ...@@ -146,7 +143,6 @@ int el_source(EditLine *, const char *);
*/ */
void el_resize(EditLine *); void el_resize(EditLine *);
/* /*
* User-defined function interface. * User-defined function interface.
*/ */
...@@ -154,6 +150,7 @@ const LineInfo *el_line(EditLine *); ...@@ -154,6 +150,7 @@ const LineInfo *el_line(EditLine *);
int el_insertstr(EditLine *, const char *); int el_insertstr(EditLine *, const char *);
void el_deletestr(EditLine *, int); void el_deletestr(EditLine *, int);
/* /*
* ==== History ==== * ==== History ====
*/ */
...@@ -196,4 +193,22 @@ int history(History *, HistEvent *, int, ...); ...@@ -196,4 +193,22 @@ int history(History *, HistEvent *, int, ...);
#define H_SETUNIQUE 20 /* , int); */ #define H_SETUNIQUE 20 /* , int); */
#define H_GETUNIQUE 21 /* , void); */ #define H_GETUNIQUE 21 /* , void); */
/*
* ==== Tokenization ====
*/
typedef struct tokenizer Tokenizer;
/*
* String tokenization functions, using simplified sh(1) quoting rules
*/
Tokenizer *tok_init(const char *);
void tok_end(Tokenizer *);
void tok_reset(Tokenizer *);
int tok_line(Tokenizer *, const LineInfo *,
int *, const char ***, int *, int *);
int tok_str(Tokenizer *, const char *,
int *, const char ***);
#endif /* _HISTEDIT_H_ */ #endif /* _HISTEDIT_H_ */
/* $NetBSD: history.c,v 1.22 2003/01/21 18:40:24 christos Exp $ */ /* $NetBSD: history.c,v 1.28 2004/11/27 18:31:45 christos Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -36,14 +32,7 @@ ...@@ -36,14 +32,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "config.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
...@@ -51,11 +40,7 @@ __RCSID("$NetBSD: history.c,v 1.22 2003/01/21 18:40:24 christos Exp $"); ...@@ -51,11 +40,7 @@ __RCSID("$NetBSD: history.c,v 1.22 2003/01/21 18:40:24 christos Exp $");
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#ifdef HAVE_VIS_H
#include <vis.h> #include <vis.h>
#else
#include "np/vis.h"
#endif
#include <sys/stat.h> #include <sys/stat.h>
static const char hist_cookie[] = "_HiStOrY_V2_\n"; static const char hist_cookie[] = "_HiStOrY_V2_\n";
...@@ -91,6 +76,7 @@ struct history { ...@@ -91,6 +76,7 @@ struct history {
#define HENTER(h, ev, str) (*(h)->h_enter)((h)->h_ref, ev, str) #define HENTER(h, ev, str) (*(h)->h_enter)((h)->h_ref, ev, str)
#define HADD(h, ev, str) (*(h)->h_add)((h)->h_ref, ev, str) #define HADD(h, ev, str) (*(h)->h_add)((h)->h_ref, ev, str)
#define h_strdup(a) strdup(a)
#define h_malloc(a) malloc(a) #define h_malloc(a) malloc(a)
#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)
...@@ -249,20 +235,19 @@ history_def_next(ptr_t p, HistEvent *ev) ...@@ -249,20 +235,19 @@ history_def_next(ptr_t p, HistEvent *ev)
{ {
history_t *h = (history_t *) p; history_t *h = (history_t *) p;
if (h->cursor != &h->list) if (h->cursor == &h->list) {
h->cursor = h->cursor->next;
else {
he_seterrev(ev, _HE_EMPTY_LIST); he_seterrev(ev, _HE_EMPTY_LIST);
return (-1); return (-1);
} }
if (h->cursor != &h->list) if (h->cursor->next == &h->list) {
*ev = h->cursor->ev;
else {
he_seterrev(ev, _HE_END_REACHED); he_seterrev(ev, _HE_END_REACHED);
return (-1); return (-1);
} }
h->cursor = h->cursor->next;
*ev = h->cursor->ev;
return (0); return (0);
} }
...@@ -275,21 +260,20 @@ history_def_prev(ptr_t p, HistEvent *ev) ...@@ -275,21 +260,20 @@ history_def_prev(ptr_t p, HistEvent *ev)
{ {
history_t *h = (history_t *) p; history_t *h = (history_t *) p;
if (h->cursor != &h->list) if (h->cursor == &h->list) {
h->cursor = h->cursor->prev;
else {
he_seterrev(ev, he_seterrev(ev,
(h->cur > 0) ? _HE_END_REACHED : _HE_EMPTY_LIST); (h->cur > 0) ? _HE_END_REACHED : _HE_EMPTY_LIST);
return (-1); return (-1);
} }
if (h->cursor != &h->list) if (h->cursor->prev == &h->list) {
*ev = h->cursor->ev;
else {
he_seterrev(ev, _HE_START_REACHED); he_seterrev(ev, _HE_START_REACHED);
return (-1); return (-1);
} }
h->cursor = h->cursor->prev;
*ev = h->cursor->ev;
return (0); return (0);
} }
...@@ -374,7 +358,8 @@ history_def_add(ptr_t p, HistEvent *ev, const char *str) ...@@ -374,7 +358,8 @@ history_def_add(ptr_t p, HistEvent *ev, const char *str)
*/ */
/* ARGSUSED */ /* ARGSUSED */
private void private void
history_def_delete(history_t *h, HistEvent *ev __attribute__((unused)), hentry_t *hp) history_def_delete(history_t *h,
HistEvent *ev __attribute__((__unused__)), hentry_t *hp)
{ {
HistEventPrivate *evp = (void *)&hp->ev; HistEventPrivate *evp = (void *)&hp->ev;
if (hp == &h->list) if (hp == &h->list)
...@@ -397,7 +382,7 @@ history_def_insert(history_t *h, HistEvent *ev, const char *str) ...@@ -397,7 +382,7 @@ 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 == NULL) if (h->cursor == NULL)
goto oomem; goto oomem;
if ((h->cursor->ev.str = strdup(str)) == NULL) { if ((h->cursor->ev.str = h_strdup(str)) == NULL) {
h_free((ptr_t)h->cursor); h_free((ptr_t)h->cursor);
goto oomem; goto oomem;
} }
...@@ -447,7 +432,7 @@ history_def_enter(ptr_t p, HistEvent *ev, const char *str) ...@@ -447,7 +432,7 @@ history_def_enter(ptr_t p, HistEvent *ev, const char *str)
*/ */
/* ARGSUSED */ /* ARGSUSED */
private int 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) if (h == NULL)
...@@ -661,6 +646,12 @@ history_load(History *h, const char *fname) ...@@ -661,6 +646,12 @@ history_load(History *h, const char *fname)
if ((fp = fopen(fname, "r")) == NULL) if ((fp = fopen(fname, "r")) == NULL)
return (i); return (i);
if ((line = fgetln(fp, &sz)) == NULL)
goto done;
if (strncmp(line, hist_cookie, sz) != 0)
goto done;
ptr = h_malloc(max_size = 1024); ptr = h_malloc(max_size = 1024);
if (ptr == NULL) if (ptr == NULL)
goto done; goto done;
...@@ -674,7 +665,7 @@ history_load(History *h, const char *fname) ...@@ -674,7 +665,7 @@ history_load(History *h, const char *fname)
if (max_size < sz) { if (max_size < sz) {
char *nptr; char *nptr;
max_size = (sz + 1023) & ~1023; max_size = (sz + 1024) & ~1023;
nptr = h_realloc(ptr, max_size); nptr = h_realloc(ptr, max_size);
if (nptr == NULL) { if (nptr == NULL) {
i = -1; i = -1;
...@@ -714,16 +705,18 @@ history_save(History *h, const char *fname) ...@@ -714,16 +705,18 @@ history_save(History *h, const char *fname)
if (fchmod(fileno(fp), S_IRUSR|S_IWUSR) == -1) if (fchmod(fileno(fp), S_IRUSR|S_IWUSR) == -1)
goto done; goto done;
if (fputs(hist_cookie, fp) == EOF)
goto done;
ptr = h_malloc(max_size = 1024); ptr = h_malloc(max_size = 1024);
if (ptr == NULL) if (ptr == NULL)
goto done; goto done;
for (i = 0, retval = HLAST(h, &ev); 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;
if (len >= max_size) { if (len >= max_size) {
char *nptr; char *nptr;
max_size = (len + 1023) & ~1023; max_size = (len + 1024) & ~1023;
nptr = h_realloc(ptr, max_size); nptr = h_realloc(ptr, max_size);
if (nptr == NULL) { if (nptr == NULL) {
i = -1; i = -1;
...@@ -732,7 +725,7 @@ history_save(History *h, const char *fname) ...@@ -732,7 +725,7 @@ history_save(History *h, const char *fname)
ptr = nptr; ptr = nptr;
} }
(void) strvis(ptr, ev.str, VIS_WHITE); (void) strvis(ptr, ev.str, VIS_WHITE);
(void) fprintf(fp, "%s\n", ev.str); (void) fprintf(fp, "%s\n", ptr);
} }
oomem: oomem:
h_free((ptr_t)ptr); h_free((ptr_t)ptr);
......
/* $NetBSD: key.c,v 1.13 2002/03/18 16:00:55 christos Exp $ */ /* $NetBSD: key.c,v 1.15 2003/10/18 23:48:42 christos Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -36,14 +32,7 @@ ...@@ -36,14 +32,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "config.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
...@@ -103,14 +92,14 @@ private int key__decode_char(char *, int, int); ...@@ -103,14 +92,14 @@ private int key__decode_char(char *, int, int);
* Initialize the key maps * Initialize the key maps
*/ */
protected int protected int
el_key_init(EditLine *el) key_init(EditLine *el)
{ {
el->el_key.buf = (char *) el_malloc(KEY_BUFSIZ); el->el_key.buf = (char *) el_malloc(KEY_BUFSIZ);
if (el->el_key.buf == NULL) if (el->el_key.buf == NULL)
return (-1); return (-1);
el->el_key.map = NULL; el->el_key.map = NULL;
el_key_reset(el); key_reset(el);
return (0); return (0);
} }
...@@ -119,7 +108,7 @@ el_key_init(EditLine *el) ...@@ -119,7 +108,7 @@ el_key_init(EditLine *el)
* Free the key maps * Free the key maps
*/ */
protected void protected void
el_key_end(EditLine *el) key_end(EditLine *el)
{ {
el_free((ptr_t) el->el_key.buf); el_free((ptr_t) el->el_key.buf);
...@@ -133,7 +122,7 @@ el_key_end(EditLine *el) ...@@ -133,7 +122,7 @@ el_key_end(EditLine *el)
* Associate cmd with a key value * Associate cmd with a key value
*/ */
protected key_value_t * protected key_value_t *
el_key_map_cmd(EditLine *el, int cmd) key_map_cmd(EditLine *el, int cmd)
{ {
el->el_key.val.cmd = (el_action_t) cmd; el->el_key.val.cmd = (el_action_t) cmd;
...@@ -145,7 +134,7 @@ el_key_map_cmd(EditLine *el, int cmd) ...@@ -145,7 +134,7 @@ el_key_map_cmd(EditLine *el, int cmd)
* Associate str with a key value * Associate str with a key value
*/ */
protected key_value_t * protected key_value_t *
el_key_map_str(EditLine *el, char *str) key_map_str(EditLine *el, char *str)
{ {
el->el_key.val.str = str; el->el_key.val.str = str;
...@@ -159,7 +148,7 @@ el_key_map_str(EditLine *el, char *str) ...@@ -159,7 +148,7 @@ el_key_map_str(EditLine *el, char *str)
* [Always bind the ansi arrow keys?] * [Always bind the ansi arrow keys?]
*/ */
protected void protected void
el_key_reset(EditLine *el) key_reset(EditLine *el)
{ {
node__put(el, el->el_key.map); node__put(el, el->el_key.map);
...@@ -177,7 +166,7 @@ el_key_reset(EditLine *el) ...@@ -177,7 +166,7 @@ el_key_reset(EditLine *el)
* The last character read is returned in *ch. * The last character read is returned in *ch.
*/ */
protected int protected int
el_key_get(EditLine *el, char *ch, key_value_t *val) key_get(EditLine *el, char *ch, key_value_t *val)
{ {
return (node_trav(el, el->el_key.map, ch, val)); return (node_trav(el, el->el_key.map, ch, val));
...@@ -191,7 +180,7 @@ el_key_get(EditLine *el, char *ch, key_value_t *val) ...@@ -191,7 +180,7 @@ el_key_get(EditLine *el, char *ch, key_value_t *val)
* out str or a unix command. * out str or a unix command.
*/ */
protected void protected void
el_key_add(EditLine *el, const char *key, key_value_t *val, int ntype) key_add(EditLine *el, const char *key, key_value_t *val, int ntype)
{ {
if (key[0] == '\0') { if (key[0] == '\0') {
...@@ -219,7 +208,7 @@ el_key_add(EditLine *el, const char *key, key_value_t *val, int ntype) ...@@ -219,7 +208,7 @@ el_key_add(EditLine *el, const char *key, key_value_t *val, int ntype)
* *
*/ */
protected void protected void
el_key_clear(EditLine *el, el_action_t *map, const char *in) key_clear(EditLine *el, el_action_t *map, const char *in)
{ {
if ((map[(unsigned char)*in] == ED_SEQUENCE_LEAD_IN) && if ((map[(unsigned char)*in] == ED_SEQUENCE_LEAD_IN) &&
...@@ -227,7 +216,7 @@ el_key_clear(EditLine *el, el_action_t *map, const char *in) ...@@ -227,7 +216,7 @@ el_key_clear(EditLine *el, el_action_t *map, const char *in)
el->el_map.alt[(unsigned char)*in] != ED_SEQUENCE_LEAD_IN) || el->el_map.alt[(unsigned char)*in] != ED_SEQUENCE_LEAD_IN) ||
(map == el->el_map.alt && (map == el->el_map.alt &&
el->el_map.key[(unsigned char)*in] != ED_SEQUENCE_LEAD_IN))) el->el_map.key[(unsigned char)*in] != ED_SEQUENCE_LEAD_IN)))
(void) el_key_delete(el, in); (void) key_delete(el, in);
} }
...@@ -236,7 +225,7 @@ el_key_clear(EditLine *el, el_action_t *map, const char *in) ...@@ -236,7 +225,7 @@ el_key_clear(EditLine *el, el_action_t *map, const char *in)
* they exists. * they exists.
*/ */
protected int protected int
el_key_delete(EditLine *el, const char *key) key_delete(EditLine *el, const char *key)
{ {
if (key[0] == '\0') { if (key[0] == '\0') {
...@@ -257,7 +246,7 @@ el_key_delete(EditLine *el, const char *key) ...@@ -257,7 +246,7 @@ el_key_delete(EditLine *el, const char *key)
* Print entire el->el_key.map if null * Print entire el->el_key.map if null
*/ */
protected void protected void
el_key_print(EditLine *el, const char *key) key_print(EditLine *el, const char *key)
{ {
/* do nothing if el->el_key.map is empty and null key specified */ /* do nothing if el->el_key.map is empty and null key specified */
...@@ -356,7 +345,8 @@ node__try(EditLine *el, key_node_t *ptr, const char *str, key_value_t *val, int ...@@ -356,7 +345,8 @@ node__try(EditLine *el, key_node_t *ptr, const char *str, key_value_t *val, int
break; break;
case XK_STR: case XK_STR:
case XK_EXE: case XK_EXE:
ptr->val.str = strdup(val->str); if ((ptr->val.str = el_strdup(val->str)) == NULL)
return -1;
break; break;
default: default:
EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ntype)); EL_ABORT((el->el_errfile, "Bad XK_ type %d\n", ntype));
...@@ -504,7 +494,7 @@ node_lookup(EditLine *el, const char *str, key_node_t *ptr, int cnt) ...@@ -504,7 +494,7 @@ node_lookup(EditLine *el, const char *str, key_node_t *ptr, int cnt)
if (str[1] == 0) { if (str[1] == 0) {
el->el_key.buf[ncnt + 1] = '"'; el->el_key.buf[ncnt + 1] = '"';
el->el_key.buf[ncnt + 2] = '\0'; el->el_key.buf[ncnt + 2] = '\0';
el_key_kprint(el, el->el_key.buf, key_kprint(el, el->el_key.buf,
&ptr->val, ptr->type); &ptr->val, ptr->type);
return (0); return (0);
} else } else
...@@ -552,7 +542,7 @@ node_enum(EditLine *el, key_node_t *ptr, int cnt) ...@@ -552,7 +542,7 @@ node_enum(EditLine *el, key_node_t *ptr, int cnt)
/* print this key and function */ /* print this key and function */
el->el_key.buf[ncnt + 1] = '"'; el->el_key.buf[ncnt + 1] = '"';
el->el_key.buf[ncnt + 2] = '\0'; el->el_key.buf[ncnt + 2] = '\0';
el_key_kprint(el, el->el_key.buf, &ptr->val, ptr->type); key_kprint(el, el->el_key.buf, &ptr->val, ptr->type);
} else } else
(void) node_enum(el, ptr->next, ncnt + 1); (void) node_enum(el, ptr->next, ncnt + 1);
...@@ -568,7 +558,7 @@ node_enum(EditLine *el, key_node_t *ptr, int cnt) ...@@ -568,7 +558,7 @@ node_enum(EditLine *el, key_node_t *ptr, int cnt)
* function specified by val * function specified by val
*/ */
protected void protected void
el_key_kprint(EditLine *el, const char *key, key_value_t *val, int ntype) key_kprint(EditLine *el, const char *key, key_value_t *val, int ntype)
{ {
el_bindings_t *fp; el_bindings_t *fp;
char unparsbuf[EL_BUFSIZ]; char unparsbuf[EL_BUFSIZ];
...@@ -579,7 +569,7 @@ el_key_kprint(EditLine *el, const char *key, key_value_t *val, int ntype) ...@@ -579,7 +569,7 @@ el_key_kprint(EditLine *el, const char *key, key_value_t *val, int ntype)
case XK_STR: case XK_STR:
case XK_EXE: case XK_EXE:
(void) fprintf(el->el_outfile, fmt, key, (void) fprintf(el->el_outfile, fmt, key,
el_key__decode_str(val->str, unparsbuf, key__decode_str(val->str, unparsbuf,
ntype == XK_STR ? "\"\"" : "[]")); ntype == XK_STR ? "\"\"" : "[]"));
break; break;
case XK_CMD: case XK_CMD:
...@@ -644,7 +634,7 @@ key__decode_char(char *buf, int cnt, int ch) ...@@ -644,7 +634,7 @@ key__decode_char(char *buf, int cnt, int ch)
* Make a printable version of the ey * Make a printable version of the ey
*/ */
protected char * protected char *
el_key__decode_str(const char *str, char *buf, const char *sep) key__decode_str(const char *str, char *buf, const char *sep)
{ {
char *b; char *b;
const char *p; const char *p;
......
/* $NetBSD: key.h,v 1.6 2002/03/18 16:00:55 christos Exp $ */ /* $NetBSD: key.h,v 1.8 2003/08/07 16:44:32 agc Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -62,19 +58,22 @@ typedef struct el_key_t { ...@@ -62,19 +58,22 @@ typedef struct el_key_t {
#define XK_NOD 2 #define XK_NOD 2
#define XK_EXE 3 #define XK_EXE 3
protected int el_key_init(EditLine *); #undef key_end
protected void el_key_end(EditLine *); #undef key_clear
protected key_value_t *el_key_map_cmd(EditLine *, int); #undef key_print
protected key_value_t *el_key_map_str(EditLine *, char *);
protected void el_key_reset(EditLine *); protected int key_init(EditLine *);
protected int el_key_get(EditLine *, char *, key_value_t *); protected void key_end(EditLine *);
protected void el_key_add(EditLine *, protected key_value_t *key_map_cmd(EditLine *, int);
const char *, key_value_t *, int); protected key_value_t *key_map_str(EditLine *, char *);
protected void el_key_clear(EditLine *, el_action_t *, const char *); protected void key_reset(EditLine *);
protected int el_key_delete(EditLine *, const char *); protected int key_get(EditLine *, char *, key_value_t *);
protected void el_key_print(EditLine *, const char *); protected void key_add(EditLine *, const char *, key_value_t *, int);
protected void el_key_kprint(EditLine *, const char *, key_value_t *, protected void key_clear(EditLine *, el_action_t *, const char *);
protected int key_delete(EditLine *, const char *);
protected void key_print(EditLine *, const char *);
protected void key_kprint(EditLine *, const char *, key_value_t *,
int); int);
protected char *el_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 */
/* $NetBSD: map.c,v 1.18 2002/11/15 14:32:33 christos Exp $ */ /* $NetBSD: map.c,v 1.20 2004/08/13 12:10:39 mycroft Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -36,14 +32,7 @@ ...@@ -36,14 +32,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "config.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
...@@ -71,7 +60,7 @@ private const el_action_t el_map_emacs[] = { ...@@ -71,7 +60,7 @@ private const el_action_t el_map_emacs[] = {
/* 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 */ /* 8 */ EM_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 */
...@@ -190,7 +179,7 @@ private const el_action_t el_map_emacs[] = { ...@@ -190,7 +179,7 @@ private const el_action_t el_map_emacs[] = {
/* 124 */ ED_INSERT, /* | */ /* 124 */ ED_INSERT, /* | */
/* 125 */ ED_INSERT, /* } */ /* 125 */ ED_INSERT, /* } */
/* 126 */ ED_INSERT, /* ~ */ /* 126 */ ED_INSERT, /* ~ */
/* 127 */ ED_DELETE_PREV_CHAR, /* ^? */ /* 127 */ EM_DELETE_PREV_CHAR, /* ^? */
/* 128 */ ED_UNASSIGNED, /* M-^@ */ /* 128 */ ED_UNASSIGNED, /* M-^@ */
/* 129 */ ED_UNASSIGNED, /* M-^A */ /* 129 */ ED_UNASSIGNED, /* M-^A */
/* 130 */ ED_UNASSIGNED, /* M-^B */ /* 130 */ ED_UNASSIGNED, /* M-^B */
...@@ -1011,8 +1000,7 @@ map_init_meta(EditLine *el) ...@@ -1011,8 +1000,7 @@ map_init_meta(EditLine *el)
break; break;
default: default:
buf[1] = i & 0177; buf[1] = i & 0177;
el_key_add(el, buf, key_add(el, buf, key_map_cmd(el, (int) map[i]), XK_CMD);
el_key_map_cmd(el, (int) map[i]), XK_CMD);
break; break;
} }
map[(int) buf[0]] = ED_SEQUENCE_LEAD_IN; map[(int) buf[0]] = ED_SEQUENCE_LEAD_IN;
...@@ -1034,7 +1022,7 @@ map_init_vi(EditLine *el) ...@@ -1034,7 +1022,7 @@ map_init_vi(EditLine *el)
el->el_map.type = MAP_VI; el->el_map.type = MAP_VI;
el->el_map.current = el->el_map.key; el->el_map.current = el->el_map.key;
el_key_reset(el); key_reset(el);
for (i = 0; i < N_KEYS; i++) { for (i = 0; i < N_KEYS; i++) {
key[i] = vii[i]; key[i] = vii[i];
...@@ -1063,7 +1051,7 @@ map_init_emacs(EditLine *el) ...@@ -1063,7 +1051,7 @@ map_init_emacs(EditLine *el)
el->el_map.type = MAP_EMACS; el->el_map.type = MAP_EMACS;
el->el_map.current = el->el_map.key; el->el_map.current = el->el_map.key;
el_key_reset(el); key_reset(el);
for (i = 0; i < N_KEYS; i++) { for (i = 0; i < N_KEYS; i++) {
key[i] = emacs[i]; key[i] = emacs[i];
...@@ -1076,7 +1064,7 @@ map_init_emacs(EditLine *el) ...@@ -1076,7 +1064,7 @@ map_init_emacs(EditLine *el)
buf[0] = CONTROL('X'); buf[0] = CONTROL('X');
buf[1] = CONTROL('X'); buf[1] = CONTROL('X');
buf[2] = 0; buf[2] = 0;
el_key_add(el, buf, el_key_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD); key_add(el, buf, key_map_cmd(el, EM_EXCHANGE_MARK), XK_CMD);
tty_bind_char(el, 1); tty_bind_char(el, 1);
term_bind_arrow(el); term_bind_arrow(el);
...@@ -1133,7 +1121,7 @@ map_print_key(EditLine *el, el_action_t *map, const char *in) ...@@ -1133,7 +1121,7 @@ map_print_key(EditLine *el, el_action_t *map, const char *in)
el_bindings_t *bp; el_bindings_t *bp;
if (in[0] == '\0' || in[1] == '\0') { if (in[0] == '\0' || in[1] == '\0') {
(void) el_key__decode_str(in, outbuf, ""); (void) key__decode_str(in, outbuf, "");
for (bp = el->el_map.help; bp->name != NULL; bp++) for (bp = el->el_map.help; bp->name != NULL; bp++)
if (bp->func == map[(unsigned char) *in]) { if (bp->func == map[(unsigned char) *in]) {
(void) fprintf(el->el_outfile, (void) fprintf(el->el_outfile,
...@@ -1141,7 +1129,7 @@ map_print_key(EditLine *el, el_action_t *map, const char *in) ...@@ -1141,7 +1129,7 @@ map_print_key(EditLine *el, el_action_t *map, const char *in)
return; return;
} }
} else } else
el_key_print(el, in); key_print(el, in);
} }
...@@ -1163,20 +1151,20 @@ map_print_some_keys(EditLine *el, el_action_t *map, int first, int last) ...@@ -1163,20 +1151,20 @@ map_print_some_keys(EditLine *el, el_action_t *map, int first, int last)
if (first == last) if (first == last)
(void) fprintf(el->el_outfile, (void) fprintf(el->el_outfile,
"%-15s-> is undefined\n", "%-15s-> is undefined\n",
el_key__decode_str(firstbuf, unparsbuf, STRQQ)); key__decode_str(firstbuf, unparsbuf, STRQQ));
return; return;
} }
for (bp = el->el_map.help; bp->name != NULL; bp++) { for (bp = el->el_map.help; bp->name != NULL; bp++) {
if (bp->func == map[first]) { if (bp->func == map[first]) {
if (first == last) { if (first == last) {
(void) fprintf(el->el_outfile, "%-15s-> %s\n", (void) fprintf(el->el_outfile, "%-15s-> %s\n",
el_key__decode_str(firstbuf, unparsbuf, STRQQ), key__decode_str(firstbuf, unparsbuf, STRQQ),
bp->name); bp->name);
} else { } else {
(void) fprintf(el->el_outfile, (void) fprintf(el->el_outfile,
"%-4s to %-7s-> %s\n", "%-4s to %-7s-> %s\n",
el_key__decode_str(firstbuf, unparsbuf, STRQQ), key__decode_str(firstbuf, unparsbuf, STRQQ),
el_key__decode_str(lastbuf, extrabuf, STRQQ), key__decode_str(lastbuf, extrabuf, STRQQ),
bp->name); bp->name);
} }
return; return;
...@@ -1230,7 +1218,7 @@ map_print_all_keys(EditLine *el) ...@@ -1230,7 +1218,7 @@ map_print_all_keys(EditLine *el)
map_print_some_keys(el, el->el_map.alt, prev, i - 1); map_print_some_keys(el, el->el_map.alt, prev, i - 1);
(void) fprintf(el->el_outfile, "Multi-character bindings\n"); (void) fprintf(el->el_outfile, "Multi-character bindings\n");
el_key_print(el, ""); key_print(el, "");
(void) fprintf(el->el_outfile, "Arrow key bindings\n"); (void) fprintf(el->el_outfile, "Arrow key bindings\n");
term_print_arrow(el, ""); term_print_arrow(el, "");
} }
...@@ -1323,9 +1311,9 @@ map_bind(EditLine *el, int argc, const char **argv) ...@@ -1323,9 +1311,9 @@ map_bind(EditLine *el, int argc, const char **argv)
return (-1); return (-1);
} }
if (in[1]) if (in[1])
(void) el_key_delete(el, in); (void) key_delete(el, in);
else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN) else if (map[(unsigned char) *in] == ED_SEQUENCE_LEAD_IN)
(void) el_key_delete(el, in); (void) key_delete(el, in);
else else
map[(unsigned char) *in] = ED_UNASSIGNED; map[(unsigned char) *in] = ED_UNASSIGNED;
return (0); return (0);
...@@ -1353,9 +1341,9 @@ map_bind(EditLine *el, int argc, const char **argv) ...@@ -1353,9 +1341,9 @@ map_bind(EditLine *el, int argc, const char **argv)
return (-1); return (-1);
} }
if (key) if (key)
term_set_arrow(el, in, el_key_map_str(el, out), ntype); term_set_arrow(el, in, key_map_str(el, out), ntype);
else else
el_key_add(el, in, el_key_map_str(el, out), ntype); key_add(el, in, key_map_str(el, out), ntype);
map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN; map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
break; break;
...@@ -1366,13 +1354,13 @@ map_bind(EditLine *el, int argc, const char **argv) ...@@ -1366,13 +1354,13 @@ map_bind(EditLine *el, int argc, const char **argv)
return (-1); return (-1);
} }
if (key) if (key)
term_set_arrow(el, in, el_key_map_str(el, out), ntype); term_set_arrow(el, in, key_map_str(el, out), ntype);
else { else {
if (in[1]) { if (in[1]) {
el_key_add(el, in, el_key_map_cmd(el, cmd), ntype); key_add(el, in, key_map_cmd(el, cmd), ntype);
map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN; map[(unsigned char) *in] = ED_SEQUENCE_LEAD_IN;
} else { } else {
el_key_clear(el, map, in); key_clear(el, map, in);
map[(unsigned char) *in] = cmd; map[(unsigned char) *in] = cmd;
} }
} }
......
/* $NetBSD: map.h,v 1.7 2002/03/18 16:00:56 christos Exp $ */ /* $NetBSD: map.h,v 1.8 2003/08/07 16:44:32 agc Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
......
/* $NetBSD: parse.c,v 1.16 2003/01/21 18:40:24 christos Exp $ */ /* $NetBSD: parse.c,v 1.20 2003/12/05 13:37:48 lukem Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -36,14 +32,7 @@ ...@@ -36,14 +32,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "config.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
...@@ -59,7 +48,6 @@ __RCSID("$NetBSD: parse.c,v 1.16 2003/01/21 18:40:24 christos Exp $"); ...@@ -59,7 +48,6 @@ __RCSID("$NetBSD: parse.c,v 1.16 2003/01/21 18:40:24 christos Exp $");
* setty * setty
*/ */
#include "el.h" #include "el.h"
#include "tokenizer.h"
#include <stdlib.h> #include <stdlib.h>
private const struct { private const struct {
...@@ -87,9 +75,8 @@ parse_line(EditLine *el, const char *line) ...@@ -87,9 +75,8 @@ parse_line(EditLine *el, const char *line)
int argc; int argc;
Tokenizer *tok; Tokenizer *tok;
if (!(tok = tok_init(NULL))) tok = tok_init(NULL);
return -1; tok_str(tok, line, &argc, &argv);
tok_line(tok, line, &argc, &argv);
argc = el_parse(el, argc, argv); argc = el_parse(el, argc, argv);
tok_end(tok); tok_end(tok);
return (argc); return (argc);
...@@ -207,7 +194,7 @@ parse__escape(const char **const ptr) ...@@ -207,7 +194,7 @@ parse__escape(const char **const ptr)
c = *p; c = *p;
break; break;
} }
} else if (*p == '^' && isalpha((unsigned char) p[1])) { } else if (*p == '^') {
p++; p++;
c = (*p == '?') ? '\177' : (*p & 0237); c = (*p == '?') ? '\177' : (*p & 0237);
} else } else
...@@ -215,6 +202,7 @@ parse__escape(const char **const ptr) ...@@ -215,6 +202,7 @@ parse__escape(const char **const ptr)
*ptr = ++p; *ptr = ++p;
return (c); return (c);
} }
/* parse__string(): /* parse__string():
* Parse the escapes from in and put the raw string out * Parse the escapes from in and put the raw string out
*/ */
...@@ -237,6 +225,14 @@ parse__string(char *out, const char *in) ...@@ -237,6 +225,14 @@ parse__string(char *out, const char *in)
*out++ = n; *out++ = n;
break; break;
case 'M':
if (in[1] == '-' && in[2] != '\0') {
*out++ = '\033';
in += 2;
break;
}
/*FALLTHROUGH*/
default: default:
*out++ = *in++; *out++ = *in++;
break; break;
......
/* $NetBSD: parse.h,v 1.4 2000/09/04 22:06:31 lukem Exp $ */ /* $NetBSD: parse.h,v 1.5 2003/08/07 16:44:32 agc Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
......
/* $NetBSD: prompt.c,v 1.9 2002/03/18 16:00:56 christos Exp $ */ /* $NetBSD: prompt.c,v 1.11 2003/08/07 16:44:32 agc Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -36,14 +32,7 @@ ...@@ -36,14 +32,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "config.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
...@@ -59,7 +48,7 @@ private char *prompt_default_r(EditLine *); ...@@ -59,7 +48,7 @@ private char *prompt_default_r(EditLine *);
*/ */
private char * private char *
/*ARGSUSED*/ /*ARGSUSED*/
prompt_default(EditLine *el __attribute__((unused))) prompt_default(EditLine *el __attribute__((__unused__)))
{ {
static char a[3] = {'?', ' ', '\0'}; static char a[3] = {'?', ' ', '\0'};
...@@ -72,7 +61,7 @@ prompt_default(EditLine *el __attribute__((unused))) ...@@ -72,7 +61,7 @@ prompt_default(EditLine *el __attribute__((unused)))
*/ */
private char * private char *
/*ARGSUSED*/ /*ARGSUSED*/
prompt_default_r(EditLine *el __attribute__((unused))) prompt_default_r(EditLine *el __attribute__((__unused__)))
{ {
static char a[1] = {'\0'}; static char a[1] = {'\0'};
...@@ -127,7 +116,7 @@ prompt_init(EditLine *el) ...@@ -127,7 +116,7 @@ prompt_init(EditLine *el)
*/ */
protected void protected void
/*ARGSUSED*/ /*ARGSUSED*/
prompt_end(EditLine *el __attribute__((unused))) prompt_end(EditLine *el __attribute__((__unused__)))
{ {
} }
......
/* $NetBSD: prompt.h,v 1.5 2000/09/04 22:06:31 lukem Exp $ */ /* $NetBSD: prompt.h,v 1.6 2003/08/07 16:44:32 agc Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
......
/* $NetBSD: read.c,v 1.24 2002/11/20 16:50:08 christos Exp $ */ /* $NetBSD: read.c,v 1.35 2005/03/09 23:55:02 christos Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -36,20 +32,14 @@ ...@@ -36,20 +32,14 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "config.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 <errno.h> #include <errno.h>
#include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include "el.h" #include "el.h"
...@@ -97,6 +87,10 @@ el_read_getfn(EditLine *el) ...@@ -97,6 +87,10 @@ el_read_getfn(EditLine *el)
} }
#ifndef MIN
#define MIN(A,B) ((A) < (B) ? (A) : (B))
#endif
#ifdef DEBUG_EDIT #ifdef DEBUG_EDIT
private void private void
read_debug(EditLine *el) read_debug(EditLine *el)
...@@ -121,11 +115,7 @@ read_debug(EditLine *el) ...@@ -121,11 +115,7 @@ read_debug(EditLine *el)
*/ */
/* ARGSUSED */ /* ARGSUSED */
private int private int
read__fixio(int fd read__fixio(int fd __attribute__((__unused__)), int e)
#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) {
...@@ -190,18 +180,10 @@ read_preread(EditLine *el) ...@@ -190,18 +180,10 @@ read_preread(EditLine *el)
{ {
int chrs = 0; int chrs = 0;
if (el->el_chared.c_macro.nline) {
el_free((ptr_t) el->el_chared.c_macro.nline);
el->el_chared.c_macro.nline = NULL;
}
if (el->el_tty.t_mode == ED_IO) if (el->el_tty.t_mode == ED_IO)
return (0); return (0);
#ifdef FIONREAD #ifdef FIONREAD
#ifndef MIN // definition of MIN is lacking on hpux..
#define MIN(x,y) (((x)<(y))?(x):(y))
#endif
(void) ioctl(el->el_infd, FIONREAD, (ioctl_t) & chrs); (void) ioctl(el->el_infd, FIONREAD, (ioctl_t) & chrs);
if (chrs > 0) { if (chrs > 0) {
char buf[EL_BUFSIZ]; char buf[EL_BUFSIZ];
...@@ -210,8 +192,7 @@ read_preread(EditLine *el) ...@@ -210,8 +192,7 @@ read_preread(EditLine *el)
(size_t) MIN(chrs, EL_BUFSIZ - 1)); (size_t) MIN(chrs, EL_BUFSIZ - 1));
if (chrs > 0) { if (chrs > 0) {
buf[chrs] = '\0'; buf[chrs] = '\0';
el->el_chared.c_macro.nline = strdup(buf); el_push(el, buf);
el_push(el, el->el_chared.c_macro.nline);
} }
} }
#endif /* FIONREAD */ #endif /* FIONREAD */
...@@ -230,11 +211,12 @@ el_push(EditLine *el, char *str) ...@@ -230,11 +211,12 @@ el_push(EditLine *el, char *str)
if (str != NULL && ma->level + 1 < EL_MAXMACRO) { if (str != NULL && ma->level + 1 < EL_MAXMACRO) {
ma->level++; ma->level++;
ma->macro[ma->level] = str; if ((ma->macro[ma->level] = el_strdup(str)) != NULL)
} else { return;
term_beep(el); ma->level--;
term__flush();
} }
term_beep(el);
term__flush();
} }
...@@ -266,7 +248,7 @@ read_getcmd(EditLine *el, el_action_t *cmdnum, char *ch) ...@@ -266,7 +248,7 @@ read_getcmd(EditLine *el, el_action_t *cmdnum, char *ch)
cmd = el->el_map.current[(unsigned char) *ch]; cmd = el->el_map.current[(unsigned char) *ch];
if (cmd == ED_SEQUENCE_LEAD_IN) { if (cmd == ED_SEQUENCE_LEAD_IN) {
key_value_t val; key_value_t val;
switch (el_key_get(el, ch, &val)) { switch (key_get(el, ch, &val)) {
case XK_CMD: case XK_CMD:
cmd = val.cmd; cmd = val.cmd;
break; break;
...@@ -331,14 +313,16 @@ el_getc(EditLine *el, char *cp) ...@@ -331,14 +313,16 @@ el_getc(EditLine *el, char *cp)
if (ma->level < 0) if (ma->level < 0)
break; break;
if (*ma->macro[ma->level] == 0) { if (ma->macro[ma->level][ma->offset] == '\0') {
ma->level--; el_free(ma->macro[ma->level--]);
ma->offset = 0;
continue; continue;
} }
*cp = *ma->macro[ma->level]++ & 0377; *cp = ma->macro[ma->level][ma->offset++] & 0377;
if (*ma->macro[ma->level] == 0) { /* Needed for QuoteMode if (ma->macro[ma->level][ma->offset] == '\0') {
* On */ /* Needed for QuoteMode On */
ma->level--; el_free(ma->macro[ma->level--]);
ma->offset = 0;
} }
return (1); return (1);
} }
...@@ -359,6 +343,35 @@ el_getc(EditLine *el, char *cp) ...@@ -359,6 +343,35 @@ el_getc(EditLine *el, char *cp)
return (num_read); return (num_read);
} }
protected void
read_prepare(EditLine *el)
{
if (el->el_flags & HANDLE_SIGNALS)
sig_set(el);
if (el->el_flags & NO_TTY)
return;
if ((el->el_flags & (UNBUFFERED|EDIT_DISABLED)) == UNBUFFERED)
tty_rawmode(el);
/* 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 */
ch_reset(el);
re_refresh(el); /* print the prompt */
if (el->el_flags & UNBUFFERED)
term__flush();
}
protected void
read_finish(EditLine *el)
{
if ((el->el_flags & UNBUFFERED) == 0)
(void) tty_cookedmode(el);
if (el->el_flags & HANDLE_SIGNALS)
sig_clr(el);
}
public const char * public const char *
el_gets(EditLine *el, int *nread) el_gets(EditLine *el, int *nread)
...@@ -367,13 +380,11 @@ el_gets(EditLine *el, int *nread) ...@@ -367,13 +380,11 @@ el_gets(EditLine *el, int *nread)
el_action_t cmdnum = 0; el_action_t cmdnum = 0;
int num; /* how many chars we have read at NL */ int num; /* how many chars we have read at NL */
char ch; char ch;
int crlf = 0;
#ifdef FIONREAD #ifdef FIONREAD
c_macro_t *ma = &el->el_chared.c_macro; c_macro_t *ma = &el->el_chared.c_macro;
#endif /* FIONREAD */ #endif /* FIONREAD */
if (el->el_flags & HANDLE_SIGNALS)
sig_set(el);
if (el->el_flags & NO_TTY) { if (el->el_flags & NO_TTY) {
char *cp = el->el_line.buffer; char *cp = el->el_line.buffer;
size_t idx; size_t idx;
...@@ -387,6 +398,8 @@ el_gets(EditLine *el, int *nread) ...@@ -387,6 +398,8 @@ el_gets(EditLine *el, int *nread)
cp = &el->el_line.buffer[idx]; cp = &el->el_line.buffer[idx];
} }
cp++; cp++;
if (el->el_flags & UNBUFFERED)
break;
if (cp[-1] == '\r' || cp[-1] == '\n') if (cp[-1] == '\r' || cp[-1] == '\n')
break; break;
} }
...@@ -398,12 +411,6 @@ el_gets(EditLine *el, int *nread) ...@@ -398,12 +411,6 @@ el_gets(EditLine *el, int *nread)
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 */
ch_reset(el);
#ifdef FIONREAD #ifdef FIONREAD
if (el->el_tty.t_mode == EX_IO && ma->level < 0) { if (el->el_tty.t_mode == EX_IO && ma->level < 0) {
...@@ -420,11 +427,16 @@ el_gets(EditLine *el, int *nread) ...@@ -420,11 +427,16 @@ el_gets(EditLine *el, int *nread)
} }
#endif /* FIONREAD */ #endif /* FIONREAD */
re_refresh(el); /* print the prompt */ if ((el->el_flags & UNBUFFERED) == 0)
read_prepare(el);
if (el->el_flags & EDIT_DISABLED) { if (el->el_flags & EDIT_DISABLED) {
char *cp = el->el_line.buffer; char *cp;
size_t idx; size_t idx;
if ((el->el_flags & UNBUFFERED) == 0)
cp = el->el_line.buffer;
else
cp = el->el_line.lastchar;
term__flush(); term__flush();
...@@ -439,7 +451,10 @@ el_gets(EditLine *el, int *nread) ...@@ -439,7 +451,10 @@ el_gets(EditLine *el, int *nread)
if (*cp == 4) /* ought to be stty eof */ if (*cp == 4) /* ought to be stty eof */
break; break;
cp++; cp++;
if (cp[-1] == '\r' || cp[-1] == '\n') crlf = cp[-1] == '\r' || cp[-1] == '\n';
if (el->el_flags & UNBUFFERED)
break;
if (crlf)
break; break;
} }
...@@ -463,8 +478,7 @@ el_gets(EditLine *el, int *nread) ...@@ -463,8 +478,7 @@ el_gets(EditLine *el, int *nread)
#endif /* DEBUG_READ */ #endif /* DEBUG_READ */
break; break;
} }
if ((unsigned int)cmdnum >= (unsigned int)(el->el_map.nfunc)) if ((uint)cmdnum >= el->el_map.nfunc) { /* BUG CHECK command */
{ /* 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);
...@@ -494,7 +508,7 @@ el_gets(EditLine *el, int *nread) ...@@ -494,7 +508,7 @@ el_gets(EditLine *el, int *nread)
el->el_chared.c_redo.pos < el->el_chared.c_redo.lim) { el->el_chared.c_redo.pos < el->el_chared.c_redo.lim) {
if (cmdnum == VI_DELETE_PREV_CHAR && if (cmdnum == VI_DELETE_PREV_CHAR &&
el->el_chared.c_redo.pos != el->el_chared.c_redo.buf el->el_chared.c_redo.pos != el->el_chared.c_redo.buf
&& isprint(el->el_chared.c_redo.pos[-1])) && isprint((unsigned char)el->el_chared.c_redo.pos[-1]))
el->el_chared.c_redo.pos--; el->el_chared.c_redo.pos--;
else else
*el->el_chared.c_redo.pos++ = ch; *el->el_chared.c_redo.pos++ = ch;
...@@ -536,7 +550,13 @@ el_gets(EditLine *el, int *nread) ...@@ -536,7 +550,13 @@ el_gets(EditLine *el, int *nread)
continue; /* keep going... */ continue; /* keep going... */
case CC_EOF: /* end of file typed */ case CC_EOF: /* end of file typed */
num = 0; if ((el->el_flags & UNBUFFERED) == 0)
num = 0;
else if (num == -1) {
*el->el_line.lastchar++ = CONTROL('d');
el->el_line.cursor = el->el_line.lastchar;
num = 1;
}
break; break;
case CC_NEWLINE: /* normal end of line */ case CC_NEWLINE: /* normal end of line */
...@@ -567,14 +587,19 @@ el_gets(EditLine *el, int *nread) ...@@ -567,14 +587,19 @@ el_gets(EditLine *el, int *nread)
el->el_state.argument = 1; el->el_state.argument = 1;
el->el_state.doingarg = 0; el->el_state.doingarg = 0;
el->el_chared.c_vcmd.action = NOP; el->el_chared.c_vcmd.action = NOP;
if (el->el_flags & UNBUFFERED)
break;
} }
term__flush(); /* flush any buffered output */ 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); if ((el->el_flags & UNBUFFERED) == 0) {
if (el->el_flags & HANDLE_SIGNALS) read_finish(el);
sig_clr(el); if (nread)
if (nread) *nread = num;
*nread = num; } else {
if (nread)
*nread = el->el_line.lastchar - el->el_line.buffer;
}
return (num ? el->el_line.buffer : NULL); return (num ? el->el_line.buffer : NULL);
} }
/* $NetBSD: read.h,v 1.1 2001/09/27 19:29:50 christos Exp $ */ /* $NetBSD: read.h,v 1.4 2004/02/27 14:52:18 christos Exp $ */
/*- /*-
* Copyright (c) 2001 The NetBSD Foundation, Inc. * Copyright (c) 2001 The NetBSD Foundation, Inc.
...@@ -49,6 +49,8 @@ typedef struct el_read_t { ...@@ -49,6 +49,8 @@ typedef struct el_read_t {
} el_read_t; } el_read_t;
protected int read_init(EditLine *); protected int read_init(EditLine *);
protected void read_prepare(EditLine *);
protected void read_finish(EditLine *);
protected int el_read_setfn(EditLine *, el_rfunc_t); protected int el_read_setfn(EditLine *, el_rfunc_t);
protected el_rfunc_t el_read_getfn(EditLine *); protected el_rfunc_t el_read_getfn(EditLine *);
......
This diff is collapsed.
/* $NetBSD: refresh.c,v 1.24 2003/03/10 21:18:49 christos Exp $ */ /* $NetBSD: refresh.c,v 1.26 2003/08/07 16:44:33 agc Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -36,14 +32,7 @@ ...@@ -36,14 +32,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "config.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
...@@ -57,8 +46,8 @@ __RCSID("$NetBSD: refresh.c,v 1.24 2003/03/10 21:18:49 christos Exp $"); ...@@ -57,8 +46,8 @@ __RCSID("$NetBSD: refresh.c,v 1.24 2003/03/10 21:18:49 christos Exp $");
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 *el, char *, int, int, char *, int); private void re_insert (EditLine *, char *, int, int, char *, int);
private void re_delete(EditLine *el, char *, int, int, int); private void re_delete(EditLine *, 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);
...@@ -338,8 +327,8 @@ re_goto_bottom(EditLine *el) ...@@ -338,8 +327,8 @@ re_goto_bottom(EditLine *el)
*/ */
private void private void
/*ARGSUSED*/ /*ARGSUSED*/
re_insert(EditLine *el __attribute__((unused)), re_insert(EditLine *el __attribute__((__unused__)),
char *d, int dat, int dlen, char *s, int num) char *d, int dat, int dlen, char *s, int num)
{ {
char *a, *b; char *a, *b;
...@@ -382,8 +371,8 @@ re_insert(EditLine *el __attribute__((unused)), ...@@ -382,8 +371,8 @@ re_insert(EditLine *el __attribute__((unused)),
*/ */
private void private void
/*ARGSUSED*/ /*ARGSUSED*/
re_delete(EditLine *el __attribute__((unused)), re_delete(EditLine *el __attribute__((__unused__)),
char *d, int dat, int dlen, int num) char *d, int dat, int dlen, int num)
{ {
char *a, *b; char *a, *b;
......
/* $NetBSD: refresh.h,v 1.4 2001/01/10 07:45:42 jdolecek Exp $ */ /* $NetBSD: refresh.h,v 1.5 2003/08/07 16:44:33 agc Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
......
/* $NetBSD: search.c,v 1.14 2002/11/20 16:50:08 christos Exp $ */ /* $NetBSD: search.c,v 1.20 2004/11/04 01:16:03 christos Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -36,21 +32,13 @@ ...@@ -36,21 +32,13 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "config.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 <stdlib.h> #include <stdlib.h>
#if defined(REGEX) #if defined(REGEX)
#include <sys/types.h>
#include <regex.h> #include <regex.h>
#elif defined(REGEXP) #elif defined(REGEXP)
#include <regexp.h> #include <regexp.h>
...@@ -227,8 +215,11 @@ ce_inc_search(EditLine *el, int dir) ...@@ -227,8 +215,11 @@ ce_inc_search(EditLine *el, int dir)
if (el->el_search.patlen == 0) { /* first round */ if (el->el_search.patlen == 0) { /* first round */
pchar = ':'; pchar = ':';
#ifdef ANCHOR #ifdef ANCHOR
#define LEN 2
el->el_search.patbuf[el->el_search.patlen++] = '.'; el->el_search.patbuf[el->el_search.patlen++] = '.';
el->el_search.patbuf[el->el_search.patlen++] = '*'; el->el_search.patbuf[el->el_search.patlen++] = '*';
#else
#define LEN 0
#endif #endif
} }
done = redo = 0; done = redo = 0;
...@@ -237,7 +228,7 @@ ce_inc_search(EditLine *el, int dir) ...@@ -237,7 +228,7 @@ ce_inc_search(EditLine *el, int dir)
*cp; *el->el_line.lastchar++ = *cp++) *cp; *el->el_line.lastchar++ = *cp++)
continue; continue;
*el->el_line.lastchar++ = pchar; *el->el_line.lastchar++ = pchar;
for (cp = &el->el_search.patbuf[1]; for (cp = &el->el_search.patbuf[LEN];
cp < &el->el_search.patbuf[el->el_search.patlen]; cp < &el->el_search.patbuf[el->el_search.patlen];
*el->el_line.lastchar++ = *cp++) *el->el_line.lastchar++ = *cp++)
continue; continue;
...@@ -250,7 +241,7 @@ ce_inc_search(EditLine *el, int dir) ...@@ -250,7 +241,7 @@ ce_inc_search(EditLine *el, int dir)
switch (el->el_map.current[(unsigned char) ch]) { switch (el->el_map.current[(unsigned char) ch]) {
case ED_INSERT: case ED_INSERT:
case ED_DIGIT: case ED_DIGIT:
if (el->el_search.patlen > EL_BUFSIZ - 3) if (el->el_search.patlen >= EL_BUFSIZ - LEN)
term_beep(el); term_beep(el);
else { else {
el->el_search.patbuf[el->el_search.patlen++] = el->el_search.patbuf[el->el_search.patlen++] =
...@@ -271,8 +262,9 @@ ce_inc_search(EditLine *el, int dir) ...@@ -271,8 +262,9 @@ ce_inc_search(EditLine *el, int dir)
redo++; redo++;
break; break;
case EM_DELETE_PREV_CHAR:
case ED_DELETE_PREV_CHAR: case ED_DELETE_PREV_CHAR:
if (el->el_search.patlen > 1) if (el->el_search.patlen > LEN)
done++; done++;
else else
term_beep(el); term_beep(el);
...@@ -287,17 +279,18 @@ ce_inc_search(EditLine *el, int dir) ...@@ -287,17 +279,18 @@ ce_inc_search(EditLine *el, int dir)
case 0027: /* ^W: Append word */ case 0027: /* ^W: Append word */
/* No can do if globbing characters in pattern */ /* No can do if globbing characters in pattern */
for (cp = &el->el_search.patbuf[1];; cp++) for (cp = &el->el_search.patbuf[LEN];; cp++)
if (cp >= &el->el_search.patbuf[el->el_search.patlen]) { if (cp >= &el->el_search.patbuf[
el->el_search.patlen]) {
el->el_line.cursor += el->el_line.cursor +=
el->el_search.patlen - 1; el->el_search.patlen - LEN - 1;
cp = c__next_word(el->el_line.cursor, cp = c__next_word(el->el_line.cursor,
el->el_line.lastchar, 1, el->el_line.lastchar, 1,
ce__isword); ce__isword);
while (el->el_line.cursor < cp && while (el->el_line.cursor < cp &&
*el->el_line.cursor != '\n') { *el->el_line.cursor != '\n') {
if (el->el_search.patlen > if (el->el_search.patlen >=
EL_BUFSIZ - 3) { EL_BUFSIZ - LEN) {
term_beep(el); term_beep(el);
break; break;
} }
...@@ -339,13 +332,13 @@ ce_inc_search(EditLine *el, int dir) ...@@ -339,13 +332,13 @@ ce_inc_search(EditLine *el, int dir)
/* Can't search if unmatched '[' */ /* Can't search if unmatched '[' */
for (cp = &el->el_search.patbuf[el->el_search.patlen-1], for (cp = &el->el_search.patbuf[el->el_search.patlen-1],
ch = ']'; ch = ']';
cp > el->el_search.patbuf; cp >= &el->el_search.patbuf[LEN];
cp--) cp--)
if (*cp == '[' || *cp == ']') { if (*cp == '[' || *cp == ']') {
ch = *cp; ch = *cp;
break; break;
} }
if (el->el_search.patlen > 1 && ch != '[') { if (el->el_search.patlen > LEN && ch != '[') {
if (redo && newdir == dir) { if (redo && newdir == dir) {
if (pchar == '?') { /* wrap around */ if (pchar == '?') { /* wrap around */
el->el_history.eventno = el->el_history.eventno =
...@@ -375,9 +368,8 @@ ce_inc_search(EditLine *el, int dir) ...@@ -375,9 +368,8 @@ ce_inc_search(EditLine *el, int dir)
'\0'; '\0';
if (el->el_line.cursor < el->el_line.buffer || if (el->el_line.cursor < el->el_line.buffer ||
el->el_line.cursor > el->el_line.lastchar || el->el_line.cursor > el->el_line.lastchar ||
(ret = ce_search_line(el, (ret = ce_search_line(el, newdir))
&el->el_search.patbuf[1], == CC_ERROR) {
newdir)) == CC_ERROR) {
/* avoid c_setpat */ /* avoid c_setpat */
el->el_state.lastcmd = el->el_state.lastcmd =
(el_action_t) newdir; (el_action_t) newdir;
...@@ -390,11 +382,11 @@ ce_inc_search(EditLine *el, int dir) ...@@ -390,11 +382,11 @@ ce_inc_search(EditLine *el, int dir)
el->el_line.lastchar : el->el_line.lastchar :
el->el_line.buffer; el->el_line.buffer;
(void) ce_search_line(el, (void) ce_search_line(el,
&el->el_search.patbuf[1],
newdir); newdir);
} }
} }
el->el_search.patbuf[--el->el_search.patlen] = el->el_search.patlen -= LEN;
el->el_search.patbuf[el->el_search.patlen] =
'\0'; '\0';
if (ret == CC_ERROR) { if (ret == CC_ERROR) {
term_beep(el); term_beep(el);
...@@ -453,9 +445,6 @@ cv_search(EditLine *el, int dir) ...@@ -453,9 +445,6 @@ cv_search(EditLine *el, int dir)
#ifdef ANCHOR #ifdef ANCHOR
tmpbuf[0] = '.'; tmpbuf[0] = '.';
tmpbuf[1] = '*'; tmpbuf[1] = '*';
#define LEN 2
#else
#define LEN 0
#endif #endif
tmplen = LEN; tmplen = LEN;
...@@ -521,24 +510,39 @@ cv_search(EditLine *el, int dir) ...@@ -521,24 +510,39 @@ cv_search(EditLine *el, int dir)
* Look for a pattern inside a line * Look for a pattern inside a line
*/ */
protected el_action_t protected el_action_t
ce_search_line(EditLine *el, char *pattern, int dir) ce_search_line(EditLine *el, int dir)
{ {
char *cp; char *cp = el->el_line.cursor;
char *pattern = el->el_search.patbuf;
char oc, *ocp;
#ifdef ANCHOR
ocp = &pattern[1];
oc = *ocp;
*ocp = '^';
#else
ocp = pattern;
oc = *ocp;
#endif
if (dir == ED_SEARCH_PREV_HISTORY) { if (dir == ED_SEARCH_PREV_HISTORY) {
for (cp = el->el_line.cursor; cp >= el->el_line.buffer; cp--) for (; cp >= el->el_line.buffer; cp--) {
if (el_match(cp, pattern)) { if (el_match(cp, ocp)) {
*ocp = oc;
el->el_line.cursor = cp; el->el_line.cursor = cp;
return (CC_NORM); return (CC_NORM);
} }
}
*ocp = oc;
return (CC_ERROR); return (CC_ERROR);
} else { } else {
for (cp = el->el_line.cursor; *cp != '\0' && for (; *cp != '\0' && cp < el->el_line.limit; cp++) {
cp < el->el_line.limit; cp++) if (el_match(cp, ocp)) {
if (el_match(cp, pattern)) { *ocp = oc;
el->el_line.cursor = cp; el->el_line.cursor = cp;
return (CC_NORM); return (CC_NORM);
} }
}
*ocp = oc;
return (CC_ERROR); return (CC_ERROR);
} }
} }
......
/* $NetBSD: search.h,v 1.6 2002/11/15 14:32:34 christos Exp $ */ /* $NetBSD: search.h,v 1.8 2003/10/18 23:27:36 christos Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -63,7 +59,7 @@ protected int c_hmatch(EditLine *, const char *); ...@@ -63,7 +59,7 @@ protected int c_hmatch(EditLine *, const char *);
protected void c_setpat(EditLine *); protected void c_setpat(EditLine *);
protected el_action_t ce_inc_search(EditLine *, int); 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 *, 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(EditLine *, int, int, int, int); protected el_action_t cv_csearch(EditLine *, int, int, int, int);
......
/* $NetBSD: sig.c,v 1.10 2003/03/10 00:58:05 christos Exp $ */ /* $NetBSD: sig.c,v 1.11 2003/08/07 16:44:33 agc Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -36,14 +32,7 @@ ...@@ -36,14 +32,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include "config.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.
......
/* $NetBSD: sig.h,v 1.4 2003/03/10 00:58:05 christos Exp $ */ /* $NetBSD: sig.h,v 1.5 2003/08/07 16:44:33 agc Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
......
/* $NetBSD: strlcpy.c,v 1.14 2003/10/27 00:12:42 lukem Exp $ */
/* $OpenBSD: strlcpy.c,v 1.7 2003/04/12 21:56:39 millert Exp $ */
/*
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE
* FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include <config.h>
#include <sys/types.h>
#include <assert.h>
#include <string.h> #include <string.h>
#ifndef HAVE_STRLCPY #ifdef _LIBC
size_t strlcpy(char *dst, const char *src, size_t size) # ifdef __weak_alias
__weak_alias(strlcpy, _strlcpy)
# endif
#endif
#if !HAVE_STRLCPY
/*
* 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
#ifdef _LIBC
_strlcpy(dst, src, siz)
#else
strlcpy(dst, src, siz)
#endif
char *dst;
const char *src;
size_t siz;
{ {
if(size) { char *d = dst;
strncpy(dst, src, size-1); const char *s = src;
dst[size-1] = '\0'; size_t n = siz;
} else {
dst[0] = '\0'; _DIAGASSERT(dst != NULL);
_DIAGASSERT(src != NULL);
/* Copy as many bytes as will fit */
if (n != 0 && --n != 0) {
do {
if ((*d++ = *s++) == 0)
break;
} while (--n != 0);
} }
return strlen(src);
}
size_t strlcat(char *dst, const char *src, size_t size) /* Not enough room in dst, add NUL and traverse rest of src */
{ if (n == 0) {
int dl = strlen(dst); if (siz != 0)
int sz = size-dl-1; *d = '\0'; /* NUL-terminate dst */
while (*s++)
if(sz >= 0) { ;
strncat(dst, src, sz);
dst[sz] = '\0';
} }
return dl+strlen(src); return(s - src - 1); /* count does not include NUL */
} }
#endif #endif
/* $NetBSD: sys.h,v 1.6 2003/03/10 00:57:38 christos Exp $ */ /* $NetBSD: sys.h,v 1.9 2004/01/17 17:57:40 christos Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
...@@ -48,6 +44,28 @@ ...@@ -48,6 +44,28 @@
#include <sys/cdefs.h> #include <sys/cdefs.h>
#endif #endif
#if !defined(__attribute__) && (defined(__cplusplus) || !defined(__GNUC__) || __GNUC__ == 2 && __GNUC_MINOR__ < 8)
# define __attribute__(A)
#endif
#ifndef __P
# define __P(x) x
#endif
#ifndef _DIAGASSERT
# define _DIAGASSERT(x)
#endif
#ifndef __BEGIN_DECLS
# ifdef __cplusplus
# define __BEGIN_DECLS extern "C" {
# define __END_DECLS }
# else
# define __BEGIN_DECLS
# define __END_DECLS
# endif
#endif
#ifndef public #ifndef public
# define public /* Externally visible functions/variables */ # define public /* Externally visible functions/variables */
#endif #endif
...@@ -61,6 +79,10 @@ ...@@ -61,6 +79,10 @@
/* When we want to hide everything */ /* When we want to hide everything */
#endif #endif
#ifndef HAVE_U_INT32_T
typedef unsigned int u_int32_t;
#endif
#ifndef _PTR_T #ifndef _PTR_T
# define _PTR_T # define _PTR_T
typedef void *ptr_t; typedef void *ptr_t;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/* $NetBSD: tty.h,v 1.9 2002/03/18 16:01:01 christos Exp $ */ /* $NetBSD: tty.h,v 1.10 2003/08/07 16:44:34 agc Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
...@@ -15,11 +15,7 @@ ...@@ -15,11 +15,7 @@
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software * 3. Neither the name of the University nor the names of its contributors
* 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 * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment