Annotation of src/lib/libedit/el.h, Revision 1.31
1.31 ! christos 1: /* $NetBSD: el.h,v 1.30 2016/02/16 19:08:41 christos Exp $ */
1.2 lukem 2:
1.1 cgd 3: /*-
4: * Copyright (c) 1992, 1993
5: * The Regents of the University of California. All rights reserved.
6: *
7: * This code is derived from software contributed to Berkeley by
8: * Christos Zoulas of Cornell University.
9: *
10: * Redistribution and use in source and binary forms, with or without
11: * modification, are permitted provided that the following conditions
12: * are met:
13: * 1. Redistributions of source code must retain the above copyright
14: * notice, this list of conditions and the following disclaimer.
15: * 2. Redistributions in binary form must reproduce the above copyright
16: * notice, this list of conditions and the following disclaimer in the
17: * documentation and/or other materials provided with the distribution.
1.14 agc 18: * 3. Neither the name of the University nor the names of its contributors
1.1 cgd 19: * may be used to endorse or promote products derived from this software
20: * without specific prior written permission.
21: *
22: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32: * SUCH DAMAGE.
33: *
34: * @(#)el.h 8.1 (Berkeley) 6/4/93
35: */
36:
37: /*
38: * el.h: Internal structures.
39: */
40: #ifndef _h_el
1.6 lukem 41: #define _h_el
1.1 cgd 42: /*
43: * Local defaults
44: */
1.6 lukem 45: #define KSHVI
46: #define VIDEFAULT
47: #define ANCHOR
1.1 cgd 48:
1.29 christos 49: #include "histedit.h"
50: #include "chartype.h"
1.1 cgd 51: #include <stdio.h>
52: #include <sys/types.h>
53:
1.25 christos 54: #define EL_BUFSIZ ((size_t)1024) /* Maximum line size */
1.1 cgd 55:
1.15 christos 56: #define HANDLE_SIGNALS 0x01
57: #define NO_TTY 0x02
58: #define EDIT_DISABLED 0x04
59: #define UNBUFFERED 0x08
1.19 christos 60: #define CHARSET_IS_UTF8 0x10
1.20 christos 61: #define NARROW_HISTORY 0x40
1.21 christos 62: #define NARROW_READ 0x80
1.1 cgd 63:
64: typedef unsigned char el_action_t; /* Index to command array */
65:
66: typedef struct coord_t { /* Position on the screen */
1.6 lukem 67: int h;
68: int v;
1.1 cgd 69: } coord_t;
70:
71: typedef struct el_line_t {
1.19 christos 72: Char *buffer; /* Input line */
73: Char *cursor; /* Cursor position */
74: Char *lastchar; /* Last character */
75: const Char *limit; /* Max position */
1.1 cgd 76: } el_line_t;
77:
78: /*
79: * Editor state
80: */
81: typedef struct el_state_t {
1.6 lukem 82: int inputmode; /* What mode are we in? */
83: int doingarg; /* Are we getting an argument? */
84: int argument; /* Numeric argument */
85: int metanext; /* Is the next char a meta char */
86: el_action_t lastcmd; /* Previous command */
1.13 christos 87: el_action_t thiscmd; /* this command */
1.19 christos 88: Char thisch; /* char that generated it */
1.1 cgd 89: } el_state_t;
90:
91: /*
92: * Until we come up with something better...
93: */
1.6 lukem 94: #define el_malloc(a) malloc(a)
95: #define el_realloc(a,b) realloc(a, b)
96: #define el_free(a) free(a)
1.1 cgd 97:
98: #include "tty.h"
99: #include "prompt.h"
1.24 christos 100: #include "keymacro.h"
1.23 christos 101: #include "terminal.h"
1.1 cgd 102: #include "refresh.h"
103: #include "chared.h"
104: #include "search.h"
105: #include "hist.h"
1.30 christos 106: #include "fcns.h" /* el_func_t is needed for map.h */
1.1 cgd 107: #include "map.h"
108: #include "sig.h"
1.9 christos 109: #include "read.h"
1.1 cgd 110:
111: struct editline {
1.19 christos 112: Char *el_prog; /* the program name */
1.17 christos 113: FILE *el_infile; /* Stdio stuff */
1.6 lukem 114: FILE *el_outfile; /* Stdio stuff */
115: FILE *el_errfile; /* Stdio stuff */
116: int el_infd; /* Input file descriptor */
1.22 christos 117: int el_outfd; /* Output file descriptor */
118: int el_errfd; /* Error file descriptor */
1.6 lukem 119: int el_flags; /* Various flags. */
1.18 christos 120: int el_errno; /* Local copy of errno */
1.6 lukem 121: coord_t el_cursor; /* Cursor location */
1.19 christos 122: Char **el_display; /* Real screen image = what is there */
123: Char **el_vdisplay; /* Virtual screen image = what we see */
1.10 christos 124: void *el_data; /* Client data */
1.6 lukem 125: el_line_t el_line; /* The current line information */
126: el_state_t el_state; /* Current editor state */
1.23 christos 127: el_terminal_t el_terminal; /* Terminal dependent stuff */
1.6 lukem 128: el_tty_t el_tty; /* Tty dependent stuff */
129: el_refresh_t el_refresh; /* Refresh stuff */
130: el_prompt_t el_prompt; /* Prompt stuff */
131: el_prompt_t el_rprompt; /* Prompt stuff */
132: el_chared_t el_chared; /* Characted editor stuff */
133: el_map_t el_map; /* Key mapping stuff */
1.24 christos 134: el_keymacro_t el_keymacro; /* Key binding stuff */
1.6 lukem 135: el_history_t el_history; /* History stuff */
136: el_search_t el_search; /* Search stuff */
137: el_signal_t el_signal; /* Signal handling stuff */
1.9 christos 138: el_read_t el_read; /* Character reading stuff */
1.19 christos 139: #ifdef WIDECHAR
140: ct_buffer_t el_scratch; /* Scratch conversion buffer */
141: ct_buffer_t el_lgcyconv; /* Buffer for legacy wrappers */
142: LineInfo el_lgcylinfo; /* Legacy LineInfo buffer */
143: #endif
1.1 cgd 144: };
1.4 lukem 145:
1.19 christos 146: protected int el_editmode(EditLine *, int, const Char **);
1.1 cgd 147:
1.7 christos 148: #ifdef DEBUG
1.12 christos 149: #define EL_ABORT(a) do { \
150: fprintf(el->el_errfile, "%s, %d: ", \
151: __FILE__, __LINE__); \
152: fprintf a; \
153: abort(); \
154: } while( /*CONSTCOND*/0);
1.7 christos 155: #else
156: #define EL_ABORT(a) abort()
157: #endif
1.1 cgd 158: #endif /* _h_el */
CVSweb <webmaster@jp.NetBSD.org>