|
|
1.1 root 1: # include "curses.ext"
2: /* @(#) getstr.c: 1.1 10/15/83 (1.10 11/18/82) */
3:
4: /*
5: * This routine gets a string starting at (_cury,_curx)
6: *
7: * 7/2/81 (Berkeley) @(#)getstr.c 1.4
8: */
9: wgetstr(win,str)
10: WINDOW *win;
11: char *str;
12: {
13: char myerase, mykill;
14: char rownum[256], colnum[256];
15: int doecho = SP->fl_echoit;
16: int savecb = SP->fl_rawmode;
17: register int cpos = 0;
18: register int ch;
19: register char *cp = str;
20:
21: #ifdef DEBUG
22: if (outf) fprintf(outf, "doecho %d, savecb %d\n", doecho, savecb);
23: #endif
24:
25: myerase = erasechar();
26: mykill = killchar();
27: noecho(); crmode();
28:
29: for (;;) {
30: rownum[cpos] = win->_cury;
31: colnum[cpos] = win->_curx;
32: if (! (win->_flags&_ISPAD))
33: wrefresh(win);
34: ch = wgetch(win);
35: if (ch <= 0 ||ch == ERR || ch == '\n' || ch == '\r')
36: break;
37: if (ch == myerase || ch == KEY_LEFT || ch == KEY_BACKSPACE) {
38: if (cpos > 0) {
39: cp--; cpos--;
40: if (doecho) {
41: wmove(win, rownum[cpos], colnum[cpos]);
42: wclrtoeol(win);
43: }
44: }
45: } else if (ch == mykill) {
46: cp = str;
47: cpos = 0;
48: if (doecho) {
49: wmove(win, rownum[cpos], colnum[cpos]);
50: wclrtoeol(win);
51: }
52: } else {
53: *cp++ = ch;
54: cpos++;
55: if (doecho) {
56: waddch(win, ch);
57: }
58: }
59: }
60:
61: *cp = '\0';
62:
63: if (doecho)
64: echo();
65: if (!savecb)
66: nocrmode();
67: waddch(win, '\n');
68: if (win->_flags & _ISPAD);
69: wrefresh(win);
70: if (ch == ERR)
71: return ERR;
72: return OK;
73: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.