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 }
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)); }
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; }
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; }
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; }
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; }
// 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 }