Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/teraterm/teraterm/vtterm.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4643 by doda, Tue Sep 20 00:49:48 2011 UTC revision 4644 by doda, Tue Sep 20 04:00:32 2011 UTC
# Line 3386  BOOL XsParseColor(char *colspec, COLORRE Line 3386  BOOL XsParseColor(char *colspec, COLORRE
3386          return TRUE;          return TRUE;
3387  }  }
3388    
3389    void XsProcColor(int mode, unsigned int ColorNumber, char *ColorSpec) {
3390            COLORREF color;
3391            char StrBuff[256];
3392            int len;
3393    
3394            switch (mode) {
3395            case 10:
3396                    ColorNumber = CS_VT_NORMALFG;
3397                    break;
3398            case 11:
3399                    ColorNumber = CS_VT_NORMALBG;
3400                    break;
3401            case 15:
3402                    ColorNumber = CS_TEK_FG;
3403                    break;
3404            case 16:
3405                    ColorNumber = CS_TEK_BG;
3406                    break;
3407            }
3408    
3409            switch (mode) {
3410            case 4:
3411                    if ((ts.ColorFlag & CF_XTERM256) && ColorNumber <= 255) {
3412                            if (strcmp(ColorSpec, "?") == 0) {
3413                                    color = DispGetColor(ColorNumber);
3414                                    len =_snprintf_s_l(StrBuff, sizeof(StrBuff), _TRUNCATE,
3415                                            "4;%d;rgb:%02x/%02x/%02x", CLocale, ColorNumber,
3416                                            GetRValue(color), GetGValue(color), GetBValue(color));
3417                                    SendOSCstr(StrBuff, len);
3418                            }
3419                            else if (XsParseColor(ColorSpec, &color)) {
3420                                    DispSetColor(ColorNumber, color);
3421                            }
3422                    }
3423                    break;
3424            case 10:
3425            case 11:
3426            case 15:
3427            case 16:
3428                    if (strcmp(ColorSpec, "?") == 0) {
3429                            color = DispGetColor(ColorNumber);
3430                            len =_snprintf_s_l(StrBuff, sizeof(StrBuff), _TRUNCATE,
3431                                    "%d;rgb:%02x/%02x/%02x", CLocale, mode,
3432                                    GetRValue(color), GetGValue(color), GetBValue(color));
3433                            SendOSCstr(StrBuff, len);
3434                    }
3435                    else if (XsParseColor(ColorSpec, &color)) {
3436                            DispSetColor(ColorNumber, color);
3437                    }
3438                    break;
3439            }
3440    }
3441    
3442  #define ModeXsFirst     1  #define ModeXsFirst     1
3443  #define ModeXsString    2  #define ModeXsString    2
3444  #define ModeXsColorNum  3  #define ModeXsColorNum  3
# Line 3396  void XSequence(BYTE b) Line 3449  void XSequence(BYTE b)
3449          static BYTE XsParseMode = ModeXsFirst, PrevMode;          static BYTE XsParseMode = ModeXsFirst, PrevMode;
3450          static char StrBuff[sizeof(ts.Title)];          static char StrBuff[sizeof(ts.Title)];
3451          static unsigned int ColorNumber, StrLen;          static unsigned int ColorNumber, StrLen;
         int len;  
         COLORREF color;  
