TEAM *input_dat(FILE *fp, int *num_team) { char line[SIZE_STR], **token; int i, num_token; int cmp_pts(); TEAM team_home, team_away, *team_ary; struct list *team_list, *p; *num_team = 0; team_list = init_list(); while (fgets(line, SIZE_STR, fp) != NULL) { if (line[0] != '#') { token = tokenize_str(line, "-\t\n", &num_token); if (num_token >= 4) { set_home_team(&team_home, token); set_away_team(&team_away, token); if ((p = search_team(team_list, team_home.name)) == NULL) { push_queue(team_list, &team_home, sizeof(team_home)); (*num_team)++; } else { add_team_result(p, team_home); } if ((p = search_team(team_list, team_away.name)) == NULL) { push_queue(team_list, &team_away, sizeof(team_away)); (*num_team)++; } else { add_team_result(p, team_away); } } free_token_ary(token, num_token); } } team_ary = (TEAM *) malloc(sizeof(TEAM) * (*num_team)); if (team_ary == NULL) { fprintf(stderr, "ERROR: Unable to allocate memory.\n"); exit(EXIT_FAILURE); } for (i = 0; i < *num_team; i++) { pop_queue(team_list, &team_ary[i], sizeof(TEAM)); } delete_list(team_list); /* 安定ソートで被ゴール数→ゴール数→得失点差→勝ち点の順で整列すると順位で並ぶ */ /* リーグ戦の規程によってはこのやり方ではダメ */ bubblesort(team_ary, *num_team, sizeof(TEAM), cmp_gag); bubblesort(team_ary, *num_team, sizeof(TEAM), cmp_gfo); bubblesort(team_ary, *num_team, sizeof(TEAM), cmp_gdi); bubblesort(team_ary, *num_team, sizeof(TEAM), cmp_pts); return team_ary; }
void close_connection(t_env *env, t_play *p) { while (env->init && search_team(env)) { sem_rel(env); sem_wait(env); sem_block(env); } if (env->init) { clearmap(env); exit(0); } env->map[return_pose(env, p->init.x, p->init.y)] = 0; shmdt (env->mem); }