Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4973 right-hear 1
/*
2
***************************************************************************
3
* This file comprises part of PDCurses. PDCurses is Public Domain software.
4
* You may use this code for whatever purposes you desire. This software
5
* is provided AS IS with NO WARRANTY whatsoever.
6
* Should this software be used in another application, an acknowledgement
7
* that PDCurses code is used would be appreciated, but is not mandatory.
8
*
9
* Any changes which you make to this software which may improve or enhance
10
* it, should be forwarded to the current maintainer for the benefit of
11
* other users.
12
*
13
* The only restriction placed on this code is that no distribution of
14
* modified PDCurses code be made under the PDCurses name, by anyone
15
* other than the current maintainer.
16
*
17
* See the file maintain.er for details of the current maintainer.
18
***************************************************************************
19
*/
20
/*
21
$Id$
22
*/
23
/*
24
*----------------------------------------------------------------------
25
*				PDCurses
26
*----------------------------------------------------------------------
27
* MH
28
*	950126	2.2	Added more System V R4 functions
29
*
30
*			Added beta Xwindows port
31
*
32
*			Changed chtype to long
33
*
34
*			Incorporated panels library
35
*
36
*			Support for more and newer versions of compilers
37
*
38
* MH
39
*	930531	2.1	Added support for djgpp
40
*
41
*			Added beta Unix version
42
*
43
*			Added OS/2 DLL support.
44
*
45
*			Changed behaviour of overlay(), overwrite() and typeahead()
46
*
47
*	921120	2.0	Changed #if to #ifdef/#if defined to make it
48
*			easier to add new platforms/compilers.
49
*
50
*			Added System V colour support.
51
*
52
*			Added OS/2 port.
53
*-------
54
* Frotz
55
*	911221	2.0 pre-beta	Changed back from short to int. (int is the
56
*			correct size for the default platform.  Short
57
*			might be too short on some platforms.  This
58
*			is more portable.  I, also, made this mistake.)
59
*
60
*			Many functions are now macros.  If you want
61
*			the real thing, #undef the macro. (X/Open
62
*			requirement.)
63
*
64
*			Merged many sources into current release.
65
*
66
*			Added many X/Open routines (not quite all yet).
67
*
68
*			Added internal documentation to all routines.
69
*
70
*			Added a HISTORY file to the environment.
71
*
72
*			Added a CONTRIB file to the environment.
73
*-------
74
* bl	900114	1.4	Window origin mod in overlay() and overwrite(), on
75
*			public (and very reasonable) request. Swapped
76
*			#define'd values of OK and ERR; OK now 1, and
77
*			ERR is 0/NULL. Conforms better to UNIX
78
*			versions.  borderchars[] removed from WINDOW
79
*			struct since the border() functions were
80
*			redefined. Use of short wherever possible.
81
*			Portability improvements, mispelled name of
82
*			[w]setscrreg().
83
*
84
*	881005	1.3	All modules lint-checked with MSC '-W3' and
85
*			turbo'C' '-w -w-pro' switches. Support for
86
*			border(), wborder() functions.
87
*
88
*	881002	1.2	Rcsid[] string in all modules, for maintenance.
89
*
90
*	880306	1.1	'Raw' output routines, revision info in curses.h.
91
*
92
*	870515	1.0	Initial Release.
93
*
94
*----------------------------------------------------------------------
95
*/
96
 
97
#ifndef  __PDCURSES__
98
#define	__PDCURSES__ 1
99
 
100
/*man-start*********************************************************************
101
 
102
All defines are "defined" here.  All compiler and environment
103
specific definitions are defined into generic class defines.
104
These defines are to be given values so that the code can
105
rely on #if, rather than a complicated set of #if defined() or
106
#ifdefs...
107
 
108
PDCurses definitions list:  (Only define those needed)
109
 
110
	REGISTERWINDOWS True for auto window update registery.
111
	FAST_VIDEO      True if display is memory mapped, or
112
	                we can utilize the fast video update routines.
113
	DOS             True if compiling for DOS.
114
	OS2             True if compiling for OS/2.
115
	FLEXOS          True if compiling for Flexos.
116
	HC              True if using a Metaware compiler.
117
	TC              True if using a Borland compiler.
118
	MSC             True if using a Microsoft compiler.
119
	ANSI            True if the compiler supports ANSI C and
120
	                (full or mixed) prototypes.
121
	CPLUSPLUS       True if the compiler supports C++.
122
 
123
PDCurses portable platform definitions list:
124
 
125
	PDCurses        Enables access to PDCurses-only routines.
126
	XOPEN           Always true.
127
	SYSV            True if you are compiling for SYSV portability.
128
	BSD             True if you are compiling for BSD portability.
129
	INTERNAL        Enables access to internal PDCurses routines.
130
	PDCURSES_WCLR   Makes behaviour of wclrtoeol() and wclrtoeof()
131
	                unique to PDCurses. By default Unix behavior is set.
132
	                See notes in wclrtoeol() and wclrtoeof().
133
**man-end**********************************************************************/
134
 
135
#define	PDCURSES	1	/* PDCurses-only routines	*/
136
#define	XOPEN		1	/* X/Open Curses routines	*/
137
#define	SYSV		1	/* System V Curses routines	*/
138
#define	BSD		1	/* BSD Curses routines		*/
139
#define	INTERNAL	1	/* PDCurses Internal routines	*/
140
 
141
 
142
#ifdef __MENUET_CURSES__
143
 
144
#undef DOS
145
#undef LINUX
146
#undef UNIX
147
#define MENUETOS	1
148
#define ANSI		1
149
#define CURSES__32BIT__
150
#ifdef _cplusplus
151
#define CPLUSPLUS 1
152
#endif
153
#define NO_VSSCANF 1
154
#endif
155
 
156
/*---------------------------------------------------------------------*/
157
#include 		/* Required by X/Open usage below	*/
158
/*----------------------------------------------------------------------
159
 *
160
 *	PDCurses Manifest Constants
161
 *
162
 */
163
#ifndef FALSE			/* booleans		 */
164
#  define	FALSE	0
165
#endif
166
#ifndef	TRUE			/* booleans		 */
167
#  define	TRUE	!FALSE
168
#endif
169
#ifndef	NULL
170
#  define NULL	((void*)0)	/* Null pointer		 */
171
#endif
172
#ifndef	ERR
173
#  define	 ERR	0		/* general error flag	 */
174
#endif
175
#ifndef	OK
176
#  define	 OK	1		/* general OK flag	 */
177
#endif
178
 
179
 
180
 
181
 
