source: trunk/third/tcsh/ed.h @ 12039

Revision 12039, 8.8 KB checked in by danw, 26 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r12038, which included commits to RCS files with non-trunk default branches.
Line 
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
54extern 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
66typedef CCRETVAL(*PFCmd) __P((int));    /* pointer to function returning CCRETVAL */
67
68struct 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
74extern PFCmd CcFuncTbl[];       /* table of available commands */
75extern KEYCMD CcKeyMap[];       /* keymap table, each index into above tbl */
76extern KEYCMD CcAltMap[];       /* Alt keymap table */
77extern KEYCMD CcEmacsMap[];     /* keymap table for Emacs default bindings */
78extern KEYCMD CcViCmdMap[];     /* for Vi command mode defaults */
79extern struct KeyFuncs FuncNames[];     /* string names vs. CcFuncTbl indices */
80
81extern 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
107typedef struct {
108    Char *buf;
109    int   len;
110} CStr;
111
112typedef 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
126EXTERN KEYCMD *CurrentKeyMap;   /* current command key map */
127EXTERN int inputmode;           /* insert, replace, replace1 mode */
128EXTERN Char GettingInput;       /* true if getting an input line (mostly) */
129EXTERN Char NeedsRedraw;        /* for editor and twenex error messages */
130EXTERN Char InputBuf[INBUFSIZE];        /* the real input data */
131EXTERN Char *LastChar, *Cursor; /* point to the next open space */
132EXTERN Char *InputLim;          /* limit of size of InputBuf */
133EXTERN Char MetaNext;           /* flags for ^V and ^[ functions */
134EXTERN Char AltKeyMap;          /* Using alternative command map (for vi mode) */
135EXTERN Char VImode;             /* true if running in vi mode (PWP 6-27-88) */
136EXTERN Char *Mark;              /* the emacs "mark" (dot is Cursor) */
137EXTERN Char DoingArg;           /* true if we have an argument */
138EXTERN int Argument;            /* "universal" argument value */
139EXTERN KEYCMD LastCmd;          /* previous command executed */
140EXTERN Char KillBuf[INBUFSIZE]; /* kill buffer */
141EXTERN Char *LastKill;          /* points to end of kill buffer */
142
143EXTERN Char UndoBuf[INBUFSIZE];
144EXTERN Char *UndoPtr;
145EXTERN int  UndoSize;
146EXTERN int  UndoAction;
147
148EXTERN Char HistBuf[INBUFSIZE]; /* history buffer */
149EXTERN Char *LastHist;          /* points to end of history buffer */
150EXTERN int Hist_num;            /* what point up the history we are at now. */
151EXTERN Char WhichBuf[INBUFSIZE];        /* buffer for which command */
152EXTERN Char *LastWhich;         /* points to end of which buffer */
153EXTERN Char *CursWhich;         /* points to the cursor point in which buf */
154EXTERN int HistWhich;           /* Hist_num is saved in this */
155EXTERN char Expand;             /* true if we are expanding a line */
156extern Char HistLit;            /* true if history lines are shown literal */
157EXTERN Char CurrentHistLit;     /* Literal status of current show history line */
158
159/*
160 * These are truly extern
161 */
162extern int MacroLvl;
163
164EXTERN Char *KeyMacro[MAXMACROLEVELS];
165
166EXTERN Char **Display;          /* display buffer seed vector */
167EXTERN 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 */
172EXTERN Char **Vdisplay;         /* new buffer */
173
174/* Variables that describe terminal ability */
175EXTERN int T_Lines, T_Cols;     /* Rows and Cols of the terminal */
176EXTERN Char T_CanIns;           /* true if I can insert characters */
177EXTERN Char T_CanDel;           /* dito for delete characters */
178EXTERN Char T_Tabs;             /* true if tty interface is passing tabs */
179EXTERN Char T_Margin;           
180#define MARGIN_AUTO  1          /* term has auto margins */
181#define MARGIN_MAGIC 2          /* concept glitch */
182EXTERN speed_t T_Speed;         /* Tty input Baud rate */
183EXTERN Char T_CanCEOL;          /* true if we can clear to end of line */
184EXTERN Char T_CanUP;            /* true if this term can do reverse linefeen */
185EXTERN 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 */
195typedef 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 */
248typedef struct {
249    char *t_name;
250    int  t_setmask;
251    int  t_clrmask;
252} ttyperm_t[NN_IO][M_NN];
253
254extern ttyperm_t ttylist;
255#include "ed.decls.h"
256
257#endif /* _h_ed */
Note: See TracBrowser for help on using the repository browser.