private int get_next_page(Page page, long boundary) {
        if (boundary > 0) {
            boundary += offset;
        }
        while (true) {
            int more;
            if (boundary > 0 && offset >= boundary) {
                return OV_FALSE;
            }
            more = oy.pageseek(page);
            if (more < 0) {
                offset -= more;
            } else {
                if (more == 0) {
                    if (boundary == 0) {
                        return OV_FALSE;
                    }
                    int ret = get_data();
                    if (ret == 0) {
                        return OV_EOF;
                    }
                    if (ret < 0) {
                        return OV_EREAD;
                    }
                } else {
                    int ret = (int) offset; //!!!
                    offset += more;
                    return ret;
                }
            }
        }
    }