use \n at bottom to scroll entire screen,
[unix-history] / usr / src / usr.bin / window / wwgets.c
... / ...
CommitLineData
1#ifndef lint
2static char sccsid[] = "@(#)wwgets.c 3.9 %G%";
3#endif
4
5/*
6 * Copyright (c) 1983 Regents of the University of California,
7 * All rights reserved. Redistribution permitted subject to
8 * the terms of the Berkeley Software License Agreement.
9 */
10
11#include "ww.h"
12#include "char.h"
13
14wwgets(buf, n, w)
15char *buf;
16int n;
17register struct ww *w;
18{
19 register char *p = buf;
20 register char c;
21 char uc = w->ww_unctrl;
22
23 w->ww_unctrl = 0;
24 for (;;) {
25 wwcurtowin(w);
26 while ((c = wwgetc()) < 0)
27 wwiomux();
28 if (c == wwoldtty.ww_sgttyb.sg_erase) {
29 if (p > buf)
30 rub(*--p, w);
31 } else if (c == wwoldtty.ww_sgttyb.sg_kill) {
32 while (p > buf)
33 rub(*--p, w);
34 } else if (c == wwoldtty.ww_ltchars.t_werasc) {
35 while (--p >= buf && (*p == ' ' || *p == '\t'))
36 rub(*p, w);
37 while (p >= buf && *p != ' ' && *p != '\t')
38 rub(*p--, w);
39 p++;
40 } else if (c == '\r' || c == '\n') {
41 break;
42 } else {
43 if (p >= buf + n - 1)
44 wwputc(ctrl(g), w);
45 else
46 wwputs(unctrl(*p++ = c), w);
47 }
48 }
49 *p = 0;
50 w->ww_unctrl = uc;
51}
52
53static
54rub(c, w)
55struct ww *w;
56{
57 register i;
58
59 for (i = strlen(unctrl(c)); --i >= 0;)
60 (void) wwwrite(w, "\b \b", 3);
61}