182
/*----------------------------------------------------------------------
183
 *
184
 *	PDCurses Type Declarations
185
 *
186
 */
187
typedef unsigned char bool;	/* PDCurses Boolean type	*/
188
typedef unsigned short chtype;	/* 8-bit attr + 8-bit char	*/
189
 
190
 
191
 
192
/*----------------------------------------------------------------------
193
 *
194
 *	PDCurses Structure Definitions:
195
 *
196
 */
197
typedef struct _win		/* definition of a window.	   */
198
{
199
	int	_cury;		/* current pseudo-cursor	   */
200
	int	_curx;
201
	int	_maxy;		/* max window coordinates	   */
202
	int	_maxx;
203
	int	_pmaxy;		/* max physical size		   */
204
	int	_pmaxx;
205
	int	_begy;		/* origin on screen		   */
206
	int	_begx;
207
	int	_lastpy;	/* last y coordinate of upper left pad display area */
208
	int	_lastpx;	/* last x coordinate of upper left pad display area */
209
	int	_lastsy1;	/* last upper y coordinate of screen window for pad */
210
	int	_lastsx1;	/* last upper x coordinate of screen window for pad */
211
	int	_lastsy2;	/* last lower y coordinate of screen window for pad */
212
	int	_lastsx2;	/* last lower x coordinate of screen window for pad */
213
	int	_flags;		/* window properties		   */
214
	chtype	_attrs;		/* standard A_STANDOUT attributes and colors  */
215
	chtype	_bkgd;		/* wrs(4/6/93) background, normally blank */
216
	int	_tabsize;	/* tab character size		   */
217
	bool	_clear;		/* causes clear at next refresh	   */
218
	bool	_leave;		/* leaves cursor as it happens	   */
219
	bool	_scroll;	/* allows window scrolling	   */
220
	bool	_nodelay;	/* input character wait flag	   */
221
	bool	_immed;	/* immediate update flag	   */
222
	bool	_use_keypad;	/* flags keypad key mode active	   */
223
	bool	_use_idl;	/* True if Ins/Del line can be used*/
224
	bool	_use_idc;	/* True if Ins/Del character can be used*/
225
	chtype**_y;		/* pointer to line pointer array   */
226
	int*	_firstch;	/* first changed character in line */
227
	int*	_lastch;	/* last changed character in line  */
228
	int	_tmarg;	/* top of scrolling region	   */
229
	int	_bmarg;	/* bottom of scrolling region	   */
230
	char*	_title;		/* window title			   */
231
	char	_title_ofs;	/* window title offset from left   */
232
	chtype	_title_attr;	/* window title attributes	   */
233
	chtype	_blank;		/* window's blank character	   */
234
	int	_parx, _pary;	/* coords relative to parent (0,0) */
235
struct	_win*	_parent;	/* subwin's pointer to parent win  */
236
}	WINDOW;
237
 
238
 
239
 
240
/*----------------------------------------------------------------------
241
*
242
*	Private structures that are necessary for correct
243
*	macro construction.
244
*
245
*/
246
 
247
#ifdef	REGISTERWINDOWS
248
typedef struct _ref		/* Refresh Window Structure	 */
249
{
250
	WINDOW*	win;
251
struct	_ref*	next;
252
struct	_ref*	tail;
253
}	ACTIVE;
254
 
255
typedef struct _wins
256
{
257
	WINDOW*		w;	/* pointer to a visible window	    */
258
	struct _wins*	next;	/* Next visible window pointer	    */
259
	struct _wins*	prev;	/* Next visible window pointer	    */
260
	struct _wins*	tail;	/* Last visible window pointer	    */
261
				/* Only head window (stdscr) has    */
262
				/* a valid tail pointer.	    */
263
}	WINDS;
264
#endif
265
 
266
 
267
 
268
 
269
typedef struct
270
{
271
	bool	alive;		/* TRUE if already opened.	    */
272
	bool	autocr;		/* if lf -> crlf		    */
273
	bool	cbreak;		/* if terminal unbuffered	    */
274
	bool	echo;		/* if terminal echo		    */
275
	bool	raw_inp;	/* raw input mode (v. cooked input) */
276
	bool	raw_out;	/* raw output mode (7 v. 8 bits)    */
277
	bool	refrbrk;	/* if premature refresh brk allowed */
278
	bool	orgcbr;		/* original MSDOS ^-BREAK setting   */
279
	bool	visible_cursor; /* TRUE if cursor is visible	    */
280
	bool	audible;	/* FALSE if the bell is visual	    */
281
	bool	full_redraw;	/* TRUE for bad performance	    */
282
	bool	direct_video;	/* Allow Direct Screen Memory writes*/
283
	bool	mono;		/* TRUE if current screen is mono.  */
284
	bool	sizeable;	/* TRUE if adapter is resizeable.   */
285
	bool	bogus_adapter;	/* TRUE if adapter has insane values*/
286
	bool	shell;		/* TRUE if reset_prog_mode() needs  */
287
				/*	to be called.		    */
288
	chtype	blank;		/* Background character		    */
289
	chtype	orig_attr;	/* Original screen attributes	    */
290
	int	cursrow;	/* position of physical cursor	    */
291
	int	curscol;	/* position of physical cursor	    */
292
	int	cursor;		/* Current Cursor definition	    */
293
	int	visibility;		/* Visibility of cursor	*/
294
	int	video_page;	/* Current PC video page	    */
295
	int	orig_emulation; /* Original cursor emulation value  */
296
	int	orig_cursor;	/* Original cursor size		    */
297
	int	font;		/* default font size		    */
298
	int	orig_font;	/* Original font size		    */
299
	int	lines;		/* New value for LINES		    */
300
	int	cols;		/* New value for COLS		    */
301
	int	emalloc;	/* 0x0C0C if initscr() is to reset  */
302
				/*     this value to TRUE;	    */
303
				/* TRUE only if emalloc()/ecalloc() */
304
				/*     are is to be used;	    */
305
				/* FALSE if malloc()/calloc() are   */
306
				/*     to be used.		    */
307
	int tahead; 			/* Type-ahead value */
308
	int adapter;			/* Screen type	*/
309
#ifdef UNIX
310
	int	adapter;	/* Screen type			    */
311
	int number_keys;	/* number of function keys */
312
	char *key_seq[200];	/* key sequence ptr for function keys */
313
	int key_num[200];	/* key numbers for function keys */
314
#endif
315
 
316
}	SCREEN;
317
 
318
 
319
 
320
 
321
 
