src/input.c

changeset 30
a285ee393860
parent 7
41468077b5bb
child 31
ed440bcd9740
equal deleted inserted replaced
29:c6a1ad6cf749 30:a285ee393860
26 * POSSIBILITY OF SUCH DAMAGE. 26 * POSSIBILITY OF SUCH DAMAGE.
27 * 27 *
28 */ 28 */
29 29
30 #include "input.h" 30 #include "input.h"
31 #include <ncurses.h>
32 31
33 void init_colorpairs() { 32 void init_colorpairs() {
34 init_pair(COL_YB, COLOR_YELLOW, COLOR_BLUE); 33 init_pair(COL_YB, COLOR_YELLOW, COLOR_BLUE);
35 init_pair(COL_BW, COLOR_BLACK, COLOR_WHITE); 34 init_pair(COL_BW, COLOR_BLACK, COLOR_WHITE);
36 init_pair(COL_WB, COLOR_WHITE, COLOR_BLACK); 35 init_pair(COL_WB, COLOR_WHITE, COLOR_BLACK);
46 } while (ch != 'y' && ch != 'n'); 45 } while (ch != 'y' && ch != 'n');
47 echo(); 46 echo();
48 47
49 return ch == 'y'; 48 return ch == 'y';
50 } 49 }
50
51 /**
52 * Asynchronous variant of getnstr().
53 *
54 * Needs halfdelay mode enabled!
55 *
56 * Warning: you must not call this function for reading into two separate
57 * buffers at the same time.
58 *
59 * Attention: the first byte of the buffer must be zero at the first call, so
60 * the buffer pointer is initialized correctly.
61 *
62 * @param w the window
63 * @param y the window y position
64 * @param x the window x position
65 * @param str the buffer for the read string
66 * @param len the length of the buffer
67 * @return 0 if reading is in progress and 1 when a complete line is read
68 */
69 int mvwasyncgetnstr(WINDOW* w, int y, int x, char *str, size_t len) {
70 static size_t pos = 0;
71
72 if (*str == '\0') {
73 pos = 0;
74 }
75
76 mvwaddstr(w,y, x, str);
77 wrefresh(w);
78 int c = wgetch(w);
79
80 if (c != ERR) {
81 switch (c) {
82 case '\n':
83 str[pos] = '\0';
84 pos = 0;
85 return 1;
86 case KEY_BACKSPACE:
87 case KEY_LEFT:
88 str[--pos] = '\0';
89 break;
90 default:
91 if (c < 255 && pos < len-1) {
92 str[pos++] = (char) c;
93 }
94 }
95 }
96
97 return 0;
98 }

mercurial