Annotation of 43BSD/ucb/window/wwgets.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)wwgets.c   3.9 4/24/85";
                      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: 
                     14: wwgets(buf, n, w)
                     15: char *buf;
                     16: int n;
                     17: register 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: 
                     53: static
                     54: rub(c, w)
                     55: struct ww *w;
                     56: {
                     57:        register i;
                     58: 
                     59:        for (i = strlen(unctrl(c)); --i >= 0;)
                     60:                (void) wwwrite(w, "\b \b", 3);
                     61: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.