322
/* external variables */
323
extern	int	LINES;		/* terminal height		*/
324
extern	int	COLS;		/* terminal width		*/
325
extern	WINDOW*	stdscr;		/* the default screen window	*/
326
extern	SCREEN	_cursvar;	/* curses variables		*/
327
 
328
#if	defined (INTERNAL) | defined (CURSES_LIBRARY)
329
extern	WINDOW*	curscr;		/* the current screen image	*/
330
extern	int	_default_lines;	/* For presetting maximum lines	*/
331
#endif
332
 
333
#ifdef	REGISTERWINDOWS
334
extern	ACTIVE*	CurWins;	/* Currently Visible Windows	*/
335
#endif
336
 
337
 
338
 
339
 
340
/*man-start*********************************************************************
341
 
342
PDCurses Text Attributes:
343
 
344
To include colour in PDCurses, a number of things had to be sacrificed
345
from the strict Unix and System V support.
346
The main problem is fitting all character attributes and colour into
347
an unsigned char (all 8 bits!). On System V, chtype is a long on
348
PDCurses it is a short int.
349
 
350
The following is the structure of a win->_attrs chtype:
351
 
352
-------------------------------------------------
353
|15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0|
354
-------------------------------------------------
355
 colour number |  attrs |   character eg 'a'
356
 
357
the high order char is an index into an array of physical colours
358
(defined in INITPAIR.c). 32 (5 bits) foreground/background colour
359
combinations combined with 8 (3 bits) attribute modifiers are
360
available.
361
 
362
The available attribute enhancers are bold, reverse and blink.
363
All other Unix attributes have no effect as attributes. This
364
limitation may be overcome in future releases by expanding chtype
365
to a long.
366
 
367
**man-end**********************************************************************/
368
 
369
/* Video attribute definitions. */
370
#define A_NORMAL	(chtype)0x0000		/* SysV */
371
#define A_ALTCHARSET	(chtype)0x0000		/* X/Open	*/
372
#define A_BLINK		(chtype)0x0400		/* X/Open	*/
373
#define A_BLANK		(chtype)0x0000		/* X/Open	*/
374
#define A_BOLD		(chtype)0x0100		/* X/Open	*/
375
#define A_DIM		(chtype)0x0000		/* X/Open	*/
376
#define A_PROTECT	(chtype)0x0000		/* X/Open	*/
377
#define A_REVERSE	(chtype)0x0200		/* X/Open	*/
378
#define A_STANDOUT	((chtype)(A_REVERSE | A_BOLD))		/* X/Open	*/
379
#define A_UNDERLINE	(chtype)0x0000		/* X/Open	*/
380
#define A_COLOR	(chtype)0xF800		/*System V	*/
381
#define A_CHARTEXT	(chtype)(0xFF)			/* X/Open	*/
382
#define A_ATTRIBUTES	(chtype)(~A_CHARTEXT)			/* X/Open	*/
383
 
384
#define CHR_MSK		A_CHARTEXT		/* Obsolete	*/
385
#define ATR_MSK		A_ATTRIBUTES	/* Obsolete	*/
386
#define ATR_NRM		A_NORMAL			/* Obsolete	*/
387
 
388
#define ACS_ULCORNER	(chtype)0xda			/* SysV		*/
389
#define ACS_LLCORNER	(chtype)0xc0			/* SysV		*/
390
#define ACS_URCORNER	(chtype)0xbf			/* SysV		*/
391
#define ACS_LRCORNER	(chtype)0xd9			/* SysV		*/
392
#define ACS_RTEE	(chtype)0xb4			/* SysV		*/
393
#define ACS_LTEE	(chtype)0xc3			/* SysV		*/
394
#define ACS_BTEE	(chtype)0xc1			/* SysV		*/
395
#define ACS_TTEE	(chtype)0xc2			/* SysV		*/
396
#define ACS_HLINE	(chtype)0xc4			/* SysV		*/
397
#define ACS_VLINE	(chtype)0xb3			/* SysV		*/
398
#define ACS_PLUS	(chtype)0xc5			/* SysV		*/
399
#define ACS_S1	(chtype)0x2d			/* SysV		*/
400
#define ACS_S9	(chtype)0x5f			/* SysV		*/
401
#define ACS_DIAMOND	(chtype)0xc5			/* SysV		*/
402
#define ACS_CKBOARD	(chtype)0xb2			/* SysV		*/
403
#define ACS_DEGREE	(chtype)0xf8			/* SysV		*/
404
#define ACS_PLMINUS	(chtype)0xf1			/* SysV		*/
405
#define ACS_BULLET	(chtype)0xf9			/* SysV		*/
406
#define ACS_LARROW	(chtype)0x3c			/* SysV		*/
407
#define ACS_RARROW	(chtype)0x3e			/* SysV		*/
408
#define ACS_DARROW	(chtype)0x76			/* SysV		*/
409
#define ACS_UARROW	(chtype)0x5e			/* SysV		*/
410
#define ACS_BOARD	(chtype)0x23			/* SysV		*/
411
#define ACS_LANTERN	(chtype)0x23			/* SysV		*/
412
#define ACS_BLOCK	(chtype)0x23			/* SysV		*/
413
 
414
#  define COLOR_BLACK		0
415
#  define COLOR_BLUE		1
416
#  define COLOR_GREEN		2
417
#  define COLOR_CYAN		3
418
#  define COLOR_RED		4
419
#  define COLOR_MAGENTA		5
420
#  define COLOR_YELLOW		6
421
#  define COLOR_WHITE		7
422
 
423
#define COLOR_PAIR(n)  (((n) << 11) & A_ATTRIBUTES)
424
#define PAIR_NUMBER(n) (((n) & A_COLOR) >> 11)
425
 
426
extern int COLORS,COLOR_PAIRS;
427
/*----------------------------------------------------------------------
428
 *
429
 *	Function and Keypad Key Definitions.
430
 *	Many are just for compatibility.
431
 *
432
 */
