void server_profiles_load(void) { guint i, count; char** profiles; Server* server; /* Clear any previous list */ if (servers) { g_list_foreach(servers, server_free_node, NULL); g_list_free(servers); servers = NULL; } /* Clear list of deleted servers */ if (deleted) { g_list_foreach(deleted, server_free_node, NULL); g_list_free(deleted); deleted = NULL; } ggzcore_conf_read_list("Servers", "ProfileList", (int*)&count, &profiles); for (i = 0; i < count; i++) { server = ggz_malloc(sizeof(Server)); server->name = profiles[i]; server->host = ggzcore_conf_read_string(server->name, "Host", NULL); server->port = ggzcore_conf_read_int(server->name, "Port", 5688); server->type = ggzcore_conf_read_int(server->name, "Type", GGZ_LOGIN_GUEST); server->login = ggzcore_conf_read_string(server->name, "Login", NULL); if (server->type == GGZ_LOGIN) server->password = ggzcore_conf_read_string(server->name, "Password", NULL); server_list_add(server); } server_list_print(); if (profiles) ggz_free(profiles); }
static GGZModule *pick_module(GGZGameType * gt) { const char *name = ggzcore_gametype_get_name(gt); const char *engine = ggzcore_gametype_get_prot_engine(gt); const char *version = ggzcore_gametype_get_prot_version(gt); int i, j, preserve; GGZModule *module; GGZModule **frontends; int *modulenumbers; char *preferred; int num; GGZModuleEnvironment env; /* Check (again) how many modules are registered for this game type */ ggzcore_reload(); num = ggzcore_module_get_num_by_type(name, engine, version); if (num == 0) { return NULL; } /* If there's only one choice, use it regardless of frontend */ if (num == 1) return ggzcore_module_get_nth_by_type(name, engine, version, 0); /* See if the user has a listed preference. */ preferred = ggzcore_conf_read_string("GAME", name, NULL); if (preferred) { for (i = 0; i < num; i++) { const char *frontend; module = ggzcore_module_get_nth_by_type(name, engine, version, i); frontend = ggzcore_module_get_frontend(module); if (strcasecmp(preferred, frontend) == 0) { ggz_debug("modules", "User preferred %s frontend for %s", frontend, name); return module; } } } /* More than one frontend: pop up a window and let the player choose. */ frontends = ggz_malloc((num + 1) * sizeof(*frontends)); modulenumbers = ggz_malloc((num + 1) * sizeof(int)); j = 0; for (i = 0; i < num; i++) { module = ggzcore_module_get_nth_by_type(name, engine, version, i); env = ggzcore_module_get_environment(module); if ((env == GGZ_ENVIRONMENT_XWINDOW) || (env == GGZ_ENVIRONMENT_XFULLSCREEN)) { frontends[j] = module; modulenumbers[j] = i; j++; } } frontends[j] = NULL; i = ask_user_to_pick_module(frontends, modulenumbers, &preserve); if (i < 0) return NULL; module = ggzcore_module_get_nth_by_type(name, engine, version, i); ggz_free(frontends); ggz_free(modulenumbers); if (preserve) { const char *frontend = ggzcore_module_get_frontend(module); ggzcore_conf_write_string("GAME", name, frontend); ggzcore_conf_commit(); } return module; }