#include char cluster_id[20]; FILE *fp; main(argc, argv) int *argc; char *argv[]; { argv++; if (!*argv) fp = stdin; else if (!(fp = fopen(*argv, "r"))) { fprintf(stderr, "ERROR: input file %s not found !!\n", *argv); exit(1); } while (fscanf(fp, "%s ", cluster_id) != EOF) { read_node(); } } read_node() { char locus_1[60], locus_2[60], next_char_1, next_char_2; float score; getc(fp); /* get open paren */ next_char_1 = getc(fp); if (next_char_1 == '(' ) { ungetc(next_char_1, fp); read_node(); fscanf(fp, "%f ", &score); next_char_2 = getc(fp); if (next_char_2 == '(' ) { ungetc(next_char_2, fp); read_node(); getc(fp); /* get closed paren */ } else { ungetc(next_char_2, fp); fscanf(fp, "%[^)]", locus_2); getc(fp); /* get closed paren */ printf("%s\t%s\n", cluster_id, locus_2); fflush(stdout); } } else { ungetc(next_char_1, fp); fscanf(fp, "%s ", locus_1); printf("%s\t%s\n", cluster_id, locus_1); fflush(stdout); fscanf(fp, "%f ", &score); next_char_2 = getc(fp); if (next_char_2 == '(' ) { ungetc(next_char_2, fp); read_node(); getc(fp); /* get closed paren */ } else { ungetc(next_char_2, fp); fscanf(fp, "%[^)]", locus_2); getc(fp); /* get closed paren */ printf("%s\t%s\n", cluster_id, locus_2); fflush(stdout); } } }