1 /*
2 
3 	+---------------------------------------------------------------+
4 	|								|
5 	|  This file is a replacement for the routines in the curses 	|
6 	|  library.  Although the functions contained in this file	|
7 	|  are only a subset of those contained in curses, these 	|
8 	|  will perform the tasks expected of them without the 		|
9 	|  glitches found in curses.					|
10 	|								|
11 	+---------------------------------------------------------------+
12 */
13 
14 #ifndef __XCURSE_INC__
15 #define __XCURSE_INC__
16 
17 
18 #include <stdio.h>
19 #include <signal.h>
20 
21 #include <fcntl.h>
22 
23 #define KEY_BREAK	0401
24 #define KEY_DOWN	0402
25 #define KEY_UP		0403
26 #define KEY_LEFT	0404
27 #define KEY_RIGHT	0405
28 #define KEY_HOME	0406
29 #define KEY_BACKSPACE	0407
30 #define KEY_F0		0410
31 #define KEY_F(n) 	(KEY_F0+(n))
32 #define KEY_DL		0510
33 #define KEY_IL		0511
34 #define KEY_DC		0512
35 #define KEY_IC		0513
36 #define KEY_EIC		0514
37 #define KEY_CLEAR	0515
38 #define KEY_EOS		0516
39 #define KEY_EOL		0517
40 #define KEY_SF		0520
41 #define KEY_SR		0521
42 #define KEY_NPAGE	0522
43 #define KEY_PPAGE	0523
44 #define KEY_STAB	0524
45 #define KEY_CTAB	0525
46 #define KEY_CATAB	0526
47 #define KEY_ENTER	0527
48 #define KEY_SRESET	0530
49 #define KEY_RESET	0531
50 #define KEY_PRINT	0532
51 #define KEY_LL		0533
52 #define KEY_A1	0534
53 #define KEY_A3	0535
54 #define KEY_B2	0536
55 #define KEY_C1	0537
56 #define KEY_C3	0540
57 #define KEY_BTAB	0541
58 #define KEY_BEG	0542
59 #define KEY_CANCEL	0543
60 #define KEY_CLOSE	0544
61 #define KEY_COMMAND	0545
62 #define KEY_COPY	0546
63 #define KEY_CREATE	0547
64 #define KEY_END	0550
65 #define KEY_EXIT	0551
66 #define KEY_FIND	0552
67 #define KEY_HELP	0553
68 #define KEY_MARK	0554
69 #define KEY_MESSAGE	0555
70 #define KEY_MOVE	0556
71 #define KEY_NEXT	0557
72 #define KEY_OPEN	0560
73 #define KEY_OPTIONS	0561
74 #define KEY_PREVIOUS	0562
75 #define KEY_REDO	0563
76 #define KEY_REFERENCE	0564
77 #define KEY_REFRESH	0565
78 #define KEY_REPLACE	0566
79 #define KEY_RESTART	0567
80 #define KEY_RESUME	0570
81 #define KEY_SAVE	0571
82 #define KEY_SBEG	0572
83 #define KEY_SCANCEL	0573
84 #define KEY_SCOMMAND	0574
85 #define KEY_SCOPY	0575
86 #define KEY_SCREATE	0576
87 #define KEY_SDC	0577
88 #define KEY_SDL	0600
89 #define KEY_SELECT	0601
90 #define KEY_SEND	0602
91 #define KEY_SEOL	0603
92 #define KEY_SEXIT	0604
93 #define KEY_SFIND	0605
94 #define KEY_SHELP	0606
95 #define KEY_SHOME	0607
96 #define KEY_SIC	0610
97 #define KEY_SLEFT	0611
98 #define KEY_SMESSAGE	0612
99 #define KEY_SMOVE	0613
100 #define KEY_SNEXT	0614
101 #define KEY_SOPTIONS	0615
102 #define KEY_SPREVIOUS	0616
103 #define KEY_SPRINT	0617
104 #define KEY_SREDO	0620
105 #define KEY_SREPLACE	0621
106 #define KEY_SRIGHT	0622
107 #define KEY_SRSUME	0623
108 #define KEY_SSAVE	0624
109 #define KEY_SSUSPEND	0625
110 #define KEY_SUNDO	0626
111 #define KEY_SUSPEND	0627
112 #define KEY_UNDO	0630
113 
114 #define TRUE 1
115 #define FALSE 0
116 
117 #define A_STANDOUT 0001	/* standout mode			*/
118 #define SCROLL 1		/* text has been scrolled	*/
119 #define CLEAR  2		/* window has been cleared	*/
120 #define CHANGE 3                /* window has been changed      */
121 #define UP 1			/* direction of scroll		*/
122 #define DOWN 2
123 
124 struct _line {
125 	struct _line *next_screen;
126 	struct _line *prev_screen;
127 	char *row;
128 	char *attributes;
129 	int last_char;
130 	int changed;
131 	int scroll;
132 	int number;
133 	};
134 
135 struct _line *top_of_win;
136 
137 typedef struct WIND {
138 	int SR;		/* starting row		*/
139 	int SC;		/* starting column	*/
140 	int LC;		/* last column		*/
141 	int LX;		/* last cursor column position	*/
142 	int LY;		/* last cursor row position	*/
143 	int Attrib;	/* attributes active in window	*/
144 	int Num_lines;	/* number of lines		*/
145 	int Num_cols;	/* number of columns		*/
146 	int scroll_up;	/* number of lines moved	*/
147 	int scroll_down;
148 	int SCROLL_CLEAR;	/* indicates that window has been scrolled or cleared	*/
149 	struct _line *first_line;
150 	struct _line **line_array;
151 	} WINDOW;
152 
153 extern WINDOW *curscr;
154 extern WINDOW *stdscr;
155 
156 extern unsigned int LINES, COLS;
157 
158 /* X-windows definitions	*/
159 #include <X11/Xlib.h>
160 
161 #if defined(__STDC__) || defined(__cplusplus)
162 #define P_(s) s
163 #else
164 #define P_(s) ()
165 #endif
166 
167 extern void copy_window P_((WINDOW *origin, WINDOW *destination));
168 extern void reinitscr P_((void));
169 extern void get_options P_((int argc, char *argv[]));
170 extern void get_defaults P_((void));
171 extern void initscr P_((int cols, int lines));
172 extern void Key_Get P_((void));
173 extern struct _line *Screenalloc P_((int columns));
174 extern WINDOW *newwin P_((int lines, int cols, int start_l, int start_c));
175 extern void wmove P_((WINDOW *window, int row, int column));
176 extern void clear_line P_((struct _line *line, int column, int cols));
177 extern void werase P_((WINDOW *window));
178 extern void wclrtoeol P_((WINDOW *window));
179 extern void wrefresh P_((WINDOW *window));
180 extern void touchwin P_((WINDOW *window));
181 extern void wnoutrefresh P_((WINDOW *window));
182 extern void flushinp P_((void));
183 extern int wgetch P_((WINDOW *window));
184 extern int look_up_key P_((int key_code));
185 extern void waddch P_((WINDOW *window, int c));
186 extern void winsertln P_((WINDOW *window));
187 extern void wdeleteln P_((WINDOW *window));
188 extern void wclrtobot P_((WINDOW *window));
189 extern void wstandout P_((WINDOW *window));
190 extern void wstandend P_((WINDOW *window));
191 extern void waddstr P_((WINDOW *window, char *string));
192 extern void clearok P_((WINDOW *window, int flag));
193 extern void echo P_((void));
194 extern void noecho P_((void));
195 extern void raw P_((void));
196 extern void noraw P_((void));
197 extern void nl P_((void));
198 extern void nonl P_((void));
199 extern void saveterm P_((void));
200 extern void fixterm P_((void));
201 extern void resetterm P_((void));
202 extern void nodelay P_((WINDOW *window, int flag));
203 extern void idlok P_((WINDOW *window, int flag));
204 extern void keypad P_((WINDOW *window, int flag));
205 extern void savetty P_((void));
206 extern void resetty P_((void));
207 extern void endwin P_((void));
208 extern void delwin P_((WINDOW *window));
209 extern void wprintw P_((WINDOW *window, const char* format, ...));
210 extern void iout P_((WINDOW *window, int value, int base));
211 extern int Comp_line P_((struct _line *line1, struct _line *line2));
212 extern struct _line *Insert_line P_((int row, int end_row, WINDOW *window));
213 extern struct _line *Delete_line P_((int row, int end_row, WINDOW *window));
214 extern void CLEAR_TO_EOL P_((WINDOW *window, int row, int column));
215 extern void doupdate P_((void));
216 extern void Position P_((WINDOW *window, int row, int col));
217 extern void Char_out P_((int newc, int newatt, char *line, char *attrib, int offset));
218 extern void draw_cursor P_((int visible));
219 extern void cursor P_((WINDOW *window, int row, int col, int erase, int visible));
220 
221 #undef P_
222 
223 
224 #endif /* __XCURSE_INC__ */
225 
226