File: curses.h

package info (click to toggle)
xconq 7.2.2-2
  • links: PTS
  • area: main
  • in suites: slink
  • size: 8,296 kB
  • ctags: 9,199
  • sloc: ansic: 107,849; sh: 2,108; perl: 2,057; makefile: 1,177; sed: 161; csh: 50; awk: 49; lisp: 39
file content (447 lines) | stat: -rw-r--r-- 15,643 bytes parent folder | download | duplicates (3)
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
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
#ifndef INCLUDED_CURSES_H
#define INCLUDED_CURSES_H

#ifdef MPW
#define MAC
#define QD(whatever) (qd.##whatever)
#endif

#ifdef THINK_C
#define MAC
#define QD(whatever) (whatever)
#endif

#ifdef __MWERKS__
#define MAC
#define QD(whatever) (qd.##whatever)
#endif

#include <stdio.h>
#include <stdarg.h>

#ifndef TRUE
typedef enum { FALSE=0, TRUE=1 } bool;
#else
typedef unsigned	bool;
#endif

#ifndef MIN
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#endif /* MIN */

#ifndef MAX
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#endif /* MAX */

typedef int		chtype;	/* Characters and attributes		*/

#define	_SUBWIN		01
#define	_ENDLINE	02
#define	_FULLWIN	04
#define	_SCROLLWIN	010
#define	_FLUSH		020
#define	_ISPAD		040
#define	_WINCHANGED	0100
#define	_WINMOVED	0200

typedef struct
{
    short	_cury, _curx;
    short	_maxy, _maxx;
    short	_begy, _begx;
    short	_pmap_orgy, _pmap_orgx;	/* Upper left corner of most recent prefresh on pad. */
    short	_pmap_maxy, _pmap_maxx;	/* Max x/y of most recent prefresh on pad. */
    short	_xdim;					/* Value to add to chtype pointer to move down a row. */
    short	_flags;
    chtype	_attrs;
    bool	_clear;
    bool	_leave;
    bool	_scroll;
    bool	_use_idl;	/* 0=no, 1=yes, 2=go by need_idl */
    bool	_use_keypad;	/* 0=no, 1=yes, 2=yes/timeout */
    bool	_use_meta;	/* T=use the meta key */
    bool	_nodelay;	/* T=don't wait for tty input */
    chtype	*_y;		/* Unix uses **_y */
    short	*_firstch;
    short	*_lastch;
    bool	_notimeout;	/* T=do wait for rest of function key */
    bool	_need_idl;	/* T=have done ins/del line/scroll recently */
    short	_tmarg,_bmarg;	/* Scrolling rows */
} WINDOW;

typedef void	*SCREEN;		/* newterm()/setterm() not supported */

#define	ERR	(-1)
#define	OK	(1)

/****
* These two macros convert window-relative cursor position to screen-relative:
****/

#define _CURS_CURSOR_SCREEN_ROW(w) ((w)->_begy + (w)->_cury - \
	(((w)->_flags & _ISPAD) ? (w)->_pmap_orgy : 0))
#define _CURS_CURSOR_SCREEN_COL(w) ((w)->_begx + (w)->_curx - \
	(((w)->_flags & _ISPAD) ? (w)->_pmap_orgx : 0))

#ifdef MAC

#include <macurses.h>

extern bool	maccur_init		(void);
extern int	maccur_refresh	(WINDOW *win, bool outflag);
extern bool	maccur_end		(void);
extern void	maccur_beep		(int flag);
extern int	maccur_kbinp	(WINDOW *win, bool raw, bool cbreak);
extern void maccur_flush_typeahead(void);

#define CURS_INIT_FN maccur_init
#define CURS_REFRESH_FN maccur_refresh
#define CURS_END_FN maccur_end
#define CURS_BEEP_FN maccur_beep
#define CURS_KBINP_FN maccur_kbinp
#define CURS_FLUSHINP_FN maccur_flush_typeahead

#else

/*
 * External, machine-specific entry points:
 */

extern bool	ms_init		(void);
extern int	ms_refresh	(WINDOW *win, bool outflag);
extern bool	ms_end		(void);
extern void ms_restore_scrn	(void);
extern void	ms_beep		(int flag);
extern int	ms_kbinp	(WINDOW *win, bool raw, bool cbreak);
extern void ms_flushinp	(void);

