114427Sedward #ifndef lint 2*14459Sedward static char *sccsid = "@(#)wwinschar.c 3.2 83/08/11"; 314427Sedward #endif 414427Sedward 514427Sedward #include "ww.h" 614427Sedward 7*14459Sedward wwinschar(w, line, col, c) 814427Sedward register struct ww *w; 9*14459Sedward short c; 1014427Sedward { 11*14459Sedward register i; 12*14459Sedward int row = line - w->ww_scroll; 13*14459Sedward int nvis; 1414427Sedward 15*14459Sedward { 16*14459Sedward register union ww_char *p, *q; 17*14459Sedward 18*14459Sedward p = &w->ww_buf[line][w->ww_w.nc]; 19*14459Sedward q = p - 1; 20*14459Sedward for (i = w->ww_w.nc - col - 1; --i >= 0;) 21*14459Sedward *--p = *--q; 22*14459Sedward q->c_w = c; 23*14459Sedward } 24*14459Sedward if (row < 0 || row >= w->ww_w.nr) 25*14459Sedward return; 26*14459Sedward { 27*14459Sedward register union ww_char *buf; 28*14459Sedward register char *win; 29*14459Sedward register union ww_char *ns; 30*14459Sedward register char *smap; 31*14459Sedward 32*14459Sedward nvis = 0; 33*14459Sedward smap = &wwsmap[row + w->ww_w.t][col + w->ww_w.l]; 34*14459Sedward for (i = w->ww_w.nc - col; i > 0; i--) 35*14459Sedward if (*smap == w->ww_index) 36*14459Sedward break; 37*14459Sedward else { 38*14459Sedward smap++; 39*14459Sedward col++; 40*14459Sedward } 41*14459Sedward if (i <= 0) 42*14459Sedward return; 43*14459Sedward buf = &w->ww_buf[line][col]; 44*14459Sedward win = &w->ww_win[row][col]; 45*14459Sedward ns = &wwns[row + w->ww_w.t][col + w->ww_w.l]; 46*14459Sedward c = buf->c_w ^ *win << WWC_MSHIFT; 47*14459Sedward for (; --i >= 0;) { 48*14459Sedward if (*win) { 49*14459Sedward if ((*win & (WWM_COV|WWM_GLS)) != 0) { 50*14459Sedward ns++; 51*14459Sedward buf++; 52*14459Sedward } else 53*14459Sedward ns++->c_w = buf++->c_w 54*14459Sedward ^ *win++ << WWC_MSHIFT; 5514427Sedward } else { 56*14459Sedward *ns++ = *buf++; 57*14459Sedward win++; 58*14459Sedward nvis++; 5914427Sedward } 6014427Sedward } 6114427Sedward } 62*14459Sedward col += w->ww_w.l; 63*14459Sedward row += w->ww_w.t; 64*14459Sedward if (nvis > (wwncol - col) / 2) { 65*14459Sedward register union ww_char *p, *q; 66*14459Sedward 67*14459Sedward (*tt.tt_setinsert)(1); 68*14459Sedward (*tt.tt_move)(row, col); 69*14459Sedward (*tt.tt_setmodes)(c >> WWC_MSHIFT); 70*14459Sedward (*tt.tt_putc)(c & WWC_CMASK); 71*14459Sedward (*tt.tt_setinsert)(0); 72*14459Sedward 73*14459Sedward p = &wwos[row][wwncol]; 74*14459Sedward q = p - 1; 75*14459Sedward for (i = wwncol - col - 1; --i >= 0;) 76*14459Sedward *--p = *--q; 77*14459Sedward q->c_w = c; 78*14459Sedward } 7914427Sedward } 80