1192830Sed/*
2192830Sed |	new_curse.h
3192830Sed |
4192830Sed |	A subset of curses developed for use with ae.
5192830Sed |
6192830Sed |	written by Hugh Mahon
7192830Sed |
8192830Sed |	THIS MATERIAL IS PROVIDED "AS IS".  THERE ARE
9192830Sed |	NO WARRANTIES OF ANY KIND WITH REGARD TO THIS
10192830Sed |	MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE
11192830Sed |	IMPLIED WARRANTIES OF MERCHANTABILITY AND
12192830Sed |	FITNESS FOR A PARTICULAR PURPOSE.  Neither
13192830Sed |	Hewlett-Packard nor Hugh Mahon shall be liable
14192830Sed |	for errors contained herein, nor for
15192830Sed |	incidental or consequential damages in
16192830Sed |	connection with the furnishing, performance or
17192830Sed |	use of this material.  Neither Hewlett-Packard
18192830Sed |	nor Hugh Mahon assumes any responsibility for
19192830Sed |	the use or reliability of this software or
20192830Sed |	documentation.  This software and
21192830Sed |	documentation is totally UNSUPPORTED.  There
22192830Sed |	is no support contract available.  Hewlett-
23192830Sed |	Packard has done NO Quality Assurance on ANY
24192830Sed |	of the program or documentation.  You may find
25192830Sed |	the quality of the materials inferior to
26192830Sed |	supported materials.
27192830Sed |
28192830Sed |	This software is not a product of Hewlett-Packard, Co., or any
29192830Sed |	other company.  No support is implied or offered with this software.
30192830Sed |	You've got the source, and you're on your own.
31192830Sed |
32192830Sed |	This software may be distributed under the terms of Larry Wall's
33192830Sed |	Artistic license, a copy of which is included in this distribution.
34192830Sed |
35192830Sed |	This notice must be included with this software and any derivatives.
36192830Sed |
37192830Sed |	Copyright (c) 1986, 1987, 1988, 1991, 1995 Hugh Mahon
38192830Sed |	All are rights reserved.
39192830Sed |
40192830Sed */
41192830Sed
42192830Sed#include <stdio.h>
43192830Sed
44192830Sed#ifdef SYS5
45192830Sed#include <termio.h>
46192830Sed#else
47192830Sed#include <sgtty.h>
48192830Sed#include <fcntl.h>
49192830Sed#endif
50192830Sed
51192830Sed#define KEY_BREAK	0401
52192830Sed#define KEY_DOWN	0402
53192830Sed#define KEY_UP		0403
54192830Sed#define KEY_LEFT	0404
55192830Sed#define KEY_RIGHT	0405
56192830Sed#define KEY_HOME	0406
57192830Sed#define KEY_BACKSPACE	0407
58192830Sed#define KEY_F0		0410
59192830Sed#define KEY_F(n) 	(KEY_F0+(n))
60192830Sed#define KEY_DL		0510
61192830Sed#define KEY_IL		0511
62192830Sed#define KEY_DC		0512
63192830Sed#define KEY_IC		0513
64192830Sed#define KEY_EIC		0514
65192830Sed#define KEY_CLEAR	0515
66192830Sed#define KEY_EOS		0516
67192830Sed#define KEY_EOL		0517
68192830Sed#define KEY_SF		0520
69192830Sed#define KEY_SR		0521
70192830Sed#define KEY_NPAGE	0522
71192830Sed#define KEY_PPAGE	0523
72192830Sed#define KEY_STAB	0524
73192830Sed#define KEY_CTAB	0525
74192830Sed#define KEY_CATAB	0526
75192830Sed#define KEY_ENTER	0527
76192830Sed#define KEY_SRESET	0530
77192830Sed#define KEY_RESET	0531
78192830Sed#define KEY_PRINT	0532
79192830Sed#define KEY_LL		0533
80192830Sed#define KEY_A1	0534
81192830Sed#define KEY_A3	0535
82192830Sed#define KEY_B2	0536
83192830Sed#define KEY_C1	0537
84192830Sed#define KEY_C3	0540
85192830Sed#define KEY_BTAB	0541
86192830Sed#define KEY_BEG	0542
87192830Sed#define KEY_CANCEL	0543
88192830Sed#define KEY_CLOSE	0544
89192830Sed#define KEY_COMMAND	0545
90192830Sed#define KEY_COPY	0546
91192830Sed#define KEY_CREATE	0547
92192830Sed#define KEY_END	0550
93192830Sed#define KEY_EXIT	0551
94192830Sed#define KEY_FIND	0552
95192830Sed#define KEY_HELP	0553
96192830Sed#define KEY_MARK	0554
97192830Sed#define KEY_MESSAGE	0555
98192830Sed#define KEY_MOVE	0556
99192830Sed#define KEY_NEXT	0557
100192830Sed#define KEY_OPEN	0560
101192830Sed#define KEY_OPTIONS	0561
102192830Sed#define KEY_PREVIOUS	0562
103192830Sed#define KEY_REDO	0563
104192830Sed#define KEY_REFERENCE	0564
105192830Sed#define KEY_REFRESH	0565
106192830Sed#define KEY_REPLACE	0566
107192830Sed#define KEY_RESTART	0567
108192830Sed#define KEY_RESUME	0570
109192830Sed#define KEY_SAVE	0571
110192830Sed#define KEY_SBEG	0572
111192830Sed#define KEY_SCANCEL	0573
112192830Sed#define KEY_SCOMMAND	0574
113192830Sed#define KEY_SCOPY	0575
114192830Sed#define KEY_SCREATE	0576
115192830Sed#define KEY_SDC	0577
116192830Sed#define KEY_SDL	0600
117192830Sed#define KEY_SELECT	0601
118192830Sed#define KEY_SEND	0602
119192830Sed#define KEY_SEOL	0603
120192830Sed#define KEY_SEXIT	0604
121192830Sed#define KEY_SFIND	0605
122192830Sed#define KEY_SHELP	0606
123192830Sed#define KEY_SHOME	0607
124192830Sed#define KEY_SIC	0610
125192830Sed#define KEY_SLEFT	0611
126192830Sed#define KEY_SMESSAGE	0612
127192830Sed#define KEY_SMOVE	0613
128192830Sed#define KEY_SNEXT	0614
129192830Sed#define KEY_SOPTIONS	0615
130192830Sed#define KEY_SPREVIOUS	0616
131192830Sed#define KEY_SPRINT	0617
132192830Sed#define KEY_SREDO	0620
133192830Sed#define KEY_SREPLACE	0621
134192830Sed#define KEY_SRIGHT	0622
135192830Sed#define KEY_SRSUME	0623
136192830Sed#define KEY_SSAVE	0624
137192830Sed#define KEY_SSUSPEND	0625
138192830Sed#define KEY_SUNDO	0626
139192830Sed#define KEY_SUSPEND	0627
140192830Sed#define KEY_UNDO	0630
141192830Sed
142192830Sed#define TRUE 1
143192830Sed#define FALSE 0
144192830Sed
145192830Sed#define A_STANDOUT 0001		/* standout mode		*/
146192830Sed#define A_NC_BIG5  0x0100	/* Handle Chinese Big5 characters	*/
147192830Sed#define SCROLL 1		/* text has been scrolled	*/
148192830Sed#define CLEAR  2		/* window has been cleared	*/
149192830Sed#define CHANGE 3		/* window has been changed	*/
150192830Sed#define UP 1			/* direction of scroll		*/
151192830Sed#define DOWN 2
152192830Sed
153192830Sedstruct _line {
154192830Sed	struct _line *next_screen;
155192830Sed	struct _line *prev_screen;
156192830Sed	char *row;
157192830Sed	char *attributes;
158192830Sed	int last_char;
159192830Sed	int changed;
160192830Sed	int scroll;
161192830Sed	int number;
162192830Sed	};
163192830Sed
164192830Sedstruct _line *top_of_win;
165192830Sed
166192830Sedtypedef struct WIND {
167192830Sed	int SR;		/* starting row		*/
168192830Sed	int SC;		/* starting column	*/
169192830Sed	int LC;		/* last column		*/
170192830Sed	int LX;		/* last cursor column position	*/
171192830Sed	int LY;		/* last cursor row position	*/
172192830Sed	int Attrib;	/* attributes active in window	*/
173192830Sed	int Num_lines;	/* number of lines		*/
174192830Sed	int Num_cols;	/* number of columns		*/
175192830Sed	int scroll_up;	/* number of lines moved	*/
176192830Sed	int scroll_down;
177192830Sed	int SCROLL_CLEAR;	/* indicates that window has been scrolled or cleared	*/
178192830Sed	struct _line *first_line;
179192830Sed	struct _line **line_array;
180192830Sed	} WINDOW;
181192830Sed
182192830Sedextern WINDOW *curscr;
183192830Sedextern WINDOW *stdscr;
184192830Sed
185192830Sedextern int LINES, COLS;
186192830Sed
187192830Sed#if defined(__STDC__) || defined(__cplusplus)
188192830Sed#define P_(s) s
189192830Sed#else
190192830Sed#define P_(s) ()
191192830Sed#endif
192192830Sed
193192830Sedextern void copy_window P_((WINDOW *origin, WINDOW *destination));
194192830Sedextern void reinitscr P_((int));
195192830Sedextern void initscr P_((void));
196192830Sedextern int Get_int P_((void));
197192830Sedextern int INFO_PARSE P_((void));
198192830Sedextern int AtoI P_((void));
199192830Sedextern void Key_Get P_((void));
200192830Sedextern void keys_vt100 P_((void));
201192830Sedextern struct _line *Screenalloc P_((int columns));
202192830Sedextern WINDOW *newwin P_((int lines, int cols, int start_l, int start_c));
203192830Sedextern int Operation P_((int Temp_Stack[], int place));
204192830Sedextern void Info_Out P_((char *string, int p_list[], int place));
205192830Sedextern void wmove P_((WINDOW *window, int row, int column));
206192830Sedextern void clear_line P_((struct _line *line, int column, int cols));
207192830Sedextern void werase P_((WINDOW *window));
208192830Sedextern void wclrtoeol P_((WINDOW *window));
209192830Sedextern void wrefresh P_((WINDOW *window));
210192830Sedextern void touchwin P_((WINDOW *window));
211192830Sedextern void wnoutrefresh P_((WINDOW *window));
212192830Sedextern void flushinp P_((void));
213192830Sedextern void ungetch P_((int c));
214192830Sedextern int wgetch P_((WINDOW *window));
215192830Sedextern void Clear P_((int));
216192830Sedextern int Get_key P_((int first_char));
217192830Sedextern void waddch P_((WINDOW *window, int c));
218192830Sedextern void winsertln P_((WINDOW *window));
219192830Sedextern void wdeleteln P_((WINDOW *window));
220192830Sedextern void wclrtobot P_((WINDOW *window));
221192830Sedextern void wstandout P_((WINDOW *window));
222192830Sedextern void wstandend P_((WINDOW *window));
223192830Sedextern void waddstr P_((WINDOW *window, char *string));
224192830Sedextern void clearok P_((WINDOW *window, int flag));
225192830Sedextern void echo P_((void));
226192830Sedextern void noecho P_((void));
227192830Sedextern void raw P_((void));
228192830Sedextern void noraw P_((void));
229192830Sedextern void nl P_((void));
230192830Sedextern void nonl P_((void));
231192830Sedextern void saveterm P_((void));
232192830Sedextern void fixterm P_((void));
233192830Sedextern void resetterm P_((void));
234192830Sedextern void nodelay P_((WINDOW *window, int flag));
235192830Sedextern void idlok P_((WINDOW *window, int flag));
236192830Sedextern void keypad P_((WINDOW *window, int flag));
237192830Sedextern void savetty P_((void));
238192830Sedextern void resetty P_((void));
239192830Sedextern void endwin P_((void));
240192830Sedextern void delwin P_((WINDOW *window));
241192830Sedextern void wprintw P_((WINDOW *window, const char* format, ...));
242192830Sedextern void iout P_((WINDOW *window, int value));
243192830Sedextern int Comp_line P_((struct _line *line1, struct _line *line2));
244192830Sedextern struct _line *Insert_line P_((int row, int end_row, WINDOW *window));
245192830Sedextern struct _line *Delete_line P_((int row, int end_row, WINDOW *window));
246192830Sedextern void CLEAR_TO_EOL P_((WINDOW *window, int row, int column));
247192830Sedextern int check_delete P_((WINDOW *window, int line, int offset, struct _line *pointer_new, struct _line *pointer_old));
248192830Sedextern int check_insert P_((WINDOW *window, int line, int offset, struct _line *pointer_new, struct _line *pointer_old));
249192830Sedextern void doupdate P_((void));
250192830Sedextern void Position P_((WINDOW *window, int row, int col));
251192830Sedextern void Char_del P_((char *line, char *attrib, int offset, int maxlen));
252192830Sedextern void Char_ins P_((char *line, char *attrib, int newc, int newatt, int offset, int maxlen));
253192830Sedextern void attribute_on P_((void));
254192830Sedextern void attribute_off P_((void));
255192830Sedextern void Char_out P_((int newc, int newatt, char *line, char *attrib, int offset));
256192830Sed
257192830Sedextern void nc_setattrib P_((int));
258192830Sedextern void nc_clearattrib P_((int));
259192830Sed#undef P_
260192830Sed
261