summaryrefslogtreecommitdiff
path: root/usr/src/lib/libcurses/screen/curshdr.h
blob: 46a23414f44f6c647acb8672a2730e11b7676b90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
/*
 * 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

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#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	<values.h>
#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 */