void Config::parse(const char *pos) { while (1) { char *eol = strchr(pos, '\n'); if (!eol) break; // parse if (!parse_blank(pos) && !parse_prefix(pos) && !parse_partition(pos) && !parse_node(pos)) fatal("unexpected line in config file:\n%s<END>", pos); pos = eol + 1; } }
int main(int argc, char **argv) { int i=0; /* counter */ int all_flag; /* flag whether all partition lines shoul be concatenated [OFF] */ int paras_flag; /* flag whether to parse evol. model params [OFF] */ FILE *datei = NULL; /* fp for partition file in NEXUS */ partition_t partition_table; /* combined partition results */ paras_flag=0; all_flag=0; if(argc<2){ printf("Please set a nexus file as a parameter\n E.g: \" %s Filename \"\n", argv[0]); return EXIT_FAILURE; } while ((i = getopt (argc, argv, "hapf:")) != -1) switch (i) { case 'a': all_flag = 1; break; case 'p': paras_flag = 1; break; case 'h': show_help(argv[0]); break; default: break; } datei=fopen(argv[optind],"rb"); if(datei == NULL){ printf("Please set a nexus file as a parameter\n E.g: \" %s Filename \"\n", argv[0]); return EXIT_FAILURE; } partition_table = parse_partition(datei,all_flag,paras_flag); for(i=0;i<partition_table.part_len;i++){ if(paras_flag) printf("...%s....%s...%s...%s...",partition_table.partition_names[i],partition_table.gene_names[i],partition_table.model_names[i],partition_table.parameter_names[i]); else printf("...%s....%s...%s...",partition_table.partition_names[i],partition_table.gene_names[i],partition_table.model_names[i]); printf("%lu...%lu",partition_table.start[i],partition_table.end[i]); printf("\n"); } protoss_build_nexus("hugo",&partition_table); destroy(&partition_table); return EXIT_SUCCESS; }
/* * \return 1: OK, 0: bad format or -errno */ static int parse_extended(blkid_probe pr, blkid_partlist ls, blkid_parttable tab, struct atari_part_def *part) { uint32_t x0start, xstart; unsigned i = 0; int rc; x0start = xstart = be32_to_cpu(part->start); while (1) { struct atari_rootsector *xrs; xrs = (struct atari_rootsector *) blkid_probe_get_sector(pr, xstart); if (!xrs) { if (errno) return -errno; return 0; } /* * There must be data partition followed by reference to next * XGM or inactive entry. */ for (i=0; ; i++) { if (i >= ARRAY_SIZE(xrs->part) - 1) return 0; if (IS_ACTIVE(xrs->part[i])) break; } if (!memcmp(xrs->part[i].id, "XGM", 3)) return 0; rc = parse_partition(ls, tab, &xrs->part[i], xstart); if (rc <= 0) return rc; if (!IS_ACTIVE(xrs->part[i+1])) break; if (memcmp(xrs->part[i+1].id, "XGM", 3)) return 0; xstart = x0start + be32_to_cpu(xrs->part[i+1].start); } return 1; }