win.EraseArea(xloc, yloc, m.charWidth('W'), m.getDescent());
win.EraseArea(xcur, ycur, m.charWidth('W'), m.getDescent());
private char rchar(vWindow win, StringBuffer b) {    vValue e;    FontMetrics m = win.getFontMetrics();    if (cursor) {				// display cursor	win.FillRectangle(xloc, yloc, m.charWidth('W'), m.getDescent());    }    do {	e = win.Event();    } while (! (e instanceof vString));		// wait for character event    if (cursor) {				// hide cursor	win.EraseArea(xloc, yloc, m.charWidth('W'), m.getDescent());    }    char c = ((vString) e).charAt(0);    if (c == '\b' || c == '\177') {		// if backspace or delete	if (b.length() > 0) {			// if buffer is not empty	    c = b.charAt(b.length() - 1);	// save deleted character	    b.setLength(b.length() - 1);	// remove from buffer	    if (echo) {		int w = m.charWidth(c);		xloc -= w;			// backspace text cursor		win.EraseArea(xloc, yloc - m.getMaxAscent(), w, m.getHeight());	    }	}    } else {	if (c == '\r') {			// turn \r into \n	    c = '\n';	}	b.append(c);				// add to buffer	if (echo) {	    writes(win, vString.New(c));	// echo to screen	}    }    return c;}