xref: /original-bsd/lib/libcurses/getch.c (revision f1656be1)
1 /*
2  * Copyright (c) 1981 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that this notice is preserved and that due credit is given
7  * to the University of California at Berkeley. The name of the University
8  * may not be used to endorse or promote products derived from this
9  * software without specific prior written permission. This software
10  * is provided ``as is'' without express or implied warranty.
11  */
12 
13 #ifndef lint
14 static char sccsid[] = "@(#)getch.c	5.4 (Berkeley) 06/08/88";
15 #endif /* not lint */
16 
17 # include	"curses.ext"
18 
19 /*
20  *	This routine reads in a character from the window.
21  *
22  */
23 wgetch(win)
24 reg WINDOW	*win; {
25 
26 	reg bool	weset = FALSE;
27 	reg char	inp;
28 
29 	if (!win->_scroll && (win->_flags&_FULLWIN)
30 	    && win->_curx == win->_maxx - 1 && win->_cury == win->_maxy - 1)
31 		return ERR;
32 # ifdef DEBUG
33 	fprintf(outf, "WGETCH: _echoit = %c, _rawmode = %c\n", _echoit ? 'T' : 'F', _rawmode ? 'T' : 'F');
34 # endif
35 	if (_echoit && !_rawmode) {
36 		cbreak();
37 		weset++;
38 	}
39 	inp = getchar();
40 # ifdef DEBUG
41 	fprintf(outf,"WGETCH got '%s'\n",unctrl(inp));
42 # endif
43 	if (_echoit) {
44 		mvwaddch(curscr, win->_cury + win->_begy,
45 			win->_curx + win->_begx, inp);
46 		waddch(win, inp);
47 	}
48 	if (weset)
49 		nocbreak();
50 	return inp;
51 }
52