|
|
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.