static int name_action(int tok, int val) { audio_play(AUD_MENU, 1.0f); switch (tok) { case GUI_BACK: return goto_state(cancel_state); case NAME_OK: if (strlen(text_input) == 0) return 1; config_set_s(CONFIG_PLAYER, text_input); return goto_state(ok_state); case GUI_CL: gui_keyboard_lock(); break; case GUI_BS: text_input_del(); break; case GUI_CHAR: text_input_char(val); break; } return 1; }
static int name_action(int tok, int val) { audio_play(AUD_MENU, 1.0f); switch (tok) { case NAME_OK: if (strlen(player) == 0) return 1; config_set_s(CONFIG_PLAYER, player); return goto_state(ok_state); case NAME_CANCEL: return goto_state(cancel_state); case GUI_CL: gui_keyboard_lock(); break; case GUI_BS: if (text_del_char(player)) gui_set_label(name_id, player); break; case GUI_CHAR: if (text_add_char(val, player, sizeof (player))) gui_set_label(name_id, player); } return 1; }
static int lang_action(int tok, int val) { int r = 1; struct lang_desc *desc; audio_play(AUD_MENU, 1.0f); switch (tok) { case GUI_BACK: goto_state(lang_back); lang_back = NULL; break; case GUI_PREV: first -= LANG_STEP; goto_state(&st_lang); break; case GUI_NEXT: first += LANG_STEP; goto_state(&st_lang); break; case LANG_DEFAULT: /* HACK: Reload resources to load the localized font. */ goto_state(&st_null); config_set_s(CONFIG_LANGUAGE, ""); lang_init("neverball", ""); goto_state(&st_lang); break; case LANG_SELECT: desc = LANG_GET(langs, val); goto_state(&st_null); config_set_s(CONFIG_LANGUAGE, desc->code); lang_init("neverball", desc->code); goto_state(&st_lang); break; } return r; }
static int c_psql_config_database (oconfig_item_t *ci) { c_psql_database_t *db; int i; if ((1 != ci->values_num) || (OCONFIG_TYPE_STRING != ci->values[0].type)) { log_err ("<Database> expects a single string argument."); return 1; } db = c_psql_database_new (ci->values[0].value.string); for (i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; if (0 == strcasecmp (c->key, "Host")) config_set_s ("Host", &db->host, c); else if (0 == strcasecmp (c->key, "Port")) config_set_s ("Port", &db->port, c); else if (0 == strcasecmp (c->key, "User")) config_set_s ("User", &db->user, c); else if (0 == strcasecmp (c->key, "Password")) config_set_s ("Password", &db->password, c); else if (0 == strcasecmp (c->key, "SSLMode")) config_set_s ("SSLMode", &db->sslmode, c); else if (0 == strcasecmp (c->key, "KRBSrvName")) config_set_s ("KRBSrvName", &db->krbsrvname, c); else if (0 == strcasecmp (c->key, "Service")) config_set_s ("Service", &db->service, c); else if (0 == strcasecmp (c->key, "Query")) udb_query_pick_from_list (c, queries, queries_num, &db->queries, &db->queries_num); else log_warn ("Ignoring unknown config key \"%s\".", c->key); } /* If no `Query' options were given, add the default queries.. */ if (db->queries_num == 0) { for (i = 0; i < def_queries_num; i++) udb_query_pick_from_list_by_name (def_queries[i], queries, queries_num, &db->queries, &db->queries_num); } for (i = 0; (size_t)i < db->queries_num; ++i) { c_psql_user_data_t *data; data = udb_query_get_user_data (db->queries[i]); if ((data != NULL) && (data->params_num > db->max_params_num)) db->max_params_num = data->params_num; } return 0; } /* c_psql_config_database */
void config_init(void) { int i; /* * Store index of each option in its associated config symbol and * initialise current values with defaults. */ for (i = 0; i < ARRAYSIZE(option_d); i++) { *option_d[i].sym = i; config_set_d(i, option_d[i].def); } for (i = 0; i < ARRAYSIZE(option_s); i++) { *option_s[i].sym = i; config_set_s(i, option_s[i].def); } }
void config_load(void) { fs_file fh; if ((fh = fs_open(USER_CONFIG_FILE, "r"))) { char *line, *key, *val; while (read_line(&line, fh)) { if (scan_key_and_value(&key, &val, line)) { int i; /* Look up an integer option by that name. */ for (i = 0; i < ARRAYSIZE(option_d); i++) { if (strcmp(key, option_d[i].name) == 0) { /* Translate some strings to integers. */ if (i == CONFIG_MOUSE_CAMERA_1 || i == CONFIG_MOUSE_CAMERA_2 || i == CONFIG_MOUSE_CAMERA_3 || i == CONFIG_MOUSE_CAMERA_TOGGLE || i == CONFIG_MOUSE_CAMERA_L || i == CONFIG_MOUSE_CAMERA_R) { config_mouse(val, i); } else if (i == CONFIG_KEY_FORWARD || i == CONFIG_KEY_BACKWARD || i == CONFIG_KEY_LEFT || i == CONFIG_KEY_RIGHT || i == CONFIG_KEY_CAMERA_1 || i == CONFIG_KEY_CAMERA_2 || i == CONFIG_KEY_CAMERA_3 || i == CONFIG_KEY_CAMERA_TOGGLE || i == CONFIG_KEY_CAMERA_R || i == CONFIG_KEY_CAMERA_L || i == CONFIG_KEY_PAUSE || i == CONFIG_KEY_RESTART || i == CONFIG_KEY_SCORE_NEXT || i == CONFIG_KEY_ROTATE_FAST) { config_key(val, i); } else config_set_d(i, atoi(val)); /* Stop looking. */ break; } } /* Look up a string option by that name.*/ for (i = 0; i < ARRAYSIZE(option_s); i++) { if (strcmp(key, option_s[i].name) == 0) { config_set_s(i, val); break; } } } free(line); } fs_close(fh); dirty = 0; } }
static int c_psql_config_database (oconfig_item_t *ci) { c_psql_database_t *db; char cb_name[DATA_MAX_NAME_LEN]; struct timespec cb_interval; user_data_t ud; int i; if ((1 != ci->values_num) || (OCONFIG_TYPE_STRING != ci->values[0].type)) { log_err ("<Database> expects a single string argument."); return 1; } memset (&ud, 0, sizeof (ud)); db = c_psql_database_new (ci->values[0].value.string); if (db == NULL) return -1; for (i = 0; i < ci->children_num; ++i) { oconfig_item_t *c = ci->children + i; if (0 == strcasecmp (c->key, "Host")) config_set_s ("Host", &db->host, c); else if (0 == strcasecmp (c->key, "Port")) config_set_s ("Port", &db->port, c); else if (0 == strcasecmp (c->key, "User")) config_set_s ("User", &db->user, c); else if (0 == strcasecmp (c->key, "Password")) config_set_s ("Password", &db->password, c); else if (0 == strcasecmp (c->key, "SSLMode")) config_set_s ("SSLMode", &db->sslmode, c); else if (0 == strcasecmp (c->key, "KRBSrvName")) config_set_s ("KRBSrvName", &db->krbsrvname, c); else if (0 == strcasecmp (c->key, "Service")) config_set_s ("Service", &db->service, c); else if (0 == strcasecmp (c->key, "Query")) udb_query_pick_from_list (c, queries, queries_num, &db->queries, &db->queries_num); else if (0 == strcasecmp (c->key, "Interval")) config_set_i ("Interval", &db->interval, c, /* min = */ 1); else log_warn ("Ignoring unknown config key \"%s\".", c->key); } /* If no `Query' options were given, add the default queries.. */ if (db->queries_num == 0) { for (i = 0; i < def_queries_num; i++) udb_query_pick_from_list_by_name (def_queries[i], queries, queries_num, &db->queries, &db->queries_num); } if (db->queries_num > 0) { db->q_prep_areas = (udb_query_preparation_area_t **) calloc ( db->queries_num, sizeof (*db->q_prep_areas)); if (db->q_prep_areas == NULL) { log_err ("Out of memory."); c_psql_database_delete (db); return -1; } } for (i = 0; (size_t)i < db->queries_num; ++i) { c_psql_user_data_t *data; data = udb_query_get_user_data (db->queries[i]); if ((data != NULL) && (data->params_num > db->max_params_num)) db->max_params_num = data->params_num; db->q_prep_areas[i] = udb_query_allocate_preparation_area (db->queries[i]); if (db->q_prep_areas[i] == NULL) { log_err ("Out of memory."); c_psql_database_delete (db); return -1; } } ud.data = db; ud.free_func = c_psql_database_delete; ssnprintf (cb_name, sizeof (cb_name), "postgresql-%s", db->database); memset (&cb_interval, 0, sizeof (cb_interval)); if (db->interval > 0) cb_interval.tv_sec = (time_t)db->interval; plugin_register_complex_read ("postgresql", cb_name, c_psql_read, /* interval = */ &cb_interval, &ud); return 0; } /* c_psql_config_database */