Annotation of coherent/g/usr/lib/ncurses/lib_getstr.c, revision 1.1.1.1

1.1       root        1: /*********************************************************************
                      2: *                         COPYRIGHT NOTICE                           *
                      3: **********************************************************************
                      4: *        This software is copyright (C) 1982 by Pavel Curtis         *
                      5: *                                                                    *
                      6: *        Permission is granted to reproduce and distribute           *
                      7: *        this file by any means so long as no fee is charged         *
                      8: *        above a nominal handling fee and so long as this            *
                      9: *        notice is always included in the copies.                    *
                     10: *                                                                    *
                     11: *        Other rights are reserved except as explicitly granted      *
                     12: *        by written permission of the author.                        *
                     13: *                Pavel Curtis                                        *
                     14: *                Computer Science Dept.                              *
                     15: *                405 Upson Hall                                      *
                     16: *                Cornell University                                  *
                     17: *                Ithaca, NY 14853                                    *
                     18: *                                                                    *
                     19: *                Ph- (607) 256-4934                                  *
                     20: *                                                                    *
                     21: *                Pavel.Cornell@Udel-Relay   (ARPAnet)                *
                     22: *                decvax!cornell!pavel       (UUCPnet)                *
                     23: *********************************************************************/
                     24: 
                     25: /*
                     26: **     lib_getstr.c
                     27: **
                     28: **     The routine wgetstr().
                     29: **
                     30: ** $Log:       lib_getstr.c,v $
                     31:  * Revision 1.8  93/04/12  14:13:42  bin
                     32:  * Udo: third color update
                     33:  * 
                     34:  * Revision 1.2  92/04/13  14:37:34  bin
                     35:  * update by vlad
                     36:  * 
                     37:  * Revision 2.2  91/04/20  19:07:12  munk
                     38:  * Usage of register variables
                     39:  *
                     40:  * Revision 2.1  82/10/25  14:47:33  pavel
                     41:  * Added Copyright Notice
                     42:  * 
                     43:  * Revision 2.0  82/10/25  13:45:39  pavel
                     44:  * Beta-one Test Release
                     45:  * 
                     46: **
                     47: */
                     48: 
                     49: #ifdef RCSHDR
                     50: static char RCSid[] =
                     51:        "$Header: /src386/usr/lib/ncurses/RCS/lib_getstr.c,v 1.8 93/04/12 14:13:42 bin Exp Locker: bin $";
                     52: #endif
                     53: 
                     54: #include "curses.h"
                     55: #include "curses.priv.h"
                     56: #include "unctrl.h"
                     57: 
                     58: #define backspace() {                                                  \
                     59:                    mvwaddstr(curscr, win->_begy + win->_cury,          \
                     60:                                      win->_begx + win->_curx, "\b \b");\
                     61:                    waddstr(win, "\b \b");                              \
                     62:                    fputs("\b \b", SP->_ofp);                           \
                     63:                    fflush(SP->_ofp);                                   \
                     64:                    }
                     65: 
                     66: 
                     67: wgetstr(win,str)
                     68: register WINDOW        *win; 
                     69: register char  *str;
                     70: {
                     71:        char    erasechar(), killchar();
                     72:        bool    oldnl, oldecho, oldraw, oldcbreak;
                     73:        char    erasec;
                     74:        char    killc;
                     75:        char    *oldstr;
                     76: 
                     77: #ifdef TRACE
                     78:        if (_tracing)
                     79:            _tracef("wgetstr(%o,%o) called", win, str);
                     80: #endif
                     81: 
                     82:        oldnl = SP->_nl;
                     83:        oldecho = SP->_echo;
                     84:        oldraw = SP->_raw;
                     85:        oldcbreak = SP->_cbreak;
                     86:        nl();
                     87:        noecho();
                     88:        noraw();
                     89:        cbreak();
                     90: 
                     91:        erasec = erasechar();
                     92:        killc = killchar();
                     93: 
                     94:        oldstr = str;
                     95: 
                     96:        while ((*str = getc(SP->_ifp)) != ERR  &&  *str != '\n')
                     97:        {
                     98:            if (*str == erasec)
                     99:            {
                    100:                if (str > oldstr)
                    101:                {
                    102:                    str--;
                    103:                    backspace();
                    104:                    if (*str < ' ' ||  *str == '\177')
                    105:                        backspace();
                    106:                }
                    107:            }
                    108:            else if (*str == killc)
                    109:            {
                    110:                while (str > oldstr)
                    111:                {
                    112:                    str--;
                    113:                    backspace();
                    114:                    if (*str < ' ' ||  *str == '\177')
                    115:                        backspace();
                    116:                }
                    117:            }
                    118:            else
                    119:            {
                    120:                mvwaddstr(curscr, win->_begy + win->_cury,
                    121:                                  win->_begx + win->_curx, unctrl(*str));
                    122:                waddstr(win, unctrl(*str));
                    123:                fputs(unctrl(*str), SP->_ofp);
                    124:                fflush(SP->_ofp);
                    125:                str++;
                    126:            }
                    127:        }
                    128: 
                    129:        if (! oldnl)
                    130:            nonl();
                    131: 
                    132:        if (oldecho)
                    133:            echo();
                    134: 
                    135:        if (oldraw)
                    136:            raw();
                    137: 
                    138:        if (! oldcbreak)
                    139:            nocbreak();
                    140: 
                    141:        if (*str == ERR)
                    142:         {
                    143:            *str = '\0';
                    144:            return(ERR);
                    145:        }
                    146: 
                    147:        *str = '\0';
                    148: 
                    149: #ifdef TRACE
                    150:        if (_tracing)
                    151:            _tracef("\twgetstr returns %s", oldstr);
                    152: #endif
                    153: 
                    154:        return(OK);
                    155: }

unix.superglobalmegacorp.com

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