#pragma prototyped
#ifndef SEARCHSIZE
#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
#include "FEATURE/setjmp"
#include "terminal.h"
#define STRIP 0377
#define LOOKAHEAD 80
#if SHOPT_MULTIBYTE
# ifndef ESS_MAXCHAR
# include "national.h"
# endif
typedef wchar_t genchar;
# define CHARSIZE (sizeof(wchar_t)<=2?3:sizeof(wchar_t))
#else
typedef char genchar;
# define CHARSIZE 1
#endif
#define TABSIZE 8
#define PRSIZE 160
#define MAXLINE 1024
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;
int e_crlf;
int e_llimit;
int e_hline;
int e_hloff;
int e_hismin;
int e_hismax;
int e_raw;
int e_cur;
int e_eol;
int e_pcur;
int e_peol;
int e_mode;
int e_lookahead;
int e_repeat;
int e_saved;
int e_fcol;
int e_ucol;
int e_wsize;
char *e_outbase;
char *e_outptr;
char *e_outlast;
genchar *e_inbuf;
char *e_prompt;
genchar *e_ubuf;
genchar *e_killbuf;
char e_search[SEARCHSIZE];
genchar *e_Ubuf;
genchar *e_physbuf;
int e_lbuf[LOOKAHEAD];
int e_fd;
int e_ttyspeed;
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;
genchar *e_window;
char e_inmacro;
#if KSHELL
char e_vi_insert[2];
int32_t e_col;
#else
char e_prbuff[PRSIZE];
#endif
struct termios e_ttyparm;
struct termios e_nttyparm;
struct termios e_savetty;
int e_savefd;
char e_macro[4];
void *e_vi;
void *e_emacs;
Shell_t *sh;
char *e_stkptr;
int e_stkoff;
char **e_clist;
int e_nlist;
int e_multiline;
int e_winsz;
Edpos_t e_curpos;
Namval_t *e_default;
Namval_t *e_term;
char e_termname[80];
} Edit_t;
#undef MAXWINDOW
#define MAXWINDOW 300
#define FAST 2
#define SLOW 1
#define ESC cntl('[')
#define UEOF -2
#define UINTR -3
#define UERASE -4
#define UKILL -5
#define UWERASE -6
#define ULNEXT -7
#if ( 'a' == 97)
# 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
#endif
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
# 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
extern const char e_runvi[];
#if !KSHELL
extern const char e_version[];
#endif
#if SHOPT_HISTEXPAND
#define HIST_EVENT 0x1
#define HIST_QUESTION 0x2
#define HIST_HASH 0x4
#define HIST_WORDDSGN 0x8
#define HIST_QUICKSUBST 0x10
#define HIST_SUBSTITUTE 0x20
#define HIST_NEWLINE 0x40
#define HIST_PRINT 0x100
#define HIST_QUOTE 0x200
#define HIST_QUOTE_BR 0x400
#define HIST_GLOBALSUBST 0x800
#define HIST_ERROR 0x1000
#define HIST_FLAG_RETURN_MASK (HIST_EVENT|HIST_PRINT|HIST_ERROR)
extern int hist_expand(const char *, char **);
#endif
#endif
#endif