
/*
 * Le_fasta.c: dado um arquivo fasta, extrai o gi, o nome e o tamanho da 
 *             sequencia associada.
 *
 * Sergio Campos -- 07/2003
 *
 */

#include <stdio.h>
#include <stdlib.h>

FILE *arq;

int size;

int main (int argc, char *argv[]) {

  int c;

  int i, state;

  if (argc!=2) {
    fprintf(stderr, "Utilizacao: le_fasta <nomearquivo>\n");
    exit(1);
  }

  if((arq=fopen(argv[1], "r"))==NULL) {
    printf("Arquivo %s nao foi encontrado\n", argv[1]);
    exit(1);
  }

  state = 0; /* estado 0 significa procurando por nova sequencia */
  while ((c = fgetc(arq)) != EOF) {
/*printf ("estado: %d, c: %c, size %d.\n", state, c, size);*/
    switch (state) {
      case 0: if (c == '>') {          /* achou inicio de nova sequencia */
                state = 1;
              };
              break;
      case 1: if (c == '|') {
                size = 0;
                state++;
                printf("Sequência: ");
              };
              break;
      case 2: if (c != '|') {            /* Armazena o nome da sequencia */
                printf("%c", c);
              } else {                   /* cujo valor é calculado       */
                printf(", ");
                state++;
              };
              break;
      case 3: if (c == '|') state++;
              break;
      case 4: if (c == '|') state++;
              break;
      case 5: if (c != '\n') {            /* Armazena o nome da sequencia */
                printf("%c", c);
              } else {                   /* cujo valor é calculado       */
                printf(" - Tamanho:");
                state++;
              };
              break;
      case 6: if (c == '>') {    /* procura agora o inicio da sequencia */
                printf(" %d.\n", size);
                state = 1;
              } else {
                if (c != '\n') size++;
              };
              break;
      default: break;
    };
  };
  printf(" %d.\n", size-1);
  fclose(arq);
}