433
#define KEY_MIN         0x101   /* Minimum curses key value      */
434
#define KEY_BREAK       0x101   /* Not on PC KBD                 */
435
#define KEY_DOWN        0x102   /* Down arrow key                */
436
#define KEY_UP          0x103   /* Up arrow key                  */
437
#define KEY_LEFT        0x104   /* Left arrow key                */
438
#define KEY_RIGHT       0x105   /* Right arrow key               */
439
#define KEY_HOME        0x106   /* home key                      */
440
#define KEY_BACKSPACE   0x107   /* not on pc                     */
441
#define KEY_F0          0x108   /* function keys. space for      */
442
#define KEY_F(n)    (KEY_F0+(n))/* 64 keys are reserved.         */
443
#define KEY_DL          0x148   /* not on pc                     */
444
#define KEY_IL          0x149   /* insert line                   */
445
#define KEY_DC          0x14a   /* delete character              */
446
#define KEY_IC          0x14b   /* insert char or enter ins mode */
447
#define KEY_EIC         0x14c   /* exit insert char mode         */
448
#define KEY_CLEAR       0x14d   /* clear screen                  */
449
#define KEY_EOS         0x14e   /* clear to end of screen        */
450
#define KEY_EOL         0x14f   /* clear to end of line          */
451
#define KEY_SF          0x150   /* scroll 1 line forward         */
452
#define KEY_SR          0x151   /* scroll 1 line back (reverse)  */
453
#define KEY_NPAGE       0x152   /* next page                     */
454
#define KEY_PPAGE       0x153   /* previous page                 */
455
#define KEY_STAB        0x154   /* set tab                       */
456
#define KEY_CTAB        0x155   /* clear tab                     */
457
#define KEY_CATAB       0x156   /* clear all tabs                */
458
#define KEY_ENTER       0x157   /* enter or send (unreliable)    */
459
#define KEY_SRESET      0x158   /* soft/reset (partial/unreliable)*/
460
#define KEY_RESET       0x159   /* reset/hard reset (unreliable) */
461
#define KEY_PRINT       0x15a   /* print/copy                    */
462
#define KEY_LL          0x15b   /* home down/bottom (lower left) */
463
#define KEY_ABORT       0x15c   /* abort/terminate key (any)     */
464
#define KEY_SHELP       0x15d   /* short help                    */
465
#define KEY_LHELP       0x15e   /* long help                     */
466
#define KEY_BTAB        0x15f   /* Back tab key                  */
467
#define KEY_BEG         0x160   /* beg(inning) key               */
468
#define KEY_CANCEL      0x161   /* cancel key                    */
469
#define KEY_CLOSE       0x162   /* close key                     */
470
#define KEY_COMMAND     0x163   /* cmd (command) key             */
471
#define KEY_COPY        0x164   /* copy key                      */
472
#define KEY_CREATE      0x165   /* create key                    */
473
#define KEY_END         0x166   /* end key                       */
474
#define KEY_EXIT        0x167   /* exit key                      */
475
#define KEY_FIND        0x168   /* find key                      */
476
#define KEY_HELP        0x169   /* help key                      */
477
#define KEY_MARK        0x16a   /* mark key                      */
478
#define KEY_MESSAGE     0x16b   /* message key                   */
479
#define KEY_MOVE        0x16c   /* move key                      */
480
#define KEY_NEXT        0x16d   /* next object key               */
481
#define KEY_OPEN        0x16e   /* open key                      */
482
#define KEY_OPTIONS     0x16f   /* options key                   */
483
#define KEY_PREVIOUS    0x170   /* previous object key           */
484
#define KEY_REDO        0x171   /* redo key                      */
485
#define KEY_REFERENCE   0x172   /* ref(erence) key               */
486
#define KEY_REFRESH     0x173   /* refresh key                   */
487
#define KEY_REPLACE     0x174   /* replace key                   */
488
#define KEY_RESTART     0x175   /* restart key                   */
489
#define KEY_RESUME      0x176   /* resume key                    */
490
#define KEY_SAVE        0x177   /* save key                      */
491
#define KEY_SBEG        0x178   /* shifted beginning key         */
492
#define KEY_SCANCEL     0x179   /* shifted cancel key            */
493
#define KEY_SCOMMAND    0x17a   /* shifted command key           */
494
#define KEY_SCOPY       0x17b   /* shifted copy key              */
495
#define KEY_SCREATE     0x17c   /* shifted create key            */
496
#define KEY_SDC         0x17d   /* shifted delete char key       */
497
#define KEY_SDL         0x17e   /* shifted delete line key       */
498
#define KEY_SELECT      0x17f   /* select key                    */
499
#define KEY_SEND        0x180   /* shifted end key               */
500
#define KEY_SEOL        0x181   /* shifted clear line key        */
501
#define KEY_SEXIT       0x182   /* shifted exit key              */
502
#define KEY_SFIND       0x183   /* shifted find key              */
503
#define KEY_SHOME       0x184   /* shifted home key              */
504
#define KEY_SIC         0x185   /* shifted input key             */
505
#define KEY_SLEFT       0x187   /* shifted left arrow key        */
506
#define KEY_SMESSAGE    0x188   /* shifted message key           */
507
#define KEY_SMOVE       0x189   /* shifted move key              */
508
#define KEY_SNEXT       0x18a   /* shifted next key              */
509
#define KEY_SOPTIONS    0x18b   /* shifted options key           */
510
#define KEY_SPREVIOUS   0x18c   /* shifted prev key              */
511
#define KEY_SPRINT      0x18d   /* shifted print key             */
512
#define KEY_SREDO       0x18e   /* shifted redo key              */
513
#define KEY_SREPLACE    0x18f   /* shifted replace key           */
514
#define KEY_SRIGHT      0x190   /* shifted right arrow           */
515
#define KEY_SRSUME      0x191   /* shifted resume key            */
516
#define KEY_SSAVE       0x192   /* shifted save key              */
517
#define KEY_SSUSPEND    0x193   /* shifted suspend key           */
518
#define KEY_SUNDO       0x194   /* shifted undo key              */
519
#define KEY_SUSPEND     0x195   /* suspend key                   */
520
#define KEY_UNDO        0x196   /* undo key                      */
521
 
522
/* PDCurses specific key definitions */
523
 