3452    
3453          switch (XsParseMode) {          switch (XsParseMode) {
3454            case ModeXsFirst:            case ModeXsFirst:
# Line 3407  void XSequence(BYTE b) Line 3458  void XSequence(BYTE b)
3458                  else if (b == ';') {                  else if (b == ';') {
3459                          StrBuff[0] = '\0';                          StrBuff[0] = '\0';
3460                          StrLen = 0;                          StrLen = 0;
3461                          if (Param[1] == 4) {                          switch (Param[1]) {
3462                            case 4:
3463                                  ColorNumber = 0;                                  ColorNumber = 0;
3464                                  XsParseMode = ModeXsColorNum;                                  XsParseMode = ModeXsColorNum;
3465                          }                                  break;
3466                          else {                          case 10:
3467                            case 11:
3468                            case 15:
3469                            case 16:
3470                                    XsParseMode = ModeXsColorSpec;
3471                                    ColorNumber = 0;
3472                                    StrBuff[0] = '\0';
3473                                    StrLen = 0;
3474                                    break;
3475                            default:
3476                                  XsParseMode = ModeXsString;                                  XsParseMode = ModeXsString;
3477                          }                          }
3478                  }                  }
# Line 3474  void XSequence(BYTE b) Line 3535  void XSequence(BYTE b)
3535            case ModeXsColorSpec:            case ModeXsColorSpec:
3536                  if ((b==ST && Accept8BitCtrl && !(ts.Language==IdJapanese && ts.KanjiCode==IdSJIS)) || b==BEL) { /* String Terminator */                  if ((b==ST && Accept8BitCtrl && !(ts.Language==IdJapanese && ts.KanjiCode==IdSJIS)) || b==BEL) { /* String Terminator */
3537                          StrBuff[StrLen] = '\0';                          StrBuff[StrLen] = '\0';
3538                          if ((ts.ColorFlag & CF_XTERM256) && ColorNumber <= 255) {                          XsProcColor(Param[1], ColorNumber, StrBuff);
                                 if (strcmp(StrBuff, "?") == 0) {  
                                         color = DispGetANSIColor(ColorNumber);  
                                         len =_snprintf_s_l(StrBuff, sizeof(StrBuff), _TRUNCATE,  
                                                 "4;%d;rgb:%02x/%02x/%02x", CLocale, ColorNumber,  
                                                 GetRValue(color), GetGValue(color), GetBValue(color));  
                                         SendOSCstr(StrBuff, len);  
                                 }  
                                 else if (XsParseColor(StrBuff, &color)) {  
                                         DispSetANSIColor(ColorNumber, color);  
                                 }  
                         }  
3539                          ParseMode = ModeFirst;                          ParseMode = ModeFirst;
3540                          XsParseMode = ModeXsFirst;                          XsParseMode = ModeXsFirst;
3541                  }                  }
# Line 3499  void XSequence(BYTE b) Line 3549  void XSequence(BYTE b)
3549                  }                  }
3550                  else if (b == ';') {                  else if (b == ';') {
3551                          StrBuff[StrLen] = '\0';                          StrBuff[StrLen] = '\0';
3552                          if ((ts.ColorFlag & CF_XTERM256) && ColorNumber <= 255) {                          XsProcColor(Param[1], ColorNumber, StrBuff);
3553                                  if (strcmp(StrBuff, "?") == 0) {  
                                         color = DispGetANSIColor(ColorNumber);  
                                         len =_snprintf_s_l(StrBuff, sizeof(StrBuff), _TRUNCATE,  
                                                 "4;%d;rgb:%02x/%02x/%02x", CLocale, ColorNumber,  
                                                 GetRValue(color), GetGValue(color), GetBValue(color));  
                                         SendOSCstr(StrBuff, len);  
                                 }  
                                 else if (XsParseColor(StrBuff, &color)) {  
                                         DispSetANSIColor(ColorNumber, color);  
                                 }  
                         }  
3554                          ColorNumber = 0;                          ColorNumber = 0;
3555                          StrBuff[0] = '\0';                          StrBuff[0] = '\0';
3556                          StrLen = 0;                          StrLen = 0;
3557                          XsParseMode = ModeXsColorNum;  
3558                            switch (Param[1]) {
3559                            case 4:
3560                                    XsParseMode = ModeXsColorNum;
3561                                    break;
3562                            case 10:
3563                            case 11:
3564                            case 12:
3565                            case 13:
3566                            case 14:
3567                            case 15:
3568                            case 16:
3569                            case 17:
3570                                    XsParseMode = ModeXsColorSpec;
3571                                    Param[1]++;
3572                                    break;
3573                            default:
3574                                    XsParseMode = ModeXsString;
3575                                    Param[1] = 0xFFFFFFFF;
3576                                    break;
3577                            }
3578                  }                  }
3579                  else if (StrLen < sizeof(StrBuff) - 1) {                  else if (StrLen < sizeof(StrBuff) - 1) {
3580                          StrBuff[StrLen++] = b;                          StrBuff[StrLen++] = b;

Legend:
Removed from v.4643  
changed lines
  Added in v.4644

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26