// Translates a key and sends it void SendKey(TKeyCode aCode, TUint aModifiers) { char buf[16]; // Reset scrollback seen_key_event = 1; // Interrupt paste term_nopaste(); // Try to translate as a control character int xbytes = TranslateKey(aCode, aModifiers, buf); assert(xbytes < 16); if ( xbytes > 0 ) { // Send control key codes as is ldisc_send(buf, xbytes, 1); } else if ( xbytes == -1 ) { // Not translated, probably a normal letter if ( aCode < ENonCharacterKeyBase ) { wchar_t wc = (wchar_t) aCode; luni_send(&wc, 1, 1); } } }
void lpage_send(void *handle, int codepage, char *buf, int len, int interactive) { Ldisc ldisc = (Ldisc)handle; wchar_t *widebuffer = 0; int widesize = 0; int wclen; if (codepage < 0) { ldisc_send(ldisc, buf, len, interactive); return; } widesize = len * 2; widebuffer = snewn(widesize, wchar_t); wclen = mb_to_wc(codepage, 0, buf, len, widebuffer, widesize); luni_send(ldisc, widebuffer, wclen, interactive); sfree(widebuffer); }