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

typedef unsigned char byte;

static byte chunky[128*8] = {
  0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,
  0xee,0xff,0
};

static byte b1[8][16*8];
static byte b2[8][32*8];


extern void doc2p_1X8(byte *,byte *,int,int,int,int);
extern void doc2p_1X6(byte *,byte *,int,int,int,int);
extern void doc2p_2X8(byte *,byte *,int,int,int,int);
extern void doc2p_2X6(byte *,byte *,int,int,int,int);



void showit(byte *b,unsigned size)
{
  int i,j;
  byte x;

  for (i=0; i<8; i++) {
    printf("Bitplane %d: %02x %02x %02x %02x %02x %02x %02x %02x "
           "%02x %02x %02x %02x %02x %02x %02x %02x\n",i,
           (unsigned int)b[i*size+0],(unsigned int)b[i*size+1],
           (unsigned int)b[i*size+2],(unsigned int)b[i*size+3],
           (unsigned int)b[i*size+4],(unsigned int)b[i*size+5],
           (unsigned int)b[i*size+6],(unsigned int)b[i*size+7],
           (unsigned int)b[i*size+8],(unsigned int)b[i*size+9],
           (unsigned int)b[i*size+10],(unsigned int)b[i*size+11],
           (unsigned int)b[i*size+12],(unsigned int)b[i*size+13],
           (unsigned int)b[i*size+14],(unsigned int)b[i*size+15]);
  }

  printf("\nRe-c2p-ing from the first bitplane row:\n");
  for (j=0; j<16; j++) {
    for (i=7,x=0; i>=0; i--) {
      x <<= 1;
      if (b[i*size+j/8] & (0x80>>(j&7)))
        x++;
    }
    printf("%02x ",(unsigned int)x);
  }
  printf("\n");

  memset(b,0,8*size);
}


main()
{
  printf("\nDoing c2p for 8 bit...\n\n");
  doc2p_1X8(chunky,&b1[0][0],128,8,16*8,16);
  showit(&b1[0][0],16*8);

  printf("\nDoing c2p for 6 bit...\n\n");
  doc2p_1X6(chunky,&b1[0][0],128,8,16*8,16);
  showit(&b1[0][0],16*8);

  printf("\nDoing c2p for 8 bit, double pixel width...\n\n");
  doc2p_2X8(chunky,&b2[0][0],128,8,32*8,32);
  showit(&b2[0][0],32*8);

  printf("\nDoing c2p for 6 bit, double pixel width...\n\n");
  doc2p_2X6(chunky,&b2[0][0],128,8,32*8,32);
  showit(&b2[0][0],32*8);
}
