@@ -126,11 +126,6 @@ public final class TerminalEmulator {
126
126
private String mTitle ;
127
127
private final Stack <String > mTitleStack = new Stack <>();
128
128
129
- /** If processing first character of first parameter of {@link #ESC_CSI}. */
130
- private boolean mIsCSIStart ;
131
- /** The last character processed of a parameter of {@link #ESC_CSI}. */
132
- private Integer mLastCSIArg ;
133
-
134
129
/** The cursor position. Between (0,0) and (mRows-1, mColumns-1). */
135
130
private int mCursorRow , mCursorCol ;
136
131
@@ -1393,8 +1388,6 @@ private void doEsc(int b) {
1393
1388
break ;
1394
1389
case '[' :
1395
1390
continueSequence (ESC_CSI );
1396
- mIsCSIStart = true ;
1397
- mLastCSIArg = null ;
1398
1391
break ;
1399
1392
case '=' : // DECKPAM
1400
1393
setDecsetinternalBit (DECSET_BIT_APPLICATION_KEYPAD , true );
@@ -1765,7 +1758,7 @@ private void doCsi(int b) {
1765
1758
private void selectGraphicRendition () {
1766
1759
if (mArgIndex >= mArgs .length ) mArgIndex = mArgs .length - 1 ;
1767
1760
for (int i = 0 ; i <= mArgIndex ; i ++) {
1768
- int code = mArgs [ i ] ;
1761
+ int code = getArg ( i , 0 , false ) ;
1769
1762
if (code < 0 ) {
1770
1763
if (mArgIndex > 0 ) {
1771
1764
continue ;
@@ -1823,7 +1816,10 @@ private void selectGraphicRendition() {
1823
1816
if (i + 4 > mArgIndex ) {
1824
1817
Logger .logWarn (mClient , LOG_TAG , "Too few CSI" + code + ";2 RGB arguments" );
1825
1818
} else {
1826
- int red = mArgs [i + 2 ], green = mArgs [i + 3 ], blue = mArgs [i + 4 ];
1819
+ int red = getArg (i + 2 , 0 , false );
1820
+ int green = getArg (i + 3 , 0 , false );
1821
+ int blue = getArg (i + 4 , 0 , false );
1822
+
1827
1823
if (red < 0 || green < 0 || blue < 0 || red > 255 || green > 255 || blue > 255 ) {
1828
1824
finishSequenceAndLogError ("Invalid RGB: " + red + "," + green + "," + blue );
1829
1825
} else {
@@ -1837,7 +1833,7 @@ private void selectGraphicRendition() {
1837
1833
i += 4 ; // "2;P_r;P_g;P_r"
1838
1834
}
1839
1835
} else if (firstArg == 5 ) {
1840
- int color = mArgs [ i + 2 ] ;
1836
+ int color = getArg ( i + 2 , 0 , false ) ;
1841
1837
i += 2 ; // "5;P_s"
1842
1838
if (color >= 0 && color < TextStyle .NUM_INDEXED_COLORS ) {
1843
1839
if (code == 38 ) {
@@ -2116,44 +2112,29 @@ private void scrollDownOneLine() {
2116
2112
*
2117
2113
* https://vt100.net/docs/vt510-rm/chapter4.html#S4.3.3
2118
2114
* */
2119
- private void parseArg (int inputByte ) {
2120
- int [] bytes = new int []{inputByte };
2121
- // Only doing this for ESC_CSI and not for other ESC_CSI_* since they seem to be using their
2122
- // own defaults with getArg*() calls, but there may be missed cases
2123
- if (mEscapeState == ESC_CSI ) {
2124
- if ((mIsCSIStart && inputByte == ';' ) || // If sequence starts with a ; character, like \033[;m
2125
- (!mIsCSIStart && mLastCSIArg != null && mLastCSIArg == ';' && inputByte == ';' )) { // If sequence contains sequential ; characters, like \033[;;m
2126
- bytes = new int []{'0' , ';' }; // Assume 0 was passed
2127
- }
2128
- }
2129
-
2130
- mIsCSIStart = false ;
2131
-
2132
- for (int b : bytes ) {
2133
- if (b >= '0' && b <= '9' ) {
2134
- if (mArgIndex < mArgs .length ) {
2135
- int oldValue = mArgs [mArgIndex ];
2136
- int thisDigit = b - '0' ;
2137
- int value ;
2138
- if (oldValue >= 0 ) {
2139
- value = oldValue * 10 + thisDigit ;
2140
- } else {
2141
- value = thisDigit ;
2142
- }
2143
- if (value > 9999 )
2144
- value = 9999 ;
2145
- mArgs [mArgIndex ] = value ;
2146
- }
2147
- continueSequence (mEscapeState );
2148
- } else if (b == ';' ) {
2149
- if (mArgIndex < mArgs .length ) {
2150
- mArgIndex ++;
2115
+ private void parseArg (int b ) {
2116
+ if (b >= '0' && b <= '9' ) {
2117
+ if (mArgIndex < mArgs .length ) {
2118
+ int oldValue = mArgs [mArgIndex ];
2119
+ int thisDigit = b - '0' ;
2120
+ int value ;
2121
+ if (oldValue >= 0 ) {
2122
+ value = oldValue * 10 + thisDigit ;
2123
+ } else {
2124
+ value = thisDigit ;
2151
2125
}
2152
- continueSequence (mEscapeState );
2153
- } else {
2154
- unknownSequence (b );
2126
+ if (value > 9999 )
2127
+ value = 9999 ;
2128
+ mArgs [mArgIndex ] = value ;
2129
+ }
2130
+ continueSequence (mEscapeState );
2131
+ } else if (b == ';' ) {
2132
+ if (mArgIndex < mArgs .length ) {
2133
+ mArgIndex ++;
2155
2134
}
2156
- mLastCSIArg = b ;
2135
+ continueSequence (mEscapeState );
2136
+ } else {
2137
+ unknownSequence (b );
2157
2138
}
2158
2139
}
2159
2140
0 commit comments