#include <stdio.h>

unsigned char disk[32];

void setbitmap(int num, int val) 
{
  int charnum = num/8;
  int bitnum = num - charnum*8;
  unsigned char c = disk[charnum];
  unsigned char masks[]={1,2,4,8,16,32,64,128};
  
  if (val == 0)
    c = c & ~masks[bitnum];
  else if (val == 1)
    c = c | masks[bitnum];
  else fprintf(stderr,"Error in setbitmap\n");
  disk[charnum] = c;
}

int getbitmap(int num)
{
  int charnum = num/8;
  int bitnum = num - charnum*8;
  unsigned char c = disk[charnum];
  unsigned char masks[]={1,2,4,8,16,32,64,128};

  unsigned char d = c & masks[bitnum];

  if (d == 0) return 0;
  else return 1;
}   

int main()
{
  int i;
  for (i=0;i<32;i++) disk[i]=0;
  setbitmap(12, 1);
  setbitmap(14, 1);
  printf("%d  %d  %d\n",getbitmap(12), getbitmap(13), getbitmap(14));
  for (i=0;i<4;i++) 
     printf("%d  ",(int) disk[i]);
  printf("\n");
  setbitmap(12, 0);
  for (i=0;i<4;i++) 
     printf("%d  ",(int) disk[i]);
  printf("\n");
  setbitmap(1,1);
  for (i=0;i<4;i++) 
     printf("%d  ",(int) disk[i]);
  printf("\n");
  for (i=16;i<24;i++) setbitmap(i,1);
  for (i=0;i<4;i++) 
     printf("%d  ",(int) disk[i]);
  printf("\n");
  
  return 0;
}

