main: Add autodetection prompt instead of doing it automatically

This commit is contained in:
mintsuki 2021-11-28 22:30:05 +01:00
parent 79970493d8
commit ec4b01865c
3 changed files with 22 additions and 5 deletions

View File

@ -24,6 +24,7 @@
#include <pxe/tftp.h> #include <pxe/tftp.h>
#include <drivers/disk.h> #include <drivers/disk.h>
#include <sys/lapic.h> #include <sys/lapic.h>
#include <lib/readline.h>
void stage3_common(void); void stage3_common(void);
@ -162,8 +163,11 @@ void stage3_common(void) {
print("Boot partition: %d\n", boot_volume->partition); print("Boot partition: %d\n", boot_volume->partition);
} }
bool disable_timeout = false;
menu_again:;
char *cmdline; char *cmdline;
char *config = menu(&cmdline); char *config = menu(&cmdline, disable_timeout);
char *proto = config_get_value(config, 0, "PROTOCOL"); char *proto = config_get_value(config, 0, "PROTOCOL");
if (proto == NULL) { if (proto == NULL) {
@ -199,6 +203,13 @@ autodetect:
print("WARNING: Incorrect protocol specified for kernel.\n"); print("WARNING: Incorrect protocol specified for kernel.\n");
} }
print(" Attempting autodetection.\n"); print(" Press A to attempt autodetection or any other key to return to menu.\n");
goto autodetect;
int c = getchar();
if (c == 'a' || c == 'A') {
goto autodetect;
} else {
disable_timeout = true;
goto menu_again;
}
} }

View File

@ -513,7 +513,7 @@ static size_t print_tree(const char *shift, size_t level, size_t base_index, siz
return max_entries; return max_entries;
} }
char *menu(char **cmdline) { char *menu(char **cmdline, bool disable_timeout) {
menu_branding = config_get_value(NULL, 0, "MENU_BRANDING"); menu_branding = config_get_value(NULL, 0, "MENU_BRANDING");
if (menu_branding == NULL) if (menu_branding == NULL)
menu_branding = "Limine " LIMINE_VERSION; menu_branding = "Limine " LIMINE_VERSION;
@ -544,6 +544,10 @@ char *menu(char **cmdline) {
timeout = strtoui(timeout_config, NULL, 10); timeout = strtoui(timeout_config, NULL, 10);
} }
if (disable_timeout) {
skip_timeout = true;
}
bool editor_enabled = true; bool editor_enabled = true;
char *editor_enabled_config = config_get_value(NULL, 0, "EDITOR_ENABLED"); char *editor_enabled_config = config_get_value(NULL, 0, "EDITOR_ENABLED");
if (!strcmp(editor_enabled_config, "no")) editor_enabled = false; if (!strcmp(editor_enabled_config, "no")) editor_enabled = false;

View File

@ -1,6 +1,8 @@
#ifndef __MENU_H__ #ifndef __MENU_H__
#define __MENU_H__ #define __MENU_H__
char *menu(char **cmdline_ret); #include <stdbool.h>
char *menu(char **cmdline_ret, bool disable_timeout);
#endif #endif