/*
  Este programa recebe no stdin um sequencia de inteiros e cria um
  arquivo binario chamado saida_bin com uma sequencia de 0s e 1s
  identificando, sequencialmente, a paridade dos numeros da
  sequencia lida.
  
  O arquivo binario contem em seu inicio dois inteiros long que
  especificam, respectvamente, o numero de bytes que a sequencia 
  de 0s e 1s ocupa e o numero de bits que esta sequencia contem.
  Naturalmente, poderiamos omitir a informacao do numero de bytes, ja
  que podemos calcular este valor a partir do numero de bits, mas aqui
  fazemos desta forma por simplicidade e clareza.

  O programa leia_bits pode ser usado para recuperar o conteudo do
  arquivo binario criado.  Aqui esta um exemplo de execucao:

  <8>[random:/home/yoshi/examples/mac122] > escreva_bits 
  3 1 4 1 5 9 2 6 5 4 2 7 1 8 2 8
  <9>[random:/home/yoshi/examples/mac122] > leia_bits 
  1101110010011000
  <10>[random:/home/yoshi/examples/mac122] > 
*/

#include <stdio.h>

#define NBITSMAX 10000
#define NBYTESMAX 1260

main()
{
  long k;
  long i, j, n_bits;
  unsigned char v[NBITSMAX], w[NBYTESMAX];

  FILE *arq;

  n_bits=-1;
  while (scanf("%d", &v[++n_bits])>0) ;

  for (i=0; i<NBYTESMAX; i++)
    w[i]=0;

  j=i=-1;
  for (k=0; k<n_bits; k++) {
    if ((++j)%8==0) i++,j=0;
    w[i]|=(v[k]&01)<<(7-j);
  }

  arq=fopen("saida_bin", "wb");

  fwrite((void *)&i, sizeof(long), 1, arq);
  fwrite((void *)&n_bits, sizeof(long), 1, arq);
  fwrite((void *)w, sizeof(char), ++i, arq);
  
  fclose(arq);
  return 0;
}