524
#define ALT_0           0x197   /* Alt-0                PC only  */
525
#define ALT_1           0x198   /* Alt-1                PC only  */
526
#define ALT_2           0x199   /* Alt-2                PC only  */
527
#define ALT_3           0x19a   /* Alt-3                PC only  */
528
#define ALT_4           0x19b   /* Alt-4                PC only  */
529
#define ALT_5           0x19c   /* Alt-5                PC only  */
530
#define ALT_6           0x19d   /* Alt-6                PC only  */
531
#define ALT_7           0x19e   /* Alt-7                PC only  */
532
#define ALT_8           0x19f   /* Alt-8                PC only  */
533
#define ALT_9           0x1a0   /* Alt-9                PC only  */
534
#define ALT_A           0x1a1   /* Alt-A                PC only  */
535
#define ALT_B           0x1a2   /* Alt-B                PC only  */
536
#define ALT_C           0x1a3   /* Alt-C                PC only  */
537
#define ALT_D           0x1a4   /* Alt-D                PC only  */
538
#define ALT_E           0x1a5   /* Alt-E                PC only  */
539
#define ALT_F           0x1a6   /* Alt-F                PC only  */
540
#define ALT_G           0x1a7   /* Alt-G                PC only  */
541
#define ALT_H           0x1a8   /* Alt-H                PC only  */
542
#define ALT_I           0x1a9   /* Alt-I                PC only  */
543
#define ALT_J           0x1aa   /* Alt-J                PC only  */
544
#define ALT_K           0x1ab   /* Alt-K                PC only  */
545
#define ALT_L           0x1ac   /* Alt-L                PC only  */
546
#define ALT_M           0x1ad   /* Alt-M                PC only  */
547
#define ALT_N           0x1ae   /* Alt-N                PC only  */
548
#define ALT_O           0x1af   /* Alt-O                PC only  */
549
#define ALT_P           0x1b0   /* Alt-P                PC only  */
550
#define ALT_Q           0x1b1   /* Alt-Q                PC only  */
551
#define ALT_R           0x1b2   /* Alt-R                PC only  */
552
#define ALT_S           0x1b3   /* Alt-S                PC only  */
553
#define ALT_T           0x1b4   /* Alt-T                PC only  */
554
#define ALT_U           0x1b5   /* Alt-U                PC only  */
555
#define ALT_V           0x1b6   /* Alt-V                PC only  */
556
#define ALT_W           0x1b7   /* Alt-W                PC only  */
557
#define ALT_X           0x1b8   /* Alt-X                PC only  */
558
#define ALT_Y           0x1b9   /* Alt-Y                PC only  */
559
#define ALT_Z           0x1ba   /* Alt-Z                PC only  */
560
#define CTL_LEFT        0x1bb   /* Control-Left-Arrow   PC only  */
561
#define CTL_RIGHT       0x1bc   /* Control-Right-Arrow  PC only  */
562
#define CTL_PGUP        0x1bd   /* Control-PgUp         PC only  */
563
#define CTL_PGDN        0x1be   /* Control-PgDn         PC only  */
564
#define CTL_HOME        0x1bf   /* Control-Home         PC only  */
565
#define CTL_END         0x1c0   /* Control-End          PC only  */
566
#define KEY_BACKTAB     0x1c1   /* Back-tab             PC only  */
567
 
568
#define KEY_A1          0x1c2   /* upper left on Virtual keypad  */
569
#define KEY_A2          0x1c3   /* upper middle on Virt. keypad  */
570
#define KEY_A3          0x1c4   /* upper right on Vir. keypad    */
571
#define KEY_B1          0x1c5   /* middle left on Virt. keypad   */
572
#define KEY_B2          0x1c6   /* center on Virt. keypad        */
573
#define KEY_B3          0x1c7   /* middle right on Vir. keypad   */
574
#define KEY_C1          0x1c8   /* lower left on Virt. keypad    */
575
#define KEY_C2          0x1c9   /* lower middle on Virt. keypad  */
576
#define KEY_C3          0x1ca   /* lower right on Vir. keypad    */
577
#define PADSLASH        0x1cb   /* slash on keypad               */
578
#define PADENTER        0x1cc   /* enter on keypad               */
579
#define CTL_PADENTER    0x1cd   /* ctl-enter on keypad           */
580
#define ALT_PADENTER    0x1ce   /* alt-enter on keypad           */
581
#define SHF_PADSTOP     0x1cf   /* shift-stop on keypad          */
582
#define PADSTAR         0x1d0   /* star on keypad                */
583
#define PADMINUS        0x1d1   /* minus on keypad               */
584
#define PADPLUS         0x1d2   /* plus on keypad                */
585
#define CTL_PADSTOP     0x1d3   /* ctl-stop on keypad            */
586
#define CTL_PADCENTER   0x1d4   /* ctl-enter on keypad           */
587
#define CTL_PADPLUS     0x1d5   /* ctl-plus on keypad            */
588
#define CTL_PADMINUS    0x1d6   /* ctl-minus on keypad           */
589
#define CTL_PADSLASH    0x1d7   /* ctl-slash on keypad           */
590
#define CTL_PADSTAR     0x1d8   /* ctl-star on keypad            */
591
#define ALT_PADPLUS     0x1d9   /* alt-plus on keypad            */
592
#define ALT_PADMINUS    0x1da   /* alt-minus on keypad           */
593
#define ALT_PADSLASH    0x1db   /* alt-slash on keypad           */
594
#define ALT_PADSTAR     0x1dc   /* alt-star on keypad            */
595
#define CTL_INS         0x1dd   /* ctl-insert                    */
596
#define ALT_DEL         0x1de   /* alt-delete                    */
597
#define ALT_INS         0x1df   /* alt-insert                    */
598
#define CTL_UP          0x1e0   /* ctl-up arrow                  */
599
#define CTL_DOWN        0x1e1   /* ctl-down arrow                */
600
#define CTL_TAB         0x1e2   /* ctl-tab                       */
601
#define ALT_TAB         0x1e3   /* alt-tab                       */
602
#define ALT_MINUS       0x1e4   /* alt-minus                     */
603
#define ALT_EQUAL       0x1e5   /* alt-equal                     */
604
#define ALT_HOME        0x1e6   /* alt-home                      */
605
#define ALT_PGUP        0x1e7   /* alt-pgup                      */
606
#define ALT_PGDN        0x1e8   /* alt-pgdn                      */
607
#define ALT_END         0x1e9   /* alt-end                       */
608
#define ALT_UP          0x1ea   /* alt-up arrow                  */
609
#define ALT_DOWN        0x1eb   /* alt-down arrow                */
610
#define ALT_RIGHT       0x1ec   /* alt-right arrow               */
611
#define ALT_LEFT        0x1ed   /* alt-left arrow                */
612
#define ALT_ENTER       0x1ee   /* alt-enter                     */
613
#define ALT_ESC         0x1ef   /* alt-escape                    */
614
#define ALT_BQUOTE      0x1f0   /* alt-back quote                */
615
#define ALT_LBRACKET    0x1f1   /* alt-left bracket              */
616
#define ALT_RBRACKET    0x1f2   /* alt-right bracket             */
617
#define ALT_SEMICOLON   0x1f3   /* alt-semi-colon                */
618
#define ALT_FQUOTE      0x1f4   /* alt-forward quote             */
619
#define ALT_COMMA       0x1f5   /* alt-comma                     */
620
#define ALT_STOP        0x1f6   /* alt-stop                      */
621
#define ALT_FSLASH      0x1f7   /* alt-forward slash             */
622
#define ALT_BKSP        0x1f8   /* alt-backspace                 */
623
#define CTL_BKSP        0x1f9   /* ctl-backspace                 */
624
#define CTL_PAD0        0x1fa   /* ctl-keypad 0                  */
625
#define CTL_PAD1        0x1fb   /* ctl-keypad 1                  */
626
#define CTL_PAD2        0x1fc   /* ctl-keypad 2                  */
627
#define CTL_PAD3        0x1fd   /* ctl-keypad 3                  */
628
#define CTL_PAD4        0x1fe   /* ctl-keypad 4                  */
629
#define CTL_PAD5        0x1ff   /* ctl-keypad 5                  */
630
#define CTL_PAD6        0x200   /* ctl-keypad 6                  */
631
#define CTL_PAD7        0x201   /* ctl-keypad 7                  */
632
#define CTL_PAD8        0x202   /* ctl-keypad 8                  */
633
#define CTL_PAD9        0x203   /* ctl-keypad 9                  */
634
#define CTL_DEL         0x204   /* clt-delete                    */
635
#define ALT_BSLASH      0x205   /* alt-back slash                */
636
#define CTL_ENTER       0x206   /* ctl-enter                     */
637
#define KEY_MOUSE       0x207 /* "mouse" key  */
638
#define KEY_MAX         KEY_MOUSE  /* Maximum curses key         */
639
 
