diff options
author | chin <none@none> | 2007-08-17 12:01:52 -0700 |
---|---|---|
committer | chin <none@none> | 2007-08-17 12:01:52 -0700 |
commit | da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968 (patch) | |
tree | 5280d3b78e289fe9551371ab6e7f15ef9944ea14 /usr/src/lib/libshell/common/include/edit.h | |
parent | 073dbf9103ef2a2b05d8a16e2d26db04e0374b0e (diff) | |
download | illumos-gate-da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968.tar.gz |
6437624 RFE: Add ksh93 (as /usr/bin/ksh93) and libshell.so to OS/Net
6505835 AST tools and library (libpp) required for creating l10n messages for ksh93
PSARC/2006/550 Korn Shell 93 Integration
PSARC/2006/587 /etc/ksh.kshrc for ksh93
PSARC/2007/035 ksh93 Amendments
Contributed by Roland Mainz <roland.mainz@nrubsig.org>
--HG--
rename : usr/src/lib/libcmd/common/mapfile-vers => deleted_files/usr/src/lib/libcmd/common/mapfile-vers
rename : usr/src/lib/libcmd/common/placeholder.c => deleted_files/usr/src/lib/libcmd/common/placeholder.c
Diffstat (limited to 'usr/src/lib/libshell/common/include/edit.h')
-rw-r--r-- | usr/src/lib/libshell/common/include/edit.h | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/usr/src/lib/libshell/common/include/edit.h b/usr/src/lib/libshell/common/include/edit.h new file mode 100644 index 0000000000..ddbd45c24b --- /dev/null +++ b/usr/src/lib/libshell/common/include/edit.h @@ -0,0 +1,257 @@ +/*********************************************************************** +* * +* This software is part of the ast package * +* Copyright (c) 1982-2007 AT&T Knowledge Ventures * +* and is licensed under the * +* Common Public License, Version 1.0 * +* by AT&T Knowledge Ventures * +* * +* A copy of the License is available at * +* http://www.opensource.org/licenses/cpl1.0.txt * +* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * +* * +* Information and Software Systems Research * +* AT&T Research * +* Florham Park NJ * +* * +* David Korn <dgk@research.att.com> * +* * +***********************************************************************/ +#pragma prototyped +#ifndef SEARCHSIZE +/* + * edit.h - common data structure for vi and emacs edit options + * + * David Korn + * AT&T Labs + * + */ + +#define SEARCHSIZE 80 + +#include "FEATURE/options" +#include "FEATURE/locale" +#if !SHOPT_VSH && !SHOPT_ESH +# define ed_winsize() (SEARCHSIZE) +#else + +#if !KSHELL +# include <setjmp.h> +# include <sig.h> +# include <ctype.h> +#endif /* KSHELL */ + +#include "FEATURE/setjmp" +#include "terminal.h" + +#define STRIP 0377 +#define LOOKAHEAD 80 + +#if SHOPT_MULTIBYTE +# ifndef ESS_MAXCHAR +# include "national.h" +# endif /* ESS_MAXCHAR */ + typedef wchar_t genchar; +# define CHARSIZE (sizeof(wchar_t)<=2?3:sizeof(wchar_t)) +#else + typedef char genchar; +# define CHARSIZE 1 +#endif /* SHOPT_MULTIBYTE */ + +#define TABSIZE 8 +#define PRSIZE 160 +#define MAXLINE 1024 /* longest edit line permitted */ + +typedef struct _edit_pos +{ + unsigned short line; + unsigned short col; +} Edpos_t; + +typedef struct edit +{ + sigjmp_buf e_env; + int e_kill; + int e_erase; + int e_werase; + int e_eof; + int e_lnext; + int e_fchar; + int e_plen; /* length of prompt string */ + int e_crlf; /* zero if cannot return to beginning of line */ + int e_llimit; /* line length limit */ + int e_hline; /* current history line number */ + int e_hloff; /* line number offset for command */ + int e_hismin; /* minimum history line number */ + int e_hismax; /* maximum history line number */ + int e_raw; /* set when in raw mode or alt mode */ + int e_cur; /* current line position */ + int e_eol; /* end-of-line position */ + int e_pcur; /* current physical line position */ + int e_peol; /* end of physical line position */ + int e_mode; /* edit mode */ + int e_lookahead; /* index in look-ahead buffer */ + int e_repeat; + int e_saved; + int e_fcol; /* first column */ + int e_ucol; /* column for undo */ + int e_wsize; /* width of display window */ + char *e_outbase; /* pointer to start of output buffer */ + char *e_outptr; /* pointer to position in output buffer */ + char *e_outlast; /* pointer to end of output buffer */ + genchar *e_inbuf; /* pointer to input buffer */ + char *e_prompt; /* pointer to buffer containing the prompt */ + genchar *e_ubuf; /* pointer to the undo buffer */ + genchar *e_killbuf; /* pointer to delete buffer */ + char e_search[SEARCHSIZE]; /* search string */ + genchar *e_Ubuf; /* temporary workspace buffer */ + genchar *e_physbuf; /* temporary workspace buffer */ + int e_lbuf[LOOKAHEAD];/* pointer to look-ahead buffer */ + int e_fd; /* file descriptor */ + int e_ttyspeed; /* line speed, also indicates tty parms are valid */ + int e_tabcount; +#ifdef _hdr_utime + ino_t e_tty_ino; + dev_t e_tty_dev; + char *e_tty; +#endif +#if SHOPT_OLDTERMIO + char e_echoctl; + char e_tcgeta; + struct termio e_ott; +#endif +#if SHOPT_MULTIBYTE + int e_curchar; + int e_cursize; +#endif + int *e_globals; /* global variables */ + genchar *e_window; /* display window image */ + char e_inmacro; /* processing macro expansion */ +#if KSHELL + char e_vi_insert[2]; /* for sh_keytrap */ + int32_t e_col; /* for sh_keytrap */ +#else + char e_prbuff[PRSIZE]; /* prompt buffer */ +#endif /* KSHELL */ + struct termios e_ttyparm; /* initial tty parameters */ + struct termios e_nttyparm; /* raw tty parameters */ + struct termios e_savetty; /* saved terminal state */ + int e_savefd; /* file descriptor for saved terminal state */ + char e_macro[4]; /* macro buffer */ + void *e_vi; /* vi specific data */ + void *e_emacs; /* emacs specific data */ + Shell_t *sh; /* interpreter pointer */ + char *e_stkptr; /* saved stack pointer */ + int e_stkoff; /* saved stack offset */ + char **e_clist; /* completion list after <ESC>= */ + int e_nlist; /* number of elements on completion list */ + int e_multiline; /* allow multiple lines for editing */ + int e_winsz; /* columns in window */ + Edpos_t e_curpos; /* cursor line and column */ + Namval_t *e_default; /* variable containing default value */ + Namval_t *e_term; /* TERM variable */ + char e_termname[80]; /* terminal name */ +} Edit_t; + +#undef MAXWINDOW +#define MAXWINDOW 300 /* maximum width window */ +#define FAST 2 +#define SLOW 1 +#define ESC cntl('[') +#define UEOF -2 /* user eof char synonym */ +#define UINTR -3 /* user intr char synonym */ +#define UERASE -4 /* user erase char synonym */ +#define UKILL -5 /* user kill char synonym */ +#define UWERASE -6 /* user word erase char synonym */ +#define ULNEXT -7 /* user next literal char synonym */ + +#if ( 'a' == 97) /* ASCII? */ +# define cntl(x) (x&037) +#else +# define cntl(c) (c=='D'?55:(c=='E'?45:(c=='F'?46:(c=='G'?'\a':(c=='H'?'\b': \ + (c=='I'?'\t':(c=='J'?'\n':(c=='T'?60:(c=='U'?61:(c=='V'?50: \ + (c=='W'?38:(c=='Z'?63:(c=='['?39:(c==']'?29: \ + (c<'J'?c+1-'A':(c+10-'J')))))))))))))))) +#endif + +#if !KSHELL +# define STRIP 0377 +# define GMACS 1 +# define EMACS 2 +# define VIRAW 4 +# define EDITVI 8 +# define NOHIST 16 +# define EDITMASK 15 +# define is_option(m) (opt_flag&(m)) + extern char opt_flag; +# ifdef SYSCALL +# define read(fd,buff,n) syscall(3,fd,buff,n) +# else +# define read(fd,buff,n) rEAd(fd,buff,n) +# endif /* SYSCALL */ +#endif /* KSHELL */ + +extern void ed_crlf(Edit_t*); +extern void ed_putchar(Edit_t*, int); +extern void ed_ringbell(void); +extern void ed_setup(Edit_t*,int, int); +extern void ed_flush(Edit_t*); +extern int ed_getchar(Edit_t*,int); +extern int ed_virt_to_phys(Edit_t*,genchar*,genchar*,int,int,int); +extern int ed_window(void); +extern void ed_ungetchar(Edit_t*,int); +extern int ed_viread(void*, int, char*, int, int); +extern int ed_read(void*, int, char*, int, int); +extern int ed_emacsread(void*, int, char*, int, int); +extern Edpos_t ed_curpos(Edit_t*, genchar*, int, int, Edpos_t); +extern int ed_setcursor(Edit_t*, genchar*, int, int, int); +#if KSHELL + extern int ed_macro(Edit_t*,int); + extern int ed_expand(Edit_t*, char[],int*,int*,int,int); + extern int ed_fulledit(Edit_t*); + extern void *ed_open(Shell_t*); +#endif /* KSHELL */ +# if SHOPT_MULTIBYTE + extern int ed_internal(const char*, genchar*); + extern int ed_external(const genchar*, char*); + extern void ed_gencpy(genchar*,const genchar*); + extern void ed_genncpy(genchar*,const genchar*,int); + extern int ed_genlen(const genchar*); + extern int ed_setwidth(const char*); +# endif /* SHOPT_MULTIBYTE */ + +extern const char e_runvi[]; +#if !KSHELL + extern const char e_version[]; +#endif /* KSHELL */ + +#if SHOPT_HISTEXPAND + +/* flags */ + +#define HIST_EVENT 0x1 /* event designator seen */ +#define HIST_QUESTION 0x2 /* question mark event designator */ +#define HIST_HASH 0x4 /* hash event designator */ +#define HIST_WORDDSGN 0x8 /* word designator seen */ +#define HIST_QUICKSUBST 0x10 /* quick substition designator seen */ +#define HIST_SUBSTITUTE 0x20 /* for substition loop */ +#define HIST_NEWLINE 0x40 /* newline in squashed white space */ + +/* modifier flags */ + +#define HIST_PRINT 0x100 /* print new command */ +#define HIST_QUOTE 0x200 /* quote resulting history line */ +#define HIST_QUOTE_BR 0x400 /* quote every word on space break */ +#define HIST_GLOBALSUBST 0x800 /* apply substition globally */ + +#define HIST_ERROR 0x1000 /* an error ocurred */ + +/* flags to be returned */ + +#define HIST_FLAG_RETURN_MASK (HIST_EVENT|HIST_PRINT|HIST_ERROR) + +extern int hist_expand(const char *, char **); +#endif + +#endif +#endif |