shithub: m8c

ref: 9bfe4ddb18ee77192c57b91c4ef305082588d77e
dir: /config.c/

View raw version
// Copyright 2021 Jonne Kokkonen
// Released under the MIT licence, https://opensource.org/licenses/MIT

#include <SDL2/SDL.h>
#include "config.h"

config_params_s init_config() {
  config_params_s c;

  c.filename        = "config.ini"; // default config file to load
  c.init_fullscreen = 0;            // default fullscreen state at load

  c.key_up          = SDL_SCANCODE_UP;
  c.key_left        = SDL_SCANCODE_LEFT;
  c.key_down        = SDL_SCANCODE_DOWN;
  c.key_right       = SDL_SCANCODE_RIGHT;
  c.key_select      = SDL_SCANCODE_LSHIFT;
  c.key_select_alt  = SDL_SCANCODE_A;
  c.key_start       = SDL_SCANCODE_SPACE;
  c.key_start_alt   = SDL_SCANCODE_S;
  c.key_opt         = SDL_SCANCODE_LALT;
  c.key_opt_alt     = SDL_SCANCODE_Z;
  c.key_edit        = SDL_SCANCODE_LCTRL;
  c.key_edit_alt    = SDL_SCANCODE_X;
  c.key_delete      = SDL_SCANCODE_DELETE;
  c.key_reset       = SDL_SCANCODE_R;

  c.gamepad_up      = SDL_CONTROLLER_BUTTON_DPAD_UP;
  c.gamepad_left    = SDL_CONTROLLER_BUTTON_DPAD_LEFT;
  c.gamepad_down    = SDL_CONTROLLER_BUTTON_DPAD_DOWN;
  c.gamepad_right   = SDL_CONTROLLER_BUTTON_DPAD_RIGHT;
  c.gamepad_select  = SDL_CONTROLLER_BUTTON_BACK;
  c.gamepad_start   = SDL_CONTROLLER_BUTTON_START;
  c.gamepad_opt     = SDL_CONTROLLER_BUTTON_B;
  c.gamepad_edit    = SDL_CONTROLLER_BUTTON_A;
  return c;
}

// Read config 
void read_config(config_params_s *conf) {
  // Load the config and read the fullscreen setting from the graphics section
  ini_t *ini = ini_load(conf->filename);
  if (ini == NULL) {
    return;
  }

  read_graphics_config(ini, conf);
  read_key_config(ini, conf);
  read_gamepad_config(ini, conf);

  // Frees the mem used for the config
  ini_free(ini);
}

void read_graphics_config(ini_t *ini, config_params_s *conf) {
  const char *param = ini_get(ini, "graphics", "fullscreen");
  // This obviously requires the parameter to be a lowercase true to enable fullscreen
  if ( strcmp(param, "true") == 0 ) {
    conf->init_fullscreen = 1;
  }
  else conf->init_fullscreen = 0;
}

void read_key_config(ini_t *ini, config_params_s *conf) {
  // TODO: Some form of validation

  const char *key_up          = ini_get(ini, "keyboard", "key_up");
  const char *key_left        = ini_get(ini, "keyboard", "key_left");
  const char *key_down        = ini_get(ini, "keyboard", "key_down");
  const char *key_right       = ini_get(ini, "keyboard", "key_right");
  const char *key_select      = ini_get(ini, "keyboard", "key_select");
  const char *key_select_alt  = ini_get(ini, "keyboard", "key_select_alt");
  const char *key_start       = ini_get(ini, "keyboard", "key_start");
  const char *key_start_alt   = ini_get(ini, "keyboard", "key_start_alt");
  const char *key_opt         = ini_get(ini, "keyboard", "key_opt");
  const char *key_opt_alt     = ini_get(ini, "keyboard", "key_opt_alt");
  const char *key_edit        = ini_get(ini, "keyboard", "key_edit");
  const char *key_edit_alt    = ini_get(ini, "keyboard", "key_edit_alt");
  const char *key_delete      = ini_get(ini, "keyboard", "key_delete");
  const char *key_reset       = ini_get(ini, "keyboard", "key_reset");

  conf->key_up          = atoi(key_up);
  conf->key_left        = atoi(key_left);
  conf->key_down        = atoi(key_down);
  conf->key_right       = atoi(key_right);
  conf->key_select      = atoi(key_select);
  conf->key_select_alt  = atoi(key_select_alt);
  conf->key_start       = atoi(key_start);
  conf->key_start_alt   = atoi(key_start_alt);
  conf->key_opt         = atoi(key_opt);
  conf->key_opt_alt     = atoi(key_opt_alt);
  conf->key_edit        = atoi(key_edit);
  conf->key_edit_alt    = atoi(key_edit_alt);
  conf->key_delete      = atoi(key_delete);
  conf->key_reset       = atoi(key_reset);
}

void read_gamepad_config(ini_t *ini, config_params_s *conf) {
  // TODO: Some form of validation

  const char *gamepad_up      = ini_get(ini, "gamepad", "gamepad_up");
  const char *gamepad_left    = ini_get(ini, "gamepad", "gamepad_left");
  const char *gamepad_down    = ini_get(ini, "gamepad", "gamepad_down");
  const char *gamepad_right   = ini_get(ini, "gamepad", "gamepad_right");
  const char *gamepad_select  = ini_get(ini, "gamepad", "gamepad_select");
  const char *gamepad_start   = ini_get(ini, "gamepad", "gamepad_start");
  const char *gamepad_opt     = ini_get(ini, "gamepad", "gamepad_opt");
  const char *gamepad_edit    = ini_get(ini, "gamepad", "gamepad_edit");

  conf->gamepad_up      = atoi(gamepad_up);
  conf->gamepad_left    = atoi(gamepad_left);
  conf->gamepad_down    = atoi(gamepad_down);
  conf->gamepad_right   = atoi(gamepad_right);
  conf->gamepad_select  = atoi(gamepad_select);
  conf->gamepad_start   = atoi(gamepad_start);
  conf->gamepad_opt     = atoi(gamepad_opt);
  conf->gamepad_edit    = atoi(gamepad_edit);
}