#define CURS_INIT_FN ms_init
#define CURS_REFRESH_FN ms_refresh
#define CURS_END_FN ms_end
#define CURS_BEEP_FN ms_beep
#define CURS_KBINP_FN ms_kbinp
#define CURS_FLUSHINP_FN ms_flushinp

#endif /* MAC */

extern char*	_curses_prntw;		/* printw() buffer		*/
extern unsigned	_curses_prntw_size;	/* Nbr chars in printw() buffer	*/
extern int _curses_tab_wid;			/* Width of tab (defaults to 8). */
extern WINDOW*	stdscr;			/* Default terminal window	*/
extern int	COLS;			/* Nbr columns in screen	*/
extern int	LINES;			/* Nbr lines in screen		*/

#define	addch(ch)		waddch(stdscr, ch)
#define	getch()			wgetch(stdscr)
#define	addstr(str)		waddstr(stdscr, str)
#define	getstr(str)		wgetstr(stdscr, str)
#define	move(y, x)		wmove(stdscr, y, x)
#define	clear()			wclear(stdscr)
#define	erase()			werase(stdscr)
#define	clrtobot()		wclrtobot(stdscr)
#define	clrtoeol()		wclrtoeol(stdscr)
#define	insertln()		winsertln(stdscr)
#define	deleteln()		wdeleteln(stdscr)
#define	refresh()		wrefresh(stdscr)
#define	inch()			winch(stdscr)
#define	insch(c)		winsch(stdscr,c)
#define	delch()			wdelch(stdscr)
#define	standout()		wstandout(stdscr)
#define	standend()		wstandend(stdscr)
#define	attron(at)		wattron(stdscr,at)
#define	attroff(at)		wattroff(stdscr,at)
#define	attrset(at)		wattrset(stdscr,at)
#define	echochar(ch)		wechochar(stdscr, ch)

#define	setscrreg(t,b)		wsetscrreg(stdscr, t, b)
#define	wsetscrreg(win,t,b)	(win->_tmarg=(t),win->_bmarg=(b))

#define crmode()		nocbreak()

/*
 * mv functions
 */

#define	mvwaddch(win,y,x,c)	(wmove(win,y,x)==ERR?ERR:waddch(win,c))
#define	mvwgetch(win,y,x)	(wmove(win,y,x)==ERR?ERR:wgetch(win))
#define	mvwaddstr(win,y,x,s)	(wmove(win,y,x)==ERR?ERR:waddstr(win,s))
#define	mvwgetstr(win,y,x,s)	(wmove(win,y,x)==ERR?ERR:wgetstr(win,s))
#define	mvwinch(win,y,x)	(wmove(win,y,x)==ERR?ERR:winch(win))
#define	mvwdelch(win,y,x)	(wmove(win,y,x)==ERR?ERR:wdelch(win))
#define	mvwinsch(win,y,x,c)	(wmove(win,y,x)==ERR?ERR:winsch(win,c))
#define	mvaddch(y,x,ch)		mvwaddch(stdscr,y,x,ch)
#define	mvgetch(y,x)		mvwgetch(stdscr,y,x)
#define	mvaddstr(y,x,str)	mvwaddstr(stdscr,y,x,str)
#define	mvgetstr(y,x,str)	mvwgetstr(stdscr,y,x,str)
#define	mvinch(y,x)		mvwinch(stdscr,y,x)
#define	mvdelch(y,x)		mvwdelch(stdscr,y,x)
#define	mvinsch(y,x,c)		mvwinsch(stdscr,y,x,c)

/*
 * psuedo functions
 */

#define	getyx(win,y,x)		(y = win->_cury, x = win->_curx)
#define	getbegyx(win,y,x)	(y = win->_begy, x = win->_begx)
#define	getmaxyx(win,y,x)	(y = win->_maxy, x = win->_maxx)
#define	getsyx(y,x)		(_getsyx(&y,&x))
#define	winch(win)		(win->_y[win->_cury*win->_maxx+win->_curx])

#define	clearok(win,bf)		((win)->_clear = (bf))
#define	leaveok(win,bf)		((win)->_leave = (bf))
#define	scrollok(win,bf)	((win)->_scroll = (bf))

extern int	alarm		(void);
extern int	beep		(void);
extern int	box			(WINDOW *win, chtype vertch, chtype horch);
extern int	cbreak		(void);
extern int copywin		(WINDOW *src_win, WINDOW *dst_win,
						 int sminy, int sminx, int dminy, int dminx,
						 int dmaxy, int dmaxx, bool overlay_flag);
