diff --git a/src_main/auxiliary/piterminal/main.cpp b/src_main/auxiliary/piterminal/main.cpp index ad56a9ae..98e2e772 100644 --- a/src_main/auxiliary/piterminal/main.cpp +++ b/src_main/auxiliary/piterminal/main.cpp @@ -176,9 +176,11 @@ public: ir[j].EventType = KEY_EVENT; ir[j].Event.KeyEvent.wRepeatCount = 1; ir[j].Event.KeyEvent.dwControlKeyState = KeyModifiers2ControlKeyState(k.modifiers); - if (PITerminal::isSpecialKey(k.key)) + if (PITerminal::isSpecialKey(k.key)) { ir[j].Event.KeyEvent.wVirtualKeyCode = SpecialKey2VirtualKeyCode((PIKbdListener::SpecialKey)k.key); - ir[j].Event.KeyEvent.uChar.AsciiChar = PIChar(piMaxi(k.key, 0)).toConcole1Byte(); + ir[j].Event.KeyEvent.uChar.AsciiChar = PIChar(piMaxi(k.key, 0)).toAscii(); + } else + ir[j].Event.KeyEvent.uChar.UnicodeChar = PIChar(piMaxi(k.key, 0)).toWChar(); //piCout << ir[j].Event.KeyEvent.wVirtualKeyCode << int(ir[j].Event.KeyEvent.uChar.AsciiChar); ir[j].Event.KeyEvent.bKeyDown = true; ir[z] = ir[j]; diff --git a/src_main/console/piscreen.cpp b/src_main/console/piscreen.cpp index 640cdefb..216ce42b 100644 --- a/src_main/console/piscreen.cpp +++ b/src_main/console/piscreen.cpp @@ -178,7 +178,7 @@ void PIScreen::SystemConsole::print() { int k = j * dw + i; Cell & c(cells[j + dy0][i + dx0]); PRIVATE->chars[k].Char.UnicodeChar = 0; - PRIVATE->chars[k].Char.AsciiChar = c.symbol.toConcole1Byte(); + PRIVATE->chars[k].Char.AsciiChar = c.symbol.toConsole1Byte(); //PRIVATE->chars[k].Char.UnicodeChar = c.symbol.toInt(); PRIVATE->chars[k].Attributes = attributes(c); } diff --git a/src_main/console/piterminal.cpp b/src_main/console/piterminal.cpp index 61c1a2be..e0525c01 100644 --- a/src_main/console/piterminal.cpp +++ b/src_main/console/piterminal.cpp @@ -228,7 +228,7 @@ void PITerminal::write(PIKbdListener::KeyEvent ke) { else { PIByteArray ba; #ifdef WINDOWS - ba << uchar(PIChar(ke.key).toConcole1Byte()); + ba << uchar(PIChar(ke.key).toConsole1Byte()); #else ba = PIString(PIChar(ke.key)).toUTF8(); #endif diff --git a/src_main/core/pichar.cpp b/src_main/core/pichar.cpp index 710202db..2ff8156e 100644 --- a/src_main/core/pichar.cpp +++ b/src_main/core/pichar.cpp @@ -235,7 +235,7 @@ wchar_t PIChar::toWChar() const { } -char PIChar::toConcole1Byte() const { +char PIChar::toConsole1Byte() const { if (ch < 0x80) return ch; #ifdef PIP_ICU UErrorCode e((UErrorCode)0); @@ -252,6 +252,23 @@ char PIChar::toConcole1Byte() const { } +char PIChar::toSystem() const { + if (ch < 0x80) return ch; +#ifdef PIP_ICU + UErrorCode e((UErrorCode)0); + UConverter * cc = ucnv_open(__syslocname__, &e); + if (cc) { + char uc[8]; + e = (UErrorCode)0; + ucnv_fromUChars(cc, uc, 8, (const UChar*)(&ch), 1, &e); + ucnv_close(cc); + return uc[0]; + } +#endif + return toAscii(); +} + + PIChar PIChar::toUpper() const { #ifdef PIP_ICU UChar c(0); diff --git a/src_main/core/pichar.h b/src_main/core/pichar.h index 4c6c1393..d03b4410 100755 --- a/src_main/core/pichar.h +++ b/src_main/core/pichar.h @@ -139,7 +139,8 @@ public: wchar_t toWChar() const; char toAscii() const {return ch % 256;} - char toConcole1Byte() const; + char toConsole1Byte() const; + char toSystem() const; ushort unicode16Code() const {return ch;} //! Return symbol in upper case