aboutsummaryrefslogtreecommitdiff
path: root/contrib/tcsh/ed.h
blob: 659a0a66aa5e2db97f93600c8c9c33dbb6db9c62 (plain) (blame)
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
/* $Header: /src/pub/tcsh/ed.h,v 3.28 1998/11/24 18:17:21 christos Exp $ */
/*
 * 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. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by the University of
 *	California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */
#ifndef _h_ed
#define _h_ed

#ifndef EXTERN
# define EXTERN extern
#endif

#define TABSIZE		8	/* usually 8 spaces/tab */
#define MAXMACROLEVELS	10	/* max number of nested kbd macros */

#ifndef WINNT
# define NT_NUM_KEYS	256
#endif /* WINNT */

extern int errno;

/****************************************************************************/
/* 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) __P((int));	/* pointer to function returning CCRETVAL */

struct KeyFuncs {		/* for the "bind" shell command */
    char   *name;		/* function name for bind command */
    int     func;		/* function numeric value */
    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 Xmapval {		/* 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 */
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 DoingArg;		/* true if we have an argument */
EXTERN int Argument;		/* "universal" argument value */
EXTERN KEYCMD LastCmd;		/* previous command executed */
EXTERN Char KillBuf[INBUFSIZE];	/* kill buffer */
EXTERN Char *LastKill;		/* points to end of kill buffer */

EXTERN Char UndoBuf[INBUFSIZE];
EXTERN Char *UndoPtr;
EXTERN int  UndoSize;
EXTERN int  UndoAction;

EXTERN Char HistBuf[INBUFSIZE];	/* history buffer */
EXTERN Char *LastHist;		/* points to end of history buffer */
EXTERN int Hist_num;		/* what point up the history we are at now. */
EXTERN Char WhichBuf[INBUFSIZE];	/* buffer for which command */
EXTERN Char *LastWhich;		/* points to end of which buffer */
EXTERN Char *CursWhich;		/* points to the cursor point in which buf */
EXTERN int HistWhich;		/* Hist_num is saved in this */
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 */

/*
 * These are truly extern
 */
extern int MacroLvl;

EXTERN Char *KeyMacro[MAXMACROLEVELS];

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))

/*
 * Terminal dependend data structures
 */
typedef struct {
#ifdef WINNT
    int dummy;
#else /* !WINNT */
# if defined(POSIX) || defined(TERMIO)
#  ifdef POSIX
    struct termios d_t;
#  else
    struct termio d_t;
#  endif /* POSIX */
# else /* SGTTY */
#  ifdef TIOCGETP
    struct sgttyb d_t;
#  endif /* TIOCGETP */
#  ifdef TIOCGETC
    struct tchars d_tc;
#  endif /* TIOCGETC */
#  ifdef TIOCGPAGE
    struct ttypagestat d_pc;
#  endif /* TIOCGPAGE */
#  ifdef TIOCLGET
    int d_lb;
#  endif /* TIOCLGET */
# endif /* POSIX || TERMIO */
# ifdef TIOCGLTC
    struct ltchars d_ltc;
# endif /* TIOCGLTC */
#endif /* WINNT */
} ttydata_t;

#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 { 
    char *t_name;
    int  t_setmask;
    int  t_clrmask;
} ttyperm_t[NN_IO][M_NN];

extern ttyperm_t ttylist;
#include "ed.decls.h"

#endif /* _h_ed */