1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 23/* 24 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 25 * Use is subject to license terms. 26 */ 27 28/* Copyright (c) 1988 AT&T */ 29/* All Rights Reserved */ 30 31/* 32 * University Copyright- Copyright (c) 1982, 1986, 1988 33 * The Regents of the University of California 34 * All Rights Reserved 35 * 36 * University Acknowledgment- Portions of this document are derived from 37 * software developed by the University of California, Berkeley, and its 38 * contributors. 39 */ 40 41#ifndef _CURSHDR_H 42#define _CURSHDR_H 43 44#pragma ident "%Z%%M% %I% %E% SMI" 45 46#ifdef __cplusplus 47extern "C" { 48#endif 49 50#define _NOHASH (-1) /* if the hash value is unknown */ 51#define _REDRAW (-2) /* if line need redrawn */ 52#define _BLANK (-3) /* if line is blank */ 53#define _THASH (123) /* base hash if clash with other hashes */ 54#define _KEY (01) 55#define _MACRO (02) 56 57#define _INPUTPENDING cur_term->_iwait 58#define _PUTS(x, y) (void) tputs(x, y, _outch) 59#define _VIDS(na, oa) (vidupdate((na), (oa), _outch), curscr->_attrs = (na)) 60#define _ONINSERT() (_PUTS(enter_insert_mode, 1), SP->phys_irm = TRUE) 61#define _OFFINSERT() (_PUTS(exit_insert_mode, 1), SP->phys_irm = FALSE) 62#define _STRNOTEQ(a, b) (a == NULL ? (b != NULL) : \ 63 (b == NULL ? 1 : strcmp(a, b))) 64 65/* 66 * IC and IL overheads and costs should be set to this 67 * value if the corresponding feature is missing 68 */ 69 70#define LARGECOST 500 71 72typedef struct 73{ 74 short icfixed; /* Insert char fixed overhead */ 75 short dcfixed; /* Delete char fixed overhead */ 76 short Insert_character; 77 short Delete_character; 78 short Cursor_home; 79 short Cursor_to_ll; 80 short Cursor_left; 81 short Cursor_right; 82 short Cursor_down; 83 short Cursor_up; 84 short Carriage_return; 85 short Tab; 86 short Back_tab; 87 short Clr_eol; 88 short Clr_bol; 89 short Parm_ich; 90 short Parm_dch; 91 short Parm_left_cursor; 92 short Parm_up_cursor; 93 short Parm_down_cursor; 94 short Parm_right_cursor; 95 short Cursor_address; 96 short Row_address; 97} COSTS; 98 99#define _COST(field) (SP->term_costs.field) 100 101/* Soft label keys */ 102 103#define LABMAX 16 /* max number of labels allowed */ 104#define LABLEN 8 /* max length of each label */ 105 106typedef struct 107{ 108 WINDOW *_win; /* the window to display labels */ 109 char _ldis[LABMAX][LABLEN+1]; /* labels suitable to display */ 110 char _lval[LABMAX][LABLEN+1]; /* labels' true values */ 111 short _labx[LABMAX]; /* where to display labels */ 112 short _num; /* actual number of labels */ 113 short _len; /* real length of labels */ 114 bool _changed; /* TRUE if some labels changed */ 115 bool _lch[LABMAX]; /* change status */ 116} SLK_MAP; 117 118struct screen 119{ 120 unsigned fl_echoit : 1; /* in software echo mode */ 121 unsigned fl_endwin : 2; /* has called endwin */ 122 unsigned fl_meta : 1; /* in meta mode */ 123 unsigned fl_nonl : 1; /* do not xlate input \r-> \n */ 124 unsigned yesidln : 1; /* has idln capabilities */ 125 unsigned dmode : 1; /* Terminal has delete mode */ 126 unsigned imode : 1; /* Terminal has insert mode */ 127 unsigned ichok : 1; /* Terminal can insert characters */ 128 unsigned dchok : 1; /* Terminal can delete characters */ 129 unsigned sid_equal : 1; /* enter insert and delete mode equal */ 130 unsigned eid_equal : 1; /* exit insert and delete mode equal */ 131 unsigned phys_irm : 1; /* in insert mode or not */ 132 long baud; /* baud rate of this tty */ 133 short kp_state; /* 1 iff keypad is on, else 0 */ 134 short Yabove; /* How many lines are above stdscr */ 135 short lsize; /* How many lines decided by newscreen */ 136 short csize; /* How many columns decided by newscreen */ 137 short tsize; /* How big is a tab decided by newscreen */ 138 WINDOW *std_scr; /* primary output screen */ 139 WINDOW *cur_scr; /* what's physically on the screen */ 140 WINDOW *virt_scr; /* what's virtually on the screen */ 141 int *cur_hash; /* hash table of curscr */ 142 int *virt_hash; /* hash table of virtscr */ 143 TERMINAL *tcap; /* TERMINFO info */ 144 FILE *term_file; /* File to write on for output. */ 145 FILE *input_file; /* Where to get keyboard input */ 146 SLK_MAP *slk; /* Soft label information */ 147 char **_mks; /* marks, only used with xhp terminals */ 148 COSTS term_costs; /* costs of various capabilities */ 149 SGTTY save_tty_buf; /* saved termio state of this tty */ 150#ifdef SYSV 151 SGTTYS save_tty_bufs; /* saved termios state of this tty */ 152#endif 153 char **_color_mks; /* marks, only used with color xhp terminals */ 154 unsigned long _trap_mbe; /* trap these mouse button events */ 155 unsigned long _map_mbe_to_key; /* map selected buttons on top of */ 156 /* slk's to function keys */ 157}; 158 159extern SCREEN *SP; 160extern WINDOW *_virtscr; 161 162#ifdef DEBUG 163#ifndef outf 164extern FILE *outf; 165#endif /* outf */ 166#endif /* DEBUG */ 167 168extern short cswidth[], /* byte size of multi-byte chars */ 169 _curs_scrwidth[]; /* display size */ 170extern short _csmax, 171 _scrmax; 172extern bool _mbtrue; 173 174#define MBIT 0200 /* indicator for a multi-byte char */ 175#define CBIT 002000000000 /* indicator for a continuing col */ 176#define RBYTE(x) ((x) & 0377) 177#define LBYTE(x) (((x) >> 8) & 0177) 178#define ISMBIT(x) ((x) & MBIT) 179#define SETMBIT(x) ((x) |= MBIT) 180#define CLRMBIT(x) ((x) &= ~MBIT) 181#define ISCBIT(x) ((x) & CBIT) 182#define SETCBIT(x) ((x) |= CBIT) 183#define CLRCBIT(x) ((x) &= ~CBIT) 184#define TYPE(x) ((x) == SS2 ? 1 : (x) == SS3 ? 2 : ISMBIT(x) ? 0 : 3) 185#define TRIM 037777777777 /* 0xFFFFFFFF */ 186 187/* terminfo magic number */ 188#define MAGNUM 0432 189 190/* curses screen dump magic number */ 191#define SVR2_DUMP_MAGIC_NUMBER 0433 192#define SVR3_DUMP_MAGIC_NUMBER 0434 193 194/* Getting the baud rate is different on the two systems. */ 195 196#ifdef SYSV 197#define _BR(x) (x.c_cflag & CBAUD) 198#define _BRS(x) (cfgetospeed(&x)) 199#include <values.h> 200#else /* SYSV */ 201#define BITSPERBYTE 8 202#define MAXINT 32767 203#define _BR(x) (x.sg_ispeed) 204#endif /* SYSV */ 205 206#define _BLNKCHAR ' ' 207#define _CTRL(c) (c | 0100) 208#define _ATTR(c) ((c) & A_ATTRIBUTES) 209#define _CHAR(c) ((c) & A_CHARTEXT) 210 211/* 212 * combine CHAR par of the character with the attributes of the window. 213 * Two points: 1) If character is blank, usebackground instead 214 * 2) If character contains color, delete color from 215 * window attribute. 216 */ 217 218#define _WCHAR(w, c) (_CHAR((c) == _BLNKCHAR ? (w)->_bkgd : (c))| \ 219 (((c) & A_COLOR) ? ((w)->_attrs & ~A_COLOR) : \ 220 ((w)->_attrs))) 221 222#define _DARKCHAR(c) ((c) != _BLNKCHAR) 223#define _UNCTRL(c) ((c) ^ 0100) 224 225/* blank lines info of curscr */ 226#define _BEGNS curscr->_firstch 227#define _ENDNS curscr->_lastch 228 229/* hash tables */ 230#define _CURHASH SP->cur_hash 231#define _VIRTHASH SP->virt_hash 232 233/* top/bot line changed */ 234#define _VIRTTOP _virtscr->_parx 235#define _VIRTBOT _virtscr->_pary 236 237/* video marks */ 238#define _MARKS SP->_mks 239#define _COLOR_MARKS SP->_color_mks 240 241#define _NUMELEMENTS(x) (sizeof (x)/sizeof (x[0])) 242 243#ifdef _VR3_COMPAT_CODE 244/* 245 * #define _TO_OCHTYPE(x) ((_ochtype)(((x&A_ATTRIBUTES)>>9)| \ 246 * (x&0x0000007FUL))) 247 */ 248#define _TO_OCHTYPE(x) ((_ochtype)(((x&A_ATTRIBUTES)>>9)|(x&0177))) 249#define _FROM_OCHTYPE(x) ((chtype) ((x&0177) | ((x&0177600)<<9))) 250extern void (*_y16update)(WINDOW *, int, int, int, int); 251#endif /* _VR3_COMPAT_CODE */ 252 253/* functions for screen updates */ 254 255extern int (*_setidln)(void); 256extern int (*_useidln)(void); 257extern int (*_quick_ptr)(WINDOW *, chtype); 258extern int (_quick_echo)(WINDOW *, chtype); 259 260/* min/max functions */ 261 262#define _MIN(a, b) ((a) < (b) ? (a) : (b)) 263#define _MAX(a, b) ((a) > (b) ? (a) : (b)) 264 265extern int (*_do_slk_ref)(void); 266extern int (*_do_slk_tch)(void); 267extern int (*_do_slk_noref)(void); 268extern int _image(WINDOW *); 269extern int _outch(char); 270extern int _outwch(chtype); 271extern int _chkinput(void); 272extern int _curs_mbtowc(wchar_t *, const char *, size_t); 273extern int _curs_wctomb(char *, wchar_t); 274extern int _delay(int, int (*)(char)); 275extern int _mbaddch(WINDOW *, chtype, chtype); 276extern int _mbclrch(WINDOW *, int, int); 277extern int _mbinsshift(WINDOW *, int), _mbvalid(WINDOW *); 278extern int _padjust(WINDOW *, int, int, int, int, int, int); 279extern int _prefresh(int (*)(WINDOW *), WINDOW *, int, int, int, 280 int, int, int); 281extern int _overlap(WINDOW *, WINDOW *, int); 282extern int _scr_all(char *, int); 283extern int _slk_update(void); 284extern int _tcsearch(char *, short [], char *[], int, int); 285extern int _vsscanf(const char *, const char *, __va_list); 286extern int force_doupdate(void); 287extern int init_acs(void); 288extern int mbscrw(int); 289extern int mbeucw(int); 290extern int scr_ll_dump(FILE *); 291extern int scr_reset(FILE *, int); 292extern int setkeymap(void); 293extern int ttimeout(int); 294extern int wadjcurspos(WINDOW *); 295extern int wcscrw(wchar_t); 296extern int wmbmove(WINDOW *, int, int); 297 298extern chtype tgetch(int); 299 300extern WINDOW *_makenew(int, int, int, int); 301 302extern void (*_slk_init)(void); 303extern void (*_rip_init)(void); 304extern void delkeymap(TERMINAL *); 305extern void mbgetwidth(void); 306extern void memSset(chtype *, chtype, int); 307extern void _blast_keys(TERMINAL *); 308extern void _init_costs(void); 309extern void _init_HP_pair(short, short, short); 310extern void _update_old_y_area(WINDOW *, int, int, int, int); 311 312extern char *tparm_p0(char *); 313extern char *tparm_p1(char *, long); 314extern char *tparm_p2(char *, long, long); 315extern char *tparm_p3(char *, long, long, long); 316extern char *tparm_p4(char *, long, long, long, long); 317extern char *tparm_p7(char *, long, long, long, long, long, long, long); 318 319 320extern char *infotocap(char *, int *); 321extern char *_strcode2byte(wchar_t *, char *, int); 322extern char *wmbinch(WINDOW *, int, int); 323 324#ifdef __cplusplus 325} 326#endif 327 328#endif /* _CURSHDR_H */ 329