svnno****@sourc*****
svnno****@sourc*****
2011年 12月 6日 (火) 19:20:49 JST
Revision: 4770 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4770 Author: doda Date: 2011-12-06 19:20:48 +0900 (Tue, 06 Dec 2011) Log Message: ----------- OSC 5, 105, 110, 111, 115, 116 に対応 #undef APHABLEND_TYPE2 に出来るだけ対応するようにしていたけれど、そろそろ考えないようにしたいな。 ただ、その為には ALPHABLEND_TYPE2 関連のコードを整理しないと。 Modified Paths: -------------- trunk/teraterm/common/tttypes.h trunk/teraterm/teraterm/vtdisp.c trunk/teraterm/teraterm/vtdisp.h trunk/teraterm/teraterm/vtterm.c -------------- next part -------------- Modified: trunk/teraterm/common/tttypes.h =================================================================== --- trunk/teraterm/common/tttypes.h 2011-12-06 10:01:20 UTC (rev 4769) +++ trunk/teraterm/common/tttypes.h 2011-12-06 10:20:48 UTC (rev 4770) @@ -90,8 +90,12 @@ #define CS_VT_REVERSEBG 263 #define CS_VT_URLFG 264 #define CS_VT_URLBG 265 -#define CS_TEK_FG 266 -#define CS_TEK_BG 267 +#define CS_VT_UNDERFG 266 +#define CS_VT_UNDERBG 267 +#define CS_TEK_FG 268 +#define CS_TEK_BG 269 +#define CS_UNSPEC 0xffffffff +#define CS_ALL CS_UNSPEC /* Kermit function id */ #define IdKmtReceive 1 Modified: trunk/teraterm/teraterm/vtdisp.c =================================================================== --- trunk/teraterm/teraterm/vtdisp.c 2011-12-06 10:01:20 UTC (rev 4769) +++ trunk/teraterm/teraterm/vtdisp.c 2011-12-06 10:20:48 UTC (rev 4770) @@ -19,6 +19,41 @@ #define CurWidth 2 +int DefaultColorTable[256][3] = { + { 0, 0, 0}, {255, 0, 0}, { 0,255, 0}, {255,255, 0}, { 0, 0,255}, {255, 0,255}, { 0,255,255}, {255,255,255}, // 0 - 7 + {128,128,128}, {128, 0, 0}, { 0,128, 0}, {128,128, 0}, { 0, 0,128}, {128, 0,128}, { 0,128,128}, {192,192,192}, // 8 - 15 + { 0, 0, 0}, { 0, 0, 95}, { 0, 0,135}, { 0, 0,175}, { 0, 0,215}, { 0, 0,255}, { 0, 95, 0}, { 0, 95, 95}, // 16 - 23 + { 0, 95,135}, { 0, 95,175}, { 0, 95,215}, { 0, 95,255}, { 0,135, 0}, { 0,135, 95}, { 0,135,135}, { 0,135,175}, // 24 - 31 + { 0,135,215}, { 0,135,255}, { 0,175, 0}, { 0,175, 95}, { 0,175,135}, { 0,175,175}, { 0,175,215}, { 0,175,255}, // 32 - 39 + { 0,215, 0}, { 0,215, 95}, { 0,215,135}, { 0,215,175}, { 0,215,215}, { 0,215,255}, { 0,255, 0}, { 0,255, 95}, // 40 - 47 + { 0,255,135}, { 0,255,175}, { 0,255,215}, { 0,255,255}, { 95, 0, 0}, { 95, 0, 95}, { 95, 0,135}, { 95, 0,175}, // 48 - 55 + { 95, 0,215}, { 95, 0,255}, { 95, 95, 0}, { 95, 95, 95}, { 95, 95,135}, { 95, 95,175}, { 95, 95,215}, { 95, 95,255}, // 56 - 63 + { 95,135, 0}, { 95,135, 95}, { 95,135,135}, { 95,135,175}, { 95,135,215}, { 95,135,255}, { 95,175, 0}, { 95,175, 95}, // 64 - 71 + { 95,175,135}, { 95,175,175}, { 95,175,215}, { 95,175,255}, { 95,215, 0}, { 95,215, 95}, { 95,215,135}, { 95,215,175}, // 72 - 79 + { 95,215,215}, { 95,215,255}, { 95,255, 0}, { 95,255, 95}, { 95,255,135}, { 95,255,175}, { 95,255,215}, { 95,255,255}, // 80 - 87 + {135, 0, 0}, {135, 0, 95}, {135, 0,135}, {135, 0,175}, {135, 0,215}, {135, 0,255}, {135, 95, 0}, {135, 95, 95}, // 88 - 95 + {135, 95,135}, {135, 95,175}, {135, 95,215}, {135, 95,255}, {135,135, 0}, {135,135, 95}, {135,135,135}, {135,135,175}, // 96 - 103 + {135,135,215}, {135,135,255}, {135,175, 0}, {135,175, 95}, {135,175,135}, {135,175,175}, {135,175,215}, {135,175,255}, // 104 - 111 + {135,215, 0}, {135,215, 95}, {135,215,135}, {135,215,175}, {135,215,215}, {135,215,255}, {135,255, 0}, {135,255, 95}, // 112 - 119 + {135,255,135}, {135,255,175}, {135,255,215}, {135,255,255}, {175, 0, 0}, {175, 0, 95}, {175, 0,135}, {175, 0,175}, // 120 - 127 + {175, 0,215}, {175, 0,255}, {175, 95, 0}, {175, 95, 95}, {175, 95,135}, {175, 95,175}, {175, 95,215}, {175, 95,255}, // 128 - 135 + {175,135, 0}, {175,135, 95}, {175,135,135}, {175,135,175}, {175,135,215}, {175,135,255}, {175,175, 0}, {175,175, 95}, // 136 - 143 + {175,175,135}, {175,175,175}, {175,175,215}, {175,175,255}, {175,215, 0}, {175,215, 95}, {175,215,135}, {175,215,175}, // 144 - 151 + {175,215,215}, {175,215,255}, {175,255, 0}, {175,255, 95}, {175,255,135}, {175,255,175}, {175,255,215}, {175,255,255}, // 152 - 159 + {215, 0, 0}, {215, 0, 95}, {215, 0,135}, {215, 0,175}, {215, 0,215}, {215, 0,255}, {215, 95, 0}, {215, 95, 95}, // 160 - 167 + {215, 95,135}, {215, 95,175}, {215, 95,215}, {215, 95,255}, {215,135, 0}, {215,135, 95}, {215,135,135}, {215,135,175}, // 168 - 175 + {215,135,215}, {215,135,255}, {215,175, 0}, {215,175, 95}, {215,175,135}, {215,175,175}, {215,175,215}, {215,175,255}, // 176 - 183 + {215,215, 0}, {215,215, 95}, {215,215,135}, {215,215,175}, {215,215,215}, {215,215,255}, {215,255, 0}, {215,255, 95}, // 184 - 191 + {215,255,135}, {215,255,175}, {215,255,215}, {215,255,255}, {255, 0, 0}, {255, 0, 95}, {255, 0,135}, {255, 0,175}, // 192 - 199 + {255, 0,215}, {255, 0,255}, {255, 95, 0}, {255, 95, 95}, {255, 95,135}, {255, 95,175}, {255, 95,215}, {255, 95,255}, // 200 - 207 + {255,135, 0}, {255,135, 95}, {255,135,135}, {255,135,175}, {255,135,215}, {255,135,255}, {255,175, 0}, {255,175, 95}, // 208 - 215 + {255,175,135}, {255,175,175}, {255,175,215}, {255,175,255}, {255,215, 0}, {255,215, 95}, {255,215,135}, {255,215,175}, // 216 - 223 + {255,215,215}, {255,215,255}, {255,255, 0}, {255,255, 95}, {255,255,135}, {255,255,175}, {255,255,215}, {255,255,255}, // 224 - 231 + { 8, 8, 8}, { 18, 18, 18}, { 28, 28, 28}, { 38, 38, 38}, { 48, 48, 48}, { 58, 58, 58}, { 68, 68, 68}, { 78, 78, 78}, // 232 - 239 + { 88, 88, 88}, { 98, 98, 98}, {108,108,108}, {118,118,118}, {128,128,128}, {138,138,138}, {148,148,148}, {158,158,158}, // 240 - 247 + {168,168,168}, {178,178,178}, {188,188,188}, {198,198,198}, {208,208,208}, {218,218,218}, {228,228,228}, {238,238,238} // 248 - 255 +}; + int WinWidth, WinHeight; static BOOL Active = FALSE; static BOOL CompletelyVisible; @@ -1664,266 +1699,17 @@ void InitColorTable() { + int i; #ifndef NO_ANSI_COLOR_EXTENSION DispApplyANSIColor(); #else /* NO_ANSI_COLOR_EXTENSION */ - ANSIColor[IdBack ] = RGB( 0, 0, 0); - ANSIColor[IdRed ] = RGB(255, 0, 0); - ANSIColor[IdGreen] = RGB( 0,255, 0); - ANSIColor[IdYellow] = RGB(255,255, 0); - ANSIColor[IdBlue] = RGB( 0, 0,255); - ANSIColor[IdMagenta] = RGB(255, 0,255); - ANSIColor[IdCyan] = RGB( 0,255,255); - ANSIColor[IdFore ] = RGB(255,255,255); - ANSIColor[IdBack+8] = RGB(128,128,128); - ANSIColor[IdRed+8] = RGB(128, 0, 0); - ANSIColor[IdGreen+8] = RGB( 0,128, 0); - ANSIColor[IdYellow+8] = RGB(128,128, 0); - ANSIColor[IdBlue+8] = RGB( 0, 0,128); - ANSIColor[IdMagenta+8] = RGB(128, 0,128); - ANSIColor[IdCyan+8] = RGB( 0,128,128); - ANSIColor[IdFore+8] = RGB(192,192,192); + for (i=0; i<=15; i++) { + ANSIColor[i] = RGB(DefaultColorTable[i][0], DefaultColorTable[i][1], DefaultColorTable[i][2]); + } #endif /* NO_ANSI_COLOR_EXTENSION */ - ANSIColor[16] = RGB(0,0,0); - ANSIColor[17] = RGB(0,0,95); - ANSIColor[18] = RGB(0,0,135); - ANSIColor[19] = RGB(0,0,175); - ANSIColor[20] = RGB(0,0,215); - ANSIColor[21] = RGB(0,0,255); - ANSIColor[22] = RGB(0,95,0); - ANSIColor[23] = RGB(0,95,95); - ANSIColor[24] = RGB(0,95,135); - ANSIColor[25] = RGB(0,95,175); - ANSIColor[26] = RGB(0,95,215); - ANSIColor[27] = RGB(0,95,255); - ANSIColor[28] = RGB(0,135,0); - ANSIColor[29] = RGB(0,135,95); - ANSIColor[30] = RGB(0,135,135); - ANSIColor[31] = RGB(0,135,175); - ANSIColor[32] = RGB(0,135,215); - ANSIColor[33] = RGB(0,135,255); - ANSIColor[34] = RGB(0,175,0); - ANSIColor[35] = RGB(0,175,95); - ANSIColor[36] = RGB(0,175,135); - ANSIColor[37] = RGB(0,175,175); - ANSIColor[38] = RGB(0,175,215); - ANSIColor[39] = RGB(0,175,255); - ANSIColor[40] = RGB(0,215,0); - ANSIColor[41] = RGB(0,215,95); - ANSIColor[42] = RGB(0,215,135); - ANSIColor[43] = RGB(0,215,175); - ANSIColor[44] = RGB(0,215,215); - ANSIColor[45] = RGB(0,215,255); - ANSIColor[46] = RGB(0,255,0); - ANSIColor[47] = RGB(0,255,95); - ANSIColor[48] = RGB(0,255,135); - ANSIColor[49] = RGB(0,255,175); - ANSIColor[50] = RGB(0,255,215); - ANSIColor[51] = RGB(0,255,255); - ANSIColor[52] = RGB(95,0,0); - ANSIColor[53] = RGB(95,0,95); - ANSIColor[54] = RGB(95,0,135); - ANSIColor[55] = RGB(95,0,175); - ANSIColor[56] = RGB(95,0,215); - ANSIColor[57] = RGB(95,0,255); - ANSIColor[58] = RGB(95,95,0); - ANSIColor[59] = RGB(95,95,95); - ANSIColor[60] = RGB(95,95,135); - ANSIColor[61] = RGB(95,95,175); - ANSIColor[62] = RGB(95,95,215); - ANSIColor[63] = RGB(95,95,255); - ANSIColor[64] = RGB(95,135,0); - ANSIColor[65] = RGB(95,135,95); - ANSIColor[66] = RGB(95,135,135); - ANSIColor[67] = RGB(95,135,175); - ANSIColor[68] = RGB(95,135,215); - ANSIColor[69] = RGB(95,135,255); - ANSIColor[70] = RGB(95,175,0); - ANSIColor[71] = RGB(95,175,95); - ANSIColor[72] = RGB(95,175,135); - ANSIColor[73] = RGB(95,175,175); - ANSIColor[74] = RGB(95,175,215); - ANSIColor[75] = RGB(95,175,255); - ANSIColor[76] = RGB(95,215,0); - ANSIColor[77] = RGB(95,215,95); - ANSIColor[78] = RGB(95,215,135); - ANSIColor[79] = RGB(95,215,175); - ANSIColor[80] = RGB(95,215,215); - ANSIColor[81] = RGB(95,215,255); - ANSIColor[82] = RGB(95,255,0); - ANSIColor[83] = RGB(95,255,95); - ANSIColor[84] = RGB(95,255,135); - ANSIColor[85] = RGB(95,255,175); - ANSIColor[86] = RGB(95,255,215); - ANSIColor[87] = RGB(95,255,255); - ANSIColor[88] = RGB(135,0,0); - ANSIColor[89] = RGB(135,0,95); - ANSIColor[90] = RGB(135,0,135); - ANSIColor[91] = RGB(135,0,175); - ANSIColor[92] = RGB(135,0,215); - ANSIColor[93] = RGB(135,0,255); - ANSIColor[94] = RGB(135,95,0); - ANSIColor[95] = RGB(135,95,95); - ANSIColor[96] = RGB(135,95,135); - ANSIColor[97] = RGB(135,95,175); - ANSIColor[98] = RGB(135,95,215); - ANSIColor[99] = RGB(135,95,255); - ANSIColor[100] = RGB(135,135,0); - ANSIColor[101] = RGB(135,135,95); - ANSIColor[102] = RGB(135,135,135); - ANSIColor[103] = RGB(135,135,175); - ANSIColor[104] = RGB(135,135,215); - ANSIColor[105] = RGB(135,135,255); - ANSIColor[106] = RGB(135,175,0); - ANSIColor[107] = RGB(135,175,95); - ANSIColor[108] = RGB(135,175,135); - ANSIColor[109] = RGB(135,175,175); - ANSIColor[110] = RGB(135,175,215); - ANSIColor[111] = RGB(135,175,255); - ANSIColor[112] = RGB(135,215,0); - ANSIColor[113] = RGB(135,215,95); - ANSIColor[114] = RGB(135,215,135); - ANSIColor[115] = RGB(135,215,175); - ANSIColor[116] = RGB(135,215,215); - ANSIColor[117] = RGB(135,215,255); - ANSIColor[118] = RGB(135,255,0); - ANSIColor[119] = RGB(135,255,95); - ANSIColor[120] = RGB(135,255,135); - ANSIColor[121] = RGB(135,255,175); - ANSIColor[122] = RGB(135,255,215); - ANSIColor[123] = RGB(135,255,255); - ANSIColor[124] = RGB(175,0,0); - ANSIColor[125] = RGB(175,0,95); - ANSIColor[126] = RGB(175,0,135); - ANSIColor[127] = RGB(175,0,175); - ANSIColor[128] = RGB(175,0,215); - ANSIColor[129] = RGB(175,0,255); - ANSIColor[130] = RGB(175,95,0); - ANSIColor[131] = RGB(175,95,95); - ANSIColor[132] = RGB(175,95,135); - ANSIColor[133] = RGB(175,95,175); - ANSIColor[134] = RGB(175,95,215); - ANSIColor[135] = RGB(175,95,255); - ANSIColor[136] = RGB(175,135,0); - ANSIColor[137] = RGB(175,135,95); - ANSIColor[138] = RGB(175,135,135); - ANSIColor[139] = RGB(175,135,175); - ANSIColor[140] = RGB(175,135,215); - ANSIColor[141] = RGB(175,135,255); - ANSIColor[142] = RGB(175,175,0); - ANSIColor[143] = RGB(175,175,95); - ANSIColor[144] = RGB(175,175,135); - ANSIColor[145] = RGB(175,175,175); - ANSIColor[146] = RGB(175,175,215); - ANSIColor[147] = RGB(175,175,255); - ANSIColor[148] = RGB(175,215,0); - ANSIColor[149] = RGB(175,215,95); - ANSIColor[150] = RGB(175,215,135); - ANSIColor[151] = RGB(175,215,175); - ANSIColor[152] = RGB(175,215,215); - ANSIColor[153] = RGB(175,215,255); - ANSIColor[154] = RGB(175,255,0); - ANSIColor[155] = RGB(175,255,95); - ANSIColor[156] = RGB(175,255,135); - ANSIColor[157] = RGB(175,255,175); - ANSIColor[158] = RGB(175,255,215); - ANSIColor[159] = RGB(175,255,255); - ANSIColor[160] = RGB(215,0,0); - ANSIColor[161] = RGB(215,0,95); - ANSIColor[162] = RGB(215,0,135); - ANSIColor[163] = RGB(215,0,175); - ANSIColor[164] = RGB(215,0,215); - ANSIColor[165] = RGB(215,0,255); - ANSIColor[166] = RGB(215,95,0); - ANSIColor[167] = RGB(215,95,95); - ANSIColor[168] = RGB(215,95,135); - ANSIColor[169] = RGB(215,95,175); - ANSIColor[170] = RGB(215,95,215); - ANSIColor[171] = RGB(215,95,255); - ANSIColor[172] = RGB(215,135,0); - ANSIColor[173] = RGB(215,135,95); - ANSIColor[174] = RGB(215,135,135); - ANSIColor[175] = RGB(215,135,175); - ANSIColor[176] = RGB(215,135,215); - ANSIColor[177] = RGB(215,135,255); - ANSIColor[178] = RGB(215,175,0); - ANSIColor[179] = RGB(215,175,95); - ANSIColor[180] = RGB(215,175,135); - ANSIColor[181] = RGB(215,175,175); - ANSIColor[182] = RGB(215,175,215); - ANSIColor[183] = RGB(215,175,255); - ANSIColor[184] = RGB(215,215,0); - ANSIColor[185] = RGB(215,215,95); - ANSIColor[186] = RGB(215,215,135); - ANSIColor[187] = RGB(215,215,175); - ANSIColor[188] = RGB(215,215,215); - ANSIColor[189] = RGB(215,215,255); - ANSIColor[190] = RGB(215,255,0); - ANSIColor[191] = RGB(215,255,95); - ANSIColor[192] = RGB(215,255,135); - ANSIColor[193] = RGB(215,255,175); - ANSIColor[194] = RGB(215,255,215); - ANSIColor[195] = RGB(215,255,255); - ANSIColor[196] = RGB(255,0,0); - ANSIColor[197] = RGB(255,0,95); - ANSIColor[198] = RGB(255,0,135); - ANSIColor[199] = RGB(255,0,175); - ANSIColor[200] = RGB(255,0,215); - ANSIColor[201] = RGB(255,0,255); - ANSIColor[202] = RGB(255,95,0); - ANSIColor[203] = RGB(255,95,95); - ANSIColor[204] = RGB(255,95,135); - ANSIColor[205] = RGB(255,95,175); - ANSIColor[206] = RGB(255,95,215); - ANSIColor[207] = RGB(255,95,255); - ANSIColor[208] = RGB(255,135,0); - ANSIColor[209] = RGB(255,135,95); - ANSIColor[210] = RGB(255,135,135); - ANSIColor[211] = RGB(255,135,175); - ANSIColor[212] = RGB(255,135,215); - ANSIColor[213] = RGB(255,135,255); - ANSIColor[214] = RGB(255,175,0); - ANSIColor[215] = RGB(255,175,95); - ANSIColor[216] = RGB(255,175,135); - ANSIColor[217] = RGB(255,175,175); - ANSIColor[218] = RGB(255,175,215); - ANSIColor[219] = RGB(255,175,255); - ANSIColor[220] = RGB(255,215,0); - ANSIColor[221] = RGB(255,215,95); - ANSIColor[222] = RGB(255,215,135); - ANSIColor[223] = RGB(255,215,175); - ANSIColor[224] = RGB(255,215,215); - ANSIColor[225] = RGB(255,215,255); - ANSIColor[226] = RGB(255,255,0); - ANSIColor[227] = RGB(255,255,95); - ANSIColor[228] = RGB(255,255,135); - ANSIColor[229] = RGB(255,255,175); - ANSIColor[230] = RGB(255,255,215); - ANSIColor[231] = RGB(255,255,255); - ANSIColor[232] = RGB(8,8,8); - ANSIColor[233] = RGB(18,18,18); - ANSIColor[234] = RGB(28,28,28); - ANSIColor[235] = RGB(38,38,38); - ANSIColor[236] = RGB(48,48,48); - ANSIColor[237] = RGB(58,58,58); - ANSIColor[238] = RGB(68,68,68); - ANSIColor[239] = RGB(78,78,78); - ANSIColor[240] = RGB(88,88,88); - ANSIColor[241] = RGB(98,98,98); - ANSIColor[242] = RGB(108,108,108); - ANSIColor[243] = RGB(118,118,118); - ANSIColor[244] = RGB(128,128,128); - ANSIColor[245] = RGB(138,138,138); - ANSIColor[246] = RGB(148,148,148); - ANSIColor[247] = RGB(158,158,158); - ANSIColor[248] = RGB(168,168,168); - ANSIColor[249] = RGB(178,178,178); - ANSIColor[250] = RGB(188,188,188); - ANSIColor[251] = RGB(198,198,198); - ANSIColor[252] = RGB(208,208,208); - ANSIColor[253] = RGB(218,218,218); - ANSIColor[254] = RGB(228,228,228); - ANSIColor[255] = RGB(238,238,238); + for (i=16; i<=255; i++) { + ANSIColor[i] = RGB(DefaultColorTable[i][0], DefaultColorTable[i][1], DefaultColorTable[i][2]); + } if ((ts.ColorFlag & CF_USETEXTCOLOR)!=0) { #ifdef ALPHABLEND_TYPE2 @@ -3638,7 +3424,7 @@ } } -void DispSetColor(int num, COLORREF color) +void DispSetColor(unsigned int num, COLORREF color) { HDC TmpDC; @@ -3647,7 +3433,34 @@ ReleaseDC(NULL, TmpDC); switch (num) { +#ifdef ALPHABLEND_TYPE2 case CS_VT_NORMALFG: + BGVTColor[0] = color; + if ((ts.ColorFlag & CF_USETEXTCOLOR)!=0) { + ANSIColor[IdFore ] = BGVTColor[0]; // use text color for "white" + } + break; + case CS_VT_NORMALBG: + BGVTColor[1] = color; + if ((ts.ColorFlag & CF_USETEXTCOLOR)!=0) { + ANSIColor[IdBack ] = BGVTColor[1]; // use background color for "Black" + } + if (ts.UseNormalBGColor) { + BGVTBoldColor[1] = BGVTColor[1]; + BGVTBlinkColor[1] = BGVTColor[1]; + BGURLColor[1] = BGVTColor[1]; + } + break; + case CS_VT_BOLDFG: BGVTBoldColor[0] = color; break; + case CS_VT_BOLDBG: BGVTBoldColor[1] = color; break; + case CS_VT_BLINKFG: BGVTBlinkColor[0] = color; break; + case CS_VT_BLINKBG: BGVTBlinkColor[1] = color; break; + case CS_VT_REVERSEFG: BGVTReverseColor[0] = color; break; + case CS_VT_REVERSEBG: BGVTReverseColor[1] = color; break; + case CS_VT_URLFG: BGURLColor[0] = color; break; + case CS_VT_URLBG: BGURLColor[1] = color; break; +#else + case CS_VT_NORMALFG: ts.VTColor[0] = color; if ((ts.ColorFlag & CF_USETEXTCOLOR)!=0) { ANSIColor[IdFore ] = ts.VTColor[0]; // use text color for "white" @@ -3659,9 +3472,9 @@ ANSIColor[IdBack ] = ts.VTColor[1]; // use background color for "Black" } if (ts.UseNormalBGColor) { - ts.VTBoldColor[1] =color; - ts.VTBlinkColor[1] =color; - ts.URLColor[1] = color; + ts.VTBoldColor[1] = ts.VTColor[1]; + ts.VTBlinkColor[1] = ts.VTColor[1]; + ts.URLColor[1] = ts.VTColor[1]; } break; case CS_VT_BOLDFG: ts.VTBoldColor[0] = color; break; @@ -3672,10 +3485,11 @@ case CS_VT_REVERSEBG: ts.VTReverseColor[1] = color; break; case CS_VT_URLFG: ts.URLColor[0] = color; break; case CS_VT_URLBG: ts.URLColor[1] = color; break; +#endif case CS_TEK_FG: ts.TEKColor[0] = color; break; case CS_TEK_BG: ts.TEKColor[1] = color; break; default: - if (num >= 0 && num <= 255) { + if (num <= 255) { ANSIColor[num] = color; } else { @@ -3684,11 +3498,108 @@ break; } -#ifdef ALPHABLEND_TYPE2 - if (num > 255) { - BGInitialize(); + if (num == CS_TEK_FG || num == CS_TEK_BG) { + if (HTEKWin) + InvalidateRect(HTEKWin, NULL, FALSE); } + else { + InvalidateRect(HVTWin,NULL,FALSE); + } +} + +void DispResetColor(unsigned int num) +{ + HDC TmpDC; + + TmpDC = GetDC(NULL); + + switch(num) { +#ifdef ALPHABLEND_TYPE2 + case CS_VT_NORMALFG: + BGVTColor[0] = ts.VTColor[0]; + if ((ts.ColorFlag & CF_USETEXTCOLOR)!=0) { + ANSIColor[IdFore ] = ts.VTColor[0]; // use text color for "white" + } + break; + break; + case CS_VT_NORMALBG: + BGVTColor[1] = ts.VTColor[1]; + if ((ts.ColorFlag & CF_USETEXTCOLOR)!=0) { + ANSIColor[IdBack ] = ts.VTColor[1]; // use background color for "Black" + } + if (ts.UseNormalBGColor) { + ts.VTBoldColor[1] = ts.VTColor[1]; + ts.VTBlinkColor[1] = ts.VTColor[1]; + ts.URLColor[1] = ts.VTColor[1]; + } + break; + break; + case CS_VT_BOLDFG: BGVTBoldColor[0] = ts.VTBoldColor[0]; break; + case CS_VT_BOLDBG: BGVTBoldColor[1] = ts.VTBoldColor[1]; break; + case CS_VT_BLINKFG: BGVTBlinkColor[0] = ts.VTBlinkColor[0]; break; + case CS_VT_BLINKBG: BGVTBlinkColor[1] = ts.VTBlinkColor[1]; break; + case CS_VT_REVERSEFG: BGVTReverseColor[0] = ts.VTReverseColor[0]; break; + case CS_VT_REVERSEBG: BGVTReverseColor[1] = ts.VTReverseColor[1]; break; + case CS_VT_URLFG: BGURLColor[0] = ts.URLColor[0]; break; + case CS_VT_URLBG: BGURLColor[1] = ts.URLColor[1]; break; #endif + case CS_TEK_FG: + break; + case CS_TEK_BG: + break; + case CS_ALL: + InitColorTable(); + DispSetNearestColors(0, 255, NULL); + break; + default: + if (num == IdBack) { + if (ts.ColorFlag & CF_USETEXTCOLOR) { +#ifdef ALPHABLEND_TYPE2 + ANSIColor[IdBack] = BGVTColor[1]; // use background color for "Black" +#else + ANSIColor[IdBack] = ts.VTColor[1]; // use background color for "Black" +#endif + } + else { +#ifndef NO_ANSI_COLOR_EXTENSION + ANSIColor[IdBack] = ts.ANSIColor[IdBack]; +#else /* NO_ANSI_COLOR_EXTENSION */ + ANSIColor[IdBack] = RGB(DefaultColorTable[IdBack][0], DefaultColorTable[IdBack][1], DefaultColorTable[IdBack][2]); +#endif + } + DispSetNearestColors(num, num, NULL); + } + else if (num == IdFore) { + if (ts.ColorFlag & CF_USETEXTCOLOR) { +#ifdef ALPHABLEND_TYPE2 + ANSIColor[IdFore] = BGVTColor[0]; // use text color for "white" +#else + ANSIColor[IdFore] = ts.VTColor[0]; // use text color for "white" +#endif + } + else { +#ifndef NO_ANSI_COLOR_EXTENSION + ANSIColor[IdFore] = ts.ANSIColor[IdFore]; +#else /* NO_ANSI_COLOR_EXTENSION */ + ANSIColor[IdFore] = RGB(DefaultColorTable[IdFore][0], DefaultColorTable[IdFore][1], DefaultColorTable[IdFore][2]); +#endif + } + DispSetNearestColors(num, num, NULL); + } + else if (num <= 15) { +#ifndef NO_ANSI_COLOR_EXTENSION + ANSIColor[num] = ts.ANSIColor[num]; +#else /* NO_ANSI_COLOR_EXTENSION */ + ANSIColor[num] = RGB(DefaultColorTable[num][0], DefaultColorTable[num][1], DefaultColorTable[num][2]); +#endif + DispSetNearestColors(num, num, NULL); + } + else if (num <= 255) { + ANSIColor[num] = RGB(DefaultColorTable[num][0], DefaultColorTable[num][1], DefaultColorTable[num][2]); + DispSetNearestColors(num, num, NULL); + } + } + if (num == CS_TEK_FG || num == CS_TEK_BG) { if (HTEKWin) InvalidateRect(HTEKWin, NULL, FALSE); @@ -3698,7 +3609,7 @@ } } -COLORREF DispGetColor(int num) +COLORREF DispGetColor(unsigned int num) { COLORREF color; @@ -3716,7 +3627,7 @@ case CS_TEK_FG: color = ts.TEKColor[0]; break; case CS_TEK_BG: color = ts.TEKColor[1]; break; default: - if (num >= 0 && num <= 255) { + if (num <= 255) { color = ANSIColor[num]; } else { Modified: trunk/teraterm/teraterm/vtdisp.h =================================================================== --- trunk/teraterm/teraterm/vtdisp.h 2011-12-06 10:01:20 UTC (rev 4769) +++ trunk/teraterm/teraterm/vtdisp.h 2011-12-06 10:20:48 UTC (rev 4770) @@ -78,8 +78,9 @@ void DispApplyANSIColor(); void DispSetNearestColors(int start, int end, HDC DispCtx); int TCharAttrCmp(TCharAttr a, TCharAttr b); -void DispSetColor(int num, COLORREF color); -COLORREF DispGetColor(int num); +void DispSetColor(unsigned int num, COLORREF color); +void DispResetColor(unsigned int num); +COLORREF DispGetColor(unsigned int num); void DispSetCurCharAttr(TCharAttr Attr); void DispMoveWindow(int x, int y); void DispShowWindow(int mode); Modified: trunk/teraterm/teraterm/vtterm.c =================================================================== --- trunk/teraterm/teraterm/vtterm.c 2011-12-06 10:01:20 UTC (rev 4769) +++ trunk/teraterm/teraterm/vtterm.c 2011-12-06 10:20:48 UTC (rev 4770) @@ -3395,53 +3395,104 @@ void XsProcColor(int mode, unsigned int ColorNumber, char *ColorSpec) { COLORREF color; char StrBuff[256]; + unsigned int colornum = CS_UNSPEC; int len; switch (mode) { + case 4: + if (ColorNumber <= 255) { + colornum = ColorNumber; + } + break; + case 5: + switch (ColorNumber) { + case 0: + colornum = CS_VT_BOLDFG; + break; + case 1: + // Underline -- not supported. + // colornum = CS_VT_UNDERFG; + break; + case 2: + colornum = CS_VT_BLINKFG; + break; + case 3: + colornum = CS_VT_REVERSEBG; + break; + } + break; case 10: - ColorNumber = CS_VT_NORMALFG; + colornum = CS_VT_NORMALFG; break; case 11: - ColorNumber = CS_VT_NORMALBG; + colornum = CS_VT_NORMALBG; break; case 15: - ColorNumber = CS_TEK_FG; + colornum = CS_TEK_FG; break; case 16: - ColorNumber = CS_TEK_BG; + colornum = CS_TEK_BG; break; } - switch (mode) { - case 4: - if ((ts.ColorFlag & CF_XTERM256) && ColorNumber <= 255) { - if (strcmp(ColorSpec, "?") == 0) { - color = DispGetColor(ColorNumber); + if (colornum != CS_UNSPEC) { + if (strcmp(ColorSpec, "?") == 0) { + color = DispGetColor(colornum); + if (mode == 4 || mode == 5) { len =_snprintf_s_l(StrBuff, sizeof(StrBuff), _TRUNCATE, - "4;%d;rgb:%02x/%02x/%02x", CLocale, ColorNumber, + "%d;%d;rgb:%02x/%02x/%02x", CLocale, mode, ColorNumber, GetRValue(color), GetGValue(color), GetBValue(color)); - SendOSCstr(StrBuff, len); } - else if (XsParseColor(ColorSpec, &color)) { - DispSetColor(ColorNumber, color); + else { + len =_snprintf_s_l(StrBuff, sizeof(StrBuff), _TRUNCATE, + "%d;rgb:%02x/%02x/%02x", CLocale, mode, + GetRValue(color), GetGValue(color), GetBValue(color)); } - } - break; - case 10: - case 11: - case 15: - case 16: - if (strcmp(ColorSpec, "?") == 0) { - color = DispGetColor(ColorNumber); - len =_snprintf_s_l(StrBuff, sizeof(StrBuff), _TRUNCATE, - "%d;rgb:%02x/%02x/%02x", CLocale, mode, - GetRValue(color), GetGValue(color), GetBValue(color)); SendOSCstr(StrBuff, len); } else if (XsParseColor(ColorSpec, &color)) { - DispSetColor(ColorNumber, color); + DispSetColor(colornum, color); } + } +} + +void XsResetColor(int mode, unsigned int color) +{ + switch (mode) { + case 104: + if (color < 256) { + DispResetColor(color); + } break; + case 105: + switch (color) { + case 0: + DispResetColor(CS_VT_BOLDFG); + break; + case 1: + // Underline -- not supported. + // DispResetColor(CS_VT_UNDERFG); + break; + case 2: + DispResetColor(CS_VT_BLINKFG); + break; + case 3: + DispResetColor(CS_VT_REVERSEBG); + break; + } + break; + case 110: + DispResetColor(CS_VT_NORMALFG); + break; + case 111: + DispResetColor(CS_VT_NORMALBG); + break; + case 115: + DispResetColor(CS_TEK_FG); + break; + case 116: + DispResetColor(CS_TEK_FG); + break; } } @@ -3514,7 +3565,30 @@ switch (XsParseMode) { case ModeXsFirst: - if (isdigit(b)) { + if ((b==ST && Accept8BitCtrl && !(ts.Language==IdJapanese && ts.KanjiCode==IdSJIS)) || b==BEL) { /* String Terminator */ + switch (Param[1]) { + case 104: + DispResetColor(CS_ALL); + break; + case 110: + case 111: + case 115: + case 116: + XsResetColor(Param[1], 0); + break; + } + ParseMode = ModeFirst; + XsParseMode = ModeXsFirst; + } + else if (b == ESC) { /* Escape */ + PrevMode = ModeXsFirst; + XsParseMode = ModeXsEsc; + } + else if (b <= US) { /* Other control character -- invalid sequence */ + ParseMode = ModeFirst; + XsParseMode = ModeXsFirst; + } + else if (isdigit(b)) { Param[1] = Param[1]*10 + b - '0'; } else if (b == ';') { @@ -3522,6 +3596,9 @@ StrLen = 0; switch (Param[1]) { case 4: + case 5: + case 104: + case 105: ColorNumber = 0; XsParseMode = ModeXsColorNum; break; @@ -3547,6 +3624,12 @@ } XsParseMode = ModeXsString; break; + case 110: + case 111: + case 115: + case 116: + XsResetColor(Param[1], 0); + break; default: XsParseMode = ModeXsString; } @@ -3617,11 +3700,33 @@ } break; case ModeXsColorNum: - if (isdigit(b)) { + if ((b==ST && Accept8BitCtrl && !(ts.Language==IdJapanese && ts.KanjiCode==IdSJIS)) || b==BEL) { /* String Terminator */ + if (Param[1] == 104 || Param[1] == 105) { + XsResetColor(Param[1], ColorNumber); + } + ColorNumber = 0; + ParseMode = ModeFirst; + XsParseMode = ModeXsFirst; + } + else if (b == ESC) { /* Escape */ + PrevMode = ModeXsColorNum; + XsParseMode = ModeXsEsc; + } + else if (b <= US) { /* Other control character -- invalid sequence */ + ParseMode = ModeFirst; + XsParseMode = ModeXsFirst; + } + else if (isdigit(b)) { ColorNumber = ColorNumber*10 + b - '0'; } else if (b == ';') { - XsParseMode = ModeXsColorSpec; + if (Param[1] == 104 || Param[1] == 105) { + XsResetColor(Param[1], ColorNumber); + ColorNumber = 0; + } + else { + XsParseMode = ModeXsColorSpec; + } } else { XsParseMode = ModeXsIgnore; @@ -3653,6 +3758,7 @@ switch (Param[1]) { case 4: + case 5: XsParseMode = ModeXsColorNum; break; case 10: