1 /*********************************************************************** 2 * * 3 * This software is part of the ast package * 4 * Copyright (c) 1984-2011 AT&T Intellectual Property * 5 * and is licensed under the * 6 * Eclipse Public License, Version 1.0 * 7 * by AT&T Intellectual Property * 8 * * 9 * A copy of the License is available at * 10 * http://www.eclipse.org/org/documents/epl-v10.html * 11 * (with md5 checksum b35adb5213ca9657e911e9befb180842) * 12 * * 13 * Information and Software Systems Research * 14 * AT&T Research * 15 * Florham Park NJ * 16 * * 17 * David Korn <dgkorn@gmail.com> * 18 * Pat Sullivan * 19 * * 20 ***********************************************************************/ 21 /* 22 * edit.h - common data structure for vi and emacs edit options 23 * 24 * David Korn 25 * AT&T Bell Laboratories 26 * Room 3C-526B 27 * Murray Hill, N. J. 07974 28 * Tel. x7975 29 * 30 */ 31 32 #ifndef KSHELL 33 # include <setjmp.h> 34 # include <signal.h> 35 # include <ctype.h> 36 #endif /* KSHELL */ 37 #define LOOKAHEAD 80 38 #ifdef VENIX 39 # define READAHEAD 1 40 #else 41 # define READAHEAD LOOKAHEAD 42 #endif /* VENIX */ 43 44 #ifdef MULTIBYTE 45 # ifndef ESS_MAXCHAR 46 # include "national.h" 47 # endif /* ESS_MAXCHAR */ 48 # if ESS_MAXCHAR<=2 49 typedef unsigned short genchar; 50 # else 51 typedef long genchar; 52 # endif 53 # define CHARSIZE 2 54 #else 55 typedef char genchar; 56 # define CHARSIZE 1 57 #endif /* MULTIBYTE */ 58 59 #define TABSIZE 8 60 #define PRSIZE 80 61 #define SEARCHSIZE 80 62 63 struct edit 64 { 65 int e_kill; 66 int e_erase; 67 int e_eof; 68 int e_fchar; 69 char e_plen; /* length of prompt string */ 70 char e_crlf; /* zero if cannot return to beginning of line */ 71 jmp_buf e_env; 72 int e_llimit; /* line length limit */ 73 int e_hline; /* current history line number */ 74 int e_hloff; /* line number offset for command */ 75 int e_hismin; /* minimum history line number */ 76 int e_hismax; /* maximum history line number */ 77 int e_raw; /* set when in raw mode or alt mode */ 78 int e_cur; /* current line position */ 79 int e_eol; /* end-of-line position */ 80 int e_pcur; /* current physical line position */ 81 int e_peol; /* end of physical line position */ 82 int e_mode; /* edit mode */ 83 int e_index; /* index in look-ahead buffer */ 84 int e_repeat; 85 int e_saved; 86 int e_fcol; /* first column */ 87 int e_ucol; /* column for undo */ 88 int e_addnl; /* set if new-line must be added */ 89 int e_wsize; /* width of display window */ 90 char *e_outbase; /* pointer to start of output buffer */ 91 char *e_outptr; /* pointer to position in output buffer */ 92 char *e_outlast; /* pointer to end of output buffer */ 93 genchar *e_inbuf; /* pointer to input buffer */ 94 char *e_prompt; /* pointer to buffer containing the prompt */ 95 genchar *e_ubuf; /* pointer to the undo buffer */ 96 genchar *e_killbuf; /* pointer to delete buffer */ 97 char e_search[SEARCHSIZE]; /* search string */ 98 genchar *e_Ubuf; /* temporary workspace buffer */ 99 genchar *e_physbuf; /* temporary workspace buffer */ 100 int e_lbuf[LOOKAHEAD];/* pointer to look-ahead buffer */ 101 int e_fd; /* file descriptor */ 102 int e_ttyspeed; /* line speed, also indicates tty parms are valid */ 103 int *e_globals; /* global variables */ 104 genchar *e_window; /* display window image */ 105 char e_inmacro; /* processing macro expansion */ 106 #ifndef KSHELL 107 char e_prbuff[PRSIZE]; /* prompt buffer */ 108 #endif /* KSHELL */ 109 }; 110 111 #define FEMAX 50 /* maximum number of file matches for q_expand */ 112 #undef MAXWINDOW 113 #define MAXWINDOW 160 /* maximum width window */ 114 #define MINWINDOW 15 /* minimum width window */ 115 #define DFLTWINDOW 80 /* default window width */ 116 #define MAXPAT 100 /* maximum length for pattern word */ 117 #define YES 1 118 #define NO 0 119 #define FAST 2 120 #define SLOW 1 121 #define RAWMODE 1 122 #define ALTMODE 2 123 #define DELETE '\177' 124 #define BELL '\7' 125 #define ESC 033 126 #define UEOF -2 /* user eof char synonym */ 127 #define UERASE -3 /* user erase char synonym */ 128 #define UINTR -4 /* user intr char synonym */ 129 #define UKILL -5 /* user kill char synonym */ 130 #define UQUIT -6 /* user quit char synonym */ 131 132 #if ( 'a' == 97) /* ASCII? */ 133 # define cntl(x) (x&037) 134 #else 135 # define cntl(c) (c=='D'?55:(c=='E'?45:(c=='F'?46:(c=='G'?'\a':(c=='H'?'\b': \ 136 (c=='I'?'\t':(c=='J'?'\n':(c=='T'?60:(c=='U'?61:(c=='V'?50: \ 137 (c=='W'?38:(c=='Z'?63:(c=='['?39:(c==']'?29: \ 138 (c<'J'?c+1-'A':(c+10-'J')))))))))))))))) 139 #endif 140 141 #ifndef KSHELL 142 # define STRIP 0377 143 # define TO_PRINT 0100 144 # define GMACS 1 145 # define EMACS 2 146 # define VIRAW 4 147 # define EDITVI 8 148 # define NOHIST 16 149 # define EDITMASK 15 150 # define is_option(m) (opt_flag&(m)) 151 extern char opt_flag; 152 # ifdef SYSCALL 153 # define read(fd,buff,n) syscall(3,fd,buff,n) 154 # else 155 # define read(fd,buff,n) rEAd(fd,buff,n) 156 # endif /* SYSCALL */ 157 #endif /* KSHELL */ 158 159 extern struct edit editb; 160 #ifdef PROTO 161 extern void ed_crlf(void); 162 extern void ed_putchar(int); 163 extern void ed_ringbell(void); 164 extern void ed_setup(int); 165 extern void ed_failed(char*,char*); 166 extern void ed_flush(void); 167 extern int ed_getchar(void); 168 extern int ed_virt_to_phys(genchar*,genchar*,int,int,int); 169 extern int ed_window(void); 170 extern void ed_ungetchar(int); 171 extern ssize_t rEAd(int, void*, size_t); 172 extern int vi_read(int, char*, unsigned); 173 extern int emacs_read(int, char*, unsigned); 174 # ifdef KSHELL 175 extern int ed_macro(int); 176 extern int ed_expand(char[],int*,int*,int); 177 # endif /* KSHELL */ 178 #else 179 extern void ed_crlf(); 180 extern void ed_putchar(); 181 extern void ed_ringbell(); 182 extern void ed_setup(); 183 extern void ed_failed(); 184 extern void ed_flush(); 185 extern int ed_getchar(); 186 extern int ed_virt_to_phys(); 187 extern int ed_window(); 188 extern void ed_ungetchar(); 189 # ifdef KSHELL 190 extern int ed_macro(); 191 extern int ed_expand(); 192 # endif /* KSHELL */ 193 #endif /* PROTO */ 194 195 extern const char e_runvi[]; 196 #ifndef KSHELL 197 extern const char e_version[]; 198 #endif /* KSHELL */ 199