int parse(byte[] buf, int off, int len) {
      super.init(buf, off, len);
      this.errorCount = 0;

      // a line looks like this:
      // [completed  /path/to/file.java - #1/2025]
      do {
        if (findString(". ERROR in ")) {
          this.errorCount++;
        } else {
          return this.errorCount;
        }
      } while (true);
    }
    int parse(byte[] buf, int off, int len) {
      super.init(buf, off, len);
      this.fileno = -1;
      this.jobSize = -1;
      this.lastFilename = null;

      // a line looks like this:
      // [completed  /path/to/file.java - #1/2025]
      do {
        if (findString("[completed ") && skipSpaces() && readIdentifier()) {
          // remember file name
          String filename = new String(this.lastIdentifier);

          if (!skipSpaces()) {
            continue;
          }

          int _c = getNext();
          if (_c == Integer.MIN_VALUE) {
            return this.fileno;
          }
          if (_c != '-') {
            continue;
          }

          if (!skipSpaces()) {
            continue;
          }

          _c = getNext();
          if (_c == Integer.MIN_VALUE) {
            return this.fileno;
          }
          if (_c != '#') {
            continue;
          }

          if (!readNumber()) {
            return this.fileno;
          }

          int _fileno = this.lastDigit;

          _c = getNext();
          if (_c == Integer.MIN_VALUE) {
            return this.fileno;
          }
          if (_c != '/') {
            continue;
          }

          if (!readNumber()) {
            return this.fileno;
          }

          _c = getNext();
          if (_c == Integer.MIN_VALUE) {
            return this.fileno;
          }
          if (_c != ']') {
            continue;
          }

          this.lastFilename = filename;
          this.fileno = _fileno;
          this.jobSize = this.lastDigit;
          // continue parsing (figure out last occurence)
        } else {
          return this.fileno;
        }

      } while (true);
    }