git-svn-id: svn://db.shs.com.ru/pip@255 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2016-09-06 12:46:39 +00:00
parent 73cc277f23
commit d321b01f10
10 changed files with 510 additions and 69 deletions

View File

@@ -240,7 +240,12 @@ void PIScreen::SystemConsole::print() {
#define BACKGROUND_MASK (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE)
WORD PIScreen::SystemConsole::attributes(const PIScreenTypes::Cell & c) {
WORD attr = PRIVATE->dattr;
switch (c.format.color_char) {
bool inv = ((c.format.flags & Inverse) == Inverse);
if (c.format.flags & Bold) attr |= (inv ? BACKGROUND_INTENSITY : FOREGROUND_INTENSITY);
else attr &= ~(inv ? BACKGROUND_INTENSITY : FOREGROUND_INTENSITY);
if (c.format.flags & Underline) attr |= COMMON_LVB_UNDERSCORE;
else attr &= ~COMMON_LVB_UNDERSCORE;
switch (inv ? c.format.color_back : c.format.color_char) {
case Black: attr = (attr & ~FOREGROUND_MASK); break;
case Red: attr = (attr & ~FOREGROUND_MASK) | FOREGROUND_RED; break;
case Green: attr = (attr & ~FOREGROUND_MASK) | FOREGROUND_GREEN; break;
@@ -250,7 +255,7 @@ WORD PIScreen::SystemConsole::attributes(const PIScreenTypes::Cell & c) {
case Yellow: attr = (attr & ~FOREGROUND_MASK) | FOREGROUND_RED | FOREGROUND_GREEN; break;
case White: attr = attr | FOREGROUND_MASK; break;
}
switch (c.format.color_back) {
switch (inv ? c.format.color_char : c.format.color_back) {
case Black: attr = (attr & ~BACKGROUND_MASK); break;
case Red: attr = (attr & ~BACKGROUND_MASK) | BACKGROUND_RED; break;
case Green: attr = (attr & ~BACKGROUND_MASK) | BACKGROUND_GREEN; break;
@@ -260,10 +265,6 @@ WORD PIScreen::SystemConsole::attributes(const PIScreenTypes::Cell & c) {
case Yellow: attr = (attr & ~BACKGROUND_MASK) | BACKGROUND_RED | BACKGROUND_GREEN; break;
case White: attr = attr | BACKGROUND_MASK; break;
}
if (c.format.flags & Bold) attr |= FOREGROUND_INTENSITY;
else attr &= ~FOREGROUND_INTENSITY;
if (c.format.flags & Underline) attr |= COMMON_LVB_UNDERSCORE;
else attr &= ~COMMON_LVB_UNDERSCORE;
return attr;
}
#undef FOREGROUND_MASK
@@ -296,9 +297,6 @@ PIString PIScreen::SystemConsole::formatString(const PIScreenTypes::Cell & c) {
case Yellow: ts += ";33"; break;
case White: ts += ";37"; break;
}
if (c.format.flags & Bold) ts += ";1";
if (c.format.flags & Blink) ts += ";5";
if (c.format.flags & Underline) ts += ";4";
switch (c.format.color_back) {
case Black: ts += ";40"; break;
case Red: ts += ";41"; break;
@@ -309,6 +307,10 @@ PIString PIScreen::SystemConsole::formatString(const PIScreenTypes::Cell & c) {
case Yellow: ts += ";43"; break;
case White: ts += ";47"; break;
}
if ((c.format.flags & Bold) == Bold) ts += ";1";
if ((c.format.flags & Underline) == Underline) ts += ";4";
if ((c.format.flags & Blink) == Blink) ts += ";5";
if ((c.format.flags & Inverse) == Inverse) ts += ";7";
return ts + "m";
}
#endif