extern int	delwin		(WINDOW *win);
extern int	doupdate	(void);
extern int	echo		(void);
extern int	endwin		(void);
extern int	flushinp	(void);
extern int	halfdelay	(int tenths);
extern WINDOW	*initscr	(void);
extern int	intrflush	(WINDOW *win, bool flag);
extern bool	isendwin	(void);
extern int	keypad		(WINDOW *win, bool flag);
extern int	meta		(WINDOW *win, bool flag);
extern int	mvprintw	(int y, int x, char *fmt, ...);
extern int	mvscanw	(int y, int x, char *fmt, ...);
extern int	mvwin		(WINDOW *win, int y, int x);
extern int	mvwprintw	(WINDOW *win, int y, int x, char *fmt, ...);
extern int	mvwscanw	(WINDOW *win, int y, int x, char *fmt, ...);
extern WINDOW	*newpad		(int nlines, int ncols);
extern WINDOW	*newwin		(int nlines, int ncols, int beg_y, int beg_x);
extern int	nl		(void);
extern int	nocbreak	(void);
extern int	nodelay		(WINDOW *win, bool flag);
extern int	noecho		(void);
extern int	nonl		(void);
extern int	noraw		(void);
extern int	notimeout	(WINDOW *win, bool flag);
extern int	overwrite	(WINDOW *src_win, WINDOW *dst_win);
extern int	overlay		(WINDOW *src_win, WINDOW *dst_win);
extern int	pnoutrefresh(WINDOW *pad, int pminy, int pminx,
						 int sminy, int sminx, int smaxy, int smaxx);
extern int	prefresh	(WINDOW *pad, int pminy, int pminx,
						 int sminy, int sminx, int smaxy, int smaxx);
extern int	printw		(char *fmt, ...);
extern int	raw		(void);
extern int	scanw		(char *fmt, ...);
extern int	scroll		(WINDOW *win);
extern WINDOW*	subpad	(WINDOW *parnt_pad, int nlines, int ncols, int beg_y, int beg_x);
extern WINDOW*	subwin	(WINDOW *parnt_win, int nlines, int ncols, int beg_y, int beg_x);
extern int	touchline	(WINDOW *win, int start, int count);
extern int	touchwin	(WINDOW *win);
extern int	ungetch		(chtype ch);
extern int	vwprintw	(WINDOW *win, char *fmt, va_list ap);
extern int	vwscanw		(WINDOW *win, char *fmt, va_list ap);
extern int	waddch		(WINDOW *win, chtype ch);
extern int	waddstr		(WINDOW *win, char *str);
extern int	wattroff	(WINDOW *win, chtype attrs);
extern int	wattron		(WINDOW *win, chtype attrs);
extern int	wattrset	(WINDOW *win, chtype attrs);
extern int	wclear		(WINDOW *win);
extern int	wclrtobot	(WINDOW *win);
extern int	wclrtoeol	(WINDOW *win);
extern int	wdelch		(WINDOW *win);
extern int	wdeleteln	(WINDOW *win);
extern int	wechochar	(WINDOW *win, chtype ch);
extern int	werase		(WINDOW *win);
extern int	wgetch		(WINDOW *win);
extern int	wgetstr		(WINDOW *win, char *str);
extern int	winsch		(WINDOW *win, chtype ch);
extern int	winsertln	(WINDOW *win);
extern int	wmove		(WINDOW *win, int ypos, int xpos);
extern int	wnoutrefresh	(WINDOW *win);
extern int	wprintw		(WINDOW *win, char *fmt, ...);
extern int	wrefresh	(WINDOW *win);
extern int	wscanw		(WINDOW *win, char *fmt, ...);
extern int	wstandend	(WINDOW *win);
extern int	wstandout	(WINDOW *win);

#define	A_STANDOUT	0000200
#define	A_UNDERLINE	0000400
#define	A_REVERSE	0001000
#define	A_BLINK		0002000
#define	A_DIM		0004000
#define	A_BOLD		0010000
#define	A_ALTCHARSET	0100000
#define	A_NORMAL	0000000

#define	_STANDOUT	A_STANDOUT

#define	A_CHARTEXT	0177
#define	A_ATTRIBUTES	(~A_CHARTEXT)

/*
 * Line drawing and special display characters:
 */

#ifdef THINK_C

#define	ACS_HLINE	'-'
#define	ACS_VLINE	'|'
#define	ACS_ULCORNER	'*'
#define	ACS_LLCORNER	'*'
#define	ACS_URCORNER	'*'
#define	ACS_LRCORNER	'*'