640
 
641
/*----------------------------------------------------------------------
642
*       PDCurses function declarations
643
*/
644
#ifdef ANSI
645
#  ifdef   CPLUSPLUS
646
     extern "C" {
647
#  endif
648
int     addchnstr( chtype *, int );
649
int     baudrate( void );
650
int     beep( void );
651
int     border( chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype );
652
char    breakchar( void );
653
int     can_change_color ( void );
654
int     clearok( WINDOW*, bool );
655
int     color_content( int, short*, short*, short* );
656
int     copywin( WINDOW*, WINDOW*, int, int, int, int, int, int, int );
657
int     curs_set( int );
658
int     cursoff( void );
659
int     curson( void );
660
int     def_prog_mode( void );
661
int     def_shell_mode( void );
662
int     delay_output(  int  );
663
int     delwin( WINDOW* );
664
WINDOW* derwin( WINDOW*, int, int, int, int );
665
int     doupdate( void );
666
WINDOW* dupwin( WINDOW* );
667
int     endwin( void );
668
char    erasechar( void );
669
int     fixterm( void );
670
int     flash( void );
671
int     flushinp( void );
672
int     gettmode( void );
673
bool    has_colors( void );
674
int     hline( chtype, int );
675
int     inchnstr( chtype *, int );
676
int     init_color( short, short, short, short );
677
int     init_pair( short, short, short );
678
WINDOW* initscr( void );
679
int     intrflush(  WINDOW*, bool  );
680
int     is_linetouched(WINDOW *,int);
681
int     is_wintouched(WINDOW *);
682
char*   keyname(  int  );
683
char    killchar( void );
684
char*   longname( void );
685
int     meta( WINDOW*, bool );
686
int     mvaddrawch( int, int, chtype );
687
int     mvaddrawstr( int, int, char* );
688
int     mvcur( int, int, int, int );
689
int     mvderwin( WINDOW*, int, int );
690
int     mvinsrawch( int, int, chtype );
691
int     mvprintw( int, int, char*,... );
692
int     mvscanw( int, int, char*,... );
693
int     mvwin( WINDOW*, int, int );
694
int     mvwinsrawch( WINDOW*, int, int, chtype );
695
int     mvwprintw( WINDOW*, int, int, char*,... );
696
int     mvwscanw( WINDOW*, int, int, char*,... );
697
WINDOW* newpad( int, int );
698
SCREEN* newterm( char*, FILE*, FILE* );
699
WINDOW* newwin( int, int, int, int );
700
int     noraw( void );
701
int     overlay( WINDOW*, WINDOW* );
702
int     overwrite( WINDOW*, WINDOW* );
703
int     pair_content( int, short*, short* );
704
int     pnoutrefresh( WINDOW*, int, int, int, int, int, int );
705
int     prefresh( WINDOW*, int, int, int, int, int, int );
706
int     printw( char*,... );
707
int     raw( void );
708
int     refresh( void );
709
int     reset_prog_mode( void );
710
int     reset_shell_mode( void );
711
int     resetterm( void );
712
int     resetty( void );
713
int     saveoldterm( void );
714
int     saveterm( void );
715
int     savetty( void );
716
int     scanw( char*,... );
717
int     scroll( WINDOW* );
718
SCREEN* set_term( SCREEN* );
719
int     start_color( void );
720
WINDOW* subpad( WINDOW*, int, int, int, int );
721
WINDOW* subwin( WINDOW*, int, int, int, int );
722
int     tabsize( int );
723
chtype  termattrs( void );
724
char*   termname( void );
725
int     touchline( WINDOW*, int ,int );
726
int     touchwin( WINDOW* );
727
int     typeahead( int );
728
char*   unctrl( chtype );
729
int     vline( chtype, int );
730
int     waddchnstr( WINDOW*, chtype*, int );
731
int     waddnstr( WINDOW*, char*, int );
732
int     waddrawstr( WINDOW*, char* );
733
int     waddstr( WINDOW*, char* );
734
int     wattroff( WINDOW*, chtype );
735
int     wattron( WINDOW*, chtype );
736
int     wattrset( WINDOW*, chtype );
737
int     wbkgd(WINDOW*, chtype);
738
void    wbkgdset(WINDOW*, chtype);
739
int     wborder( WINDOW*, chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype );
740
int     wclear( WINDOW* );
741
int     wclrtobot( WINDOW* );
742
int     wclrtoeol( WINDOW* );
743
int     wdelch( WINDOW* );
744
int     wdeleteln( WINDOW* );
745
int     werase( WINDOW* );
746
int     wgetch( WINDOW* );
747
int     wgetnstr( WINDOW*, char*, int );
748
int     wgetstr( WINDOW*, char* );
749
int     whline( WINDOW*, chtype, int );
750
int     winchnstr( WINDOW*, chtype*, int );
751
int     winnstr( WINDOW*, char*, int );
752
int     winsch( WINDOW*, chtype );
753
int     winsdelln( WINDOW*, int );
754
int     winsertln( WINDOW* );
755
int     winsnstr( WINDOW*, char*, int );
756
int     wmove( WINDOW*, int, int );
757
int     wnoutrefresh( WINDOW* );
758
char    wordchar( void );
759
int     wprintw( WINDOW*, char*,... );
760
int     wredrawln( WINDOW*, int ,int );
761
int     wrefresh( WINDOW* );
762
int     wscanw( WINDOW*, char*,... );
763
int     wscrl( WINDOW*, int );
764
int     wsetscrreg( WINDOW*, int, int );
765
int     wtabsize( WINDOW*, int );
766
int     wtouchln(WINDOW *, int, int, int);
767
int     ungetch( int );
768
int     wvline( WINDOW*, chtype, int );
769
 
770
#ifdef     PDCURSES
771
int     raw_output( bool );
772
int     resize_screen( int );
773
WINDOW* resize_window( WINDOW*, int, int );
774
int     win_print( WINDOW*, int );
775
#endif
776
 
777
/*
778
*       Keep the compiler happy with our macros below...
779
*/
780
int     PDC_chadd( WINDOW*, chtype, bool, bool );
781
int     PDC_chins( WINDOW*, chtype, bool );
782
 
783
#  ifdef   CPLUSPLUS
784
     }
