Curses

 view release on metacpan or  search on metacpan

CursesFunWide.c  view on Meta::CPAN

    int ret;
    size_t len;
    int need_free;
    unsigned char *bstr = c_sv2bstr(ST(c_arg), &len, &need_free);
    if (bstr == NULL)
        XSRETURN_NO;
    ret = waddnstr(win, (char *)bstr, len);
    if (need_free) free(bstr);
    if (ret == OK)
        XSRETURN_YES;
    else
        XSRETURN_NO;
#endif
}

XS(XS_CURSES_insstring) {
    dXSARGS;
    c_countargs("insstring", items, 1);

    WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr;
    if (c_x)
        if (c_domove(win, ST(c_x-1), ST(c_x)) == ERR)
            XSRETURN_NO;
#ifdef C_INS_NWSTR
    int ret;
    size_t len;
    wchar_t *wstr = c_sv2wstr(ST(c_arg), &len);
    if (wstr == NULL)
        XSRETURN_NO;
    ret = wins_nwstr(win, wstr, len);
    free(wstr);
    if (ret == OK)
        XSRETURN_YES;
    else
        XSRETURN_NO;
#else
    int ret;
    size_t len;
    int need_free;
    unsigned char *bstr = c_sv2bstr(ST(c_arg), &len, &need_free);
    if (bstr == NULL)
        XSRETURN_NO;
    ret = winsnstr(win, (char *)bstr, len);
    if (need_free) free(bstr);
    if (ret == OK)
        XSRETURN_YES;
    else
        XSRETURN_NO;
#endif
}

XS(XS_CURSES_instring) {
    int x, y;
    dXSARGS;
    c_countargs("instring", items, 0);

    WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr;
    if (c_x)
        if (c_domove(win, ST(c_x-1), ST(c_x)) == ERR)
            XSRETURN_UNDEF;
    getmaxyx(win, y, x); /* Macro: not &y, &x! */
#ifdef C_INNWSTR
    int ret;
    wchar_t *buf = malloc((x + 1) * sizeof *buf);
    if (buf == NULL) croak("insstring: malloc");
    ret = winnwstr(win, buf, x);
    if (ret == ERR) {
        free(buf);
        XSRETURN_UNDEF;
    }
    ST(0) = sv_newmortal();
    c_wstr2sv(ST(0), buf);
    free(buf);
    XSRETURN(1);
#else
    int ret;
    unsigned char *buf = malloc(x + 1);
    if (buf == NULL) croak("insstring: malloc");
    ret = winnstr(win, (char *)buf, x);
    if (ret == ERR) {
        free(buf);
        XSRETURN_UNDEF;
    }
    ST(0) = sv_newmortal();
    c_bstr2sv(ST(0), buf);
    free(buf);
    XSRETURN(1);
#endif
}



( run in 0.578 second using v1.01-cache-2.11-cpan-39bf76dae61 )