static void pair_roundrobin(void) { Player *list = NULL, *lptr = NULL; Round *hist = NULL, *rptr = NULL; char *buffer = NULL; size_t buflen = 0; unsigned int i; while (getline(&buffer, &buflen, stdin) != -1) { Player *player = malloc(sizeof(Player)); size_t pos; if (!player) { perror(_("Could not allocate memory for player")); goto cleanup; } for (pos = 0; pos < buflen; pos++) { if (buffer[pos] == '\n') { buffer[pos] = '\0'; break; } } player->next = NULL; player->name = malloc(sizeof(char) * (strlen(buffer)+1)); if (!player->name) { perror(_("Could not allocate memory for player's name")); free(player); goto cleanup; } strcpy(player->name, buffer); if (lptr) lptr->next = player; else list = player; lptr = player; } hist = rptr = roundrobin(list); i = 1; while (rptr) { Pairing *pptr = rptr->pairings; printf(i==1 ? "%s %u\n" : "\n%s %u\n", _("Round"), i); while (pptr) { printf(" %20s : %-20s\n", pptr->white ? pptr->white->name : _("<bye>"), pptr->black ? pptr->black->name : _("<bye>")); pptr = pptr->next; } rptr = rptr->next; i++; } cleanup: free(buffer); free_players(list); free_rounds(hist); }
EXPORT int MM_formula_cmd(int action, Imodman *mm_, Arena *arena) { if (action == MM_LOAD) { mm = mm_; lm = mm->GetInterface(I_LOGMAN, ALLARENAS); cmd = mm->GetInterface(I_CMDMAN, ALLARENAS); pd = mm->GetInterface(I_PLAYERDATA, ALLARENAS); chat = mm->GetInterface(I_CHAT, ALLARENAS); formula = mm->GetInterface(I_FORMULA, ALLARENAS); cfg = mm->GetInterface(I_CONFIG, ALLARENAS); if (!lm || !cmd || !pd || !chat || !formula || !cfg) return MM_FAIL; pdata_key = pd->AllocatePlayerData(sizeof(PData)); if (pdata_key == -1) return MM_FAIL; mm->RegCallback(CB_PLAYERACTION, player_action, ALLARENAS); init_players(); cmd->AddCommand("formula", Cformula, ALLARENAS, formula_help); cmd->AddCommand("unset", Cunset, ALLARENAS, unset_help); cmd->AddCommand("vars", Cvars, ALLARENAS, vars_help); return MM_OK; } else if (action == MM_UNLOAD) { cmd->RemoveCommand("formula", Cformula, ALLARENAS); cmd->RemoveCommand("unset", Cunset, ALLARENAS); cmd->RemoveCommand("vars", Cvars, ALLARENAS); mm->UnregCallback(CB_PLAYERACTION, player_action, ALLARENAS); free_players(); pd->FreePlayerData(pdata_key); mm->ReleaseInterface(lm); mm->ReleaseInterface(cmd); mm->ReleaseInterface(pd); mm->ReleaseInterface(chat); mm->ReleaseInterface(formula); mm->ReleaseInterface(cfg); return MM_OK; } return MM_FAIL; }
static void print_pairing_table(unsigned int count) { Player *list = NULL, *lptr = NULL; Round *hist = NULL, *rptr = NULL; char buffer[32]; unsigned int i; for (i=1; i<=count; i++) { Player *player = malloc(sizeof(Player)); if (!player) { perror(_("Could not allocate memory for player")); goto cleanup; } sprintf(buffer, "%u", i); player->next = NULL; player->name = malloc(sizeof(char)*(strlen(buffer)+1)); if (!player->name) { perror(_("Could not allocate memory for player's name")); free(player); goto cleanup; } strcpy(player->name, buffer); if (lptr) lptr->next = player; else list = player; lptr = player; } hist = rptr = roundrobin(list); i = 1; while (rptr) { Pairing *pptr = rptr->pairings; printf("%s %u:", _("Round"), i); while (pptr) { printf("\t%s-%s", pptr->white ? pptr->white->name : "/", pptr->black ? pptr->black->name : "/"); pptr = pptr->next; } printf("\n"); rptr = rptr->next; i++; } cleanup: free_players(list); free_rounds(hist); }
void free_zappy() { int i; int j; i = 0; if (g_zappy->team_name) free(g_zappy->team_name); while (g_zappy->map && i < g_zappy->height && g_zappy->map[i]) { j = 0; while (j < g_zappy->width) free_list_no_free_data(g_zappy->map[i][j++].players); free(g_zappy->map[i++]); } if (g_zappy->map) free(g_zappy->map); free_players(g_zappy->players); close(g_zappy->fd); if (g_zappy->log) fclose(g_zappy->log); }
void free_turn(turn *t) { free_players(t->p1); free((void *) t); }