lint
[unix-history] / usr / src / usr.bin / window / wwgets.c
CommitLineData
20c927a9 1#ifndef lint
1b032f84 2static char *sccsid = "@(#)wwgets.c 3.7 84/04/09";
20c927a9
EW
3#endif
4
8fa6d94c 5#include "ww.h"
0e64e422 6#include "char.h"
20c927a9 7
8fa6d94c 8wwgets(buf, n, w)
059a7be6
EW
9char *buf;
10int n;
11register struct ww *w;
12{
13 register char *p = buf;
14 register char c;
7ecf4dca 15 char uc = w->ww_unctrl;
059a7be6 16
7ecf4dca 17 w->ww_unctrl = 0;
059a7be6 18 for (;;) {
85af59e4 19 wwcurtowin(w);
8fa6d94c
EW
20 while ((c = wwgetc()) < 0)
21 wwiomux();
5b912384
EW
22 if (c == wwoldtty.ww_sgttyb.sg_erase) {
23 if (p > buf)
24 rub(*--p, w);
5b912384
EW
25 } else if (c == wwoldtty.ww_sgttyb.sg_kill) {
26 while (p > buf)
27 rub(*--p, w);
28 } else if (c == wwoldtty.ww_ltchars.t_werasc) {
29 while (--p >= buf && (*p == ' ' || *p == '\t'))
30 rub(*p, w);
31 while (p >= buf && *p != ' ' && *p != '\t')
32 rub(*p--, w);
33 p++;
34 } else if (c == '\r' || c == '\n') {
059a7be6 35 break;
5b912384 36 } else {
059a7be6 37 if (p >= buf + n - 1)
0e64e422 38 wwputc(ctrl(g), w);
5b912384 39 else
b1189050 40 wwputs(unctrl(*p++ = c), w);
059a7be6
EW
41 }
42 }
5b912384 43 *p = 0;
7ecf4dca 44 w->ww_unctrl = uc;
5b912384
EW
45}
46
8fa6d94c 47static
5b912384
EW
48rub(c, w)
49struct ww *w;
50{
51 register i;
52
53 for (i = strlen(unctrl(c)); --i >= 0;)
1b032f84 54 (void) wwwrite(w, "\b \b", 3);
059a7be6 55}