コード例 #1
0
ファイル: instr.c プロジェクト: hulu1528/PDCurses
int winnstr(WINDOW *win, char *str, int n)
{
#ifdef PDC_WIDE
    wchar_t wstr[513];

    if (n < 0 || n > 512)
        n = 512;

    if (winnwstr(win, wstr, n) == ERR)
        return ERR;

    return PDC_wcstombs(str, wstr, n);
#else
    chtype *src;
    int i;

    PDC_LOG(("winnstr() - called: n %d \n", n));

    if (!win || !str)
        return ERR;

    if (n < 0 || (win->_curx + n) > win->_maxx)
        n = win->_maxx - win->_curx;

    src = win->_y[win->_cury] + win->_curx;

    for (i = 0; i < n; i++)
        str[i] = src[i] & A_CHARTEXT;

    str[i] = '\0';

    return i;
#endif
}
コード例 #2
0
static void wgetnstr_async_(void * arg)
{
    int ret = (int)arg;
    if (ret == ERR)
    {
        (*wgetnstr_async__callback)((void*)ERR);
        return;
    }
    (*wgetnstr_async__callback)((void*)PDC_wcstombs(wgetnstr_async__str, wgetnstr_async__wstr, wgetnstr_async__n));
}
コード例 #3
0
ファイル: pdcclip.c プロジェクト: Acularius/Pixel-Brother
int PDC_getclipboard(char **contents, long *length)
{
#ifdef PDC_WIDE
    wchar_t *wcontents;
#endif
    int result = 0;
    int len;

    PDC_LOG(("PDC_getclipboard() - called\n"));

    XCursesInstructAndWait(CURSES_GET_SELECTION);

    if (XC_read_socket(xc_display_sock, &result, sizeof(int)) < 0)
        XCursesExitCursesProcess(5, "exiting from PDC_getclipboard");

    if (result == PDC_CLIP_SUCCESS)
    {
        if (XC_read_socket(xc_display_sock, &len, sizeof(int)) < 0)
            XCursesExitCursesProcess(5, "exiting from PDC_getclipboard");
#ifdef PDC_WIDE
        wcontents = malloc((len + 1) * sizeof(wchar_t));
        *contents = malloc(len * 3 + 1);

        if (!wcontents || !*contents)
#else
            *contents = malloc(len + 1);

        if (!*contents)
#endif
        XCursesExitCursesProcess(6, "exiting from PDC_getclipboard - "
                                    "synchronization error");

        if (len)
        {
            if (XC_read_socket(xc_display_sock,
#ifdef PDC_WIDE
                wcontents, len * sizeof(wchar_t)) < 0)
#else
                *contents, len) < 0)
#endif
                XCursesExitCursesProcess(5, "exiting from PDC_getclipboard");
        }

#ifdef PDC_WIDE
        wcontents[len] = 0;
        len = PDC_wcstombs(*contents, wcontents, len * 3);
        free(wcontents);
