@@ -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
@@ -1390,8 +1385,6 @@ private void doEsc(int b) {
1390
1385
break ;
1391
1386
case '[' :
1392
1387
continueSequence (ESC_CSI );
1393
- mIsCSIStart = true ;
1394
- mLastCSIArg = null ;
1395
1388
break ;
1396
1389
case '=' : // DECKPAM
1397
1390
setDecsetinternalBit (DECSET_BIT_APPLICATION_KEYPAD , true );
@@ -1762,7 +1755,7 @@ private void doCsi(int b) {
1762
1755
private void selectGraphicRendition () {
1763
1756
if (mArgIndex >= mArgs .length ) mArgIndex = mArgs .length - 1 ;
1764
1757
for (int i = 0 ; i <= mArgIndex ; i ++) {
1765
- int code = mArgs [ i ] ;
1758
+ int code = getArg ( i , 0 , false ) ;
1766
1759
if (code < 0 ) {
1767
1760
if (mArgIndex > 0 ) {
1768
1761
continue ;
@@ -1820,7 +1813,10 @@ private void selectGraphicRendition() {
1820
1813
if (i + 4 > mArgIndex ) {
1821
1814
Logger .logWarn (mClient , LOG_TAG , "Too few CSI" + code + ";2 RGB arguments" );
1822
1815
} else {
1823
- int red = mArgs [i + 2 ], green = mArgs [i + 3 ], blue = mArgs [i + 4 ];
1816
+ int red = getArg (i + 2 , 0 , false );
1817
+ int green = getArg (i + 3 , 0 , false );
1818
+ int blue = getArg (i + 4 , 0 , false );
1819
+
1824
1820
if (red < 0 || green < 0 || blue < 0 || red > 255 || green > 255 || blue > 255 ) {
1825
1821
finishSequenceAndLogError ("Invalid RGB: " + red + "," + green + "," + blue );
1826
1822
} else {
@@ -1834,7 +1830,7 @@ private void selectGraphicRendition() {
1834
1830
i += 4 ; // "2;P_r;P_g;P_r"
1835
1831
}
1836
1832
} else if (firstArg == 5 ) {
1837
- int color = mArgs [ i + 2 ] ;
1833
+ int color = getArg ( i + 2 , 0 , false ) ;
1838
1834
i += 2 ; // "5;P_s"
1839
1835
if (color >= 0 && color < TextStyle .NUM_INDEXED_COLORS ) {
1840
1836
if (code == 38 ) {
@@ -2113,44 +2109,29 @@ private void scrollDownOneLine() {
2113
2109
*
2114
2110
* https://vt100.net/docs/vt510-rm/chapter4.html#S4.3.3
2115
2111
* */
2116
- private void parseArg (int inputByte ) {
2117
- int [] bytes = new int []{inputByte };
2118
- // Only doing this for ESC_CSI and not for other ESC_CSI_* since they seem to be using their
2119
- // own defaults with getArg*() calls, but there may be missed cases
2120
- if (mEscapeState == ESC_CSI ) {
2121
- if ((mIsCSIStart && inputByte == ';' ) || // If sequence starts with a ; character, like \033[;m
2122
- (!mIsCSIStart && mLastCSIArg != null && mLastCSIArg == ';' && inputByte == ';' )) { // If sequence contains sequential ; characters, like \033[;;m
2123
- bytes = new int []{'0' , ';' }; // Assume 0 was passed
2124
- }
2125
- }
2126
-
2127
- mIsCSIStart = false ;
2128
-
2129
- for (int b : bytes ) {
2130
- if (b >= '0' && b <= '9' ) {
2131
- if (mArgIndex < mArgs .length ) {
2132
- int oldValue = mArgs [mArgIndex ];
2133
- int thisDigit = b - '0' ;
2134
- int value ;
2135
- if (oldValue >= 0 ) {
2136
- value = oldValue * 10 + thisDigit ;
2137
- } else {
2138
- value = thisDigit ;
2139
- }
2140
- if (value > 9999 )
2141
- value = 9999 ;
2142
- mArgs [mArgIndex ] = value ;
2143
- }
2144
- continueSequence (mEscapeState );
2145
- } else if (b == ';' ) {
2146
- if (mArgIndex < mArgs .length ) {
2147
- mArgIndex ++;
2112
+ private void parseArg (int b ) {
2113
+ if (b >= '0' && b <= '9' ) {
2114
+ if (mArgIndex < mArgs .length ) {
2115
+ int oldValue = mArgs [mArgIndex ];
2116
+ int thisDigit = b - '0' ;
2117
+ int value ;
2118
+ if (oldValue >= 0 ) {
2119
+ value = oldValue * 10 + thisDigit ;
2120
+ } else {
2121
+ value = thisDigit ;
2148
2122
}
2149
- continueSequence (mEscapeState );
2150
- } else {
2151
- unknownSequence (b );
2123
+ if (value > 9999 )
2124
+ value = 9999 ;
2125
+ mArgs [mArgIndex ] = value ;
2126
+ }
2127
+ continueSequence (mEscapeState );
2128
+ } else if (b == ';' ) {
2129
+ if (mArgIndex < mArgs .length ) {
2130
+ mArgIndex ++;
2152
2131
}
2153
- mLastCSIArg = b ;
2132
+ continueSequence (mEscapeState );
2133
+ } else {
2134
+ unknownSequence (b );
2154
2135
}
2155
2136
}
2156
2137
0 commit comments