new table for blocksizes
[unix-history] / usr / src / lib / libcurses / curses.h
CommitLineData
87c6fcf8 1/*
2f14f200
KB
2 * Copyright (c) 1981 Regents of the University of California.
3 * All rights reserved.
87c6fcf8 4 *
c07973a2 5 * %sccs.include.redist.c%
2f14f200 6 *
e91c7874 7 * @(#)curses.h 5.23 (Berkeley) %G%
87c6fcf8
DF
8 */
9
ddf60ab8
KB
10#ifndef _CURSES_H_
11#define _CURSES_H_
1b7ae9b8 12
ddf60ab8 13#include <stdio.h>
1b7ae9b8 14
ddf60ab8
KB
15/*
16 * The following #defines and #includes are present for backward
17 * compatibility only. They should not be used in future code.
18 *
19 * START BACKWARD COMPATIBILITY ONLY.
20 */
21#ifndef _CURSES_PRIVATE
512c20d0
MK
22#define bool char
23#define reg register
1b7ae9b8 24
ddf60ab8 25#ifndef TRUE
512c20d0 26#define TRUE (1)
ddf60ab8
KB
27#endif
28#ifndef FALSE
512c20d0 29#define FALSE (0)
ddf60ab8 30#endif
1b7ae9b8 31
296fd6cc 32#define _puts(s) tputs(s, 0, __cputchar)
ddf60ab8 33#define _putchar(c) __cputchar(c)
1b7ae9b8 34
ddf60ab8 35/* Old-style terminal modes access. */
296fd6cc 36#define baudrate() (cfgetospeed(&origtermio))
ddf60ab8
KB
37#define crmode() cbreak()
38#define erasechar() (origtermio.c_cc[VERASE])
39#define killchar() (origtermio.c_cc[VKILL])
40#define nocrmode() nocbreak()
296fd6cc 41#define ospeed (cfgetospeed(&origtermio))
ddf60ab8 42#endif /* _CURSES_PRIVATE */
1b7ae9b8 43
e91c7874
KB
44extern char GT; /* Gtty indicates tabs. */
45extern char NONL; /* Term can't hack LF doing a CR. */
46extern char UPPERCASE; /* Terminal is uppercase only. */
47
ddf60ab8
KB
48extern int My_term; /* Use Def_term regardless. */
49extern char *Def_term; /* Default terminal type. */
50
e91c7874
KB
51/* Termcap capabilities. */
52extern char AM, BS, CA, DA, EO, HC, HZ, IN, MI, MS, NC, NS, OS,
53 PC, UL, XB, XN, XT, XS, XX;
54extern char *AL, *BC, *BT, *CD, *CE, *CL, *CM, *CR, *CS, *DC, *DL,
55 *DM, *DO, *ED, *EI, *K0, *K1, *K2, *K3, *K4, *K5, *K6,
56 *K7, *K8, *K9, *HO, *IC, *IM, *IP, *KD, *KE, *KH, *KL,
57 *KR, *KS, *KU, *LL, *MA, *ND, *NL, *RC, *SC, *SE, *SF,
58 *SO, *SR, *TA, *TE, *TI, *UC, *UE, *UP, *US, *VB, *VS,
59 *VE, *al, *dl, *sf, *sr,
60 *AL_PARM, *DL_PARM, *UP_PARM, *DOWN_PARM, *LEFT_PARM,
61 *RIGHT_PARM;
62
ddf60ab8
KB
63/* END BACKWARD COMPATIBILITY ONLY. */
64
65/* 7-bit ASCII characters. */
66#define unctrl(c) __unctrl[(c) & 0x7f]
67#define unctrllen(ch) __unctrllen[(ch) & 0x7f]
68
e91c7874
KB
69extern char *__unctrl[0x80]; /* Control strings. */
70extern char __unctrllen[0x80]; /* Control strings length. */
71
0c5c5188 72/*
1c04a491
EA
73 * A window an array of __LINE structures pointed to by the 'lines' pointer.
74 * A line is an array of __LDATA structures pointed to by the 'line' pointer.
75 *
76 * IMPORTANT: the __LDATA structure must NOT induce any padding, so if new
77 * fields are added -- padding fields with *constant values* should ensure
78 * that the compiler will not generate any padding when storing an array of
79 * __LDATA structures. This is to enable consistent use of bcmp, and bcopy
80 * for comparing and copying arrays.
0c5c5188 81 */
1c04a491
EA
82typedef struct {
83 char ch; /* the actual character */
84
85#define __STANDOUT 0x01 /* Added characters are standout. */
86 char attr; /* attributes of character */
87} __LDATA;
88
89#define __LDATASIZE (sizeof(__LDATA))
90
91typedef struct {
0c5c5188 92#define __ISDIRTY 0x01 /* Line is dirty. */
091287a4 93#define __ISPASTEOL 0x02 /* Cursor is past end of line */
e3923e32 94#define __FORCEPAINT 0x04 /* Force a repaint of the line */
0c5c5188
EA
95 u_int flags;
96 u_int hash; /* Hash value for the line. */
556a4108 97 size_t *firstchp, *lastchp; /* First and last chngd columns ptrs */
0c5c5188 98 size_t firstch, lastch; /* First and last changed columns. */
1c04a491
EA
99 __LDATA *line; /* Pointer to the line text. */
100} __LINE;
0c5c5188
EA
101
102typedef struct __window { /* Window structure. */
103 struct __window *nextp, *orig; /* Subwindows list and parent. */
104 size_t begy, begx; /* Window home. */
105 size_t cury, curx; /* Current x, y coordinates. */
106 size_t maxy, maxx; /* Maximum values for curx, cury. */
107 short ch_off; /* x offset for firstch/lastch. */
1c04a491
EA
108 __LINE **lines; /* Array of pointers to the lines */
109 __LINE *lspace; /* line space (for cleanup) */
110 __LDATA *wspace; /* window space (for cleanup) */
0c5c5188
EA
111
112#define __ENDLINE 0x001 /* End of screen. */
113#define __FLUSH 0x002 /* Fflush(stdout) after refresh. */
114#define __FULLLINE 0x004 /* Line width = terminal width. */
115#define __FULLWIN 0x008 /* Window is a screen. */
116#define __IDLINE 0x010 /* Insert/delete sequences. */
117#define __SCROLLWIN 0x020 /* Last char will scroll window. */
118#define __SCROLLOK 0x040 /* Scrolling ok. */
119#define __CLEAROK 0x080 /* Clear on next refresh. */
120#define __WSTANDOUT 0x100 /* Standout window */
121#define __LEAVEOK 0x200 /* If curser left */
122 u_int flags;
ddf60ab8
KB
123} WINDOW;
124
ddf60ab8
KB
125/* Curses external declarations. */
126extern WINDOW *curscr; /* Current screen. */
127extern WINDOW *stdscr; /* Standard screen. */
1b7ae9b8 128
ddf60ab8 129extern struct termios origtermio; /* Original terminal modes. */
1b7ae9b8 130
ddf60ab8
KB
131extern int COLS; /* Columns on the screen. */
132extern int LINES; /* Lines on the screen. */
1b7ae9b8 133
ddf60ab8 134extern char *ttytype; /* Full name of current terminal. */
1b7ae9b8 135
ddf60ab8
KB
136#define ERR (0) /* Error return. */
137#define OK (1) /* Success return. */
1b7ae9b8 138
ddf60ab8 139/* Standard screen pseudo functions. */
e91c7874
KB
140#define addbytes(da, co) waddbytes(stdscr, da, co)
141#define addch(ch) waddch(stdscr, ch)
142#define addstr(str) waddbytes(stdscr, str, strlen(str))
143#define clear() wclear(stdscr)
144#define clrtobot() wclrtobot(stdscr)
145#define clrtoeol() wclrtoeol(stdscr)
146#define delch() wdelch(stdscr)
147#define deleteln() wdeleteln(stdscr)
148#define erase() werase(stdscr)
149#define getch() wgetch(stdscr)
150#define getstr(str) wgetstr(stdscr, str)
151#define inch() winch(stdscr)
152#define insch(ch)) winsch(stdscr, ch)
153#define insertln() winsertln(stdscr)
154#define move(y, x) wmove(stdscr, y, x)
155#define refresh() wrefresh(stdscr)
156#define standend() wstandend(stdscr)
157#define standout() wstandout(stdscr)
1b7ae9b8 158
ddf60ab8 159/* Standard screen plus movement pseudo functions. */
e91c7874
KB
160#define mvaddbytes(y, x, da, co) mvwaddbytes(stdscr, y, x, da, co)
161#define mvaddch(y, x, ch) mvwaddch(stdscr, y, x, ch)
162#define mvaddstr(y, x, str) mvwaddstr(stdscr, y, x, str)
163#define mvdelch(y, x) mvwdelch(stdscr, y, x)
164#define mvgetch(y, x) mvwgetch(stdscr, y, x)
165#define mvgetstr(y, x, str) mvwgetstr(stdscr, y, x, str)
166#define mvinch(y, x) mvwinch(stdscr, y, x)
167#define mvinsch(y, x, c) mvwinsch(stdscr, y, x, c)
ddf60ab8 168#define mvwaddbytes(win, y, x, da, co) \
e91c7874
KB
169 (wmove(win, y, x) == ERR ? ERR : waddbytes(win, da, co))
170#define mvwaddch(win, y, x, ch) \
171 (wmove(win, y, x) == ERR ? ERR : waddch(win, ch))
ddf60ab8 172#define mvwaddstr(win, y, x, str) \
e91c7874
KB
173 (wmove(win, y, x) == ERR ? ERR : waddbytes(win, str, strlen(str)))
174#define mvwdelch(win, y, x) \
175 (wmove(win, y, x) == ERR ? ERR : wdelch(win))
176#define mvwgetch(win, y, x) \
177 (wmove(win, y, x) == ERR ? ERR : wgetch(win))
ddf60ab8 178#define mvwgetstr(win, y, x, str) \
e91c7874
KB
179 (wmove(win, y, x) == ERR ? ERR : wgetstr(win, str))
180#define mvwinch(win, y, x) \
181 (wmove(win, y, x) == ERR ? ERR : winch(win))
182#define mvwinsch(win, y, x, c) \
183 (wmove(win, y, x) == ERR ? ERR : winsch(win, c))
184
185/* Psuedo functions. */
186#define clearok(win, bf) \
187 ((bf) ? (win->flags |= __CLEAROK) : (win->flags &= ~__CLEAROK))
188#define flushok(win, bf) \
189 ((bf) ? (win->flags |= __FLUSH) : (win->flags &= ~__FLUSH))
190#define getyx(win, y, x) \
191 (y) = win->cury, (x) = win->curx
192#define leaveok(win, bf) \
193 ((bf) ? (win->flags |= __LEAVEOK) : (win->flags &= ~__LEAVEOK))
194#define scrollok(win, bf) \
195 ((bf) ? (win->flags |= __SCROLLOK) : (win->flags &= ~__SCROLLOK))
196#define winch(win) \
197 (win->lines[win->cury]->line[win->curx].ch & 0177)
1b7ae9b8 198
ddf60ab8 199/* Public function prototypes. */
ddf60ab8
KB
200int box __P((WINDOW *, int, int));
201int cbreak __P((void));
202int delwin __P((WINDOW *));
203int echo __P((void));
204int endwin __P((void));
205char *fullname __P((char *, char *));
206char *getcap __P((char *));
207int gettmode __P((void));
208void idlok __P((WINDOW *, int));
209WINDOW *initscr __P((void));
210char *longname __P((char *, char *));
211int mvcur __P((int, int, int, int));
212int mvprintw __P((int, int, const char *, ...));
213int mvscanw __P((int, int, const char *, ...));
214int mvwin __P((WINDOW *, int, int));
215int mvwprintw __P((WINDOW *, int, int, const char *, ...));
216int mvwscanw __P((WINDOW *, int, int, const char *, ...));
217WINDOW *newwin __P((int, int, int, int));
218int nl __P((void));
219int nocbreak __P((void));
220int noecho __P((void));
221int nonl __P((void));
222int noraw __P((void));
223int overlay __P((WINDOW *, WINDOW *));
224int overwrite __P((WINDOW *, WINDOW *));
225int printw __P((const char *, ...));
226int raw __P((void));
227int resetty __P((void));
228int savetty __P((void));
229int scanw __P((const char *, ...));
230int scroll __P((WINDOW *));
231int setterm __P((char *));
b67f22a0 232int sscans __P((WINDOW *, const char *, ...));
ddf60ab8
KB
233WINDOW *subwin __P((WINDOW *, int, int, int, int));
234int suspendwin __P((void));
235int touchline __P((WINDOW *, int, int, int));
236int touchoverlap __P((WINDOW *, WINDOW *));
237int touchwin __P((WINDOW *));
238void tstp __P((int));
b67f22a0
EA
239int vwprintw __P((WINDOW *, const char *, _BSD_VA_LIST_));
240int vwscanw __P((WINDOW *, const char *, _BSD_VA_LIST_));
e91c7874 241int waddbytes __P((WINDOW *, char *, int));
ddf60ab8
KB
242int waddch __P((WINDOW *, int));
243int waddstr __P((WINDOW *, char *));
244int wclear __P((WINDOW *));
245int wclrtobot __P((WINDOW *));
246int wclrtoeol __P((WINDOW *));
247int wdelch __P((WINDOW *));
248int wdeleteln __P((WINDOW *));
249int werase __P((WINDOW *));
250int wgetch __P((WINDOW *));
251int wgetstr __P((WINDOW *, char *));
252int winsch __P((WINDOW *, int));
253int winsertln __P((WINDOW *));
254int wmove __P((WINDOW *, int, int));
255int wprintw __P((WINDOW *, const char *, ...));
256int wrefresh __P((WINDOW *));
257int wscanw __P((WINDOW *, const char *, ...));
258char *wstandend __P((WINDOW *));
259char *wstandout __P((WINDOW *));
e91c7874 260int vwprintw __P((WINDOW *, const char *, _BSD_VA_LIST_));
1b7ae9b8 261
ddf60ab8
KB
262#ifdef _CURSES_PRIVATE
263/* Private function prototypes. */
e91c7874 264void __cputchar __P((int));
e3923e32 265void __TRACE __P((const char *, ...));
ddf60ab8
KB
266void __id_subwins __P((WINDOW *));
267void __set_subwin __P((WINDOW *, WINDOW *));
268void __swflags __P((WINDOW *));
e3923e32
EA
269int __touchline __P((WINDOW *, int, int, int, int));
270int __touchwin __P((WINDOW *));
e91c7874
KB
271char *__tscroll __P((const char *, int));
272int __waddbytes __P((WINDOW *, char *, int, int));
1b7ae9b8 273
ddf60ab8
KB
274/* Private #defines. */
275#define min(a,b) (a < b ? a : b)
276#define max(a,b) (a > b ? a : b)
1b7ae9b8 277
ddf60ab8
KB
278/* Private externs. */
279extern int __echoit;
280extern int __endwin;
281extern int __pfast;
282extern int __rawmode;
091287a4 283extern int __noqch;
ddf60ab8 284#endif
1b7ae9b8 285
ddf60ab8
KB
286/* Termcap functions. */
287int tgetent __P((char *, char *));
288int tgetnum __P((char *));
289int tgetflag __P((char *));
290char *tgetstr __P((char *, char **));
291char *tgoto __P((char *, int, int));
292int tputs __P((char *, int, void (*)(int)));
7781fc01 293
ddf60ab8 294#endif /* !_CURSES_H_ */