@@ -250,7 +250,7 @@ void SendHorizontalScroll(HANDLE hInput, int cells) {
250
250
WriteFile (hInput , formatted_output , out , & wr , NULL );
251
251
}
252
252
253
- void SendCharacter (HANDLE hInput , WORD attributes , char character ) {
253
+ void SendCharacter (HANDLE hInput , WORD attributes , wchar_t character ) {
254
254
255
255
DWORD wr = 0 ;
256
256
DWORD out = 0 ;
@@ -266,6 +266,9 @@ void SendCharacter(HANDLE hInput, WORD attributes, char character) {
266
266
PSTR Next ;
267
267
size_t SizeLeft ;
268
268
269
+ if (!character )
270
+ return ;
271
+
269
272
Next = formatted_output ;
270
273
SizeLeft = sizeof formatted_output ;
271
274
@@ -339,52 +342,33 @@ void SendCharacter(HANDLE hInput, WORD attributes, char character) {
339
342
if (bUseAnsiEmulation && attributes != pattributes )
340
343
WriteFile (hInput , formatted_output , (Next - formatted_output ), & wr , NULL );
341
344
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
+ }
343
360
344
361
pattributes = attributes ;
345
362
}
346
363
347
364
void 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 ;
357
365
358
366
if (bufferSize <= 0 )
359
367
return ;
360
368
361
- formatted_output = (char * )malloc (bufferSize );
362
-
363
- PSTR Next ;
364
- Next = formatted_output ;
365
-
366
369
for (DWORD i = 0 ; i < bufferSize ; i ++ )
367
370
{
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 );
388
372
}
389
373
}
390
374
@@ -465,7 +449,8 @@ DWORD WINAPI MonitorChild(_In_ LPVOID lpParameter) {
465
449
DWORD ProcessEvent (void * p ) {
466
450
467
451
char f [255 ];
468
- char chUpdate ;
452
+ wchar_t chUpdate ;
453
+
469
454
WORD wAttributes ;
470
455
WORD wX ;
471
456
WORD wY ;
0 commit comments