785
#  endif
786
#endif
787
 
788
 
789
#ifndef max
790
#define max(a,b) (((a) > (b)) ? (a) : (b))
791
#endif
792
#ifndef min
793
#define min(a,b) (((a) < (b)) ? (a) : (b))
794
#endif
795
 
796
/*
797
*       Functions defined as macros
798
*/
799
 
800
#define addch( c )              waddch( stdscr, c )
801
#define addchstr( c )           addchnstr( c, -1 )
802
#define addstr(str)             waddstr( stdscr, str )
803
#define addnstr(str, n)         waddnstr( stdscr, str, n )
804
#define attroff(attr)           wattroff( stdscr, attr )
805
#define attron(attr)            wattron( stdscr, attr )
806
#define attrset(attr)           wattrset( stdscr, attr )
807
#define bkgd(c)                 wbkgd(stdscr,c)
808
#define bkgdset(c)              wbkgdset(stdscr,c)
809
#define border(ls,rs,ts,bs,tl,tr,bl,br)  wborder(stdscr,ls,rs,ts,bs,tl,tr,bl,br)
810
#define box( w, v, h )          wborder( w, v, v, h, h, 0, 0, 0, 0 )
811
#define clear()                 (clearok( stdscr, TRUE )==ERR?ERR:wclear( stdscr ))
812
#define clrtobot()              wclrtobot( stdscr )
813
#define clrtoeol()              wclrtoeol( stdscr )
814
#define delch()                 wdelch( stdscr )
815
#define deleteln()              wdeleteln( stdscr )
816
#define derwin(w,nl,nc,by,bx)   subwin((w),(nl),(nc),(by+(w)->_begy),(bx+(w)->_begx))
817
#define echochar(c)             (addch((chtype)c)==ERR?ERR:refresh())
818
#define erase()                 werase( stdscr )
819
#define getbegx(w)              (w)->_begx
820
#define getbegy(w)              (w)->_begy
821
#define getbegyx(w,y,x)         ( y = (w)->_begy, x = (w)->_begx )
822
#define getch()                 wgetch(stdscr)
823
#define getmaxx(w)              (w)->_maxx
824
#define getmaxy(w)              (w)->_maxy
825
#define getmaxyx(w,y,x)         ( y = (w)->_maxy, x = (w)->_maxx )
826
#define getparx(w)              (w)->_parx
827
#define getpary(w)              (w)->_pary
828
#define getparyx(w,y,x)         ( y = (w)->_pary, x = (w)->_parx )
829
#define getstr(str)             wgetstr( stdscr, str )
830
#define getyx(w,y,x)            ( y = (w)->_cury, x = (w)->_curx )
831
#define has_colors()            ((_cursvar.mono) ? FALSE : TRUE)
832
#define idcok(w,flag)           OK
833
#define idlok(w,flag)           OK
834
#define inch()                  (stdscr->_y[stdscr->_cury][stdscr->_curx])
835
#define inchstr( c )            inchnstr( c, stdscr->_maxx-stdscr->_curx )
836
#define innstr(str,n)           winnstr(stdscr,(str),(n))
837
#define insch( c )              winsch( stdscr, c )
838
#define insdelln(n)             winsdelln(stdscr,n)
839
#define insertln()              winsertln( stdscr )
840
#define insnstr(s,n)            winsnstr(stdscr,s,n)
841
#define insstr(s)               winsnstr(stdscr,s,(-1))
842
#define instr(str)              winnstr(stdscr,(str),stdscr->_maxx)
843
#define isendwin()              ((_cursvar.alive) ? FALSE : TRUE)
844
#define keypad(w,flag)          (w->_use_keypad  = flag)
845
#define leaveok(w,flag)         (w->_leave   = flag)
846
#define move(y,x)               wmove( stdscr, y, x )
847
#define mvaddch(y,x,c)          (move( y, x )==ERR?ERR:addch( c ))
848
#define mvaddchstr(y,x,c)       (move( y, x )==ERR?ERR:addchnstr( c, -1 ))
849
#define mvaddchnstr(y,x,c,n)    (move( y, x )==ERR?ERR:addchnstr( c, n ))
850
#define mvaddstr(y,x,str)       (move( y, x )==ERR?ERR:addstr( str ))
851
#define mvdelch(y,x)            (move( y, x )==ERR?ERR:wdelch( stdscr ))
852
#define mvgetch(y,x)            (move( y, x )==ERR?ERR:wgetch(stdscr))
853
#define mvgetstr(y,x,str)       (move( y, x )==ERR?ERR:wgetstr( stdscr, str ))
854
#define mvinch(y,x)             (move( y, x )==ERR?ERR:(stdscr->_y[y][x]))
855
#define mvinchstr(y,x,c)        (move( y, x )==ERR?ERR:inchnstr( c, stdscr->_maxx-stdscr->_curx ))
856
#define mvinchnstr(y,x,c,n)     (move( y, x )==ERR?ERR:inchnstr( c, n ))
857
#define mvinsch(y,x,c)          (move( y, x )==ERR?ERR:winsch( stdscr, c ))
858
#define mvinsnstr(y,x,s,n)      (move( y, x )==ERR?ERR:winsnstr(stdscr,s,n))
859
#define mvinsstr(y,x,s)         (move( y, x )==ERR?ERR:winsnstr(stdscr,s,(-1)))
860
#define mvinstr(y,x,str)        (move( y, x )==ERR?ERR:winnstr(stdscr,(str),stdscr->_maxx))
861
#define mvinnstr(y,x,str,n)     (move( y, x )==ERR?ERR:winnstr(stdscr,(str),(n)))
862
#define mvwaddch(w,y,x,c)       (wmove( w, y, x )==ERR?ERR:waddch( w, c ))
863
#define mvwaddchstr(w,y,x,c)    (wmove( w, y, x )==ERR?ERR:waddchnstr( w, c, -1 ))
864
#define mvwaddchnstr(w,y,x,c,n) (wmove( w, y, x )==ERR?ERR:waddchnstr( w, c, n ))
865
#define mvwaddrawch(w,y,x,c)    (wmove( w, y, x )==ERR?ERR:waddrawch( w, c ))
866
#define mvwaddrawstr(w,y,x,str) (wmove( w, y, x )==ERR?ERR:waddrawstr( w, str ))
867
#define mvwaddstr(w,y,x,str)    (wmove( w, y, x )==ERR?ERR:waddstr( w, str ))
868
#define mvwdelch(w,y,x)         (wmove( w, y, x )==ERR?ERR:wdelch( w ))
869
#define mvwgetch(w,y,x)         (wmove( w, y, x )==ERR?ERR:wgetch( w ))
870
#define mvwgetstr(w,y,x,str)    (wmove( w, y, x )==ERR?ERR:wgetstr( w, str ))
871
#define mvwinch(w,y,x)          (wmove( w, y, x )==ERR?ERR:((w)->_y[y][x]))
872
#define mvwinchstr(w,y,x,c)     (wmove( w, y, x )==ERR?ERR:winchnstr( w, c, (w)->_maxx-(w)->_curx ))
873
#define mvwinchnstr(w,y,x,c,n)  (wmove( w, y, x )==ERR?ERR:winchnstr( w, c, n ))
874
#define mvwinsch(w,y,x,c)       (wmove( w, y, x )==ERR?ERR:winsch( w, c ))
875
#define mvwinstr(w,y,x,str)     (wmove( w, y, x )==ERR?ERR:winnstr(w,str,(w)->_maxx))
876
#define mvwinnstr(w,y,x,str,n)  (wmove( w, y, x )==ERR?ERR:winnstr(w,str,n))
877
#define mvwinsnstr(w,y,x,s,n)   (wmove( w, y, x )==ERR?ERR:winsnstr(w,s,n))
878
#define mvwinsstr(w,y,x,s)      (wmove( w, y, x )==ERR?ERR:winsnstr(w,s,(-1)))
879
#define napms(ms)               delay_output(ms)
880
#define nl()                    (_cursvar.autocr = TRUE)
881
#define nonl()                  (_cursvar.autocr = FALSE)
882
#define notimeout(w,flag)       (OK)
883
#define pechochar(w,c)          (waddch(w,(chtype)c)==ERR?ERR:prefresh(w))
884
#define redrawwin(w)            wredrawln((w),0,(win)->_maxy)
885
#define refrbrk(flag)           (_cursvar.refrbrk = flag)
886
#define refresh()               wrefresh( stdscr )
887
#define scrl(n)                 wscrl(stdscr,n)
888
#define scroll(w)               wscrl((w),1)
889
#define scrollok(w,flag)        ((w)->_scroll  = flag)
890
#define setscrreg(top, bot)     wsetscrreg( stdscr, top, bot )
891
#define standend()              wattrset(stdscr, A_NORMAL)
892
#define standout()              wattrset(stdscr, A_STANDOUT)
893
#define touchline(w,y,n)        wtouchln((w),(y),(n),TRUE)
894
#define touchwin(w)             wtouchln((w),0,(w)->_maxy,TRUE)
895
#define traceoff()              {trace_on = FALSE;}
896
#define traceon()               {trace_on = TRUE;}
897
#define untouchwin(w)           wtouchln((w),0,((w)->_maxy),FALSE)
898
#define waddch(w, c)            PDC_chadd( w, (chtype)c, (bool)!(_cursvar.raw_out), TRUE )
899
#define waddchstr(w, c)         (waddchnstr( w, c, -1 ) )
900
#define wclear(w)               ( werase( w )==ERR?ERR:((w)->_clear = TRUE))
901
#define wechochar(w,c)          (waddch(w,(chtype)c)==ERR?ERR:wrefresh(w))
902
#define winch(w)                ((w)->_y[(w)->_cury][(w)->_curx])
903
#define winchstr(w, c)          (winchnstr( w, c, (w)->_maxx-(w)->_curx ) )
904
#define winsstr(w,str)          winsnstr((w),(str),(-1))
905
#define winstr(w,str)           winnstr((w),str,(w)->_maxx)
906
#define wstandend(w)            wattrset(w, A_NORMAL)
907
#define wstandout(w)            wattrset(w, A_STANDOUT)
908
 
