xref: /freebsd-src/contrib/ee/new_curse.h (revision 10b3b54548f2290bbe8d8f88c59c28d12b7a635d)
1*72fcea8cSEd Schouten /*
2*72fcea8cSEd Schouten  |	new_curse.h
3*72fcea8cSEd Schouten  |
4*72fcea8cSEd Schouten  |	A subset of curses developed for use with ae.
5*72fcea8cSEd Schouten  |
6*72fcea8cSEd Schouten  |	written by Hugh Mahon
7*72fcea8cSEd Schouten  |
8*72fcea8cSEd Schouten  |	THIS MATERIAL IS PROVIDED "AS IS".  THERE ARE
9*72fcea8cSEd Schouten  |	NO WARRANTIES OF ANY KIND WITH REGARD TO THIS
10*72fcea8cSEd Schouten  |	MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE
11*72fcea8cSEd Schouten  |	IMPLIED WARRANTIES OF MERCHANTABILITY AND
12*72fcea8cSEd Schouten  |	FITNESS FOR A PARTICULAR PURPOSE.  Neither
13*72fcea8cSEd Schouten  |	Hewlett-Packard nor Hugh Mahon shall be liable
14*72fcea8cSEd Schouten  |	for errors contained herein, nor for
15*72fcea8cSEd Schouten  |	incidental or consequential damages in
16*72fcea8cSEd Schouten  |	connection with the furnishing, performance or
17*72fcea8cSEd Schouten  |	use of this material.  Neither Hewlett-Packard
18*72fcea8cSEd Schouten  |	nor Hugh Mahon assumes any responsibility for
19*72fcea8cSEd Schouten  |	the use or reliability of this software or
20*72fcea8cSEd Schouten  |	documentation.  This software and
21*72fcea8cSEd Schouten  |	documentation is totally UNSUPPORTED.  There
22*72fcea8cSEd Schouten  |	is no support contract available.  Hewlett-
23*72fcea8cSEd Schouten  |	Packard has done NO Quality Assurance on ANY
24*72fcea8cSEd Schouten  |	of the program or documentation.  You may find
25*72fcea8cSEd Schouten  |	the quality of the materials inferior to
26*72fcea8cSEd Schouten  |	supported materials.
27*72fcea8cSEd Schouten  |
28*72fcea8cSEd Schouten  |	This software is not a product of Hewlett-Packard, Co., or any
29*72fcea8cSEd Schouten  |	other company.  No support is implied or offered with this software.
30*72fcea8cSEd Schouten  |	You've got the source, and you're on your own.
31*72fcea8cSEd Schouten  |
32*72fcea8cSEd Schouten  |	This software may be distributed under the terms of Larry Wall's
33*72fcea8cSEd Schouten  |	Artistic license, a copy of which is included in this distribution.
34*72fcea8cSEd Schouten  |
35*72fcea8cSEd Schouten  |	This notice must be included with this software and any derivatives.
36*72fcea8cSEd Schouten  |
37*72fcea8cSEd Schouten  |	Copyright (c) 1986, 1987, 1988, 1991, 1995 Hugh Mahon
38*72fcea8cSEd Schouten  |	All are rights reserved.
39*72fcea8cSEd Schouten  |
40*72fcea8cSEd Schouten  */
41*72fcea8cSEd Schouten 
42*72fcea8cSEd Schouten #include <stdio.h>
43*72fcea8cSEd Schouten 
44*72fcea8cSEd Schouten #ifdef SYS5
45*72fcea8cSEd Schouten #include <termio.h>
46*72fcea8cSEd Schouten #else
47*72fcea8cSEd Schouten #include <sgtty.h>
48*72fcea8cSEd Schouten #include <fcntl.h>
49*72fcea8cSEd Schouten #endif
50*72fcea8cSEd Schouten 
51*72fcea8cSEd Schouten #define KEY_BREAK	0401
52*72fcea8cSEd Schouten #define KEY_DOWN	0402
53*72fcea8cSEd Schouten #define KEY_UP		0403
54*72fcea8cSEd Schouten #define KEY_LEFT	0404
55*72fcea8cSEd Schouten #define KEY_RIGHT	0405
56*72fcea8cSEd Schouten #define KEY_HOME	0406
57*72fcea8cSEd Schouten #define KEY_BACKSPACE	0407
58*72fcea8cSEd Schouten #define KEY_F0		0410
59*72fcea8cSEd Schouten #define KEY_F(n) 	(KEY_F0+(n))
60*72fcea8cSEd Schouten #define KEY_DL		0510
61*72fcea8cSEd Schouten #define KEY_IL		0511
62*72fcea8cSEd Schouten #define KEY_DC		0512
63*72fcea8cSEd Schouten #define KEY_IC		0513
64*72fcea8cSEd Schouten #define KEY_EIC		0514
65*72fcea8cSEd Schouten #define KEY_CLEAR	0515
66*72fcea8cSEd Schouten #define KEY_EOS		0516
67*72fcea8cSEd Schouten #define KEY_EOL		0517
68*72fcea8cSEd Schouten #define KEY_SF		0520
69*72fcea8cSEd Schouten #define KEY_SR		0521
70*72fcea8cSEd Schouten #define KEY_NPAGE	0522
71*72fcea8cSEd Schouten #define KEY_PPAGE	0523
72*72fcea8cSEd Schouten #define KEY_STAB	0524
73*72fcea8cSEd Schouten #define KEY_CTAB	0525
74*72fcea8cSEd Schouten #define KEY_CATAB	0526
75*72fcea8cSEd Schouten #define KEY_ENTER	0527
76*72fcea8cSEd Schouten #define KEY_SRESET	0530
77*72fcea8cSEd Schouten #define KEY_RESET	0531
78*72fcea8cSEd Schouten #define KEY_PRINT	0532
79*72fcea8cSEd Schouten #define KEY_LL		0533
80*72fcea8cSEd Schouten #define KEY_A1	0534
81*72fcea8cSEd Schouten #define KEY_A3	0535
82*72fcea8cSEd Schouten #define KEY_B2	0536
83*72fcea8cSEd Schouten #define KEY_C1	0537
84*72fcea8cSEd Schouten #define KEY_C3	0540
85*72fcea8cSEd Schouten #define KEY_BTAB	0541
86*72fcea8cSEd Schouten #define KEY_BEG	0542
87*72fcea8cSEd Schouten #define KEY_CANCEL	0543
88*72fcea8cSEd Schouten #define KEY_CLOSE	0544
89*72fcea8cSEd Schouten #define KEY_COMMAND	0545
90*72fcea8cSEd Schouten #define KEY_COPY	0546
91*72fcea8cSEd Schouten #define KEY_CREATE	0547
92*72fcea8cSEd Schouten #define KEY_END	0550
93*72fcea8cSEd Schouten #define KEY_EXIT	0551
94*72fcea8cSEd Schouten #define KEY_FIND	0552
95*72fcea8cSEd Schouten #define KEY_HELP	0553
96*72fcea8cSEd Schouten #define KEY_MARK	0554
97*72fcea8cSEd Schouten #define KEY_MESSAGE	0555
98*72fcea8cSEd Schouten #define KEY_MOVE	0556
99*72fcea8cSEd Schouten #define KEY_NEXT	0557
100*72fcea8cSEd Schouten #define KEY_OPEN	0560
101*72fcea8cSEd Schouten #define KEY_OPTIONS	0561
102*72fcea8cSEd Schouten #define KEY_PREVIOUS	0562
103*72fcea8cSEd Schouten #define KEY_REDO	0563
104*72fcea8cSEd Schouten #define KEY_REFERENCE	0564
105*72fcea8cSEd Schouten #define KEY_REFRESH	0565
106*72fcea8cSEd Schouten #define KEY_REPLACE	0566
107*72fcea8cSEd Schouten #define KEY_RESTART	0567
108*72fcea8cSEd Schouten #define KEY_RESUME	0570
109*72fcea8cSEd Schouten #define KEY_SAVE	0571
110*72fcea8cSEd Schouten #define KEY_SBEG	0572
111*72fcea8cSEd Schouten #define KEY_SCANCEL	0573
112*72fcea8cSEd Schouten #define KEY_SCOMMAND	0574
113*72fcea8cSEd Schouten #define KEY_SCOPY	0575
114*72fcea8cSEd Schouten #define KEY_SCREATE	0576
115*72fcea8cSEd Schouten #define KEY_SDC	0577
116*72fcea8cSEd Schouten #define KEY_SDL	0600
117*72fcea8cSEd Schouten #define KEY_SELECT	0601
118*72fcea8cSEd Schouten #define KEY_SEND	0602
119*72fcea8cSEd Schouten #define KEY_SEOL	0603
120*72fcea8cSEd Schouten #define KEY_SEXIT	0604
121*72fcea8cSEd Schouten #define KEY_SFIND	0605
122*72fcea8cSEd Schouten #define KEY_SHELP	0606
123*72fcea8cSEd Schouten #define KEY_SHOME	0607
124*72fcea8cSEd Schouten #define KEY_SIC	0610
125*72fcea8cSEd Schouten #define KEY_SLEFT	0611
126*72fcea8cSEd Schouten #define KEY_SMESSAGE	0612
127*72fcea8cSEd Schouten #define KEY_SMOVE	0613
128*72fcea8cSEd Schouten #define KEY_SNEXT	0614
129*72fcea8cSEd Schouten #define KEY_SOPTIONS	0615
130*72fcea8cSEd Schouten #define KEY_SPREVIOUS	0616
131*72fcea8cSEd Schouten #define KEY_SPRINT	0617
132*72fcea8cSEd Schouten #define KEY_SREDO	0620
133*72fcea8cSEd Schouten #define KEY_SREPLACE	0621
134*72fcea8cSEd Schouten #define KEY_SRIGHT	0622
135*72fcea8cSEd Schouten #define KEY_SRSUME	0623
136*72fcea8cSEd Schouten #define KEY_SSAVE	0624
137*72fcea8cSEd Schouten #define KEY_SSUSPEND	0625
138*72fcea8cSEd Schouten #define KEY_SUNDO	0626
139*72fcea8cSEd Schouten #define KEY_SUSPEND	0627
140*72fcea8cSEd Schouten #define KEY_UNDO	0630
141*72fcea8cSEd Schouten 
142*72fcea8cSEd Schouten #define TRUE 1
143*72fcea8cSEd Schouten #define FALSE 0
144*72fcea8cSEd Schouten 
145*72fcea8cSEd Schouten #define A_STANDOUT 0001		/* standout mode		*/
146*72fcea8cSEd Schouten #define A_NC_BIG5  0x0100	/* Handle Chinese Big5 characters	*/
147*72fcea8cSEd Schouten #define SCROLL 1		/* text has been scrolled	*/
148*72fcea8cSEd Schouten #define CLEAR  2		/* window has been cleared	*/
149*72fcea8cSEd Schouten #define CHANGE 3		/* window has been changed	*/
150*72fcea8cSEd Schouten #define UP 1			/* direction of scroll		*/
151*72fcea8cSEd Schouten #define DOWN 2
152*72fcea8cSEd Schouten 
153*72fcea8cSEd Schouten struct _line {
154*72fcea8cSEd Schouten 	struct _line *next_screen;
155*72fcea8cSEd Schouten 	struct _line *prev_screen;
156*72fcea8cSEd Schouten 	char *row;
157*72fcea8cSEd Schouten 	char *attributes;
158*72fcea8cSEd Schouten 	int last_char;
159*72fcea8cSEd Schouten 	int changed;
160*72fcea8cSEd Schouten 	int scroll;
161*72fcea8cSEd Schouten 	int number;
162*72fcea8cSEd Schouten 	};
163*72fcea8cSEd Schouten 
164*72fcea8cSEd Schouten struct _line *top_of_win;
165*72fcea8cSEd Schouten 
166*72fcea8cSEd Schouten typedef struct WIND {
167*72fcea8cSEd Schouten 	int SR;		/* starting row		*/
168*72fcea8cSEd Schouten 	int SC;		/* starting column	*/
169*72fcea8cSEd Schouten 	int LC;		/* last column		*/
170*72fcea8cSEd Schouten 	int LX;		/* last cursor column position	*/
171*72fcea8cSEd Schouten 	int LY;		/* last cursor row position	*/
172*72fcea8cSEd Schouten 	int Attrib;	/* attributes active in window	*/
173*72fcea8cSEd Schouten 	int Num_lines;	/* number of lines		*/
174*72fcea8cSEd Schouten 	int Num_cols;	/* number of columns		*/
175*72fcea8cSEd Schouten 	int scroll_up;	/* number of lines moved	*/
176*72fcea8cSEd Schouten 	int scroll_down;
177*72fcea8cSEd Schouten 	int SCROLL_CLEAR;	/* indicates that window has been scrolled or cleared	*/
178*72fcea8cSEd Schouten 	struct _line *first_line;
179*72fcea8cSEd Schouten 	struct _line **line_array;
180*72fcea8cSEd Schouten 	} WINDOW;
181*72fcea8cSEd Schouten 
182*72fcea8cSEd Schouten extern WINDOW *curscr;
183*72fcea8cSEd Schouten extern WINDOW *stdscr;
184*72fcea8cSEd Schouten 
185*72fcea8cSEd Schouten extern int LINES, COLS;
186*72fcea8cSEd Schouten 
187*72fcea8cSEd Schouten #if defined(__STDC__) || defined(__cplusplus)
188*72fcea8cSEd Schouten #define P_(s) s
189*72fcea8cSEd Schouten #else
190*72fcea8cSEd Schouten #define P_(s) ()
191*72fcea8cSEd Schouten #endif
192*72fcea8cSEd Schouten 
193*72fcea8cSEd Schouten extern void copy_window P_((WINDOW *origin, WINDOW *destination));
194*72fcea8cSEd Schouten extern void reinitscr P_((int));
195*72fcea8cSEd Schouten extern void initscr P_((void));
196*72fcea8cSEd Schouten extern int Get_int P_((void));
197*72fcea8cSEd Schouten extern int INFO_PARSE P_((void));
198*72fcea8cSEd Schouten extern int AtoI P_((void));
199*72fcea8cSEd Schouten extern void Key_Get P_((void));
200*72fcea8cSEd Schouten extern void keys_vt100 P_((void));
201*72fcea8cSEd Schouten extern struct _line *Screenalloc P_((int columns));
202*72fcea8cSEd Schouten extern WINDOW *newwin P_((int lines, int cols, int start_l, int start_c));
203*72fcea8cSEd Schouten extern int Operation P_((int Temp_Stack[], int place));
204*72fcea8cSEd Schouten extern void Info_Out P_((char *string, int p_list[], int place));
205*72fcea8cSEd Schouten extern void wmove P_((WINDOW *window, int row, int column));
206*72fcea8cSEd Schouten extern void clear_line P_((struct _line *line, int column, int cols));
207*72fcea8cSEd Schouten extern void werase P_((WINDOW *window));
208*72fcea8cSEd Schouten extern void wclrtoeol P_((WINDOW *window));
209*72fcea8cSEd Schouten extern void wrefresh P_((WINDOW *window));
210*72fcea8cSEd Schouten extern void touchwin P_((WINDOW *window));
211*72fcea8cSEd Schouten extern void wnoutrefresh P_((WINDOW *window));
212*72fcea8cSEd Schouten extern void flushinp P_((void));
213*72fcea8cSEd Schouten extern void ungetch P_((int c));
214*72fcea8cSEd Schouten extern int wgetch P_((WINDOW *window));
215*72fcea8cSEd Schouten extern void Clear P_((int));
216*72fcea8cSEd Schouten extern int Get_key P_((int first_char));
217*72fcea8cSEd Schouten extern void waddch P_((WINDOW *window, int c));
218*72fcea8cSEd Schouten extern void winsertln P_((WINDOW *window));
219*72fcea8cSEd Schouten extern void wdeleteln P_((WINDOW *window));
220*72fcea8cSEd Schouten extern void wclrtobot P_((WINDOW *window));
221*72fcea8cSEd Schouten extern void wstandout P_((WINDOW *window));
222*72fcea8cSEd Schouten extern void wstandend P_((WINDOW *window));
223*72fcea8cSEd Schouten extern void waddstr P_((WINDOW *window, char *string));
224*72fcea8cSEd Schouten extern void clearok P_((WINDOW *window, int flag));
225*72fcea8cSEd Schouten extern void echo P_((void));
226*72fcea8cSEd Schouten extern void noecho P_((void));
227*72fcea8cSEd Schouten extern void raw P_((void));
228*72fcea8cSEd Schouten extern void noraw P_((void));
229*72fcea8cSEd Schouten extern void nl P_((void));
230*72fcea8cSEd Schouten extern void nonl P_((void));
231*72fcea8cSEd Schouten extern void saveterm P_((void));
232*72fcea8cSEd Schouten extern void fixterm P_((void));
233*72fcea8cSEd Schouten extern void resetterm P_((void));
234*72fcea8cSEd Schouten extern void nodelay P_((WINDOW *window, int flag));
235*72fcea8cSEd Schouten extern void idlok P_((WINDOW *window, int flag));
236*72fcea8cSEd Schouten extern void keypad P_((WINDOW *window, int flag));
237*72fcea8cSEd Schouten extern void savetty P_((void));
238*72fcea8cSEd Schouten extern void resetty P_((void));
239*72fcea8cSEd Schouten extern void endwin P_((void));
240*72fcea8cSEd Schouten extern void delwin P_((WINDOW *window));
241*72fcea8cSEd Schouten extern void wprintw P_((WINDOW *window, const char* format, ...));
242*72fcea8cSEd Schouten extern void iout P_((WINDOW *window, int value));
243*72fcea8cSEd Schouten extern int Comp_line P_((struct _line *line1, struct _line *line2));
244*72fcea8cSEd Schouten extern struct _line *Insert_line P_((int row, int end_row, WINDOW *window));
245*72fcea8cSEd Schouten extern struct _line *Delete_line P_((int row, int end_row, WINDOW *window));
246*72fcea8cSEd Schouten extern void CLEAR_TO_EOL P_((WINDOW *window, int row, int column));
247*72fcea8cSEd Schouten extern int check_delete P_((WINDOW *window, int line, int offset, struct _line *pointer_new, struct _line *pointer_old));
248*72fcea8cSEd Schouten extern int check_insert P_((WINDOW *window, int line, int offset, struct _line *pointer_new, struct _line *pointer_old));
249*72fcea8cSEd Schouten extern void doupdate P_((void));
250*72fcea8cSEd Schouten extern void Position P_((WINDOW *window, int row, int col));
251*72fcea8cSEd Schouten extern void Char_del P_((char *line, char *attrib, int offset, int maxlen));
252*72fcea8cSEd Schouten extern void Char_ins P_((char *line, char *attrib, int newc, int newatt, int offset, int maxlen));
253*72fcea8cSEd Schouten extern void attribute_on P_((void));
254*72fcea8cSEd Schouten extern void attribute_off P_((void));
255*72fcea8cSEd Schouten extern void Char_out P_((int newc, int newatt, char *line, char *attrib, int offset));
256*72fcea8cSEd Schouten 
257*72fcea8cSEd Schouten extern void nc_setattrib P_((int));
258*72fcea8cSEd Schouten extern void nc_clearattrib P_((int));
259*72fcea8cSEd Schouten #undef P_
260*72fcea8cSEd Schouten 
261