# 2.11BSD#431 - /usr/src/ucb/window/wwdelchar.c

##### Functions

    wwdelchar         X

       1: #ifndef lint
       2: static char sccsid[] = "@(#)wwdelchar.c	3.11 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 "tt.h"
      13:
      14: wwdelchar(w, row, col)
      15: register struct ww *w;
      16: {
      17:     register i;
      18:     int nvis;
      19:
      20:     /*
      21: 	 * First, shift the line.
      22: 	 */
      23:     {
      24:         register union ww_char *p, *q;
      25:
      26:         p = &w->ww_buf[row][col];
      27:         q = p + 1;
      28:         for (i = w->ww_b.r - col; --i > 0;)
      29:             *p++ = *q++;
      30:         p->c_w = ' ';
      31:     }
      32:
      33:     /*
      34: 	 * If can't see it, just return.
      35: 	 */
      36:     if (row < w->ww_i.t || row >= w->ww_i.b
      37:         || w->ww_i.r <= 0 || w->ww_i.r <= col)
      38:         return;
      39:
      40:     if (col < w->ww_i.l)
      41:         col = w->ww_i.l;
      42:
      43:     /*
      44: 	 * Now find out how much is actually changed, and fix wwns.
      45: 	 */
      46:     {
      47:         register union ww_char *buf;
      48:         register char *win;
      49:         register union ww_char *ns;
      50:         register char *smap;
      51:         char touched;
      52:
      53:         nvis = 0;
      54:         smap = &wwsmap[row][col];
      55:         for (i = col; i < w->ww_i.r && *smap++ != w->ww_index; i++)
      56:             ;
      57:         if (i >= w->ww_i.r)
      58:             return;
      59:         col = i;
      60:         buf = w->ww_buf[row];
      61:         win = w->ww_win[row];
      62:         ns = wwns[row];
      63:         smap = &wwsmap[row][i];
      64:         touched = wwtouched[row];
      65:         for (; i < w->ww_i.r; i++) {
      66:             if (*smap++ != w->ww_index)
      67:                 continue;
      68:             touched |= WWU_TOUCHED;
      69:             if (win[i])
      70:                 ns[i].c_w =
      71:                     buf[i].c_w ^ win[i] << WWC_MSHIFT;
      72:             else {
      73:                 nvis++;
      74:                 ns[i] = buf[i];
      75:             }
      76:         }
      77:         wwtouched[row] = touched;
      78:     }
      79:
      80:     /*
      81: 	 * Can/Should we use delete character?
      82: 	 */
      83:     if (tt.tt_delchar != 0 && nvis > (wwncol - col) / 2) {
      84:         register union ww_char *p, *q;
      85:
      86:         (*tt.tt_move)(row, col);
      87:         (*tt.tt_delchar)();
      88:
      89:         p = &wwos[row][col];
      90:         q = p + 1;
      91:         for (i = wwncol - col; --i > 0;)
      92:             *p++ = *q++;
      93:         p->c_w = ' ';
      94:     }
      95: }

#### Defined functions

wwdelchar defined in line 14; used 1 times

- in /usr/src/ucb/window/wwwrite.c line 210

#### Defined variables

sccsid defined in line 2; never used

Last modified: 1987-02-17 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 485 |