int set_rgb() { unsigned char color; unsigned char i; color = uart_string[2]; if(color == 'R') match[0] = (uart_string[3] - 0x30) * 100 + (uart_string[4] - 0x30) * 10 + (uart_string[5] - 0x30); else if(color == 'G') match[1] = (uart_string[3] - 0x30) * 100 + (uart_string[4] - 0x30) * 10 + (uart_string[5] - 0x30); else if(color == 'B') match[2] = (uart_string[3] - 0x30) * 100 + (uart_string[4] - 0x30) * 10 + (uart_string[5] - 0x30); else { uart_send_string("Fehler\n\r"); return -1; } i = 6; uart_send_char(uart_string[i]); uart_send_char(uart_string[i+1]); uart_send_char(uart_string[i+2]); uart_send_char(uart_string[i+3]); uart_send_var((uart_string[i+1] - 0x30) * 100 + (uart_string[i+2] - 0x30) * 10 + (uart_string[i+3] - 0x30)); if(uart_string[i] == 'R' || uart_string[i] == 'G' || uart_string[i] == 'B') { uart_send_char('r'); if(uart_string[i] == 'R') { match[0] = (uart_string[i+1] - 0x30) * 100 + (uart_string[i+2] - 0x30) * 10 + (uart_string[i+3] - 0x30); uart_send_var((uart_string[i+1] - 0x30) * 100 + (uart_string[i+2] - 0x30) * 10 + (uart_string[i+3] - 0x30)); } else if(uart_string[i] == 'G') match[1] = (uart_string[i+1] - 0x30) * 100 + (uart_string[i+2] - 0x30) * 10 + (uart_string[i+3] - 0x30); else match[2] = (uart_string[i+1] - 0x30) * 100 + (uart_string[i+2] - 0x30) * 10 + (uart_string[i+3] - 0x30); i=i+4; } sort_matches(); }
char *read_custom_category(char *name, struct custom_data *data) { int i; readname = name; memset(&matches, 0, sizeof(matches)); memset(&match_list, 0, sizeof(match_list)); memset(&positions, 0, sizeof(positions)); memset(&round_robin_pools, 0, sizeof(round_robin_pools)); memset(&symbols, 0, sizeof(symbols)); memset(&match_order, 0, sizeof(match_order)); memset(&best_of_three_pairs, 0, sizeof(best_of_three_pairs)); num_round_robin_pools = 0; num_symbols = 0; num_matches = 0; num_best_of_three_pairs = 0; num_groups = 0; group_set = 0; groups_type = 0; linenum = 1; stop = 0; max_comp = 0; num_ord = 0; competitors_min = competitors_max = 0; value = numvalue = ordernum = n = max_comp = stop = 0; pagenum = linenum = 1; for (i = 0; i < NUM_CUSTOM_MATCHES; i++) match_list[i] = i; f = fopen(name, "r"); if (!f) { snprintf(message, sizeof(message), "Cannot read %s", name); return message; } program(); fclose(f); if (stop) return message; for (i = 1; i < NUM_CUST_POS ; i++) { if (!positions[i].match) continue; solve(positions[i].match, 1, i); } sort_matches(); data->num_round_robin_pools = 0; data->num_matches = 0; data->num_positions = 0; // round robin for (i = 0; i < num_round_robin_pools; i++) { int j; for (j = 0; j < round_robin_pools[i].num_rr_matches; j++) { data->round_robin_pools[i].rr_matches[j] = get_match_num(round_robin_pools[i].rr_matches[j]->name); checkval2((data->round_robin_pools[i].rr_matches[j]), "Pool %s: match %s doesn't exist", round_robin_pools[i].name->name, round_robin_pools[i].rr_matches[j]->name); } // for for (j = 0; j < round_robin_pools[i].num_competitors; j++) { data->round_robin_pools[i].competitors[j] = get_palyer_bare(&round_robin_pools[i].competitors[j]); } data->round_robin_pools[i].num_rr_matches = round_robin_pools[i].num_rr_matches; data->round_robin_pools[i].num_competitors = round_robin_pools[i].num_competitors; snprintf(data->round_robin_pools[i].name, 16, "%s", round_robin_pools[i].name->name); } data->num_round_robin_pools = num_round_robin_pools; // best of three for (i = 0; i < num_best_of_three_pairs; i++) { int j; for (j = 0; j < 3; j++) { data->best_of_three_pairs[i].matches[j] = get_match_num(best_of_three_pairs[i].matches[j]->name); checkval2((data->best_of_three_pairs[i].matches[j]), "Best of three %s: match %s doesn't exist", best_of_three_pairs[i].name->name, best_of_three_pairs[i].matches[j]->name); } snprintf(data->best_of_three_pairs[i].name, 16, "%s", best_of_three_pairs[i].name->name); } data->num_best_of_three_pairs = num_best_of_three_pairs; // matches for (i = 0; i < num_matches; i++) { match_t *m = &matches[match_list[i]]; data->matches[i].c1 = get_palyer_bare(&m->c1); data->matches[i].c2 = get_palyer_bare(&m->c2); } data->num_matches = num_matches; // positions for (i = 0; positions[i].match; i++) { if (get_rr_num(positions[i].match->name)) { data->positions[i].type = COMP_TYPE_ROUND_ROBIN; data->positions[i].match = get_rr_num(positions[i].match->name); } else if (get_b3_num(positions[i].match->name)) { data->positions[i].type = COMP_TYPE_BEST_OF_3; data->positions[i].match = get_b3_num(positions[i].match->name); } else { data->positions[i].type = COMP_TYPE_MATCH; data->positions[i].match = get_match_num(positions[i].match->name); } checkval2((data->positions[i].match > 0), "Wrong match name \"%s\" in pos%d", positions[i].match->name, positions[i].pos); data->positions[i].pos = positions[i].pos; data->positions[i].real_contest_pos = positions[i].real_contest_pos; } data->num_positions = i; // groups if (num_groups == 0) { // create default groups // find best of 3 for (i = 0; i < data->num_best_of_three_pairs && num_groups < NUM_GROUPS; i++) { int n = data->best_of_three_pairs[i].matches[0]; if (data->matches[n].c1.type == COMP_TYPE_COMPETITOR) { groups[num_groups].competitors[0] = data->matches[n].c1.num; groups[num_groups].competitors[1] = data->matches[n].c2.num; groups[num_groups].num_competitors = 2; num_groups++; } } // round robin for (i = 0; i < data->num_round_robin_pools && num_groups < NUM_GROUPS; i++) { if (data->round_robin_pools[i].competitors[0].type == COMP_TYPE_COMPETITOR) { int j; for (j = 0; j < data->round_robin_pools[i].num_competitors; j++) groups[num_groups].competitors[j] = data->round_robin_pools[i].competitors[j].num; num_groups++; groups_type = 1; } } // matches if (num_groups == 0) { // assume we have a knock out system int n = competitors_max/4; for (i = 0; i < 4; i++) { int j; for (j = 0; j < n; j++) { groups[i].competitors[j] = i*n + j + 1; } groups[i].num_competitors = n; } } } for (i = 0; i < num_groups; i++) { int j; for (j = 0; j < groups[i].num_competitors; j++) data->groups[i].competitors[j] = groups[i].competitors[j]; data->groups[i].num_competitors = groups[i].num_competitors; } data->num_groups = num_groups; // info checkval2((competitors_min >= 1 && competitors_min <= competitors_max && name_long[0] && name_short[0]), "Wrong info"); data->competitors_min = competitors_min; data->competitors_max = competitors_max; strncpy(data->name_long, name_long, sizeof(data->name_long)-1); strncpy(data->name_short, name_short, sizeof(data->name_short)-1); return 0; }