#endif
        (*contents)[len] = '\0';
        *length = len;
    }

    return result;
}
コード例 #4
0
ファイル: pdcclip.c プロジェクト: waruqi/xmake
int PDC_getclipboard(char **contents, long *length)
{
    HANDLE handle;
    long len;

    PDC_LOG(("PDC_getclipboard() - called\n"));

    if (!OpenClipboard(NULL))
        return PDC_CLIP_ACCESS_ERROR;

    if ((handle = GetClipboardData(PDC_TEXT)) == NULL)
    {
        CloseClipboard();
        return PDC_CLIP_EMPTY;
    }

#ifdef PDC_WIDE
    len = (long)wcslen((wchar_t *)handle) * 3;
#else
    len = strlen((char *)handle);
#endif
    *contents = (char *)GlobalAlloc(GMEM_FIXED, len + 1);

    if (!*contents)
    {
        CloseClipboard();
        return PDC_CLIP_MEMORY_ERROR;
    }

#ifdef PDC_WIDE
    len = (long)PDC_wcstombs((char *)*contents, (wchar_t *)handle, len);
#else
    strcpy((char *)*contents, (char *)handle);
#endif
    *length = len;
    CloseClipboard();

    return PDC_CLIP_SUCCESS;
}
コード例 #5
0
ファイル: slk.c プロジェクト: msandiford/Freemacs
char *slk_label(int labnum)
{
    static char temp[33];
#ifdef PDC_WIDE
    wchar_t *wtemp = slk_wlabel(labnum);

    PDC_wcstombs(temp, wtemp, 32);
#else
    chtype *p;
    int i;

    PDC_LOG(("slk_label() - called\n"));

    if (labnum < 1 || labnum > labels)
        return (char *)0;

    for (i = 0, p = slk[labnum - 1].label; *p; i++)
        temp[i] = (char)(*p++);

    temp[i] = '\0';
#endif
    return temp;
}
コード例 #6
0
ファイル: slk.c プロジェクト: allisterb/Cursesdotnet
char *slk_label(int labnum)
{
    static char temp[MAX_LABEL_LENGTH + 1];
#ifdef PDC_WIDE
    wchar_t *wtemp = slk_wlabel(labnum);

    PDC_wcstombs(temp, wtemp, MAX_LABEL_LENGTH);
#else
    chtype *p;
    int i;

    PDC_LOG(("slk_label() - called\n"));

    if (labnum < 1 || labnum > n_labels)
        return (char *)0;

    for (i = 0, p = slk[labnum - 1].label; *p; i++)
        temp[i] = (char)*p++;    /* BJG */

    temp[i] = '\0';
#endif
    return temp;
}
コード例 #7
0
// for emscripten
int wgetnstr(WINDOW *win, char *str, int n)
{
#ifdef PDC_WIDE
    wchar_t wstr[MAXLINE + 1];

    if (n < 0 || n > MAXLINE)
        n = MAXLINE;

    if (wgetn_wstr(win, (wint_t *)wstr, n) == ERR)
        return ERR;

    return PDC_wcstombs(str, wstr, n);
#else
    int ch, i, num, x, chars;
    char *p;
    bool stop, oldecho, oldcbreak, oldnodelay;

    PDC_LOG(("wgetnstr() - called\n"));

    if (!win || !str)
        return ERR;

    chars = 0;
    p = str;
    stop = FALSE;

    x = win->_curx;

    oldcbreak = SP->cbreak; /* remember states */
    oldecho = SP->echo;
    oldnodelay = win->_nodelay;

    SP->echo = FALSE;       /* we do echo ourselves */
    cbreak();               /* ensure each key is returned immediately */
    win->_nodelay = FALSE;  /* don't return -1 */

    wrefresh(win);

    while (!stop)
    {
        ch = wgetch(win);

        switch (ch)
        {

        case '\t':
            ch = ' ';
            num = TABSIZE - (win->_curx - x) % TABSIZE;
            for (i = 0; i < num; i++)
            {
                if (chars < n)
                {
                    if (oldecho) 
                        waddch(win, ch);
                    *p++ = ch;
                    ++chars;
                }
                else
                    beep();
            }
            break;

        case _ECHAR:        /* CTRL-H -- Delete character */
            if (p > str)
            {
                if (oldecho) 
                    waddstr(win, "\b \b");
                ch = (unsigned char)(*--p);
                if ((ch < ' ') && (oldecho))
                    waddstr(win, "\b \b");
                chars--;
            }
            break;

        case _DLCHAR:       /* CTRL-U -- Delete line */
            while (p > str)
            {
                if (oldecho) 
                    waddstr(win, "\b \b");
                ch = (unsigned char)(*--p);
                if ((ch < ' ') && (oldecho))
                    waddstr(win, "\b \b");
            }
            chars = 0;
            break;

        case _DWCHAR:       /* CTRL-W -- Delete word */

            while ((p > str) && (*(p - 1) == ' '))
            {
                if (oldecho) 
                    waddstr(win, "\b \b");

                --p;        /* remove space */
                chars--;
            }
            while ((p > str) && (*(p - 1) != ' '))
            {
                if (oldecho) 
                    waddstr(win, "\b \b");

                ch = (unsigned char)(*--p);
                if ((ch < ' ') && (oldecho))
                    waddstr(win, "\b \b");
                chars--;
            }
            break;

        case '\n':
        case '\r':
            stop = TRUE;
            if (oldecho) 
                waddch(win, '\n');
            break;

        default:
            if (chars < n)
            {
                if (!SP->key_code && ch < 0x100)
                {
                    *p++ = ch;
                    if (oldecho) 
                        waddch(win, ch);
                    chars++;
                }
            }
            else
                beep();

            break;
      
        }

        wrefresh(win);
    }

    *p = '\0';

    SP->echo = oldecho;     /* restore old settings */
    SP->cbreak = oldcbreak;
    win->_nodelay = oldnodelay;

    return OK;
#endif
}