#else

#define	ACS_BSSB	(acs_map['l'])
#define	ACS_SSBB	(acs_map['m'])
#define	ACS_BBSS	(acs_map['k'])
#define	ACS_SBBS	(acs_map['j'])
#define	ACS_SBSS	(acs_map['u'])
#define	ACS_SSSB	(acs_map['t'])
#define	ACS_SSBS	(acs_map['v'])
#define	ACS_BSSS	(acs_map['w'])
#define	ACS_BSBS	(acs_map['q'])
#define	ACS_SBSB	(acs_map['x'])
#define	ACS_SSSS	(acs_map['n'])

#define	ACS_SBBS	(acs_map['j'])
#define	ACS_BBSS	(acs_map['k'])
#define	ACS_BSSB	(acs_map['l'])
#define	ACS_SSBB	(acs_map['m'])
#define	ACS_SSSS	(acs_map['n'])
#define	ACS_BSBS	(acs_map['q'])
#define	ACS_SSSB	(acs_map['t'])
#define	ACS_SBSS	(acs_map['u'])
#define	ACS_SSBS	(acs_map['v'])
#define	ACS_BSSS	(acs_map['w'])
#define	ACS_SBSB	(acs_map['x'])

#define	ACS_ULCORNER	ACS_BSSB
#define	ACS_LLCORNER	ACS_SSBB
#define	ACS_URCORNER	ACS_BBSS
#define	ACS_LRCORNER	ACS_SBBS
#define	ACS_RTEE	ACS_SBSS
#define	ACS_LTEE	ACS_SSSB
#define	ACS_BTEE	ACS_SSBS
#define	ACS_TTEE	ACS_BSSS
#define	ACS_HLINE	ACS_BSBS
#define	ACS_VLINE	ACS_SBSB
#define	ACS_PLUS	ACS_SSSS

#define	ACS_S1		(acs_map['o'])		/* scan line 1 */
#define	ACS_S9		(acs_map['s'])		/* scan line 9 */
#define	ACS_DIAMOND	(acs_map['`'])		/* diamond */
#define	ACS_CKBOARD	(acs_map['a'])		/* checkerboard */
#define	ACS_DEGREE	(acs_map['f'])		/* degree symbol */
#define	ACS_PLMINUS	(acs_map['g'])		/* plus/minus */
#define	ACS_BULLET	(acs_map['~'])		/* bullet */
#define	ACS_LARROW	(acs_map[','])		/* left arrow */
#define	ACS_RARROW	(acs_map['+'])		/* right arrow */
#define	ACS_DARROW	(acs_map['.'])		/* down arrow */
#define	ACS_UARROW	(acs_map['-'])		/* up arrow */
#define	ACS_BOARD	(acs_map['h'])		/* board of squares */
#define	ACS_LANTERN	(acs_map['i'])		/* lantern symbol */
#define	ACS_BLOCK	(acs_map['0'])		/* solid square block */

extern chtype acs_map[];

#endif /* THINK_C */

#define	KEY_BREAK	0401		/* break key (unreliable) */
#define	KEY_DOWN	0402		/* terminal down arrow key */
#define	KEY_UP		0403		/* terminal up arrow key */
#define	KEY_LEFT	0404		/* terminal left arrow key */
#define	KEY_RIGHT	0405		/* terminal right arrow key */
#define	KEY_HOME	0406		/* home key */
#define	KEY_BACKSPACE	0407		/* backspace key */
#define	KEY_F0		0410		/* function key f0 */
#define	KEY_F(n)	(KEY_F0+(n))	/* Up to 64 function keys */
#define	KEY_DL		0510		/* delete line key */
#define	KEY_IL		0511		/* insert line */
#define	KEY_DC		0512		/* delete character key */
#define	KEY_IC		0513		/* ins chr/ins mode key */
#define	KEY_EIC		0514		/* rmir/smir in insert mode x */
#define	KEY_CLEAR	0515		/* clear screen or erase key */
#define	KEY_EOS		0516		/* clear-to-end-of-screen key x */
#define	KEY_EOL		0517		/* clear-to-end-of-line key x */
#define	KEY_SF		0520		/* scroll-forward/down key */
#define	KEY_SR		0521		/* scroll-backward/up key */
#define	KEY_NPAGE	0522		/* next-page key */
#define	KEY_PPAGE	0523		/* previous-page key */
#define	KEY_STAB	0524		/* set-tab key x */
#define	KEY_CTAB	0525		/* clear-tab key x */
#define	KEY_CATAB	0526		/* clear-all-tabs key x */
#define	KEY_ENTER	0527		/* Enter/send (unreliable) */
#define	KEY_SRESET	0530		/* soft reset (unreliable) x */
#define	KEY_RESET	0531		/* hard reset (unreliable) x */
#define	KEY_PRINT	0532		/* print or copy x */
#define	KEY_LL		0533		/* home-down key x */
 					/* The keypad is arranged	*/
					/* as follows:			*/
					/*    a1    up    a3		*/
					/*   left   b2  right		*/
					/*    c1   down   c3		*/
