Nick: heijligen E-mail: none Board: unknown Contents: struct programmer_init_data_ch341a_spi {}; struct programmer_init_data_dediprog {}; union programmer_init_data { struct programmer_init_data_ch341a_spi; struct programmer_init_data_dediprog; }; struct programmer_entry { const char *const name; int (*init)(union programmer_init_data init_data); int (*parse_params)(union programmer_init_data *init_data, char* parameter); ... }; struct programmer_table[]; size_t programmer_table_size; int programmer_init(const char *const name, const char *const parameter) { for (size_t i = 0; i < programmer_table_size; i++) { if (!strcmp(programmer_table[i].name, name) { union programmer_init_data init_data; programmer_table[i].parse_params(&init_data, parameter); programmer_table[i].init(init_data); return 0; // init done } } return -1; //no programmer found }