private void moveCursorFromTo(int i0, int i1) throws IOException {
        if (i0 == i1) return;
        int width = getTerminal().getWidth();
        int l0 = i0 / width;
        int c0 = i0 % width;
        int l1 = i1 / width;
        int c1 = i1 % width;
        if (l0 == l1 + 1) {
            if (!tputs("cursor_up")) {
                tputs("parm_up_cursor", 1);
            }
        } else if (l0 > l1) {
            if (!tputs("parm_up_cursor", l0 - l1)) {
                for (int i = l1; i < l0; i++) {
                    tputs("cursor_up");
                }
            }
        } else if (l0 < l1) {
            tputs("carriage_return");
            rawPrint('\n', l1 - l0);
            c0 = 0;
        }
        if (c0 == c1 - 1) {
            tputs("cursor_right");
        } else if (c0 == c1 + 1) {
            tputs("cursor_left");
        } else if (c0 < c1) {
            if (!tputs("parm_right_cursor", c1 - c0)) {
                for (int i = c0; i < c1; i++) {
                    tputs("cursor_right");
                }
            }
        } else if (c0 > c1) {
            if (!tputs("parm_left_cursor", c0 - c1)) {
                for (int i = c1; i < c0; i++) {
                    tputs("cursor_left");
                }
            }
        }
        cursorOk = true;
    }