114432Sedward #ifndef lint 2*14459Sedward static char *sccsid = "@(#)wwdelchar.c 3.2 83/08/11"; 314432Sedward #endif 414432Sedward 514432Sedward #include "ww.h" 614432Sedward 7*14459Sedward wwdelchar(w, line, col) 814432Sedward register struct ww *w; 914432Sedward { 10*14459Sedward register i; 11*14459Sedward int row = line - w->ww_scroll; 12*14459Sedward int nvis; 13*14459Sedward 14*14459Sedward { 15*14459Sedward register union ww_char *p, *q; 16*14459Sedward 17*14459Sedward p = &w->ww_buf[line][col]; 18*14459Sedward q = p + 1; 19*14459Sedward for (i = w->ww_w.nc - col - 1; --i >= 0;) 20*14459Sedward *p++ = *q++; 21*14459Sedward p->c_w = ' '; 22*14459Sedward } 23*14459Sedward if (row < 0 || row >= w->ww_w.nr) 24*14459Sedward return; 25*14459Sedward { 26*14459Sedward register union ww_char *buf; 27*14459Sedward register char *win; 28*14459Sedward register union ww_char *ns; 29*14459Sedward register char *smap; 30*14459Sedward 31*14459Sedward nvis = 0; 32*14459Sedward smap = &wwsmap[row + w->ww_w.t][col + w->ww_w.l]; 33*14459Sedward for (i = w->ww_w.nc - col; i > 0; i--) 34*14459Sedward if (*smap == w->ww_index) 35*14459Sedward break; 36*14459Sedward else { 37*14459Sedward smap++; 38*14459Sedward col++; 39*14459Sedward } 40*14459Sedward if (i <= 0) 41*14459Sedward return; 42*14459Sedward buf = &w->ww_buf[line][col]; 43*14459Sedward win = &w->ww_win[row][col]; 44*14459Sedward ns = &wwns[row + w->ww_w.t][col + w->ww_w.l]; 45*14459Sedward for (; --i >= 0;) { 46*14459Sedward if (*win) { 47*14459Sedward if ((*win & (WWM_COV|WWM_GLS)) != 0) { 48*14459Sedward ns++; 49*14459Sedward buf++; 50*14459Sedward } else 51*14459Sedward ns++->c_w = buf++->c_w 52*14459Sedward ^ *win++ << WWC_MSHIFT; 53*14459Sedward } else { 54*14459Sedward *ns++ = *buf++; 55*14459Sedward win++; 56*14459Sedward nvis++; 57*14459Sedward } 58*14459Sedward } 59*14459Sedward } 60*14459Sedward col += w->ww_w.l; 61*14459Sedward row += w->ww_w.t; 62*14459Sedward if (nvis > (wwncol - col) / 2) { 63*14459Sedward register union ww_char *p, *q; 64*14459Sedward 65*14459Sedward (*tt.tt_move)(row, col); 66*14459Sedward (*tt.tt_delchar)(); 67*14459Sedward 68*14459Sedward p = &wwos[row][col]; 69*14459Sedward q = p + 1; 70*14459Sedward for (i = wwncol - col - 1; --i >= 0;) 71*14459Sedward *p++ = *q++; 72*14459Sedward p->c_w = ' '; 73*14459Sedward } 7414432Sedward } 75