private void readControlSequence()

in core/src/com/jediterm/terminal/emulator/ControlSequence.java [38:94]


  private void readControlSequence(final TerminalDataStream channel) throws IOException {
    myArgc = 0;
    // Read integer arguments
    int digit = 0;
    int seenDigit = 0;
    int pos = -1;

    while (true) {
      final char b = channel.getChar();
      mySequenceString.append(b);
      pos++;
      if (b == '!' && pos == 0) {
        myStartsWithExclamationMark = true;
      }
      else if (b == '?' && pos == 0) {
        myStartsWithQuestionMark = true;
      }
      else if (b == '>' && pos == 0) {
        myStartsWithMoreMark = true;
      }
      else if (b == '=' && pos == 0) {
        myStartsWithEqualsMark = true;
      }
      else if (b == ';') {
        if (digit > 0) {
          myArgc++;
          if (myArgc == myArgv.length) {
            int[] replacement = new int[myArgv.length * 2];
            System.arraycopy(myArgv, 0, replacement, 0, myArgv.length);
            myArgv = replacement;
          }
          myArgv[myArgc] = 0;
          digit = 0;
        }
      }
      else if ('0' <= b && b <= '9') {
        myArgv[myArgc] = myArgv[myArgc] * 10 + b - '0';
        digit++;
        seenDigit = 1;
      }
      else if (0x20 <= b && b <= 0x2F) {
        // Intermediate bytes - valid inside CSI but not parameters.
        addIntermediate(b);
      }
      else if (':' <= b && b <= '?') {
        addUnhandled(b);
      }
      else if (0x40 <= b && b <= 0x7E) {
        myFinalChar = b;
        break;
      }
      else {
        addUnhandled(b);
      }
    }
    myArgc += seenDigit;
  }