#include <stdio.h>
#include <string.h>

char cur_byte ;
int bit_index ;

#define add_new_bit(FP, VAL) { if (bit_index == 0) { cur_byte = getc((FP)) ; bit_index = 128 ; } (VAL) <<= 1 ; if ((cur_byte & bit_index) != 0) { (VAL) |= 1 ; } bit_index >>= 1 ; }


main(int argc, char *argv[])
{
  FILE *fp ;
  int w1, w2, width, h1, h2, height ;
  int region_bits, length_bits ;
  int i ;
  int count, run_length, val ;
  int max_reg_num = 0;

  fp = fopen(argv[1], "r") ;

  w1 = getc(fp) ; w2 = getc(fp) ; width = (w1 << 8) | w2 ;
  h1 = getc(fp) ; h2 = getc(fp) ; height = (h1 << 8) | h2 ;
  region_bits = getc(fp) ;

  length_bits = 0 ; i = width-2 ;
  while (i != 0) { 
    i >>= 1 ; length_bits++ ;
  }

  cur_byte = bit_index = 0 ;
  count = height * width ;
  while (count > 0) {
    run_length = 0 ; val = 0 ;
    for (i=0 ; i < region_bits ; i++) add_new_bit(fp, val) ;
    for (i=0 ; i < length_bits ; i++) add_new_bit(fp, run_length) ;
    if (max_reg_num < val-1) max_reg_num = val-1 ;
    count -= (run_length+1) ;
  }
  fclose(fp) ;

  printf("Width %d\n", width) ;
  printf("Height %d\n", height) ;
  printf("nregs: %d\n", max_reg_num) ;
}
