code: private int decodeBlackCodeWord() {
          int current, entry, bits, isT, code = -1;
          int runLength = 0;
          boolean isWhite = false;
          
          while (!isWhite) {
              current = nextLesserThan8Bits(4);
              entry = initBlack[current];
              
              // Get the 3 fields from the entry
              isT = entry & 0x0001;
              bits = (entry >>> 1) & 0x000f;
              code = (entry >>> 5) & 0x07ff;
              
              if (code == 100) {
                  current = nextNBits(9);
                  entry = black[current];
                  
                  // Get the 3 fields from the entry
                  isT = entry & 0x0001;
                  bits = (entry >>> 1) & 0x000f;
                  code = (entry >>> 5) & 0x07ff;
                  
                  if (bits == 12) {
                      // Additional makeup codes
                      updatePointer(5);
                      current = nextLesserThan8Bits(4);
                      entry = additionalMakeup[current];
                      bits = (entry >>> 1) & 0x07;     // 3 bits 0000 0111
                      code  = (entry >>> 4) & 0x0fff;  // 12 bits
                      runLength += code;
                      
                      updatePointer(4 - bits);
                  } else if (bits == 15) {
                  	// EOL code
                  	if ( runLength == 0 ) {
                  		isWhite = true;
                  	}
                  	else {
                  		throw new RuntimeException("EOL code word encountered in Black run.");
                  	}
                  } else {
                      runLength += code;
                      updatePointer(9 - bits);
                      if (isT == 0) {
                          isWhite = true;
                      }
                  }
              } else if (code == 200) {
                  // Is a Terminating code
                  current = nextLesserThan8Bits(2);
                  entry = twoBitBlack[current];
                  code = (entry >>> 5) & 0x07ff;
                  runLength += code;
                  bits = (entry >>> 1) & 0x0f;
                  updatePointer(2 - bits);
                  isWhite = true;
              } else {
                  // Is a Terminating code
                  runLength += code;
                  updatePointer(4 - bits);
                  isWhite = true;
              }
          }
          
          return runLength;
      }
docs: Returns run length