|
|
1.1 root 1: /* 5/15/81 (Berkeley) @(#)curses.h 1.8 */
2: /* @(#)curses.h 1.20 (MRH) 3/16/83 */
3: #ifndef WINDOW
4:
5: # ifndef NONSTANDARD
6: # include <stdio.h>
7: /*
8: * This trick is used to distinguish between USG and V7 systems.
9: * We assume that L_ctermid is only defined in stdio.h in USG
10: * systems, but not in V7 or Berkeley UNIX.
11: */
12: # ifdef L_ctermid
13: # define USG
14: # endif
15: # include <unctrl.h>
16: # ifdef USG
17: # include <termio.h>
18: typedef struct termio SGTTY;
19: # else
20: # include <sgtty.h>
21: typedef struct sgttyb SGTTY;
22: # endif
23: # else NONSTANDARD
24: /*
25: * NONSTANDARD is intended for a standalone program (no UNIX)
26: * that manages screens. The specific program is Alan Hewett's
27: * ITC, which runs standalone on an 11/23 (at least for now).
28: * It is unclear whether this code needs to be supported anymore.
29: */
30: # define NULL 0
31: # endif NONSTANDARD
32:
33: # define bool char
34: # define reg register
35:
36: /*
37: * chtype is the type used to store a character together with attributes.
38: * It can be set to "char" to save space, or "long" to get more attributes.
39: */
40: # ifdef CHTYPE
41: typedef CHTYPE chtype;
42: # else
43: typedef unsigned short chtype;
44: # endif CHTYPE
45:
46: # define TRUE (1)
47: # define FALSE (0)
48: # define ERR (-1)
49: # define OK (0)
50:
51: # define _SUBWIN 01
52: # define _ENDLINE 02
53: # define _FULLWIN 04
54: # define _SCROLLWIN 010
55: # define _FLUSH 020
56: # define _ISPAD 040
57: # define _STANDOUT 0200
58: # define _NOCHANGE -1
59:
60: struct _win_st {
61: short _cury, _curx;
62: short _maxy, _maxx;
63: short _begy, _begx;
64: short _flags;
65: chtype _attrs;
66: bool _clear;
67: bool _leave;
68: bool _scroll;
69: bool _use_idl;
70: bool _use_keypad; /* 0=no, 1=yes, 2=yes/timeout */
71: bool _use_meta; /* T=use the meta key */
72: bool _nodelay; /* T=don't wait for tty input */
73: chtype **_y;
74: short *_firstch;
75: short *_lastch;
76: short _tmarg,_bmarg;
77: };
78:
79: extern int LINES, COLS;
80:
81: typedef struct _win_st WINDOW;
82: extern WINDOW *stdscr, *curscr;
83:
84: extern char *Def_term, ttytype[];
85:
86: typedef struct screen SCREEN;
87:
88: # ifndef NOMACROS
89: # ifndef MINICURSES
90: /*
91: * psuedo functions for standard screen
92: */
93: # define addch(ch) waddch(stdscr, ch)
94: # define getch() wgetch(stdscr)
95: # define addstr(str) waddstr(stdscr, str)
96: # define getstr(str) wgetstr(stdscr, str)
97: # define move(y, x) wmove(stdscr, y, x)
98: # define clear() wclear(stdscr)
99: # define erase() werase(stdscr)
100: # define clrtobot() wclrtobot(stdscr)
101: # define clrtoeol() wclrtoeol(stdscr)
102: # define insertln() winsertln(stdscr)
103: # define deleteln() wdeleteln(stdscr)
104: # define refresh() wrefresh(stdscr)
105: # define inch() winch(stdscr)
106: # define insch(c) winsch(stdscr,c)
107: # define delch() wdelch(stdscr)
108: # define standout() wstandout(stdscr)
109: # define standend() wstandend(stdscr)
110: # define attron(at) wattron(stdscr,at)
111: # define attroff(at) wattroff(stdscr,at)
112: # define attrset(at) wattrset(stdscr,at)
113:
114: # define setscrreg(t,b) wsetscrreg(stdscr, t, b)
115: # define wsetscrreg(win,t,b) (win->_tmarg=(t),win->_bmarg=(b))
116:
117: /*
118: * mv functions
119: */
120: #define mvwaddch(win,y,x,ch) (wmove(win,y,x)==ERR?ERR:waddch(win,ch))
121: #define mvwgetch(win,y,x) (wmove(win,y,x)==ERR?ERR:wgetch(win))
122: #define mvwaddstr(win,y,x,str) (wmove(win,y,x)==ERR?ERR:waddstr(win,str))
123: #define mvwgetstr(win,y,x,str) (wmove(win,y,x)==ERR?ERR:wgetstr(win,str))
124: #define mvwinch(win,y,x) (wmove(win,y,x)==ERR?ERR:winch(win))
125: #define mvwdelch(win,y,x) (wmove(win,y,x)==ERR?ERR:wdelch(win))
126: #define mvwinsch(win,y,x,c) (wmove(win,y,x)==ERR?ERR:winsch(win,c))
127: #define mvaddch(y,x,ch) mvwaddch(stdscr,y,x,ch)
128: #define mvgetch(y,x) mvwgetch(stdscr,y,x)
129: #define mvaddstr(y,x,str) mvwaddstr(stdscr,y,x,str)
130: #define mvgetstr(y,x,str) mvwgetstr(stdscr,y,x,str)
131: #define mvinch(y,x) mvwinch(stdscr,y,x)
132: #define mvdelch(y,x) mvwdelch(stdscr,y,x)
133: #define mvinsch(y,x,c) mvwinsch(stdscr,y,x,c)
134:
135: # else MINICURSES
136:
137: # define addch(ch) m_addch(ch)
138: # define addstr(str) m_addstr(str)
139: # define move(y, x) m_move(y, x)
140: # define clear() m_clear()
141: # define erase() m_erase()
142: # define refresh() m_refresh()
143: # define standout() wstandout(stdscr)
144: # define standend() wstandend(stdscr)
145: # define attron(at) wattron(stdscr,at)
146: # define attroff(at) wattroff(stdscr,at)
147: # define attrset(at) wattrset(stdscr,at)
148: # define mvaddch(y,x,ch) move(y, x), addch(ch)
149: # define mvaddstr(y,x,str) move(y, x), addstr(str)
150: # define initscr m_initscr
151: # define newterm m_newterm
152:
153: /*
154: * These functions don't exist in minicurses, so we define them
155: * to nonexistent functions to help the user catch the error.
156: */
157: #define getch m_getch
158: #define getstr m_getstr
159: #define clrtobot m_clrtobot
160: #define clrtoeol m_clrtoeol
161: #define insertln m_insertln
162: #define deleteln m_deleteln
163: #define inch m_inch
164: #define insch m_insch
165: #define delch m_delch
166: /* mv functions that aren't valid */
167: #define mvwaddch m_mvwaddch
168: #define mvwgetch m_mvwgetch
169: #define mvwaddstr m_mvaddstr
170: #define mvwgetstr m_mvwgetstr
171: #define mvwinch m_mvwinch
172: #define mvwdelch m_mvwdelch
173: #define mvwinsch m_mvwinsch
174: #define mvgetch m_mvwgetch
175: #define mvgetstr m_mvwgetstr
176: #define mvinch m_mvwinch
177: #define mvdelch m_mvwdelch
178: #define mvinsch m_mvwinsch
179: /* Real functions that aren't valid */
180: #define box m_box
181: #define delwin m_delwin
182: #define longname m_longname
183: #define makenew m_makenew
184: #define mvprintw m_mvprintw
185: #define mvscanw m_mvscanw
186: #define mvwin m_mvwin
187: #define mvwprintw m_mvwprintw
188: #define mvwscanw m_mvwscanw
189: #define newwin m_newwin
190: #define _outchar m_outchar
191: #define overlay m_overlay
192: #define overwrite m_overwrite
193: #define printw m_printw
194: #define putp m_putp
195: #define scanw m_scanw
196: #define scroll m_scroll
197: #define subwin m_subwin
198: #define touchwin m_touchwin
199: #define _tscroll m_tscroll
200: #define _tstp m_tstp
201: #define vidattr m_vidattr
202: #define waddch m_waddch
203: #define waddstr m_waddstr
204: #define wclear m_wclear
205: #define wclrtobot m_wclrtobot
206: #define wclrtoeol m_wclrtoeol
207: #define wdelch m_wdelch
208: #define wdeleteln m_wdeleteln
209: #define werase m_werase
210: #define wgetch m_wgetch
211: #define wgetstr m_wgetstr
212: #define winsch m_winsch
213: #define winsertln m_winsertln
214: #define wmove m_wmove
215: #define wprintw m_wprintw
216: #define wrefresh m_wrefresh
217: #define wscanw m_wscanw
218: #define setscrreg m_setscrreg
219: #define wsetscrreg m_wsetscrreg
220:
221: # endif MINICURSES
222:
223: /*
224: * psuedo functions
225: */
226:
227: #define getyx(win,y,x) y = win->_cury, x = win->_curx
228: #define winch(win) (win->_y[win->_cury][win->_curx])
229:
230: WINDOW *initscr(), *newwin(), *subwin(), *newpad();
231: char *longname();
232: char erasechar(), killchar();
233: int wgetch(); /* because it can return KEY_*, for instance. */
234: SCREEN *newterm();
235:
236: /* Various video attributes */
237: #define A_STANDOUT 0000200
238: #define A_UNDERLINE 0000400
239: #define A_REVERSE 0001000
240: #define A_BLINK 0002000
241: #define A_DIM 0004000
242: #define A_BOLD 0010000
243:
244: /* The next three are subject to change (perhaps to colors) so don't depend on them */
245: #define A_INVIS 0020000
246: #define A_PROTECT 0040000
247: #define A_ALTCHARSET 0100000
248:
249: #define A_NORMAL 0000000
250: #define A_ATTRIBUTES 0377600
251: #define A_CHARTEXT 0000177
252:
253: /* Funny "characters" enabled for various special function keys for input */
254: #define KEY_BREAK 0401 /* break key (unreliable) */
255: #define KEY_DOWN 0402 /* The four arrow keys ... */
256: #define KEY_UP 0403
257: #define KEY_LEFT 0404
258: #define KEY_RIGHT 0405 /* ... */
259: #define KEY_HOME 0406 /* Home key (upward+left arrow) */
260: #define KEY_BACKSPACE 0407 /* backspace (unreliable) */
261: #define KEY_F0 0410 /* Function keys. Space for 64 */
262: #define KEY_F(n) (KEY_F0+(n)) /* keys is reserved. */
263: #define KEY_DL 0510 /* Delete line */
264: #define KEY_IL 0511 /* Insert line */
265: #define KEY_DC 0512 /* Delete character */
266: #define KEY_IC 0513 /* Insert char or enter insert mode */
267: #define KEY_EIC 0514 /* Exit insert char mode */
268: #define KEY_CLEAR 0515 /* Clear screen */
269: #define KEY_EOS 0516 /* Clear to end of screen */
270: #define KEY_EOL 0517 /* Clear to end of line */
271: #define KEY_SF 0520 /* Scroll 1 line forward */
272: #define KEY_SR 0521 /* Scroll 1 line backwards (reverse) */
273: #define KEY_NPAGE 0522 /* Next page */
274: #define KEY_PPAGE 0523 /* Previous page */
275: #define KEY_STAB 0524 /* Set tab */
276: #define KEY_CTAB 0525 /* Clear tab */
277: #define KEY_CATAB 0526 /* Clear all tabs */
278: #define KEY_ENTER 0527 /* Enter or send (unreliable) */
279: #define KEY_SRESET 0530 /* soft (partial) reset (unreliable) */
280: #define KEY_RESET 0531 /* reset or hard reset (unreliable) */
281: #define KEY_PRINT 0532 /* print or copy */
282: #define KEY_LL 0533 /* home down or bottom (lower left) */
283: /* The keypad is arranged like this: */
284: /* a1 up a3 */
285: /* left b2 right */
286: /* c1 down c3 */
287: #define KEY_A1 0534 /* upper left of keypad */
288: #define KEY_A3 0535 /* upper right of keypad */
289: #define KEY_B2 0536 /* center of keypad */
290: #define KEY_C1 0537 /* lower left of keypad */
291: #define KEY_C3 0540 /* lower right of keypad */
292:
293: # endif NOMACROS
294: #endif WINDOW
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.