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 5071 by maya, Thu Nov 22 03:35:18 2012 UTC revision 5073 by doda, Sat Nov 24 11:07:38 2012 UTC
# Line 44  void ParseFirst(BYTE b); Line 44  void ParseFirst(BYTE b);
44  #define ModeDLE   7  #define ModeDLE   7
45  #define ModeCAN   8  #define ModeCAN   8
46    
47  #define NParamMax 16  #define NParamMax  16
48  #define IntCharMax 5  #define NSParamMax 16
49    #define IntCharMax  5
50    
51  /* DEC Locator Flag */  /* DEC Locator Flag */
52  #define DecLocatorOneShot    1  #define DecLocatorOneShot    1
# Line 97  static int  EUCcount; Line 98  static int  EUCcount;
98  static BOOL Special;  static BOOL Special;
99    
100  static int Param[NParamMax+1];  static int Param[NParamMax+1];
101  static int NParam;  static int SubParam[NParamMax+1][NSParamMax+1];
102    static int NParam, NSParam[NParamMax+1];
103  static BOOL FirstPrm;  static BOOL FirstPrm;
104  static BYTE IntChar[IntCharMax+1];  static BYTE IntChar[IntCharMax+1];
105  static int ICount;  static int ICount;
# Line 158  static unsigned int OSCStrBuffSize; Line 160  static unsigned int OSCStrBuffSize;
160    
161  static _locale_t CLocale = NULL;  static _locale_t CLocale = NULL;
162    
163    void ClearParams()
164    {
165        ICount = 0;
166        NParam = 1;
167        NSParam[1] = 0;
168        Param[1] = 0;
169        Prv = 0;
170    }
171    
172  void ResetSBuffer(PStatusBuff sbuff)  void ResetSBuffer(PStatusBuff sbuff)
173  {  {
174    sbuff->CursorX = 0;    sbuff->CursorX = 0;
# Line 811  void PrnParseControl(BYTE b) // printer Line 822  void PrnParseControl(BYTE b) // printer
822          PutChar(b); /* Disp C1 char in VT100 mode */          PutChar(b); /* Disp C1 char in VT100 mode */
823          return;          return;
824        }        }
825        ICount = 0;        ClearParams();
826        FirstPrm = TRUE;        FirstPrm = TRUE;
       NParam = 1;  
       Param[1] = 0;  
       Prv = 0;  
827        ParseMode = ModeCSI;        ParseMode = ModeCSI;
828        WriteToPrnFile(0,TRUE); // flush prn buff        WriteToPrnFile(0,TRUE); // flush prn buff
829        WriteToPrnFile(b,FALSE);        WriteToPrnFile(b,FALSE);
# Line 983  void ParseControl(BYTE b) Line 991  void ParseControl(BYTE b)
991        SSflag = TRUE;        SSflag = TRUE;
992        break;        break;
993      case DCS:      case DCS:
994          ClearParams();
995        ESCFlag = FALSE;        ESCFlag = FALSE;
       ICount = 0;  
       NParam = 1;  
       Param[1] = 0;  
       Prv = 0;  
996        ParseMode = ModeDCS;        ParseMode = ModeDCS;
997        break;        break;
998      case SOS:      case SOS:
# Line 995  void ParseControl(BYTE b) Line 1000  void ParseControl(BYTE b)
1000        ParseMode = ModeSOS;        ParseMode = ModeSOS;
1001        break;        break;
1002      case CSI:      case CSI:
1003        ICount = 0;        ClearParams();
1004        FirstPrm = TRUE;        FirstPrm = TRUE;
       NParam = 1;  
       Param[1] = 0;  
       Prv = 0;  
