/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* Copyright (c) 1988 AT&T */ /* All Rights Reserved */ /* * University Copyright- Copyright (c) 1982, 1986, 1988 * The Regents of the University of California * All Rights Reserved * * University Acknowledgment- Portions of this document are derived from * software developed by the University of California, Berkeley, and its * contributors. */ #ifndef _CURSHDR_H #define _CURSHDR_H #ifdef __cplusplus extern "C" { #endif #define _NOHASH (-1) /* if the hash value is unknown */ #define _REDRAW (-2) /* if line need redrawn */ #define _BLANK (-3) /* if line is blank */ #define _THASH (123) /* base hash if clash with other hashes */ #define _KEY (01) #define _MACRO (02) #define _INPUTPENDING cur_term->_iwait #define _PUTS(x, y) (void) tputs(x, y, _outch) #define _VIDS(na, oa) (vidupdate((na), (oa), _outch), curscr->_attrs = (na)) #define _ONINSERT() (_PUTS(enter_insert_mode, 1), SP->phys_irm = TRUE) #define _OFFINSERT() (_PUTS(exit_insert_mode, 1), SP->phys_irm = FALSE) #define _STRNOTEQ(a, b) (a == NULL ? (b != NULL) : \ (b == NULL ? 1 : strcmp(a, b))) /* * IC and IL overheads and costs should be set to this * value if the corresponding feature is missing */ #define LARGECOST 500 typedef struct { short icfixed; /* Insert char fixed overhead */ short dcfixed; /* Delete char fixed overhead */ short Insert_character; short Delete_character; short Cursor_home; short Cursor_to_ll; short Cursor_left; short Cursor_right; short Cursor_down; short Cursor_up; short Carriage_return; short Tab; short Back_tab; short Clr_eol; short Clr_bol; short Parm_ich; short Parm_dch; short Parm_left_cursor; short Parm_up_cursor; short Parm_down_cursor; short Parm_right_cursor; short Cursor_address; short Row_address; } COSTS; #define _COST(field) (SP->term_costs.field) /* Soft label keys */ #define LABMAX 16 /* max number of labels allowed */ #define LABLEN 8 /* max length of each label */ typedef struct { WINDOW *_win; /* the window to display labels */ char _ldis[LABMAX][LABLEN+1]; /* labels suitable to display */ char _lval[LABMAX][LABLEN+1]; /* labels' true values */ short _labx[LABMAX]; /* where to display labels */ short _num; /* actual number of labels */ short _len; /* real length of labels */ bool _changed; /* TRUE if some labels changed */ bool _lch[LABMAX]; /* change status */ } SLK_MAP; struct screen { unsigned fl_echoit : 1; /* in software echo mode */ unsigned fl_endwin : 2; /* has called endwin */ unsigned fl_meta : 1; /* in meta mode */ unsigned fl_nonl : 1; /* do not xlate input \r-> \n */ unsigned yesidln : 1; /* has idln capabilities */ unsigned dmode : 1; /* Terminal has delete mode */ unsigned imode : 1; /* Terminal has insert mode */ unsigned ichok : 1; /* Terminal can insert characters */ unsigned dchok : 1; /* Terminal can delete characters */ unsigned sid_equal : 1; /* enter insert and delete mode equal */ unsigned eid_equal : 1; /* exit insert and delete mode equal */ unsigned phys_irm : 1; /* in insert mode or not */ long baud; /* baud rate of this tty */ short kp_state; /* 1 iff keypad is on, else 0 */ short Yabove; /* How many lines are above stdscr */ short lsize; /* How many lines decided by newscreen */ short csize; /* How many columns decided by newscreen */ short tsize; /* How big is a tab decided by newscreen */ WINDOW *std_scr; /* primary output screen */ WINDOW *cur_scr; /* what's physically on the screen */ WINDOW *virt_scr; /* what's virtually on the screen */ int *cur_hash; /* hash table of curscr */ int *virt_hash; /* hash table of virtscr */ TERMINAL *tcap; /* TERMINFO info */ FILE *term_file; /* File to write on for output. */ FILE *input_file; /* Where to get keyboard input */ SLK_MAP *slk; /* Soft label information */ char **_mks; /* marks, only used with xhp terminals */ COSTS term_costs; /* costs of various capabilities */ SGTTY save_tty_buf; /* saved termio state of this tty */ #ifdef SYSV SGTTYS save_tty_bufs; /* saved termios state of this tty */ #endif char **_color_mks; /* marks, only used with color xhp terminals */ unsigned long _trap_mbe; /* trap these mouse button events */ unsigned long _map_mbe_to_key; /* map selected buttons on top of */ /* slk's to function keys */ }; extern SCREEN *SP; extern WINDOW *_virtscr; #ifdef DEBUG #ifndef outf extern FILE *outf; #endif /* outf */ #endif /* DEBUG */ extern short cswidth[], /* byte size of multi-byte chars */ _curs_scrwidth[]; /* display size */ extern short _csmax, _scrmax; extern bool _mbtrue; #define MBIT 0200 /* indicator for a multi-byte char */ #define CBIT 002000000000 /* indicator for a continuing col */ #define RBYTE(x) ((x) & 0377) #define LBYTE(x) (((x) >> 8) & 0177) #define ISMBIT(x) ((x) & MBIT) #define SETMBIT(x) ((x) |= MBIT) #define CLRMBIT(x) ((x) &= ~MBIT) #define ISCBIT(x) ((x) & CBIT) #define SETCBIT(x) ((x) |= CBIT) #define CLRCBIT(x) ((x) &= ~CBIT) #define TYPE(x) ((x) == SS2 ? 1 : (x) == SS3 ? 2 : ISMBIT(x) ? 0 : 3) #define TRIM 037777777777 /* 0xFFFFFFFF */ /* terminfo magic number */ #define MAGNUM 0432 /* curses screen dump magic number */ #define SVR2_DUMP_MAGIC_NUMBER 0433 #define SVR3_DUMP_MAGIC_NUMBER 0434 /* Getting the baud rate is different on the two systems. */ #ifdef SYSV #define _BR(x) (x.c_cflag & CBAUD) #define _BRS(x) (cfgetospeed(&x)) #include #else /* SYSV */ #define BITSPERBYTE 8 #define MAXINT 32767 #define _BR(x) (x.sg_ispeed) #endif /* SYSV */ #define _BLNKCHAR ' ' #define _CTRL(c) (c | 0100) #define _ATTR(c) ((c) & A_ATTRIBUTES) #define _CHAR(c) ((c) & A_CHARTEXT) /* * combine CHAR par of the character with the attributes of the window. * Two points: 1) If character is blank, usebackground instead * 2) If character contains color, delete color from * window attribute. */ #define _WCHAR(w, c) (_CHAR((c) == _BLNKCHAR ? (w)->_bkgd : (c))| \ (((c) & A_COLOR) ? ((w)->_attrs & ~A_COLOR) : \ ((w)->_attrs))) #define _DARKCHAR(c) ((c) != _BLNKCHAR) #define _UNCTRL(c) ((c) ^ 0100) /* blank lines info of curscr */ #define _BEGNS curscr->_firstch #define _ENDNS curscr->_lastch /* hash tables */ #define _CURHASH SP->cur_hash #define _VIRTHASH SP->virt_hash /* top/bot line changed */ #define _VIRTTOP _virtscr->_parx #define _VIRTBOT _virtscr->_pary /* video marks */ #define _MARKS SP->_mks #define _COLOR_MARKS SP->_color_mks #define _NUMELEMENTS(x) (sizeof (x)/sizeof (x[0])) #ifdef _VR3_COMPAT_CODE /* * #define _TO_OCHTYPE(x) ((_ochtype)(((x&A_ATTRIBUTES)>>9)| \ * (x&0x0000007FUL))) */ #define _TO_OCHTYPE(x) ((_ochtype)(((x&A_ATTRIBUTES)>>9)|(x&0177))) #define _FROM_OCHTYPE(x) ((chtype) ((x&0177) | ((x&0177600)<<9))) extern void (*_y16update)(WINDOW *, int, int, int, int); #endif /* _VR3_COMPAT_CODE */ /* functions for screen updates */ extern int (*_setidln)(void); extern int (*_useidln)(void); extern int (*_quick_ptr)(WINDOW *, chtype); extern int (_quick_echo)(WINDOW *, chtype); /* min/max functions */ #define _MIN(a, b) ((a) < (b) ? (a) : (b)) #define _MAX(a, b) ((a) > (b) ? (a) : (b)) extern int (*_do_slk_ref)(void); extern int (*_do_slk_tch)(void); extern int (*_do_slk_noref)(void); extern int _image(WINDOW *); extern int _outch(char); extern int _outwch(chtype); extern int _chkinput(void); extern int _curs_mbtowc(wchar_t *, const char *, size_t); extern int _curs_wctomb(char *, wchar_t); extern int _delay(int, int (*)(char)); extern int _mbaddch(WINDOW *, chtype, chtype); extern int _mbclrch(WINDOW *, int, int); extern int _mbinsshift(WINDOW *, int), _mbvalid(WINDOW *); extern int _padjust(WINDOW *, int, int, int, int, int, int); extern int _prefresh(int (*)(WINDOW *), WINDOW *, int, int, int, int, int, int); extern int _overlap(WINDOW *, WINDOW *, int); extern int _scr_all(char *, int); extern int _slk_update(void); extern int _tcsearch(char *, short [], char *[], int, int); extern int _vsscanf(const char *, const char *, __va_list); extern int force_doupdate(void); extern int init_acs(void); extern int mbscrw(int); extern int mbeucw(int); extern int scr_ll_dump(FILE *); extern int scr_reset(FILE *, int); extern int setkeymap(void); extern int ttimeout(int); extern int wadjcurspos(WINDOW *); extern int wcscrw(wchar_t); extern int wmbmove(WINDOW *, int, int); extern chtype tgetch(int); extern WINDOW *_makenew(int, int, int, int); extern void (*_slk_init)(void); extern void (*_rip_init)(void); extern void delkeymap(TERMINAL *); extern void mbgetwidth(void); extern void memSset(chtype *, chtype, int); extern void _blast_keys(TERMINAL *); extern void _init_costs(void); extern void _init_HP_pair(short, short, short); extern void _update_old_y_area(WINDOW *, int, int, int, int); extern char *tparm_p0(char *); extern char *tparm_p1(char *, long); extern char *tparm_p2(char *, long, long); extern char *tparm_p3(char *, long, long, long); extern char *tparm_p4(char *, long, long, long, long); extern char *tparm_p7(char *, long, long, long, long, long, long, long); extern char *infotocap(char *, int *); extern char *_strcode2byte(wchar_t *, char *, int); extern char *wmbinch(WINDOW *, int, int); #ifdef __cplusplus } #endif #endif /* _CURSHDR_H */