package com.jediterm.terminal.emulator;
import com.google.common.base.Ascii;
import com.google.common.collect.Lists;
import com.jediterm.terminal.TerminalDataStream;
import java.io.IOException;
import java.util.List;
/**
* @author traff
*/
public class SystemCommandSequence {
private final List<Object> myArgs = Lists.newArrayList();
private final StringBuilder mySequenceString = new StringBuilder();
public SystemCommandSequence(TerminalDataStream dataStream) throws IOException {
readSystemCommandSequence(dataStream);
}
private void readSystemCommandSequence(TerminalDataStream stream) throws IOException {
boolean isNumber = true;
int number = 0;
StringBuilder string = new StringBuilder();
while (true) {
final char b = stream.getChar();
mySequenceString.append(b);
if (b == ';' || isEnd(b)) {
if (isNumber) {
myArgs.add(number);
}
else {
myArgs.add(string.toString());
}
if (isEnd(b)) {
break;
}
isNumber = true;
number = 0;
string = new StringBuilder();
}
else if (isNumber) {
if ('0' <= b && b <= '9') {
number = number * 10 + b - '0';
}
else {
isNumber = false;
}
string.append(b);
}
else {
string.append(b);
}
}
}
private static boolean isEnd(char b) {
return b == Ascii.BEL || b == 0x9c;
}
public String getStringAt(int i) {
if (i>=myArgs.size()) {
return null;
}
Object val = myArgs.get(i);
return val instanceof String ? (String)val : null;
}
public Integer getIntAt(int i) {
if (i>=myArgs.size()) {
return null;
}
Object val = myArgs.get(i);
return val instanceof Integer? (Integer)val : null;
}
public String getSequenceString() {
return mySequenceString.toString();
}
}