1005        ParseMode = ModeCSI;        ParseMode = ModeCSI;
1006        break;        break;
1007      case OSC:      case OSC:
1008        Param[1] = 0;        ClearParams();
1009        ParseMode = ModeXS;        ParseMode = ModeXS;
1010        break;        break;
1011      case PM:      case PM:
# Line 1226  void PrnParseEscape(BYTE b) // printer m Line 1228  void PrnParseEscape(BYTE b) // printer m
1228      case 0:      case 0:
1229        switch (b) {        switch (b) {
1230          case '[': /* CSI */          case '[': /* CSI */
1231            ICount = 0;            ClearParams();
1232            FirstPrm = TRUE;            FirstPrm = TRUE;
           NParam = 1;  
           Param[1] = 0;  
           Prv = 0;  
1233            WriteToPrnFile(ESC,FALSE);            WriteToPrnFile(ESC,FALSE);
1234            WriteToPrnFile('[',FALSE);            WriteToPrnFile('[',FALSE);
1235            ParseMode = ModeCSI;            ParseMode = ModeCSI;
# Line 1329  void ParseEscape(BYTE b) /* b is the fin Line 1328  void ParseEscape(BYTE b) /* b is the fin
1328            SSflag = TRUE;            SSflag = TRUE;
1329            break;            break;
1330          case 'P': /* DCS */          case 'P': /* DCS */
1331              ClearParams();
1332            ESCFlag = FALSE;            ESCFlag = FALSE;
           NParam = 1;  
           Param[1] = 0;  
1333            ParseMode = ModeDCS;            ParseMode = ModeDCS;
1334            return;            return;
1335          case 'X': /* SOS */          case 'X': /* SOS */
1336            ESCFlag = FALSE;            ESCFlag = FALSE;
1337            ParseMode = ModeSOS;            ParseMode = ModeSOS;
1338            return;            return;
1339          case 'Z': AnswerTerminalType(); break;          case 'Z': /* DECID */
1340              AnswerTerminalType();
1341              break;
1342          case '[': /* CSI */          case '[': /* CSI */
1343            ICount = 0;            ClearParams();
1344            FirstPrm = TRUE;            FirstPrm = TRUE;
           NParam = 1;  
           Param[1] = 0;  
           Prv = 0;  
1345            ParseMode = ModeCSI;            ParseMode = ModeCSI;
1346            return;            return;
1347          case '\\': break; /* ST */          case '\\': break; /* ST */
1348          case ']': /* XTERM sequence (OSC) */          case ']': /* XTERM sequence (OSC) */
1349            NParam = 1;            ClearParams();
           Param[1] = 0;  
1350            ParseMode = ModeXS;            ParseMode = ModeXS;
1351            return;            return;
1352          case '^':          case '^':
# Line 1841  void CSQSelScreenErase() Line 1837  void CSQSelScreenErase()
1837    
1838  void CSSetAttr()                // SGR  void CSSetAttr()                // SGR
1839  {  {
1840          int i, P;          int i, j, P, r, g, b, color;
1841    
1842          UpdateStr();          UpdateStr();
1843          for (i=1 ; i<=NParam ; i++)          for (i=1 ; i<=NParam ; i++)
# Line 1913  void CSSetAttr()               // SGR Line 1909  void CSSetAttr()               // SGR
1909                          break;                          break;
1910    
1911                  case  38:       /* text color (256color mode) */                  case  38:       /* text color (256color mode) */
1912                          if ((ts.ColorFlag & CF_XTERM256) && i < NParam && Param[i+1] == 5) {                          if (ts.ColorFlag & CF_XTERM256) {
1913                                  i++;                                  /*
1914                                  if (i < NParam) {                                   * Change foreground color. accept following formats.
1915                                          P = Param[++i];                                   *
1916                                     * 38 ; 2 ; r ; g ; b
1917                                     * 38 ; 2 : r : g : b
1918                                     * 38 : 2 : r : g : b
1919                                     * 38 ; 5 ; idx
1920                                     * 38 ; 5 : idx
1921                                     * 38 : 5 : idx
1922                                     *
1923                                     */
1924                                    color = -1;
1925                                    j = 0;
1926                                    if (NSParam[i] > 0) {
1927                                            P = SubParam[i][1];
1928                                            j++;
1929                                    }
1930                                    else if (i < NParam) {
1931                                            P = Param[i+1];
1932                                            if (P == 2 || P == 5) {
1933                                                    i++;
1934                                            }
1935                                    }
1936                                    switch (P) {
1937                                    case 2:
1938                                            r = g = b = 0;
1939                                            if (NSParam[i] > 0) {
1940                                                    if (j < NSParam[i]) {
1941                                                            r = SubParam[i][++j];
1942                                                            if (j < NSParam[i]) {
1943                                                                    g = SubParam[i][++j];
1944                                                            }
1945                                                            if (j < NSParam[i]) {
1946                                                                    b = SubParam[i][++j];
1947                                                            }
1948                                                            color = DispFindClosestColor(r, g, b);
1949                                                    }
1950                                            }
1951                                            else if (i < NParam && NSParam[i+1] > 0) {
1952                                                    r = Param[++i];
1953                                                    g = SubParam[i][1];
1954                                                    if (NSParam[i] > 1) {
1955                                                            b = SubParam[i][2];
1956                                                    }
1957                                                    color = DispFindClosestColor(r, g, b);
1958                                            }
1959                                            else if (i+2 < NParam) {
1960                                                    r = Param[++i];
1961                                                    g = Param[++i];
1962                                                    b = Param[++i];
1963                                                    color = DispFindClosestColor(r, g, b);
1964                                            }
1965                                            break;
1966                                    case 5:
1967                                            if (NSParam[i] > 0) {
1968                                                    if (j < NSParam[i]) {
1969                                                            color = SubParam[i][++j];
1970                                                    }
1971                                            }
1972                                            else if (i < NParam) {
1973                                                    color = Param[++i];
1974                                            }
1975                                            break;
1976                                    }
1977                                    if (color >= 0) {
1978                                          CharAttr.Attr2 |= Attr2Fore;                                          CharAttr.Attr2 |= Attr2Fore;
1979                                          CharAttr.Fore = P;                                          CharAttr.Fore = color;
1980                                          BuffSetCurCharAttr(CharAttr);                                          BuffSetCurCharAttr(CharAttr);
1981                                  }                                  }
1982                          }                          }
# Line 1944  void CSSetAttr()               // SGR Line 2002  void CSSetAttr()               // SGR
2002                          break;                          break;
2003    
2004                  case  48:       /* Back color (256color mode) */                  case  48:       /* Back color (256color mode) */
2005                          if ((ts.ColorFlag & CF_XTERM256) && i < NParam && Param[i+1] == 5) {                          if (ts.ColorFlag & CF_XTERM256) {
2006                                  i++;                                  color = -1;
2007                                  if (i < NParam) {                                  j = 0;
2008                                          P = Param[++i];                                  if (NSParam[i] > 0) {
2009                                            P = SubParam[i][1];
2010                                            j++;
2011                                    }
2012                                    else if (i < NParam) {
2013                                            P = Param[i+1];
2014                                            if (P == 2 || P == 5) {
2015                                                    i++;
2016                                            }
2017                                    }
2018                                    switch (P) {
2019                                    case 2:
2020                                            r = g = b = 0;
2021                                            if (NSParam[i] > 0) {
2022                                                    if (j < NSParam[i]) {
2023                                                            r = SubParam[i][++j];
2024                                                            if (j < NSParam[i]) {
2025                                                                    g = SubParam[i][++j];
2026                                                            }
2027                                                            if (j < NSParam[i]) {
2028                                                                    b = SubParam[i][++j];
2029                                                            }
2030                                                            color = DispFindClosestColor(r, g, b);
2031                                                    }
2032                                            }
2033                                            else if (i < NParam && NSParam[i+1] > 0) {
2034                                                    r = Param[++i];
2035                                                    g = SubParam[i][1];
2036                                                    if (NSParam[i] > 1) {
2037                                                            b = SubParam[i][2];
2038                                                    }
2039                                                    color = DispFindClosestColor(r, g, b);
2040                                            }
2041                                            else if (i+2 < NParam) {
2042                                                    r = Param[++i];
2043                                                    g = Param[++i];
2044                                                    b = Param[++i];
2045                                                    color = DispFindClosestColor(r, g, b);
2046                                            }
2047                                            break;
2048                                    case 5:
2049                                            if (NSParam[i] > 0) {
2050                                                    if (j < NSParam[i]) {
2051                                                            color = SubParam[i][++j];
2052                                                    }
2053                                            }
2054                                            else if (i < NParam) {
2055                                                    color = Param[++i];
2056                                            }
2057                                            break;
2058                                    }
2059                                    if (color >= 0) {
2060                                          CharAttr.Attr2 |= Attr2Back;                                          CharAttr.Attr2 |= Attr2Back;
2061                                          CharAttr.Back = P;                                          CharAttr.Back = color;
2062                                          BuffSetCurCharAttr(CharAttr);                                          BuffSetCurCharAttr(CharAttr);
2063                                  }                                  }
2064                          }                          }
# Line 3021  void ControlSequence(BYTE b) Line 3130  void ControlSequence(BYTE b)
3130      }      }
3131      else if ((b>=0x30) && (b<=0x39))      else if ((b>=0x30) && (b<=0x39))
3132      {      {
3133        Param[NParam] = Param[NParam]*10 + b - 0x30;        if (NSParam[NParam] > 0) {
3134            SubParam[NParam][NSParam[NParam]] = SubParam[NParam][NSParam[NParam]]*10 + b - 0x30;
3135          }
3136          else {
3137            Param[NParam] = Param[NParam]*10 + b - 0x30;
3138          }
3139        }
3140        else if (b==0x3A)
3141        { /* ':' Subparameter delimiter */
3142          if (NSParam[NParam] < NSParamMax) {
3143            NSParam[NParam]++;
3144            SubParam[NParam][NSParam[NParam]] = 0;
3145          }
3146      }      }
3147      else if (b==0x3B)      else if (b==0x3B)
3148      {      { /* ';' Parameter delimiter */
3149        if (NParam < NParamMax)        if (NParam < NParamMax)
3150        {        {
3151          NParam++;          NParam++;
3152          Param[NParam] = 0;          Param[NParam] = 0;
3153            NSParam[NParam] = 0;
3154        }        }
3155      }      }
3156      else if ((b>=0x3C) && (b<=0x3F))      else if ((b>=0x3C) && (b<=0x3F))

Legend:
Removed from v.5071  
changed lines
  Added in v.5073

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