mirror of
https://github.com/digarok/gsplus.git
synced 2024-05-29 04:41:29 +00:00
add new menu lookup for ethernet interface.
This commit is contained in:
parent
fc100dd6b6
commit
ce3bb3d642
205
src/config.c
205
src/config.c
|
@ -88,8 +88,8 @@ extern int g_joystick_button_0;
|
||||||
extern int g_joystick_button_1;
|
extern int g_joystick_button_1;
|
||||||
extern int g_joystick_button_2;
|
extern int g_joystick_button_2;
|
||||||
extern int g_joystick_button_3;
|
extern int g_joystick_button_3;
|
||||||
extern int g_ethernet;
|
|
||||||
extern int g_ethernet_enabled;
|
|
||||||
extern int g_halt_on_bad_read;
|
extern int g_halt_on_bad_read;
|
||||||
extern int g_ignore_bad_acc;
|
extern int g_ignore_bad_acc;
|
||||||
extern int g_ignore_halts;
|
extern int g_ignore_halts;
|
||||||
|
@ -114,7 +114,8 @@ extern int g_joystick_trim_amount_y;
|
||||||
extern int g_swap_paddles;
|
extern int g_swap_paddles;
|
||||||
extern int g_invert_paddles;
|
extern int g_invert_paddles;
|
||||||
extern int g_ethernet;
|
extern int g_ethernet;
|
||||||
extern int g_ethernet_interface;
|
extern int g_ethernet_enabled;
|
||||||
|
extern char * g_ethernet_interface;
|
||||||
extern int g_appletalk_bridging;
|
extern int g_appletalk_bridging;
|
||||||
extern int g_appletalk_turbo;
|
extern int g_appletalk_turbo;
|
||||||
extern int g_appletalk_diagnostics;
|
extern int g_appletalk_diagnostics;
|
||||||
|
@ -213,6 +214,8 @@ int g_cfg_file_dir_only = 0;
|
||||||
|
|
||||||
#define MAX_PARTITION_BLK_SIZE 65536
|
#define MAX_PARTITION_BLK_SIZE 65536
|
||||||
|
|
||||||
|
void display_rawnet_menu(const char *name, const char **value);
|
||||||
|
|
||||||
extern Cfg_menu g_cfg_main_menu[];
|
extern Cfg_menu g_cfg_main_menu[];
|
||||||
|
|
||||||
#define KNMP(a) &a, #a, 0
|
#define KNMP(a) &a, #a, 0
|
||||||
|
@ -247,7 +250,6 @@ Cfg_menu g_cfg_uiless_menu[] = {
|
||||||
{ "", KNMP(g_joystick_button_1), CFGTYPE_INT },
|
{ "", KNMP(g_joystick_button_1), CFGTYPE_INT },
|
||||||
{ "", KNMP(g_joystick_button_2), CFGTYPE_INT },
|
{ "", KNMP(g_joystick_button_2), CFGTYPE_INT },
|
||||||
{ "", KNMP(g_joystick_button_3), CFGTYPE_INT },
|
{ "", KNMP(g_joystick_button_3), CFGTYPE_INT },
|
||||||
{ "", KNMP(g_ethernet), CFGTYPE_INT },
|
|
||||||
{ "", KNMP(g_halt_on_bad_read), CFGTYPE_INT },
|
{ "", KNMP(g_halt_on_bad_read), CFGTYPE_INT },
|
||||||
{ "", KNMP(g_ignore_bad_acc), CFGTYPE_INT },
|
{ "", KNMP(g_ignore_bad_acc), CFGTYPE_INT },
|
||||||
{ "", KNMP(g_ignore_halts), CFGTYPE_INT },
|
{ "", KNMP(g_ignore_halts), CFGTYPE_INT },
|
||||||
|
@ -366,8 +368,8 @@ Cfg_menu g_cfg_parallel_menu[] = {
|
||||||
|
|
||||||
Cfg_menu g_cfg_ethernet_menu[] = {
|
Cfg_menu g_cfg_ethernet_menu[] = {
|
||||||
{ "Ethernet Card Configuration", g_cfg_ethernet_menu, 0, 0, CFGTYPE_MENU },
|
{ "Ethernet Card Configuration", g_cfg_ethernet_menu, 0, 0, CFGTYPE_MENU },
|
||||||
{ "Use Interface Number,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10",
|
{ "Interface",
|
||||||
KNMP(g_ethernet_interface), CFGTYPE_INT },
|
KNMP(g_ethernet_interface), CFGTYPE_STR_FUNC, display_rawnet_menu },
|
||||||
{ "", 0, 0, 0, 0 },
|
{ "", 0, 0, 0, 0 },
|
||||||
{ "Uthernet Card in Slot 3,0,Off,1,On",
|
{ "Uthernet Card in Slot 3,0,Off,1,On",
|
||||||
KNMP(g_ethernet), CFGTYPE_INT },
|
KNMP(g_ethernet), CFGTYPE_INT },
|
||||||
|
@ -483,15 +485,14 @@ Cfg_menu g_cfg_main_menu[] = {
|
||||||
{ "Expansion Mem Size,0,0MB,0x100000,1MB,0x200000,2MB,0x300000,3MB,"
|
{ "Expansion Mem Size,0,0MB,0x100000,1MB,0x200000,2MB,0x300000,3MB,"
|
||||||
"0x400000,4MB,0x600000,6MB,0x800000,8MB,0xa00000,10MB,0xc00000,12MB,"
|
"0x400000,4MB,0x600000,6MB,0x800000,8MB,0xa00000,10MB,0xc00000,12MB,"
|
||||||
"0xe00000,14MB", KNMP(g_mem_size_exp), CFGTYPE_INT },
|
"0xe00000,14MB", KNMP(g_mem_size_exp), CFGTYPE_INT },
|
||||||
{ "Dump text screen to file", (void *)cfg_text_screen_dump, 0, 0, CFGTYPE_FUNC},
|
{ "Dump text screen to file", 0, 0, 0, CFGTYPE_FUNC, cfg_text_screen_dump},
|
||||||
#ifdef HAVE_SDL
|
#ifdef HAVE_SDL
|
||||||
{ "Reset Virtual ImageWriter", (void *)cfg_iwreset, 0, 0, CFGTYPE_FUNC },
|
{ "Reset Virtual ImageWriter", 0, 0, 0, CFGTYPE_FUNC, cfg_iwreset },
|
||||||
#endif
|
#endif
|
||||||
{ "", 0, 0, 0, 0 },
|
{ "", 0, 0, 0, 0 },
|
||||||
{ "Save changes to configuration file", (void *)config_write_config_gsplus_file, 0, 0,
|
{ "Save changes to configuration file", 0, 0, 0, CFGTYPE_FUNC, config_write_config_gsplus_file },
|
||||||
CFGTYPE_FUNC },
|
|
||||||
{ "", 0, 0, 0, 0 },
|
{ "", 0, 0, 0, 0 },
|
||||||
{ "Exit Config (or press F4)", (void *)cfg_exit, 0, 0, CFGTYPE_FUNC },
|
{ "Exit Config (or press F4)", 0, 0, 0, CFGTYPE_FUNC, cfg_exit },
|
||||||
{ 0, 0, 0, 0, 0 },
|
{ 0, 0, 0, 0, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -609,6 +610,7 @@ void config_init_menus(Cfg_menu *menuptr) {
|
||||||
case CFGTYPE_STR:
|
case CFGTYPE_STR:
|
||||||
case CFGTYPE_FILE:
|
case CFGTYPE_FILE:
|
||||||
case CFGTYPE_DIR:
|
case CFGTYPE_DIR:
|
||||||
|
case CFGTYPE_STR_FUNC:
|
||||||
str_ptr = (char **)menuptr->ptr;
|
str_ptr = (char **)menuptr->ptr;
|
||||||
str = *str_ptr;
|
str = *str_ptr;
|
||||||
// We need to malloc this string since all
|
// We need to malloc this string since all
|
||||||
|
@ -709,36 +711,7 @@ void cfg_iwreset() {
|
||||||
imagewriter_init(g_imagewriter_dpi,g_imagewriter_paper,g_imagewriter_banner, g_imagewriter_output,g_imagewriter_multipage);
|
imagewriter_init(g_imagewriter_dpi,g_imagewriter_paper,g_imagewriter_banner, g_imagewriter_output,g_imagewriter_multipage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_RAWNET
|
|
||||||
void cfg_get_tfe_name() {
|
|
||||||
int i = 0;
|
|
||||||
char *ppname = NULL;
|
|
||||||
char *ppdes = NULL;
|
|
||||||
cfg_htab_vtab(0,11);
|
|
||||||
if (rawnet_enumadapter_open())
|
|
||||||
{
|
|
||||||
cfg_printf("Interface List:\n---------------");
|
|
||||||
while(rawnet_enumadapter(&ppname,&ppdes))
|
|
||||||
{
|
|
||||||
cfg_htab_vtab(0, 13+i);
|
|
||||||
cfg_printf("%2d: %s",i,ppdes);
|
|
||||||
i++;
|
|
||||||
free(ppname);
|
|
||||||
free(ppdes);
|
|
||||||
}
|
|
||||||
rawnet_enumadapter_close();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
|
||||||
cfg_printf("ERROR: Install/Enable WinPcap for Ethernet Support!!");
|
|
||||||
#else
|
|
||||||
cfg_printf("ERROR: Install/Enable LibPcap for Ethernet Support!!");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void config_vbl_update(int doit_3_persec) {
|
void config_vbl_update(int doit_3_persec) {
|
||||||
if(doit_3_persec) {
|
if(doit_3_persec) {
|
||||||
|
@ -824,6 +797,7 @@ void config_parse_option(char *buf, int pos, int len, int line) {
|
||||||
case CFGTYPE_STR:
|
case CFGTYPE_STR:
|
||||||
case CFGTYPE_FILE:
|
case CFGTYPE_FILE:
|
||||||
case CFGTYPE_DIR:
|
case CFGTYPE_DIR:
|
||||||
|
case CFGTYPE_STR_FUNC:
|
||||||
strptr = (char **)menuptr->ptr;
|
strptr = (char **)menuptr->ptr;
|
||||||
if(strptr && *strptr) {
|
if(strptr && *strptr) {
|
||||||
free(*strptr);
|
free(*strptr);
|
||||||
|
@ -1347,6 +1321,7 @@ void config_write_config_gsplus_file() {
|
||||||
case CFGTYPE_STR:
|
case CFGTYPE_STR:
|
||||||
case CFGTYPE_FILE:
|
case CFGTYPE_FILE:
|
||||||
case CFGTYPE_DIR:
|
case CFGTYPE_DIR:
|
||||||
|
case CFGTYPE_STR_FUNC:
|
||||||
curstr = *((char **)menuptr->ptr);
|
curstr = *((char **)menuptr->ptr);
|
||||||
defstr = *((char **)menuptr->defptr);
|
defstr = *((char **)menuptr->defptr);
|
||||||
if(strcmp(curstr, defstr) != 0) {
|
if(strcmp(curstr, defstr) != 0) {
|
||||||
|
@ -2073,6 +2048,11 @@ void cfg_putchar(int c) {
|
||||||
g_cfg_curs_x = x;
|
g_cfg_curs_x = x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cfg_puts(const char *str, int nl) {
|
||||||
|
for(;*str; ++str) cfg_putchar(*str);
|
||||||
|
if (nl) cfg_putchar('\n');
|
||||||
|
}
|
||||||
|
|
||||||
void cfg_printf(const char *fmt, ...) {
|
void cfg_printf(const char *fmt, ...) {
|
||||||
va_list ap;
|
va_list ap;
|
||||||
int c;
|
int c;
|
||||||
|
@ -2274,6 +2254,7 @@ void cfg_parse_menu(Cfg_menu *menuptr, int menu_pos, int highlight_pos, int chan
|
||||||
case CFGTYPE_STR:
|
case CFGTYPE_STR:
|
||||||
case CFGTYPE_FILE:
|
case CFGTYPE_FILE:
|
||||||
case CFGTYPE_DIR:
|
case CFGTYPE_DIR:
|
||||||
|
case CFGTYPE_STR_FUNC:
|
||||||
str_ptr = (char **)menuptr->ptr;
|
str_ptr = (char **)menuptr->ptr;
|
||||||
curstr = *str_ptr;
|
curstr = *str_ptr;
|
||||||
str_ptr = (char **)menuptr->defptr;
|
str_ptr = (char **)menuptr->defptr;
|
||||||
|
@ -2306,6 +2287,7 @@ void cfg_parse_menu(Cfg_menu *menuptr, int menu_pos, int highlight_pos, int chan
|
||||||
case CFGTYPE_INT:
|
case CFGTYPE_INT:
|
||||||
case CFGTYPE_FILE:
|
case CFGTYPE_FILE:
|
||||||
case CFGTYPE_DIR:
|
case CFGTYPE_DIR:
|
||||||
|
case CFGTYPE_STR_FUNC:
|
||||||
g_cfg_opt_buf[bufpos++] = ' ';
|
g_cfg_opt_buf[bufpos++] = ' ';
|
||||||
g_cfg_opt_buf[bufpos++] = '=';
|
g_cfg_opt_buf[bufpos++] = '=';
|
||||||
g_cfg_opt_buf[bufpos++] = ' ';
|
g_cfg_opt_buf[bufpos++] = ' ';
|
||||||
|
@ -2385,6 +2367,7 @@ void cfg_parse_menu(Cfg_menu *menuptr, int menu_pos, int highlight_pos, int chan
|
||||||
snprintf(str, CFG_OPT_MAXSTR, "%d", curval);
|
snprintf(str, CFG_OPT_MAXSTR, "%d", curval);
|
||||||
break;
|
break;
|
||||||
case CFGTYPE_STR:
|
case CFGTYPE_STR:
|
||||||
|
case CFGTYPE_STR_FUNC:
|
||||||
str = &(g_cfg_opts_strs[0][0]);
|
str = &(g_cfg_opts_strs[0][0]);
|
||||||
//printf("curstr is: %s str is: %s\n", curstr,str);
|
//printf("curstr is: %s str is: %s\n", curstr,str);
|
||||||
snprintf(str, CFG_OPT_MAXSTR, "%s", curstr);
|
snprintf(str, CFG_OPT_MAXSTR, "%s", curstr);
|
||||||
|
@ -3190,11 +3173,11 @@ void config_display_file_menu(void) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void config_control_panel() {
|
void config_control_panel() {
|
||||||
void (*fn_ptr)();
|
|
||||||
const char *str;
|
const char *str;
|
||||||
Cfg_menu *menuptr;
|
Cfg_menu *menuptr;
|
||||||
void *ptr;
|
void *ptr;
|
||||||
|
void *cookie;
|
||||||
int line;
|
int line;
|
||||||
int type;
|
int type;
|
||||||
int menu_line;
|
int menu_line;
|
||||||
|
@ -3305,13 +3288,7 @@ void config_control_panel() {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_RAWNET
|
#ifdef HAVE_RAWNET
|
||||||
/*HACK eh, at least I think it is. Display the available ethernet interfaces
|
|
||||||
when in the ethernet control panel. This is the only way one can customize a menu pane.
|
|
||||||
Kent did it with the directory browser, so why not.*/
|
|
||||||
if(menuptr == g_cfg_ethernet_menu)
|
|
||||||
{
|
|
||||||
cfg_get_tfe_name();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -3347,6 +3324,7 @@ void config_control_panel() {
|
||||||
type = menuptr[menu_line].cfgtype;
|
type = menuptr[menu_line].cfgtype;
|
||||||
ptr = menuptr[menu_line].ptr;
|
ptr = menuptr[menu_line].ptr;
|
||||||
str = menuptr[menu_line].str;
|
str = menuptr[menu_line].str;
|
||||||
|
cookie = menuptr[menu_line].cookie;
|
||||||
switch(type & 0xf) {
|
switch(type & 0xf) {
|
||||||
case CFGTYPE_MENU:
|
case CFGTYPE_MENU:
|
||||||
menuptr = (Cfg_menu *)ptr;
|
menuptr = (Cfg_menu *)ptr;
|
||||||
|
@ -3361,11 +3339,13 @@ void config_control_panel() {
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CFGTYPE_FUNC:
|
case CFGTYPE_FUNC: {
|
||||||
fn_ptr = (void (*)())ptr;
|
void (*fn)(void);
|
||||||
(*fn_ptr)();
|
fn = (void (*)(void))cookie;
|
||||||
|
if (fn) fn();
|
||||||
adb_all_keys_up(); //Needed otherwise menu function will continue to repeat until we move selection up or down
|
adb_all_keys_up(); //Needed otherwise menu function will continue to repeat until we move selection up or down
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case CFGTYPE_DISK:
|
case CFGTYPE_DISK:
|
||||||
g_cfg_slotdrive = type >> 4;
|
g_cfg_slotdrive = type >> 4;
|
||||||
|
@ -3386,6 +3366,15 @@ void config_control_panel() {
|
||||||
g_cfg_file_dir_only = 1;
|
g_cfg_file_dir_only = 1;
|
||||||
config_display_file_menu();
|
config_display_file_menu();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CFGTYPE_STR_FUNC: {
|
||||||
|
void (*fn)(const char *, char **);
|
||||||
|
fn = (void (*)(const char *, char **))cookie;
|
||||||
|
if (fn) fn(str, (char **)ptr);
|
||||||
|
adb_all_keys_up();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KEY_ESC:
|
case KEY_ESC:
|
||||||
|
@ -3429,3 +3418,113 @@ void x_clk_setup_bram_version() {
|
||||||
g_bram_ptr = (&g_bram[1][0]); // ROM 03
|
g_bram_ptr = (&g_bram[1][0]); // ROM 03
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_RAWNET
|
||||||
|
|
||||||
|
void display_rawnet_menu(const char *name, const char **value) {
|
||||||
|
|
||||||
|
char *entries[20];
|
||||||
|
int i;
|
||||||
|
int index = -1;
|
||||||
|
int count = 0;
|
||||||
|
char *ppname = NULL;
|
||||||
|
char *ppdes = NULL;
|
||||||
|
|
||||||
|
memset(entries, 0, sizeof(entries));
|
||||||
|
|
||||||
|
if (rawnet_enumadapter_open()) {
|
||||||
|
count = 0;
|
||||||
|
while(rawnet_enumadapter(&ppname,&ppdes)) {
|
||||||
|
entries[count] = ppname;
|
||||||
|
free(ppdes);
|
||||||
|
|
||||||
|
if (index < 0 && !strcmp(*value, ppname)) index = count;
|
||||||
|
++count;
|
||||||
|
if (count == 20) break;
|
||||||
|
}
|
||||||
|
rawnet_enumadapter_close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index < 0) index = 0;
|
||||||
|
|
||||||
|
for(;;) {
|
||||||
|
int key;
|
||||||
|
|
||||||
|
cfg_home();
|
||||||
|
cfg_puts(name, 1);
|
||||||
|
for (i = 0; i < 20; ++i) {
|
||||||
|
char *cp = entries[i];
|
||||||
|
if (!cp) break;
|
||||||
|
|
||||||
|
cfg_htab_vtab(4, i + 2);
|
||||||
|
if (i == index) cfg_putchar('\b'); /* inverse */
|
||||||
|
cfg_puts(cp, 1);
|
||||||
|
if (i == index) cfg_putchar('\b');
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg_htab_vtab(0, 23);
|
||||||
|
cfg_puts("Move: \tJ\t \tK\t Change: \tM",1);
|
||||||
|
|
||||||
|
key = config_read_key();
|
||||||
|
switch(key) {
|
||||||
|
case KEY_UP_ARROW:
|
||||||
|
if (index) --index;
|
||||||
|
break;
|
||||||
|
case KEY_DOWN_ARROW:
|
||||||
|
if (index < count - 1) ++index;
|
||||||
|
break;
|
||||||
|
case KEY_PAGE_UP:
|
||||||
|
index -= CFG_PG_SCROLL_AMT;
|
||||||
|
if (index < 0) index = 0;
|
||||||
|
break;
|
||||||
|
case KEY_PAGE_DOWN:
|
||||||
|
index += CFG_PG_SCROLL_AMT;
|
||||||
|
if (index >= count) index = count - 1;
|
||||||
|
break;
|
||||||
|
case KEY_RETURN:
|
||||||
|
if (index < count) {
|
||||||
|
*value = strdup(entries[index]);
|
||||||
|
}
|
||||||
|
key = -1;
|
||||||
|
break;
|
||||||
|
case KEY_ESC:
|
||||||
|
key = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (key < 0) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 20; ++i) free(entries[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void cfg_get_tfe_name() {
|
||||||
|
int i = 0;
|
||||||
|
char *ppname = NULL;
|
||||||
|
char *ppdes = NULL;
|
||||||
|
cfg_htab_vtab(0,11);
|
||||||
|
if (rawnet_enumadapter_open())
|
||||||
|
{
|
||||||
|
cfg_printf("Interface List:\n---------------");
|
||||||
|
while(rawnet_enumadapter(&ppname,&ppdes))
|
||||||
|
{
|
||||||
|
cfg_htab_vtab(0, 13+i);
|
||||||
|
cfg_printf("%2d: %s",i,ppdes);
|
||||||
|
i++;
|
||||||
|
free(ppname);
|
||||||
|
free(ppdes);
|
||||||
|
}
|
||||||
|
rawnet_enumadapter_close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#if defined(_WIN32) || defined(__CYGWIN__)
|
||||||
|
cfg_printf("ERROR: Install/Enable WinPcap for Ethernet Support!!");
|
||||||
|
#else
|
||||||
|
cfg_printf("ERROR: Install/Enable LibPcap for Ethernet Support!!");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -12,12 +12,13 @@
|
||||||
#define CFG_NUM_SHOWENTS 16
|
#define CFG_NUM_SHOWENTS 16
|
||||||
|
|
||||||
#define CFGTYPE_MENU 1
|
#define CFGTYPE_MENU 1
|
||||||
#define CFGTYPE_INT 2
|
#define CFGTYPE_INT 2
|
||||||
#define CFGTYPE_DISK 3
|
#define CFGTYPE_DISK 3
|
||||||
#define CFGTYPE_FUNC 4
|
#define CFGTYPE_FUNC 4
|
||||||
#define CFGTYPE_FILE 5
|
#define CFGTYPE_FILE 5
|
||||||
#define CFGTYPE_STR 6
|
#define CFGTYPE_STR 6
|
||||||
#define CFGTYPE_DIR 7
|
#define CFGTYPE_DIR 7
|
||||||
|
#define CFGTYPE_STR_FUNC 8
|
||||||
/* CFGTYPE limited to just 4 bits: 0-15 */
|
/* CFGTYPE limited to just 4 bits: 0-15 */
|
||||||
|
|
||||||
/* Cfg_menu, Cfg_dirent and Cfg_listhdr are defined in defc.h */
|
/* Cfg_menu, Cfg_dirent and Cfg_listhdr are defined in defc.h */
|
||||||
|
|
|
@ -191,6 +191,7 @@ STRUCT(Cfg_menu) {
|
||||||
const char *name_str;
|
const char *name_str;
|
||||||
void *defptr;
|
void *defptr;
|
||||||
int cfgtype;
|
int cfgtype;
|
||||||
|
void *cookie;
|
||||||
};
|
};
|
||||||
|
|
||||||
STRUCT(Cfg_dirent) {
|
STRUCT(Cfg_dirent) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user