#define	KEY_A1		0534		/* Upper left of keypad */
#define	KEY_A3		0535		/* Upper right of keypad */
#define	KEY_B2		0536		/* Center of keypad */
#define	KEY_C1		0537		/* Lower left of keypad */
#define	KEY_C3		0540		/* Lower right of keypad */
#define	KEY_BTAB	0541		/* Back tab key x */
#define	KEY_BEG		0542		/* beg(inning) key x */
#define	KEY_CANCEL	0543		/* cancel key x */
#define	KEY_CLOSE	0544		/* close key x */
#define	KEY_COMMAND	0545		/* cmd (command) key x */
#define	KEY_COPY	0546		/* copy key x */
#define	KEY_CREATE	0547		/* create key x */
#define	KEY_END		0550		/* end key */
#define	KEY_EXIT	0551		/* exit key x */
#define	KEY_FIND	0552		/* find key x */
#define	KEY_HELP	0553		/* help key x */
#define	KEY_MARK	0554		/* mark key x */
#define	KEY_MESSAGE	0555		/* message key x */
#define	KEY_MOVE	0556		/* move key x */
#define	KEY_NEXT	0557		/* next object key x */
#define	KEY_OPEN	0560		/* open key x */
#define	KEY_OPTIONS	0561		/* options key x */
#define	KEY_PREVIOUS	0562		/* previous object key x */
#define	KEY_REDO	0563		/* redo key x */
#define	KEY_REFERENCE	0564		/* ref(erence) key x */
#define	KEY_REFRESH	0565		/* refresh key x */
#define	KEY_REPLACE	0566		/* replace key x */
#define	KEY_RESTART	0567		/* restart key x */
#define	KEY_RESUME	0570		/* resume key x */
#define	KEY_SAVE	0571		/* save key x */
#define	KEY_SBEG	0572		/* shifted beginning key x */
#define	KEY_SCANCEL	0573		/* shifted cancel key x */
#define	KEY_SCOMMAND	0574		/* shifted command key x */
#define	KEY_SCOPY	0575		/* shifted copy key x */
#define	KEY_SCREATE	0576		/* shifted create key x */
#define	KEY_SDC		0577		/* shifted delete char key x */
#define	KEY_SDL		0600		/* shifted delete line key x */
#define	KEY_SELECT	0601		/* select key x */
#define	KEY_SEND	0602		/* shifted end key x */
#define	KEY_SEOL	0603		/* shifted clear line key x */
#define	KEY_SEXIT	0604		/* shifted exit key x */
#define	KEY_SFIND	0605		/* shifted find key x */
#define	KEY_SHELP	0606		/* shifted help key x */
#define	KEY_SHOME	0607		/* shifted home key x */
#define	KEY_SIC		0610		/* shifted input key x */
#define	KEY_SLEFT	0611		/* shifted left arrow key */
#define	KEY_SMESSAGE	0612		/* shifted message key x */
#define	KEY_SMOVE	0613		/* shifted move key x */
#define	KEY_SNEXT	0614		/* shifted next key x */
#define	KEY_SOPTIONS	0615		/* shifted options key x */
#define	KEY_SPREVIOUS	0616		/* shifted prev key x */
#define	KEY_SPRINT	0617		/* shifted print key x */
#define	KEY_SREDO	0620		/* shifted redo key x */
#define	KEY_SREPLACE	0621		/* shifted replace key x */
#define	KEY_SRIGHT	0622		/* shifted right arrow */
#define	KEY_SRSUME	0623		/* shifted resume key x */
#define	KEY_SSAVE	0624		/* shifted save key x */
#define	KEY_SSUSPEND	0625		/* shifted suspend key x */
#define	KEY_SUNDO	0626		/* shifted undo key x */
#define	KEY_SUSPEND	0627		/* suspend key x */
#define	KEY_UNDO	0630		/* undo key x */

#endif