wchar_t * widen(char *s) { int n; wchar_t *ws; n = utflen(s) + 1; ws = smalloc(n*sizeof(wchar_t)); utftorunes16(ws, s, n); return ws; }
int clipwrite(char *buf) { HANDLE h; char *p, *e; Rune16 *rp; int n = strlen(buf); if(!OpenClipboard(window)) { oserror(); return -1; } if(!EmptyClipboard()) { oserror(); CloseClipboard(); return -1; } h = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, (n+1)*sizeof(Rune)); if(h == NULL) panic("out of memory"); rp = GlobalLock(h); utftorunes16(rp, buf, n+1); GlobalUnlock(h); SetClipboardData(CF_UNICODETEXT, h); h = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, n+1); if(h == NULL) panic("out of memory"); p = GlobalLock(h); memcpy(p, buf, n); p[n] = 0; GlobalUnlock(h); SetClipboardData(CF_TEXT, h); CloseClipboard(); return n; }