implemented save/load config
also big refactor of config (options and button mappings) management
This commit is contained in:
parent
3d24d19659
commit
515aa13b60
10 changed files with 904 additions and 591 deletions
1231
src/minarch/main.c
1231
src/minarch/main.c
File diff suppressed because it is too large
Load diff
|
|
@ -8,7 +8,7 @@ CC = $(CROSS_COMPILE)gcc
|
||||||
CFLAGS = -marm -mtune=cortex-a9 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a -fomit-frame-pointer
|
CFLAGS = -marm -mtune=cortex-a9 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a -fomit-frame-pointer
|
||||||
CFLAGS += -I. -I../common -I./libretro-common/include -DPLATFORM=\"$(UNION_PLATFORM)\" -Ofast
|
CFLAGS += -I. -I../common -I./libretro-common/include -DPLATFORM=\"$(UNION_PLATFORM)\" -Ofast
|
||||||
LDFLAGS = -ldl -lSDL -lSDL_image -lSDL_ttf -lmsettings -lpthread
|
LDFLAGS = -ldl -lSDL -lSDL_image -lSDL_ttf -lmsettings -lpthread
|
||||||
#CFLAGS += -Wall -Wno-unused-variable -Wno-unused-function
|
# CFLAGS += -Wall -Wno-unused-variable -Wno-unused-function
|
||||||
# CFLAGS += -fsanitize=address -fno-common
|
# CFLAGS += -fsanitize=address -fno-common
|
||||||
# LDFLAGS += -lasan
|
# LDFLAGS += -lasan
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,15 @@
|
||||||
typedef struct OptionOverride {
|
typedef struct OptionOverride {
|
||||||
char* key;
|
char* key;
|
||||||
char* value;
|
char* value;
|
||||||
int disable; // TODO: hide option from user
|
int lock; // TODO: prevent changing this value
|
||||||
} OptionOverride;
|
} OptionOverride;
|
||||||
|
|
||||||
typedef struct ButtonMapping {
|
typedef struct ButtonMapping {
|
||||||
char* name;
|
char* name;
|
||||||
int retro;
|
int retro;
|
||||||
int local;
|
int local; // TODO: dislike this name...
|
||||||
|
int mod;
|
||||||
|
int default_;
|
||||||
} ButtonMapping;
|
} ButtonMapping;
|
||||||
|
|
||||||
typedef struct CoreOverrides {
|
typedef struct CoreOverrides {
|
||||||
|
|
|
||||||
|
|
@ -9,19 +9,19 @@ static CoreOverrides fceumm_overrides = {
|
||||||
{NULL,NULL},
|
{NULL,NULL},
|
||||||
},
|
},
|
||||||
.button_mapping = (ButtonMapping[]){
|
.button_mapping = (ButtonMapping[]){
|
||||||
{"UP", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
{"Up", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
||||||
{"DOWN", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
{"Down", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
||||||
{"LEFT", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
{"Left", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
||||||
{"RIGHT", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
{"Right", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
||||||
{"SELECT", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
{"Select", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
||||||
{"START", RETRO_DEVICE_ID_JOYPAD_START, BTN_ID_START},
|
{"Start", RETRO_DEVICE_ID_JOYPAD_START, BTN_ID_START},
|
||||||
{"A BUTTON", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
{"A Button", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
||||||
{"B BUTTON", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_B},
|
{"B Button", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_B},
|
||||||
{"A TURBO", RETRO_DEVICE_ID_JOYPAD_X, BTN_ID_NONE},
|
{"A Turbo", RETRO_DEVICE_ID_JOYPAD_X, BTN_ID_NONE},
|
||||||
{"B TURBO", RETRO_DEVICE_ID_JOYPAD_Y, BTN_ID_NONE},
|
{"B Turbo", RETRO_DEVICE_ID_JOYPAD_Y, BTN_ID_NONE},
|
||||||
{"CHANGE DISK", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_NONE},
|
{"Change Disk", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_NONE},
|
||||||
{"INSERT DISK", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_NONE},
|
{"Insert Disk", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_NONE},
|
||||||
{"INSERT COIN", RETRO_DEVICE_ID_JOYPAD_R2, BTN_ID_NONE},
|
{"Insert Coin", RETRO_DEVICE_ID_JOYPAD_R2, BTN_ID_NONE},
|
||||||
{NULL,0,0},
|
{NULL,0,0},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -10,18 +10,18 @@ CoreOverrides gambatte_overrides = {
|
||||||
{NULL,NULL},
|
{NULL,NULL},
|
||||||
},
|
},
|
||||||
.button_mapping = (ButtonMapping[]){
|
.button_mapping = (ButtonMapping[]){
|
||||||
{"UP", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
{"Up", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
||||||
{"DOWN", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
{"Down", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
||||||
{"LEFT", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
{"Left", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
||||||
{"RIGHT", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
{"Right", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
||||||
{"SELECT", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
{"Select", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
||||||
{"START", RETRO_DEVICE_ID_JOYPAD_START, BTN_ID_START},
|
{"Start", RETRO_DEVICE_ID_JOYPAD_START, BTN_ID_START},
|
||||||
{"A BUTTON", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
{"A Button", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
||||||
{"B BUTTON", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_B},
|
{"B Button", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_B},
|
||||||
{"A TURBO", RETRO_DEVICE_ID_JOYPAD_X, BTN_ID_NONE},
|
{"A Turbo", RETRO_DEVICE_ID_JOYPAD_X, BTN_ID_NONE},
|
||||||
{"B TURBO", RETRO_DEVICE_ID_JOYPAD_Y, BTN_ID_NONE},
|
{"B Turbo", RETRO_DEVICE_ID_JOYPAD_Y, BTN_ID_NONE},
|
||||||
{"PREV PAL", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_NONE},
|
{"Prev. Palette", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_NONE},
|
||||||
{"NEXT PAL", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_NONE},
|
{"Next Palette", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_NONE},
|
||||||
{NULL,0,0},
|
{NULL,0,0},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
@ -7,18 +7,18 @@ static CoreOverrides gpsp_overrides = {
|
||||||
{NULL,NULL},
|
{NULL,NULL},
|
||||||
},
|
},
|
||||||
.button_mapping = (ButtonMapping[]){
|
.button_mapping = (ButtonMapping[]){
|
||||||
{"UP", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
{"Up", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
||||||
{"DOWN", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
{"Down", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
||||||
{"LEFT", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
{"Left", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
||||||
{"RIGHT", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
{"Right", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
||||||
{"SELECT", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
{"Select", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
||||||
{"START", RETRO_DEVICE_ID_JOYPAD_START, BTN_ID_START},
|
{"Start", RETRO_DEVICE_ID_JOYPAD_START, BTN_ID_START},
|
||||||
{"A BUTTON", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
{"A Button", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
||||||
{"B BUTTON", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_B},
|
{"B Button", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_B},
|
||||||
{"A TURBO", RETRO_DEVICE_ID_JOYPAD_X, BTN_ID_NONE},
|
{"A Turbo", RETRO_DEVICE_ID_JOYPAD_X, BTN_ID_NONE},
|
||||||
{"B TURBO", RETRO_DEVICE_ID_JOYPAD_Y, BTN_ID_NONE},
|
{"B Turbo", RETRO_DEVICE_ID_JOYPAD_Y, BTN_ID_NONE},
|
||||||
{"L BUTTON", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_L1},
|
{"L Button", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_L1},
|
||||||
{"R BUTTON", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_R1},
|
{"R Button", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_R1},
|
||||||
{NULL,0,0},
|
{NULL,0,0},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
@ -3,20 +3,20 @@
|
||||||
static CoreOverrides pcsx_rearmed_overrides = {
|
static CoreOverrides pcsx_rearmed_overrides = {
|
||||||
.core_name = "pcsx_rearmed",
|
.core_name = "pcsx_rearmed",
|
||||||
.button_mapping = (ButtonMapping[]){
|
.button_mapping = (ButtonMapping[]){
|
||||||
{"UP", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
{"Up", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
||||||
{"DOWN", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
{"Down", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
||||||
{"LEFT", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
{"Left", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
||||||
{"RIGHT", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
{"Right", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
||||||
{"SELECT", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
{"Select", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
||||||
{"START", RETRO_DEVICE_ID_JOYPAD_START, BTN_ID_START},
|
{"Start", RETRO_DEVICE_ID_JOYPAD_START, BTN_ID_START},
|
||||||
{"CIRCLE", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
{"Circle", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
||||||
{"CROSS", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_B},
|
{"Cross", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_B},
|
||||||
{"TRIANGLE", RETRO_DEVICE_ID_JOYPAD_X, BTN_ID_X},
|
{"Triangle", RETRO_DEVICE_ID_JOYPAD_X, BTN_ID_X},
|
||||||
{"SQUARE", RETRO_DEVICE_ID_JOYPAD_Y, BTN_ID_Y},
|
{"Square", RETRO_DEVICE_ID_JOYPAD_Y, BTN_ID_Y},
|
||||||
{"L1 BUTTON", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_L1},
|
{"L1 Button", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_L1},
|
||||||
{"R1 BUTTON", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_R1},
|
{"R1 Button", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_R1},
|
||||||
{"L2 BUTTON", RETRO_DEVICE_ID_JOYPAD_L2, BTN_ID_L2},
|
{"L2 Button", RETRO_DEVICE_ID_JOYPAD_L2, BTN_ID_L2},
|
||||||
{"R2 BUTTON", RETRO_DEVICE_ID_JOYPAD_R2, BTN_ID_R2},
|
{"R2 Button", RETRO_DEVICE_ID_JOYPAD_R2, BTN_ID_R2},
|
||||||
{NULL,0,0},
|
{NULL,0,0},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
@ -7,18 +7,18 @@ static CoreOverrides picodrive_overrides = {
|
||||||
{NULL,NULL},
|
{NULL,NULL},
|
||||||
},
|
},
|
||||||
.button_mapping = (ButtonMapping[]){
|
.button_mapping = (ButtonMapping[]){
|
||||||
{"UP", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
{"Up", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
||||||
{"DOWN", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
{"Down", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
||||||
{"LEFT", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
{"Left", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
||||||
{"RIGHT", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
{"Right", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
||||||
{"MODE", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
{"Mode", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
||||||
{"START", RETRO_DEVICE_ID_JOYPAD_START, BTN_ID_START},
|
{"Start", RETRO_DEVICE_ID_JOYPAD_START, BTN_ID_START},
|
||||||
{"A BUTTON", RETRO_DEVICE_ID_JOYPAD_Y, BTN_ID_Y},
|
{"A Button", RETRO_DEVICE_ID_JOYPAD_Y, BTN_ID_Y},
|
||||||
{"B BUTTON", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_X},
|
{"B Button", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_X},
|
||||||
{"C BUTTON", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
{"C Button", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
||||||
{"X BUTTON", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_B},
|
{"X Button", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_B},
|
||||||
{"Y BUTTON", RETRO_DEVICE_ID_JOYPAD_X, BTN_ID_L1},
|
{"Y Button", RETRO_DEVICE_ID_JOYPAD_X, BTN_ID_L1},
|
||||||
{"Z BUTTON", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_R1},
|
{"Z Button", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_R1},
|
||||||
{NULL,0,0},
|
{NULL,0,0},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
@ -11,15 +11,15 @@ static CoreOverrides pokemini_overrides = {
|
||||||
{NULL,NULL},
|
{NULL,NULL},
|
||||||
},
|
},
|
||||||
.button_mapping = (ButtonMapping[]){
|
.button_mapping = (ButtonMapping[]){
|
||||||
{"UP", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
{"Up", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
||||||
{"DOWN", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
{"Down", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
||||||
{"LEFT", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
{"Left", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
||||||
{"RIGHT", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
{"Right", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
||||||
{"A BUTTON", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
{"A Button", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
||||||
{"B BUTTON", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_B},
|
{"B Button", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_B},
|
||||||
{"C BUTTON", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_R1},
|
{"C Button", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_R1},
|
||||||
{"SHAKE", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_L1},
|
{"Shake", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_L1},
|
||||||
{"POWER", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
{"Power", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
||||||
{NULL,0,0},
|
{NULL,0,0},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
@ -3,18 +3,18 @@
|
||||||
static CoreOverrides snes9x2005_plus_overrides = {
|
static CoreOverrides snes9x2005_plus_overrides = {
|
||||||
.core_name = "snes9x2005_plus",
|
.core_name = "snes9x2005_plus",
|
||||||
.button_mapping = (ButtonMapping[]){
|
.button_mapping = (ButtonMapping[]){
|
||||||
{"UP", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
{"Up", RETRO_DEVICE_ID_JOYPAD_UP, BTN_ID_UP},
|
||||||
{"DOWN", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
{"Down", RETRO_DEVICE_ID_JOYPAD_DOWN, BTN_ID_DOWN},
|
||||||
{"LEFT", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
{"Left", RETRO_DEVICE_ID_JOYPAD_LEFT, BTN_ID_LEFT},
|
||||||
{"RIGHT", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
{"Right", RETRO_DEVICE_ID_JOYPAD_RIGHT, BTN_ID_RIGHT},
|
||||||
{"SELECT", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
{"Select", RETRO_DEVICE_ID_JOYPAD_SELECT, BTN_ID_SELECT},
|
||||||
{"START", RETRO_DEVICE_ID_JOYPAD_START, BTN_ID_START},
|
{"Start", RETRO_DEVICE_ID_JOYPAD_START, BTN_ID_START},
|
||||||
{"Y BUTTON", RETRO_DEVICE_ID_JOYPAD_Y, BTN_ID_Y},
|
{"Y Button", RETRO_DEVICE_ID_JOYPAD_Y, BTN_ID_Y},
|
||||||
{"X BUTTON", RETRO_DEVICE_ID_JOYPAD_X, BTN_ID_X},
|
{"X Button", RETRO_DEVICE_ID_JOYPAD_X, BTN_ID_X},
|
||||||
{"B BUTTON", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_B},
|
{"B Button", RETRO_DEVICE_ID_JOYPAD_B, BTN_ID_B},
|
||||||
{"A BUTTON", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
{"A Button", RETRO_DEVICE_ID_JOYPAD_A, BTN_ID_A},
|
||||||
{"L BUTTON", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_L1},
|
{"L Button", RETRO_DEVICE_ID_JOYPAD_L, BTN_ID_L1},
|
||||||
{"R BUTTON", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_R1},
|
{"R Button", RETRO_DEVICE_ID_JOYPAD_R, BTN_ID_R1},
|
||||||
{NULL,0,0},
|
{NULL,0,0},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
Loading…
Add table
Add a link
Reference in a new issue