@@ -250,7 +250,7 @@ void SendHorizontalScroll(HANDLE hInput, int cells) {
250250 WriteFile (hInput , formatted_output , out , & wr , NULL );
251251}
252252
253- void SendCharacter (HANDLE hInput , WORD attributes , char character ) {
253+ void SendCharacter (HANDLE hInput , WORD attributes , wchar_t character ) {
254254
255255 DWORD wr = 0 ;
256256 DWORD out = 0 ;
@@ -266,6 +266,9 @@ void SendCharacter(HANDLE hInput, WORD attributes, char character) {
266266 PSTR Next ;
267267 size_t SizeLeft ;
268268
269+ if (!character )
270+ return ;
271+
269272 Next = formatted_output ;
270273 SizeLeft = sizeof formatted_output ;
271274
@@ -339,52 +342,33 @@ void SendCharacter(HANDLE hInput, WORD attributes, char character) {
339342 if (bUseAnsiEmulation && attributes != pattributes )
340343 WriteFile (hInput , formatted_output , (Next - formatted_output ), & wr , NULL );
341344
342- WriteFile (hInput , & character , 1 , & wr , NULL );
345+ // East asian languages have 2 bytes for each character, only use the first
346+ if (!(attributes & COMMON_LVB_TRAILING_BYTE ))
347+ {
348+ int nSize = WideCharToMultiByte (CP_UTF8 ,
349+ 0 ,
350+ & character ,
351+ 1 ,
352+ Next ,
353+ 10 ,
354+ NULL ,
355+ NULL );
356+
357+ if (nSize > 0 )
358+ WriteFile (hInput , Next , nSize , & wr , NULL );
359+ }
343360
344361 pattributes = attributes ;
345362}
346363
347364void SendBuffer (HANDLE hInput , CHAR_INFO * buffer , DWORD bufferSize ) {
348-
349- DWORD wr = 0 ;
350- DWORD out = 0 ;
351- DWORD current = 0 ;
352-
353- char * formatted_output = NULL ;
354-
355- USHORT Color = 0 ;
356- ULONG Status = 0 ;
357365
358366 if (bufferSize <= 0 )
359367 return ;
360368
361- formatted_output = (char * )malloc (bufferSize );
362-
363- PSTR Next ;
364- Next = formatted_output ;
365-
366369 for (DWORD i = 0 ; i < bufferSize ; i ++ )
367370 {
368- // East asian languages have 2 bytes for each character, only use the first
369- if (!(buffer [i ].Attributes & COMMON_LVB_TRAILING_BYTE ))
370- {
371- WideCharToMultiByte (cp ,
372- 0 ,
373- & buffer [i ].Char .UnicodeChar ,
374- 1 ,
375- Next ,
376- 1 ,
377- NULL ,
378- NULL );
379-
380- SendCharacter (hInput , buffer [i ].Attributes , * Next );
381-
382- Next ++ ;
383- }
384- }
385-
386- if (formatted_output ) {
387- free (formatted_output );
371+ SendCharacter (hInput , buffer [i ].Attributes , buffer [i ].Char .UnicodeChar );
388372 }
389373}
390374
@@ -465,7 +449,8 @@ DWORD WINAPI MonitorChild(_In_ LPVOID lpParameter) {
465449DWORD ProcessEvent (void * p ) {
466450
467451 char f [255 ];
468- char chUpdate ;
452+ wchar_t chUpdate ;
453+
469454 WORD wAttributes ;
470455 WORD wX ;
471456 WORD wY ;
0 commit comments