/*
 * Lê um vetor de um arquivo texto. O primeiro inteiro lido é
 * a dimensão do vetor.
 *
 * Escreve o vetor em um arquivo de saída binário. 
 *
 * Lê um vetor do arquivo binário e o escreve em um arquivo texto.
 */
#include<stdio.h>
#include<stdlib.h>

int *le_vetor_texto(int *n) {
  FILE  *fr;
  int *v;
  int i;

  fr = fopen ("v-in.txt", "r");

  if (fr == NULL) {
    perror("v-in.txt: ");
    exit(-1);  /* Abandona o programa */  
  }
  
  fscanf(fr, "%d", n);
  v = (int *) malloc (*n * sizeof(int));
  
  for (i = 0; i < *n; i++)
    fscanf(fr, "%d", &v[i]);

  fclose(fr);
  
  return v;
}

int *le_vetor_binario(int *n) {
  FILE  *fr;
  int *v;

  fr = fopen ("v.bin", "r");

  if (fr == NULL) {
    perror("v.bin: ");
    exit(-1);  /* Abandona o programa */  
  }
  
  fread(n, sizeof(int), 1, fr);
  v = (int *) malloc (*n * sizeof(int));
  
  fread(v, sizeof(int), *n, fr);

  fclose(fr);
  
  return v;
}

void escreve_vetor_texto(int *v, int n) {
  FILE  *fw;
  int i;

  fw = fopen ("v-out.txt", "w");

  if (fw == NULL) {
    perror("v-out.txt ");
    exit(-1);  /* Abandona o programa */  
  }
  
  fprintf(fw, "%d\n", n); /* Dimensão do vetor */
  
  for (i = 0; i < n; i++)
    fprintf(fw, "%d\n", v[i]);

  fclose(fw);  
}

void escreve_vetor_binario(int *v, int n) {
  FILE  *fw;

  fw = fopen ("v.bin", "w");

  if (fw == NULL) {
    perror("v.bin ");
    exit(-1);  /* Abandona o programa */  
  }
  
  /* Dimensão do vetor */
  fwrite(&n, sizeof(int), 1, fw); 
  fwrite(v, sizeof(int), n, fw); 

  fclose(fw);  
}

int main() {
  int *v1, *v2;
  int n1, n2;
  
  v1 = le_vetor_texto(&n1);
  escreve_vetor_binario(v1, n1);
  
  v2 = le_vetor_binario(&n2);
  escreve_vetor_texto(v2, n2);

  free(v1);
  free(v2);
  
  return 0;

}