-
Notifications
You must be signed in to change notification settings - Fork 41
/
ed.h
258 lines (228 loc) · 9.12 KB
/
ed.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
/*
* ed.h: Editor declarations and globals
*/
/*-
* Copyright (c) 1980, 1991 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. 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.
*/
#ifndef _h_ed
#define _h_ed
#ifndef EXTERN
# define EXTERN extern
#endif
#define MAXMACROLEVELS 10 /* max number of nested kbd macros */
#ifndef WINNT_NATIVE
# define NT_NUM_KEYS 256
#endif /* WINNT_NATIVE */
#ifdef __QNXNTO__
#undef min
#undef max
#endif
/****************************************************************************/
/* stuff for the different states returned by the character editor routines */
/****************************************************************************/
#define CCRETVAL char /* size needed for the different char editor */
/* return values */
#define KEYCMD unsigned char /* size needed to index into CcFuncTbl */
/* Must be unsigned */
typedef CCRETVAL(*PFCmd) (Char); /* pointer to function returning CCRETVAL */
struct KeyFuncs { /* for the "bind" shell command */
const char *name; /* function name for bind command */
int func; /* function numeric value */
const char *desc; /* description of function */
};
extern PFCmd CcFuncTbl[]; /* table of available commands */
extern KEYCMD CcKeyMap[]; /* keymap table, each index into above tbl */
extern KEYCMD CcAltMap[]; /* Alt keymap table */
extern KEYCMD CcEmacsMap[]; /* keymap table for Emacs default bindings */
extern KEYCMD CcViCmdMap[]; /* for Vi command mode defaults */
extern struct KeyFuncs FuncNames[]; /* string names vs. CcFuncTbl indices */
extern KEYCMD NumFuns; /* number of KEYCMDs in above table */
#define CC_ERROR 100 /* there should NOT be 100 different... */
#define CC_FATAL 101 /* fatal error: inconsistant, must
* reset */
#define CC_NORM 0
#define CC_NEWLINE 1
#define CC_EOF 2
#define CC_COMPLETE 3
#define CC_LIST_CHOICES 4
#define CC_LIST_GLOB 5
#define CC_EXPAND_GLOB 6
#define CC_HELPME 9
#define CC_CORRECT 10
#define CC_WHICH 11
#define CC_ARGHACK 12
#define CC_CORRECT_L 13
#define CC_REFRESH 14
#define CC_EXPAND_VARS 15
#define CC_NORMALIZE_PATH 16
#define CC_LIST_ALL 17
#define CC_COMPLETE_ALL 18
#define CC_COMPLETE_FWD 19
#define CC_COMPLETE_BACK 20
#define CC_NORMALIZE_COMMAND 21
typedef struct {
Char *buf;
int len;
} CStr;
typedef union { /* value passed to the Xkey routines */
KEYCMD cmd;
CStr str;
} XmapVal;
#define XK_NOD -1 /* Internal tree node */
#define XK_CMD 0 /* X-key was an editor command */
#define XK_STR 1 /* X-key was a string macro */
#define XK_EXE 2 /* X-key was a unix command */
/****************************/
/* Editor state and buffers */
/****************************/
EXTERN KEYCMD *CurrentKeyMap; /* current command key map */
EXTERN int inputmode; /* insert, replace, replace1 mode */
EXTERN Char GettingInput; /* true if getting an input line (mostly) */
EXTERN Char NeedsRedraw; /* for editor and twenex error messages */
EXTERN Char InputBuf[INBUFSIZE]; /* the real input data *//*FIXBUF*/
EXTERN Char *LastChar, *Cursor; /* point to the next open space */
EXTERN Char *InputLim; /* limit of size of InputBuf */
EXTERN Char MetaNext; /* flags for ^V and ^[ functions */
EXTERN Char AltKeyMap; /* Using alternative command map (for vi mode) */
EXTERN Char VImode; /* true if running in vi mode (PWP 6-27-88) */
EXTERN Char *Mark; /* the emacs "mark" (dot is Cursor) */
EXTERN char MarkIsSet; /* true if the mark has been set explicitly */
EXTERN Char DoingArg; /* true if we have an argument */
EXTERN int Argument; /* "universal" argument value */
EXTERN KEYCMD LastCmd; /* previous command executed */
EXTERN CStr *KillRing; /* kill ring */
EXTERN int KillRingMax; /* max length of kill ring */
EXTERN int KillRingLen; /* current length of kill ring */
EXTERN int KillPos; /* points to next kill */
EXTERN int YankPos; /* points to next yank */
EXTERN Char UndoBuf[INBUFSIZE];/*FIXBUF*/
EXTERN Char *UndoPtr;
EXTERN int UndoSize;
EXTERN int UndoAction;
EXTERN struct Strbuf HistBuf; /* = Strbuf_INIT; history buffer */
EXTERN int Hist_num; /* what point up the history we are at now. */
/* buffer for which command and others */
EXTERN struct Strbuf SavedBuf; /* = Strbuf_INIT; */
EXTERN size_t LastSaved; /* points to end of saved buffer */
EXTERN size_t CursSaved; /* points to the cursor point in saved buf */
EXTERN int HistSaved; /* Hist_num is saved in this */
EXTERN char RestoreSaved; /* true if SavedBuf should be restored */
EXTERN int IncMatchLen; /* current match length during incremental search */
EXTERN char Expand; /* true if we are expanding a line */
extern Char HistLit; /* true if history lines are shown literal */
EXTERN Char CurrentHistLit; /* Literal status of current show history line */
extern int Tty_raw_mode;
/*
* These are truly extern
*/
extern int MacroLvl;
extern Char *litptr; /* Entries start at offsets divisible by LIT_FACTOR */
#define LIT_FACTOR 4
extern int didsetty;
EXTERN Char *KeyMacro[MAXMACROLEVELS];
/* CHAR_DBWIDTH in Display and Vdisplay means the non-first column of a character
that is wider than one "regular" position. The cursor should never point
in the middle of a multiple-column character. */
EXTERN Char **Display; /* display buffer seed vector */
EXTERN int CursorV, /* real cursor vertical (line) */
CursorH, /* real cursor horisontal (column) */
TermV, /* number of real screen lines
* (sizeof(DisplayBuf) / width */
TermH; /* screen width */
EXTERN Char **Vdisplay; /* new buffer */
/* Variables that describe terminal ability */
EXTERN int T_Lines, T_Cols; /* Rows and Cols of the terminal */
EXTERN Char T_CanIns; /* true if I can insert characters */
EXTERN Char T_CanDel; /* dito for delete characters */
EXTERN char T_Tabs; /* true if tty interface is passing tabs */
EXTERN char T_Margin;
#define MARGIN_AUTO 1 /* term has auto margins */
#define MARGIN_MAGIC 2 /* concept glitch */
EXTERN speed_t T_Speed; /* Tty input Baud rate */
EXTERN Char T_CanCEOL; /* true if we can clear to end of line */
EXTERN Char T_CanUP; /* true if this term can do reverse linefeen */
EXTERN char T_HasMeta; /* true if we have a meta key */
/* note the extra characters in the Strchr() call in this macro */
#define isword(c) (Isalpha(c)||Isdigit(c)||Strchr(word_chars,c))
#define min(x,y) (((x)<(y))?(x):(y))
#define max(x,y) (((x)>(y))?(x):(y))
#define MODE_INSERT 0
#define MODE_REPLACE 1
#define MODE_REPLACE_1 2
#define EX_IO 0 /* while we are executing */
#define ED_IO 1 /* while we are editing */
#define TS_IO 2 /* new mode from terminal */
#define QU_IO 2 /* used only for quoted chars */
#define NN_IO 3 /* The number of entries */
#if defined(POSIX) || defined(TERMIO)
# define M_INPUT 0
# define M_OUTPUT 1
# define M_CONTROL 2
# define M_LINED 3
# define M_CHAR 4
# define M_NN 5
#else /* GSTTY */
# define M_CONTROL 0
# define M_LOCAL 1
# define M_CHAR 2
# define M_NN 3
#endif /* TERMIO */
typedef struct {
const char *t_name;
unsigned int t_setmask;
unsigned int t_clrmask;
} ttyperm_t[NN_IO][M_NN];
extern ttyperm_t ttylist;
#include "ed.term.h"
#include "ed.decls.h"
#ifndef POSIX
/*
* We don't prototype these, cause some systems have them wrong!
*/
extern int tgetent ();
extern char *tgetstr ();
extern int tgetflag ();
extern int tgetnum ();
extern char *tgoto ();
# define PUTPURE putpure
# define PUTRAW putraw
#else
extern int tgetent (char *, const char *);
extern char *tgetstr (const char *, char **);
extern int tgetflag (const char *);
extern int tgetnum (const char *);
extern char *tgoto (const char *, int, int);
extern void tputs (const char *, int, void (*)(int));
static __inline void PUTPURE(int c) {
(void)putpure(c);
}
static __inline void PUTRAW(int c) {
(void)putraw(c);
}
#endif
#endif /* _h_ed */