1 | /* $Header: /afs/dev.mit.edu/source/repository/third/tcsh/ed.h,v 1.1.1.2 1998-10-03 21:09:46 danw Exp $ */ |
---|
2 | /* |
---|
3 | * ed.h: Editor declarations and globals |
---|
4 | */ |
---|
5 | /*- |
---|
6 | * Copyright (c) 1980, 1991 The Regents of the University of California. |
---|
7 | * All rights reserved. |
---|
8 | * |
---|
9 | * Redistribution and use in source and binary forms, with or without |
---|
10 | * modification, are permitted provided that the following conditions |
---|
11 | * are met: |
---|
12 | * 1. Redistributions of source code must retain the above copyright |
---|
13 | * notice, this list of conditions and the following disclaimer. |
---|
14 | * 2. Redistributions in binary form must reproduce the above copyright |
---|
15 | * notice, this list of conditions and the following disclaimer in the |
---|
16 | * documentation and/or other materials provided with the distribution. |
---|
17 | * 3. All advertising materials mentioning features or use of this software |
---|
18 | * must display the following acknowledgement: |
---|
19 | * This product includes software developed by the University of |
---|
20 | * California, Berkeley and its contributors. |
---|
21 | * 4. Neither the name of the University nor the names of its contributors |
---|
22 | * may be used to endorse or promote products derived from this software |
---|
23 | * without specific prior written permission. |
---|
24 | * |
---|
25 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
---|
26 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
---|
27 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
---|
28 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
---|
29 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
---|
30 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
---|
31 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
---|
32 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
---|
33 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
---|
34 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
---|
35 | * SUCH DAMAGE. |
---|
36 | */ |
---|
37 | #ifndef _h_ed |
---|
38 | #define _h_ed |
---|
39 | |
---|
40 | #ifndef EXTERN |
---|
41 | # define EXTERN extern |
---|
42 | #endif |
---|
43 | |
---|
44 | #define TABSIZE 8 /* usually 8 spaces/tab */ |
---|
45 | #define MAXMACROLEVELS 10 /* max number of nested kbd macros */ |
---|
46 | |
---|
47 | #ifdef WINNT |
---|
48 | /* 256 + 24 (fkeys) + 4 (arrow) + 2 (ins/del) +2 (pgup/dn) +2 (home/end) */ |
---|
49 | # define NT_NUM_KEYS 290 |
---|
50 | #else /* !WINNT */ |
---|
51 | # define NT_NUM_KEYS 256 |
---|
52 | #endif /* !WINNT */ |
---|
53 | |
---|
54 | extern int errno; |
---|
55 | |
---|
56 | /****************************************************************************/ |
---|
57 | /* stuff for the different states returned by the character editor routines */ |
---|
58 | /****************************************************************************/ |
---|
59 | |
---|
60 | #define CCRETVAL char /* size needed for the different char editor */ |
---|
61 | /* return values */ |
---|
62 | |
---|
63 | #define KEYCMD unsigned char /* size needed to index into CcFuncTbl */ |
---|
64 | /* Must be unsigned */ |
---|
65 | |
---|
66 | typedef CCRETVAL(*PFCmd) __P((int)); /* pointer to function returning CCRETVAL */ |
---|
67 | |
---|
68 | struct KeyFuncs { /* for the "bind" shell command */ |
---|
69 | char *name; /* function name for bind command */ |
---|
70 | int func; /* function numeric value */ |
---|
71 | char *desc; /* description of function */ |
---|
72 | }; |
---|
73 | |
---|
74 | extern PFCmd CcFuncTbl[]; /* table of available commands */ |
---|
75 | extern KEYCMD CcKeyMap[]; /* keymap table, each index into above tbl */ |
---|
76 | extern KEYCMD CcAltMap[]; /* Alt keymap table */ |
---|
77 | extern KEYCMD CcEmacsMap[]; /* keymap table for Emacs default bindings */ |
---|
78 | extern KEYCMD CcViCmdMap[]; /* for Vi command mode defaults */ |
---|
79 | extern struct KeyFuncs FuncNames[]; /* string names vs. CcFuncTbl indices */ |
---|
80 | |
---|
81 | extern KEYCMD NumFuns; /* number of KEYCMDs in above table */ |
---|
82 | |
---|
83 | #define CC_ERROR 100 /* there should NOT be 100 different... */ |
---|
84 | #define CC_FATAL 101 /* fatal error: inconsistant, must |
---|
85 | * reset */ |
---|
86 | #define CC_NORM 0 |
---|
87 | #define CC_NEWLINE 1 |
---|
88 | #define CC_EOF 2 |
---|
89 | #define CC_COMPLETE 3 |
---|
90 | #define CC_LIST_CHOICES 4 |
---|
91 | #define CC_LIST_GLOB 5 |
---|
92 | #define CC_EXPAND_GLOB 6 |
---|
93 | #define CC_HELPME 9 |
---|
94 | #define CC_CORRECT 10 |
---|
95 | #define CC_WHICH 11 |
---|
96 | #define CC_ARGHACK 12 |
---|
97 | #define CC_CORRECT_L 13 |
---|
98 | #define CC_REFRESH 14 |
---|
99 | #define CC_EXPAND_VARS 15 |
---|
100 | #define CC_NORMALIZE_PATH 16 |
---|
101 | #define CC_LIST_ALL 17 |
---|
102 | #define CC_COMPLETE_ALL 18 |
---|
103 | #define CC_COMPLETE_FWD 19 |
---|
104 | #define CC_COMPLETE_BACK 20 |
---|
105 | #define CC_NORMALIZE_COMMAND 21 |
---|
106 | |
---|
107 | typedef struct { |
---|
108 | Char *buf; |
---|
109 | int len; |
---|
110 | } CStr; |
---|
111 | |
---|
112 | typedef union Xmapval { /* value passed to the Xkey routines */ |
---|
113 | KEYCMD cmd; |
---|
114 | CStr str; |
---|
115 | } XmapVal; |
---|
116 | |
---|
117 | #define XK_NOD -1 /* Internal tree node */ |
---|
118 | #define XK_CMD 0 /* X-key was an editor command */ |
---|
119 | #define XK_STR 1 /* X-key was a string macro */ |
---|
120 | #define XK_EXE 2 /* X-key was a unix command */ |
---|
121 | |
---|
122 | /****************************/ |
---|
123 | /* Editor state and buffers */ |
---|
124 | /****************************/ |
---|
125 | |
---|
126 | EXTERN KEYCMD *CurrentKeyMap; /* current command key map */ |
---|
127 | EXTERN int inputmode; /* insert, replace, replace1 mode */ |
---|
128 | EXTERN Char GettingInput; /* true if getting an input line (mostly) */ |
---|
129 | EXTERN Char NeedsRedraw; /* for editor and twenex error messages */ |
---|
130 | EXTERN Char InputBuf[INBUFSIZE]; /* the real input data */ |
---|
131 | EXTERN Char *LastChar, *Cursor; /* point to the next open space */ |
---|
132 | EXTERN Char *InputLim; /* limit of size of InputBuf */ |
---|
133 | EXTERN Char MetaNext; /* flags for ^V and ^[ functions */ |
---|
134 | EXTERN Char AltKeyMap; /* Using alternative command map (for vi mode) */ |
---|
135 | EXTERN Char VImode; /* true if running in vi mode (PWP 6-27-88) */ |
---|
136 | EXTERN Char *Mark; /* the emacs "mark" (dot is Cursor) */ |
---|
137 | EXTERN Char DoingArg; /* true if we have an argument */ |
---|
138 | EXTERN int Argument; /* "universal" argument value */ |
---|
139 | EXTERN KEYCMD LastCmd; /* previous command executed */ |
---|
140 | EXTERN Char KillBuf[INBUFSIZE]; /* kill buffer */ |
---|
141 | EXTERN Char *LastKill; /* points to end of kill buffer */ |
---|
142 | |
---|
143 | EXTERN Char UndoBuf[INBUFSIZE]; |
---|
144 | EXTERN Char *UndoPtr; |
---|
145 | EXTERN int UndoSize; |
---|
146 | EXTERN int UndoAction; |
---|
147 | |
---|
148 | EXTERN Char HistBuf[INBUFSIZE]; /* history buffer */ |
---|
149 | EXTERN Char *LastHist; /* points to end of history buffer */ |
---|
150 | EXTERN int Hist_num; /* what point up the history we are at now. */ |
---|
151 | EXTERN Char WhichBuf[INBUFSIZE]; /* buffer for which command */ |
---|
152 | EXTERN Char *LastWhich; /* points to end of which buffer */ |
---|
153 | EXTERN Char *CursWhich; /* points to the cursor point in which buf */ |
---|
154 | EXTERN int HistWhich; /* Hist_num is saved in this */ |
---|
155 | EXTERN char Expand; /* true if we are expanding a line */ |
---|
156 | extern Char HistLit; /* true if history lines are shown literal */ |
---|
157 | EXTERN Char CurrentHistLit; /* Literal status of current show history line */ |
---|
158 | |
---|
159 | /* |
---|
160 | * These are truly extern |
---|
161 | */ |
---|
162 | extern int MacroLvl; |
---|
163 | |
---|
164 | EXTERN Char *KeyMacro[MAXMACROLEVELS]; |
---|
165 | |
---|
166 | EXTERN Char **Display; /* display buffer seed vector */ |
---|
167 | EXTERN int CursorV, /* real cursor vertical (line) */ |
---|
168 | CursorH, /* real cursor horisontal (column) */ |
---|
169 | TermV, /* number of real screen lines |
---|
170 | * (sizeof(DisplayBuf) / width */ |
---|
171 | TermH; /* screen width */ |
---|
172 | EXTERN Char **Vdisplay; /* new buffer */ |
---|
173 | |
---|
174 | /* Variables that describe terminal ability */ |
---|
175 | EXTERN int T_Lines, T_Cols; /* Rows and Cols of the terminal */ |
---|
176 | EXTERN Char T_CanIns; /* true if I can insert characters */ |
---|
177 | EXTERN Char T_CanDel; /* dito for delete characters */ |
---|
178 | EXTERN Char T_Tabs; /* true if tty interface is passing tabs */ |
---|
179 | EXTERN Char T_Margin; |
---|
180 | #define MARGIN_AUTO 1 /* term has auto margins */ |
---|
181 | #define MARGIN_MAGIC 2 /* concept glitch */ |
---|
182 | EXTERN speed_t T_Speed; /* Tty input Baud rate */ |
---|
183 | EXTERN Char T_CanCEOL; /* true if we can clear to end of line */ |
---|
184 | EXTERN Char T_CanUP; /* true if this term can do reverse linefeen */ |
---|
185 | EXTERN Char T_HasMeta; /* true if we have a meta key */ |
---|
186 | |
---|
187 | /* note the extra characters in the Strchr() call in this macro */ |
---|
188 | #define isword(c) (Isalpha(c)||Isdigit(c)||Strchr(word_chars,c)) |
---|
189 | #define min(x,y) (((x)<(y))?(x):(y)) |
---|
190 | #define max(x,y) (((x)>(y))?(x):(y)) |
---|
191 | |
---|
192 | /* |
---|
193 | * Terminal dependend data structures |
---|
194 | */ |
---|
195 | typedef struct { |
---|
196 | #ifdef WINNT |
---|
197 | int dummy; |
---|
198 | #else /* !WINNT */ |
---|
199 | # if defined(POSIX) || defined(TERMIO) |
---|
200 | # ifdef POSIX |
---|
201 | struct termios d_t; |
---|
202 | # else |
---|
203 | struct termio d_t; |
---|
204 | # endif /* POSIX */ |
---|
205 | # else /* SGTTY */ |
---|
206 | # ifdef TIOCGETP |
---|
207 | struct sgttyb d_t; |
---|
208 | # endif /* TIOCGETP */ |
---|
209 | # ifdef TIOCGETC |
---|
210 | struct tchars d_tc; |
---|
211 | # endif /* TIOCGETC */ |
---|
212 | # ifdef TIOCGPAGE |
---|
213 | struct ttypagestat d_pc; |
---|
214 | # endif /* TIOCGPAGE */ |
---|
215 | # ifdef TIOCLGET |
---|
216 | int d_lb; |
---|
217 | # endif /* TIOCLGET */ |
---|
218 | # endif /* POSIX || TERMIO */ |
---|
219 | # ifdef TIOCGLTC |
---|
220 | struct ltchars d_ltc; |
---|
221 | # endif /* TIOCGLTC */ |
---|
222 | #endif /* WINNT */ |
---|
223 | } ttydata_t; |
---|
224 | |
---|
225 | #define MODE_INSERT 0 |
---|
226 | #define MODE_REPLACE 1 |
---|
227 | #define MODE_REPLACE_1 2 |
---|
228 | |
---|
229 | #define EX_IO 0 /* while we are executing */ |
---|
230 | #define ED_IO 1 /* while we are editing */ |
---|
231 | #define TS_IO 2 /* new mode from terminal */ |
---|
232 | #define QU_IO 2 /* used only for quoted chars */ |
---|
233 | #define NN_IO 3 /* The number of entries */ |
---|
234 | |
---|
235 | #if defined(POSIX) || defined(TERMIO) |
---|
236 | # define M_INPUT 0 |
---|
237 | # define M_OUTPUT 1 |
---|
238 | # define M_CONTROL 2 |
---|
239 | # define M_LINED 3 |
---|
240 | # define M_CHAR 4 |
---|
241 | # define M_NN 5 |
---|
242 | #else /* GSTTY */ |
---|
243 | # define M_CONTROL 0 |
---|
244 | # define M_LOCAL 1 |
---|
245 | # define M_CHAR 2 |
---|
246 | # define M_NN 3 |
---|
247 | #endif /* TERMIO */ |
---|
248 | typedef struct { |
---|
249 | char *t_name; |
---|
250 | int t_setmask; |
---|
251 | int t_clrmask; |
---|
252 | } ttyperm_t[NN_IO][M_NN]; |
---|
253 | |
---|
254 | extern ttyperm_t ttylist; |
---|
255 | #include "ed.decls.h" |
---|
256 | |
---|
257 | #endif /* _h_ed */ |
---|