#define VT100_EMUL_NARGS 10
struct wsemul_vt100_emuldata {
const struct wsdisplay_emulops *emulops;
struct wsemul_abortstate abortstate;
void *emulcookie;
int scrcapabilities;
u_int nrows, ncols, crow, ccol;
uint32_t defattr;
uint32_t kernattr;
void *cbcookie;
#ifdef DIAGNOSTIC
int console;
#endif
u_int state;
int flags;
#define VTFL_LASTCHAR 0x001
#define VTFL_INSERTMODE 0x002
#define VTFL_APPLKEYPAD 0x004
#define VTFL_APPLCURSOR 0x008
#define VTFL_DECOM 0x010
#define VTFL_DECAWM 0x020
#define VTFL_CURSORON 0x040
#define VTFL_NATCHARSET 0x080
#define VTFL_SAVEDCURS 0x100
#define VTFL_UTF8 0x200
uint32_t curattr, bkgdattr;
int attrflags, fgcol, bgcol;
u_int scrreg_startrow;
u_int scrreg_nrows;
char *tabs;
#ifdef HAVE_DOUBLE_WIDTH_HEIGHT
char *dblwid;
int dw;
#endif
int chartab0, chartab1;
u_int *chartab_G[4];
u_int *isolatin1tab, *decgraphtab, *dectechtab;
u_int *nrctab;
int sschartab;
int nargs;
u_int args[VT100_EMUL_NARGS];
char modif1;
char modif2;
int designating;
int dcstype;
char *dcsarg;
int dcspos;
#define DCS_MAXLEN 256
#define DCSTYPE_TABRESTORE 1
u_int savedcursor_row, savedcursor_col;
uint32_t savedattr, savedbkgdattr;
int savedattrflags, savedfgcol, savedbgcol;
int savedchartab0, savedchartab1;
u_int *savedchartab_G[4];
struct wsemul_inputstate instate;
struct wsemul_inputstate kstate;
#ifdef HAVE_UTF8_SUPPORT
u_char translatebuf[4];
#else
u_char translatebuf[1];
#endif
};
#define ARG(n) (edp->args[(n)])
#define DEF1_ARG(n) (ARG(n) ? ARG(n) : 1)
#define DEFx_ARG(n, x) (ARG(n) ? ARG(n) : (x))
#define ROWS_ABOVE ((int)edp->crow - (int)edp->scrreg_startrow)
#define ROWS_BELOW ((int)(edp->scrreg_startrow + edp->scrreg_nrows) \
- (int)edp->crow - 1)
#ifdef HAVE_DOUBLE_WIDTH_HEIGHT
#define CHECK_DW do { \
if (edp->dblwid && edp->dblwid[edp->crow]) { \
edp->dw = 1; \
if (edp->ccol > (edp->ncols >> 1) - 1) \
edp->ccol = (edp->ncols >> 1) - 1; \
} else \
edp->dw = 0; \
} while (0)
#define NCOLS (edp->ncols >> edp->dw)
#define COPYCOLS(f, t, n) (edp->emulcookie, edp->crow, (f) << edp->dw, \
(t) << edp->dw, (n) << edp->dw)
#define ERASECOLS(f, n, a) (edp->emulcookie, edp->crow, (f) << edp->dw, \
(n) << edp->dw, (a))
#else
#define CHECK_DW do { } while (0)
#define NCOLS (edp->ncols)
#define COPYCOLS(f, t, n) (edp->emulcookie, edp->crow, (f), (t), (n))
#define ERASECOLS(f, n, a) (edp->emulcookie, edp->crow, (f), (n), (a))
#endif
#define COLS_LEFT (NCOLS - edp->ccol - 1)
#define WSEMUL_VT_ID1 "\033[?62;6c"
#define WSEMUL_VT_ID2 "\033[>24;20;0c"
void wsemul_vt100_reset(struct wsemul_vt100_emuldata *);
int wsemul_vt100_scrollup(struct wsemul_vt100_emuldata *, int);
int wsemul_vt100_scrolldown(struct wsemul_vt100_emuldata *, int);
int wsemul_vt100_ed(struct wsemul_vt100_emuldata *, int);
int wsemul_vt100_el(struct wsemul_vt100_emuldata *, int);
int wsemul_vt100_handle_csi(struct wsemul_vt100_emuldata *,
struct wsemul_inputstate *, int);
void wsemul_vt100_handle_dcs(struct wsemul_vt100_emuldata *);
int wsemul_vt100_translate(void *cookie, kbd_t, keysym_t, const u_char **);
void vt100_initchartables(struct wsemul_vt100_emuldata *);
int vt100_setnrc(struct wsemul_vt100_emuldata *, int);
int wsemul_vt100_output_normal(struct wsemul_vt100_emuldata *,
struct wsemul_inputstate *, int, int);