909
#ifndef UNIX
910
#define cbreak()                (_cursvar.cbreak = TRUE)
911
#define nocbreak()              (_cursvar.cbreak = FALSE)
912
#define crmode()                (_cursvar.cbreak = TRUE)
913
#define nocrmode()              (_cursvar.cbreak = FALSE)
914
#define echo()                  (_cursvar.echo = TRUE)
915
#define noecho()                (_cursvar.echo = FALSE)
916
#define nodelay(w,flag)         (w->_nodelay = flag)
917
#endif
918
 
919
#ifdef     PDCURSES
920
#define addrawch( c )           waddrawch( stdscr, c )
921
#define addrawstr(str)          waddrawstr( stdscr, str )
922
#define insrawch( c )           winsrawch( stdscr, c )
923
#define waddrawch(w, c)         PDC_chadd( w, (chtype)c, FALSE, TRUE )
924
#define winsrawch(w, c)         PDC_chins( w, (chtype)c, FALSE )
925
 
926
/*
927
 *      FYI: Need to document these functions...
928
 */
929
#define title(s,a)              wtitle( stdscr, s, (chtype)a )
930
#define titleofs(ofs)           wtitleofs( stdscr, ofs )
931
#define wtitle(w,s,a)           (w->_title = s, w->_title_attr = (chtype)a)
932
#define wtitleofs(w,ofs)        (w->_title_ofs = ofs)
933
#endif
934
 
935
/*
936
 *      Load up curspriv.h.     This should be in the same place as
937
 *      stdlib.h.  We allow anyone who defines CURSES_LIBRARY to have
938
 *      access to our internal routines.  This provides quick
939
 *      PC applications at the expense of portability.
940
 */
941
#if defined     (CURSES_LIBRARY) | defined( INTERNAL)
942
#  include 
943
#  include 
944
#endif
945
 
946
#endif  /* __PDCURSES__ */