TrackText(frow, fcol, trow, tcol) register int frow, fcol, trow, tcol;
TrackText( register int frow, register int fcol, register int trow, register int tcol)
TrackText(frow, fcol, trow, tcol)    register int frow, fcol, trow, tcol;    /* Guaranteed (frow, fcol) <= (trow, tcol) */{	register int from, to;	register TScreen *screen = &term->screen;	int old_startrow, old_startcol, old_endrow, old_endcol;	old_startrow = screen->startHRow;	old_startcol = screen->startHCol;	old_endrow = screen->endHRow;	old_endcol = screen->endHCol;	if (frow == old_startrow && fcol == old_startcol &&	    trow == old_endrow   && tcol == old_endcol) return;	screen->startHRow = frow;	screen->startHCol = fcol;	screen->endHRow   = trow;	screen->endHCol   = tcol;	from = Coordinate(frow, fcol);	to = Coordinate(trow, tcol);	if (to <= screen->startHCoord || from > screen->endHCoord) {	    /* No overlap whatsoever between old and new hilite */	    ReHiliteText(old_startrow, old_startcol, old_endrow, old_endcol);	    ReHiliteText(frow, fcol, trow, tcol);	} else {	    if (from < screen->startHCoord) {		    /* Extend left end */		    ReHiliteText(frow, fcol, old_startrow, old_startcol);	    } else if (from > screen->startHCoord) {		    /* Shorten left end */		    ReHiliteText(old_startrow, old_startcol, frow, fcol);	    }	    if (to > screen->endHCoord) {		    /* Extend right end */		    ReHiliteText(old_endrow, old_endcol, trow, tcol);	    } else if (to < screen->endHCoord) {		    /* Shorten right end */		    ReHiliteText(trow, tcol, old_endrow, old_endcol);	    }	}	screen->startHCoord = from;	screen->endHCoord = to;}