Annotation of researchv10no/ncurses/screen/clreolinln.c, revision 1.1

1.1     ! root        1: /*     @(#) clreolinln.c: 1.1 10/15/83 (1.21   2/11/83)        */
        !             2: 
        !             3: #include "curses.ext"
        !             4: 
        !             5: extern int     _clearhl();
        !             6: extern int     _dellines();
        !             7: extern int     _inslines();
        !             8: extern int     _outch();
        !             9: extern int     _pos();
        !            10: extern int     _setwind();
        !            11: extern int     clreol();
        !            12: extern char    *tparm();
        !            13: extern int     tputs();
        !            14: 
        !            15: _clreol()
        !            16: {
        !            17:        register int col;
        !            18:        register struct line *cb;
        !            19: 
        !            20: #ifdef DEBUG
        !            21:        if(outf) fprintf(outf, "_clreol().\n");
        !            22: #endif
        !            23:        if (!move_standout_mode)
        !            24:                _clearhl ();
        !            25:        if (clr_eol) {
        !            26:                tputs (clr_eol, columns-SP->phys_x, _outch);
        !            27:        } else if (delete_line && insert_line && SP->phys_x == 0) {
        !            28:                _dellines (1);
        !            29:                _inslines (1);
        !            30:        } else {
        !            31:                /*
        !            32:                 * Should consider using delete/insert line here, too,
        !            33:                 * if the part that would have to be redrawn is short,
        !            34:                 * or if we have to get rid of some cemented highlights.
        !            35:                 * This might win on the DTC 382 or the Teleray 1061.
        !            36:                 */
        !            37:                cb = SP->cur_body[SP->phys_y+1];
        !            38:                for (col=SP->phys_x+1; col<cb->length; col++)
        !            39:                        if (cb->body[col] != ' ') {
        !            40:                                _pos(SP->phys_y, col);
        !            41:                                _blanks(1);
        !            42:                        }
        !            43:                /*
        !            44:                 * Could save and restore SP->curptr position, but since we
        !            45:                 * keep track of what _blanks does to it, it turns out
        !            46:                 * that this is wasted.  Not backspacing over the stuff
        !            47:                 * cleared out is a real win on a super dumb terminal.
        !            48:                 */
        !            49:        }
        !            50: }
        !            51: 
        !            52: _inslines (n)
        !            53: {
        !            54:        register int i;
        !            55: 
        !            56: #ifdef DEBUG
        !            57:        if(outf) fprintf(outf, "_inslines(%d).\n", n);
        !            58: #endif
        !            59:        if (!move_standout_mode && SP->phys_gr)
        !            60:                _clearhl();
        !            61:        if (SP->phys_y + n >= lines && clr_eos) {
        !            62:                /*
        !            63:                 * Really quick -- clear to end of screen.
        !            64:                 */
        !            65:                tputs(clr_eos, lines-SP->phys_y, _outch);
        !            66:                return;
        !            67:        }
        !            68: 
        !            69:        /*
        !            70:         * We are about to _shove something off the bottom of the screen.
        !            71:         * Terminals with extra memory keep this around, and it might
        !            72:         * show up again to haunt us later if we do a delete line or
        !            73:         * scroll into it, or when we exit.  So we clobber it now.  We
        !            74:         * might get better performance by somehow remembering that this
        !            75:         * stuff is down there and worrying about it if/when we have to.
        !            76:         * In particular, having to do this extra pair of SP->curptr motions
        !            77:         * is a lose.
        !            78:         */
        !            79:        if (memory_below) {
        !            80:                int save;
        !            81: 
        !            82:                save = SP->phys_y;
        !            83:                if (save_cursor && restore_cursor)
        !            84:                        tputs(save_cursor, 1, _outch);
        !            85:                if (clr_eos) {
        !            86:                        _pos(lines-n, 0);
        !            87:                        tputs(clr_eos, n, _outch);
        !            88:                } else {
        !            89:                        for (i=0; i<n; i++) {
        !            90:                                _pos(lines-n+i, 0);
        !            91:                                _clreol();
        !            92:                        }
        !            93:                }
        !            94:                if (save_cursor && restore_cursor)
        !            95:                        tputs(restore_cursor, 1, _outch);
        !            96:                else
        !            97:                        _pos(save, 0);
        !            98:        }
        !            99: 
        !           100:        /* Do the physical line deletion */
        !           101:        if (scroll_reverse && SP->phys_y == SP->des_top_mgn /* &&costSR<costAL */) {
        !           102:                /*
        !           103:                 * Use reverse scroll mode of the terminal, at
        !           104:                 * the top of the window.  Reverse linefeed works
        !           105:                 * too, since we only use it from top line of window.
        !           106:                 */
        !           107:                _setwind();
        !           108:                for (i = n; i > 0; i--) {
        !           109:                        _pos(SP->phys_y, 0);
        !           110:                        tputs(scroll_reverse, 1, _outch);
        !           111:                        if (SP->ml_above > 0)
        !           112:                                SP->ml_above--;
        !           113:                        /*
        !           114:                         * If we are at the top of the screen, and the
        !           115:                         * terminal retains display above, then we
        !           116:                         * should try to clear to end of line.
        !           117:                         * Have to use CE since we don't remember what is
        !           118:                         * actually on the line.
        !           119:                         */
        !           120:                        if (clr_eol && memory_above)
        !           121:                                tputs(clr_eol, 1, _outch);
        !           122:                }
        !           123:        } else if (parm_insert_line && (n>1 || *insert_line==0)) {
        !           124:                tputs(tparm(parm_insert_line, n, SP->phys_y), lines-SP->phys_y, _outch);
        !           125:        } else if (change_scroll_region && *insert_line==0) {
        !           126:                /* vt100 change scrolling region to fake AL */
        !           127:                tputs(save_cursor, 1, _outch);
        !           128:                tputs(  tparm(change_scroll_region,
        !           129:                        SP->phys_y, SP->des_bot_mgn), 1, _outch);
        !           130:                /* change_scroll_region homes stupid cursor */
        !           131:                tputs(restore_cursor, 1, _outch);
        !           132:                for (i=n; i>0; i--)
        !           133:                        tputs(scroll_reverse, 1, _outch);/* should do @'s */
        !           134:                /* restore scrolling region */
        !           135:                tputs(tparm(change_scroll_region,
        !           136:                        SP->des_top_mgn, SP->des_bot_mgn), 1, _outch);
        !           137:                tputs(restore_cursor, 1, _outch);/* Once again put it back */
        !           138:                SP->phys_top_mgn = SP->des_top_mgn;
        !           139:                SP->phys_bot_mgn = SP->des_bot_mgn;
        !           140:        } else {
        !           141:                tputs(insert_line, lines - SP->phys_y, _outch);
        !           142:                for (i = n - 1; i > 0; i--) {
        !           143:                        tputs(insert_line, lines - SP->phys_y, _outch);
        !           144:                }
        !           145:        }
        !           146: }

unix.superglobalmegacorp.com

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