mirror of
https://github.com/digarok/gsplus.git
synced 2024-06-27 04:29:29 +00:00
clean up arrow key code in the config window.
This commit is contained in:
parent
18d988319e
commit
1790096088
106
src/config.c
106
src/config.c
|
@ -3136,6 +3136,23 @@ void cfg_file_handle_key(int key) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int config_read_key(void) {
|
||||||
|
int key = -1;
|
||||||
|
while(g_config_control_panel & !(halt_sim&HALT_WANTTOQUIT)) {
|
||||||
|
video_update();
|
||||||
|
key = adb_read_c000();
|
||||||
|
if(key & 0x80) {
|
||||||
|
key = key & 0x7f;
|
||||||
|
(void)adb_access_c010();
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
micro_sleep(1.0/60.0);
|
||||||
|
g_cfg_vbl_count++;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
void config_control_panel() {
|
void config_control_panel() {
|
||||||
void (*fn_ptr)();
|
void (*fn_ptr)();
|
||||||
const char *str;
|
const char *str;
|
||||||
|
@ -3144,10 +3161,10 @@ void config_control_panel() {
|
||||||
int print_eject_help;
|
int print_eject_help;
|
||||||
int line;
|
int line;
|
||||||
int type;
|
int type;
|
||||||
int match_found;
|
|
||||||
int menu_line;
|
int menu_line;
|
||||||
int menu_inc;
|
int menu_inc;
|
||||||
int max_line;
|
int max_line;
|
||||||
|
int min_line;
|
||||||
int key;
|
int key;
|
||||||
int i, j;
|
int i, j;
|
||||||
// First, save important text screen state
|
// First, save important text screen state
|
||||||
|
@ -3188,10 +3205,39 @@ void config_control_panel() {
|
||||||
}
|
}
|
||||||
cfg_home();
|
cfg_home();
|
||||||
line = 1;
|
line = 1;
|
||||||
max_line = 1;
|
|
||||||
match_found = 0;
|
|
||||||
print_eject_help = 0;
|
print_eject_help = 0;
|
||||||
cfg_printf("%s\n\n", menuptr[0].str);
|
cfg_printf("%s\n\n", menuptr[0].str);
|
||||||
|
|
||||||
|
/* calc max/min items */
|
||||||
|
max_line = 0;
|
||||||
|
min_line = 0;
|
||||||
|
for (i = 0;;++i) {
|
||||||
|
const char *cp = menuptr[i].str;
|
||||||
|
if (!cp) break;
|
||||||
|
if (!*cp) continue; /* place holder */
|
||||||
|
if (!min_line) min_line = i;
|
||||||
|
max_line = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* menu advancement */
|
||||||
|
if (menu_inc > 0) {
|
||||||
|
if (menu_line > max_line) menu_line = max_line;
|
||||||
|
for( ; menu_line < max_line; ++menu_line) {
|
||||||
|
const char *cp = menuptr[menu_line].str;
|
||||||
|
if (*cp) break;
|
||||||
|
}
|
||||||
|
menu_inc = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (menu_inc < 0) {
|
||||||
|
if (menu_line < min_line) menu_line = min_line;
|
||||||
|
for( ; menu_line > min_line; --menu_line) {
|
||||||
|
const char *cp = menuptr[menu_line].str;
|
||||||
|
if (*cp) break;
|
||||||
|
}
|
||||||
|
menu_inc = 0;
|
||||||
|
}
|
||||||
|
|
||||||
while(line < 24) {
|
while(line < 24) {
|
||||||
str = menuptr[line].str;
|
str = menuptr[line].str;
|
||||||
type = menuptr[line].cfgtype;
|
type = menuptr[line].cfgtype;
|
||||||
|
@ -3203,27 +3249,11 @@ void config_control_panel() {
|
||||||
print_eject_help = 1;
|
print_eject_help = 1;
|
||||||
}
|
}
|
||||||
cfg_parse_menu(menuptr, line, menu_line, 0);
|
cfg_parse_menu(menuptr, line, menu_line, 0);
|
||||||
if(line == menu_line) {
|
|
||||||
if(type != 0) {
|
|
||||||
match_found = 1;
|
|
||||||
} else if(menu_inc) {
|
|
||||||
menu_line++;
|
|
||||||
} else {
|
|
||||||
menu_line--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(line > max_line) {
|
|
||||||
max_line = line;
|
|
||||||
}
|
|
||||||
cfg_printf("%s\n", g_cfg_opt_buf);
|
cfg_printf("%s\n", g_cfg_opt_buf);
|
||||||
line++;
|
line++;
|
||||||
}
|
}
|
||||||
if((menu_line < 1) && !match_found) {
|
|
||||||
menu_line = 1;
|
|
||||||
}
|
|
||||||
if((menu_line >= max_line) && !match_found) {
|
|
||||||
menu_line = max_line;
|
|
||||||
}
|
|
||||||
if(g_rom_version < 0) {
|
if(g_rom_version < 0) {
|
||||||
cfg_htab_vtab(0, 21);
|
cfg_htab_vtab(0, 21);
|
||||||
cfg_printf("\bYOU MUST SELECT A VALID ROM FILE\b\n");
|
cfg_printf("\bYOU MUST SELECT A VALID ROM FILE\b\n");
|
||||||
|
@ -3264,36 +3294,19 @@ void config_control_panel() {
|
||||||
g_cfg_triggeriwreset = 1;
|
g_cfg_triggeriwreset = 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
key = -1;
|
key = config_read_key();
|
||||||
while(g_config_control_panel & !(halt_sim&HALT_WANTTOQUIT)) {
|
if (key < 0) break;
|
||||||
video_update();
|
|
||||||
key = adb_read_c000();
|
|
||||||
if(key & 0x80) {
|
|
||||||
key = key & 0x7f;
|
|
||||||
(void)adb_access_c010();
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
key = -1;
|
|
||||||
}
|
|
||||||
micro_sleep(1.0/60.0);
|
|
||||||
g_cfg_vbl_count++;
|
|
||||||
if(!match_found) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if((key >= 0) && (g_cfg_slotdrive < 0)) {
|
if((key >= 0) && (g_cfg_slotdrive < 0)) {
|
||||||
// Normal menu system
|
// Normal menu system
|
||||||
switch(key) {
|
switch(key) {
|
||||||
case 0x0a: /* down arrow */
|
case 0x0a: /* down arrow */
|
||||||
menu_line++;
|
if (menu_line < max_line) menu_line++;
|
||||||
menu_inc = 1;
|
menu_inc = 1;
|
||||||
break;
|
break;
|
||||||
case 0x0b: /* up arrow */
|
case 0x0b: /* up arrow */
|
||||||
menu_line--;
|
if (menu_line > 1) --menu_line;
|
||||||
menu_inc = 0;
|
menu_inc = -1;
|
||||||
if(menu_line < 1) {
|
|
||||||
menu_line = 1;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 0x33: /* pg dn */
|
case 0x33: /* pg dn */
|
||||||
menu_line += CFG_PG_SCROLL_AMT;
|
menu_line += CFG_PG_SCROLL_AMT;
|
||||||
|
@ -3301,10 +3314,7 @@ void config_control_panel() {
|
||||||
break;
|
break;
|
||||||
case 0x39: /* pg up */
|
case 0x39: /* pg up */
|
||||||
menu_line -= CFG_PG_SCROLL_AMT;
|
menu_line -= CFG_PG_SCROLL_AMT;
|
||||||
menu_inc = 0;
|
menu_inc = -1;
|
||||||
if(menu_line < 1) {
|
|
||||||
menu_line = 1;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 0x15: /* right arrow */
|
case 0x15: /* right arrow */
|
||||||
cfg_parse_menu(menuptr, menu_line,menu_line,1);
|
cfg_parse_menu(menuptr, menu_line,menu_line,1);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user