forked from libretro/RetroArch
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsettings_data.h
131 lines (103 loc) · 4.45 KB
/
settings_data.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* RetroArch - A frontend for libretro.
* Copyright (C) 2013-2014 - Jason Fetters
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __RARCH_SETTINGS_DATA_H__
#define __RARCH_SETTINGS_DATA_H__
#include <stdint.h>
#include "conf/config_file.h"
#define SETTINGS_DATA_LIST_SIZE 512
#define BINDFOR(s) (*(&s)->value.keybind)
enum setting_type
{
ST_NONE = 0,
ST_BOOL,
ST_INT,
ST_UINT,
ST_FLOAT,
ST_PATH,
ST_DIR,
ST_STRING,
ST_HEX,
ST_BIND,
ST_GROUP,
ST_SUB_GROUP,
ST_END_GROUP,
ST_END_SUB_GROUP
};
enum setting_flags
{
SD_FLAG_PATH_DIR = 1,
SD_FLAG_PATH_FILE = 2,
SD_FLAG_ALLOW_EMPTY = 4,
SD_FLAG_VALUE_DESC = 8,
SD_FLAG_HAS_RANGE = 16
};
typedef void (*change_handler_t)(const void *data);
typedef struct rarch_setting_t
{
enum setting_type type;
const char* name;
uint32_t size;
const char* short_description;
const char* group;
const char* subgroup;
uint32_t index;
double min;
double max;
const char* values;
uint64_t flags;
change_handler_t change_handler;
change_handler_t read_handler;
union
{
bool boolean;
int integer;
unsigned int unsigned_integer;
float fraction;
const char* string;
const struct retro_keybind* keybind;
} default_value;
union
{
bool* boolean;
int* integer;
unsigned int* unsigned_integer;
float* fraction;
char* string;
struct retro_keybind* keybind;
} value;
float step;
bool enforce_minrange;
bool enforce_maxrange;
} rarch_setting_t;
void setting_data_reset_setting(const rarch_setting_t* setting);
void setting_data_reset(const rarch_setting_t* settings);
bool setting_data_load_config_path(const rarch_setting_t* settings, const char* path);
bool setting_data_save_config(const rarch_setting_t* settings, config_file_t* config);
rarch_setting_t* setting_data_find_setting(rarch_setting_t* settings, const char* name);
void setting_data_set_with_string_representation(const rarch_setting_t* setting, const char* value);
const char* setting_data_get_string_representation(const rarch_setting_t* setting, char* buffer, size_t length);
// List building helper functions
rarch_setting_t setting_data_group_setting(enum setting_type type, const char* name);
rarch_setting_t setting_data_bool_setting(const char* name, const char* description, bool* target, bool default_value, const char * group, const char *subgroup, change_handler_t change_handler, change_handler_t read_handler);
rarch_setting_t setting_data_int_setting(const char* name, const char* description, int* target, int default_value, const char *group, const char *subgroup, change_handler_t change_handler, change_handler_t read_handler);
rarch_setting_t setting_data_uint_setting(const char* name, const char* description, unsigned int* target, unsigned int default_value, const char *group, const char *subgroup, change_handler_t change_handler, change_handler_t read_handler);
rarch_setting_t setting_data_float_setting(const char* name, const char* description, float* target, float default_value, const char *group, const char *subgroup, change_handler_t change_handler, change_handler_t read_handler);
rarch_setting_t setting_data_string_setting(enum setting_type type, const char* name, const char* description, char* target, unsigned size, const char* default_value, const char *group, const char *subgroup, change_handler_t change_handler, change_handler_t read_handler);
rarch_setting_t setting_data_bind_setting(const char* name, const char* description, struct retro_keybind* target, uint32_t index,
const struct retro_keybind* default_value, const char *group, const char *subgroup);
void setting_data_get_description(const void *data, char *msg, size_t msg_sizeof);
// These functions operate only on RetroArch's main settings list
rarch_setting_t* setting_data_get_list();
#endif