/* adjust mouse position */ static void set_mouse_pos(scr_stat *scp) { if (scp->mouse_xpos < scp->xoff*8) scp->mouse_xpos = scp->xoff*8; if (scp->mouse_ypos < scp->yoff*scp->font_size) scp->mouse_ypos = scp->yoff*scp->font_size; if (ISGRAPHSC(scp)) { if (scp->mouse_xpos > scp->xpixel-1) scp->mouse_xpos = scp->xpixel-1; if (scp->mouse_ypos > scp->ypixel-1) scp->mouse_ypos = scp->ypixel-1; return; } else { if (scp->mouse_xpos > (scp->xsize + scp->xoff)*8 - 1) scp->mouse_xpos = (scp->xsize + scp->xoff)*8 - 1; if (scp->mouse_ypos > (scp->ysize + scp->yoff)*scp->font_size - 1) scp->mouse_ypos = (scp->ysize + scp->yoff)*scp->font_size - 1; } if (scp->mouse_xpos != scp->mouse_oldxpos || scp->mouse_ypos != scp->mouse_oldypos) { scp->status |= MOUSE_MOVED; scp->mouse_pos = (scp->mouse_ypos/scp->font_size - scp->yoff)*scp->xsize + scp->mouse_xpos/8 - scp->xoff; #ifndef SC_NO_CUTPASTE if ((scp->status & MOUSE_VISIBLE) && (scp->status & MOUSE_CUTTING)) mouse_cut(scp); #endif } }
/* extend the marked region to the mouse pointer position */ static void mouse_cut_extend(scr_stat *scp) { int start; int end; int s; if ((scp->status & MOUSE_VISIBLE) && !(scp->status & MOUSE_CUTTING) && (scp->mouse_cut_end >= 0)) { if (scp->mouse_cut_start <= scp->mouse_cut_end) { start = scp->mouse_cut_start; end = scp->mouse_cut_end; } else { start = scp->mouse_cut_end; end = scp->mouse_cut_start - 1; } s = spltty(); if (scp->mouse_pos > end) { scp->mouse_cut_start = start; scp->mouse_cut_end = end; } else if (scp->mouse_pos < start) { scp->mouse_cut_start = end + 1; scp->mouse_cut_end = start; } else { if (scp->mouse_pos - start > end + 1 - scp->mouse_pos) { scp->mouse_cut_start = start; scp->mouse_cut_end = end; } else { scp->mouse_cut_start = end + 1; scp->mouse_cut_end = start; } } splx(s); mouse_cut(scp); scp->status |= MOUSE_CUTTING; } }