@@ -104,7 +104,12 @@ int ConInit( DWORD OutputHandle, BOOL fSmartInit )
104
104
105
105
if ( os .dwPlatformId == VER_PLATFORM_WIN32_NT )
106
106
{
107
- dwAttributes = (DWORD )ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING ; // PERFECT in NT
107
+ char * term = getenv ("TERM" );
108
+ dwAttributes = (DWORD )ENABLE_PROCESSED_OUTPUT ; // PERFECT in NT
109
+
110
+ if (term != NULL && (_stricmp (term , "ansi" ) == 0 || _stricmp (term , "passthru" )))
111
+ dwAttributes |= (DWORD )ENABLE_VIRTUAL_TERMINAL_PROCESSING ;
112
+
108
113
SetConsoleMode (hOutputConsole , dwAttributes ); // Windows NT
109
114
}
110
115
else
@@ -285,19 +290,34 @@ BOOL ConSetScreenSize( int xSize, int ySize )
285
290
/* ************************************************************ */
286
291
void ConSetAttribute (int * iParam , int iParamCount )
287
292
{
288
- int iAttr = 0 ;
293
+ static int iAttr = 0 ;
289
294
int i = 0 ;
295
+ BOOL bRet = TRUE;
290
296
291
297
if (iParamCount < 1 )
292
- SetConsoleTextAttribute (hOutputConsole , FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE );
298
+ {
299
+ iAttr |= FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ;
300
+
301
+ iAttr = iAttr & ~BACKGROUND_INTENSITY ;
302
+ iAttr = iAttr & ~FOREGROUND_INTENSITY ;
303
+ iAttr = iAttr & ~COMMON_LVB_UNDERSCORE ;
304
+ iAttr = iAttr & ~COMMON_LVB_REVERSE_VIDEO ;
305
+
306
+ SetConsoleTextAttribute (hOutputConsole , (WORD )iAttr );
307
+ }
293
308
else
294
309
{
295
310
for (i = 0 ;i < iParamCount ;i ++ )
296
311
{
297
312
switch (iParam [i ])
298
313
{
299
314
case ANSI_ATTR_RESET :
300
- SetConsoleTextAttribute (hOutputConsole , FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE );
315
+ iAttr |= FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ;
316
+
317
+ iAttr = iAttr & ~BACKGROUND_INTENSITY ;
318
+ iAttr = iAttr & ~FOREGROUND_INTENSITY ;
319
+ iAttr = iAttr & ~COMMON_LVB_UNDERSCORE ;
320
+ iAttr = iAttr & ~COMMON_LVB_REVERSE_VIDEO ;
301
321
break ;
302
322
case ANSI_BRIGHT :
303
323
iAttr |= FOREGROUND_INTENSITY ;
@@ -315,7 +335,7 @@ void ConSetAttribute(int *iParam, int iParamCount)
315
335
case ANSI_HIDDEN :
316
336
break ;
317
337
case ANSI_NOREVERSE :
318
- iAttr |= FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ;
338
+ iAttr = iAttr & ~ COMMON_LVB_REVERSE_VIDEO ;
319
339
break ;
320
340
case ANSI_DEFAULT_FOREGROUND :
321
341
// White
@@ -359,6 +379,9 @@ void ConSetAttribute(int *iParam, int iParamCount)
359
379
break ;
360
380
case ANSI_DEFAULT_BACKGROUND :
361
381
//Black
382
+ iAttr = iAttr & ~BACKGROUND_RED ;
383
+ iAttr = iAttr & ~BACKGROUND_BLUE ;
384
+ iAttr = iAttr & ~BACKGROUND_GREEN ;
362
385
iAttr |= 0 ;
363
386
break ;
364
387
case ANSI_BACKGROUND_BLACK :
@@ -400,11 +423,13 @@ void ConSetAttribute(int *iParam, int iParamCount)
400
423
case ANSI_BACKGROUND_BRIGHT :
401
424
iAttr |= BACKGROUND_INTENSITY ;
402
425
break ;
426
+ default :
427
+ continue ;
403
428
}
404
429
}
405
430
406
431
if (iAttr )
407
- SetConsoleTextAttribute (hOutputConsole , (WORD )iAttr );
432
+ bRet = SetConsoleTextAttribute (hOutputConsole , (WORD )iAttr );
408
433
}
409
434
} // End procedure
410
435
0 commit comments