diff options
Diffstat (limited to 'com32/cmenu/libmenu')
-rw-r--r-- | com32/cmenu/libmenu/cmenu.h (renamed from com32/cmenu/libmenu/menu.h) | 0 | ||||
-rw-r--r-- | com32/cmenu/libmenu/help.h | 2 | ||||
-rw-r--r-- | com32/cmenu/libmenu/menu.c | 2 | ||||
-rw-r--r-- | com32/cmenu/libmenu/syslnx.c | 77 |
4 files changed, 25 insertions, 56 deletions
diff --git a/com32/cmenu/libmenu/menu.h b/com32/cmenu/libmenu/cmenu.h index 141d2ef0..141d2ef0 100644 --- a/com32/cmenu/libmenu/menu.h +++ b/com32/cmenu/libmenu/cmenu.h diff --git a/com32/cmenu/libmenu/help.h b/com32/cmenu/libmenu/help.h index de01b46e..383cc3c5 100644 --- a/com32/cmenu/libmenu/help.h +++ b/com32/cmenu/libmenu/help.h @@ -13,7 +13,7 @@ #ifndef __HELP_H_ #define __HELP_H_ -#include "menu.h" +#include "cmenu.h" #include "com32io.h" #include "tui.h" #include <string.h> diff --git a/com32/cmenu/libmenu/menu.c b/com32/cmenu/libmenu/menu.c index 19a7e598..9b1e7ad0 100644 --- a/com32/cmenu/libmenu/menu.c +++ b/com32/cmenu/libmenu/menu.c @@ -10,7 +10,7 @@ * * ----------------------------------------------------------------------- */ -#include "menu.h" +#include "cmenu.h" #include "com32io.h" #include <stdlib.h> #include <console.h> diff --git a/com32/cmenu/libmenu/syslnx.c b/com32/cmenu/libmenu/syslnx.c index 53e2401b..5060c5db 100644 --- a/com32/cmenu/libmenu/syslnx.c +++ b/com32/cmenu/libmenu/syslnx.c @@ -12,84 +12,53 @@ #include <string.h> #include <com32.h> +#include <core.h> +#include <graphics.h> #include "syslnx.h" +#include <syslinux/config.h> com32sys_t inreg, outreg; // Global registers for this module -char issyslinux(void) -{ - REG_EAX(inreg) = 0x00003000; - REG_EBX(inreg) = REG_ECX(inreg) = REG_EDX(inreg) = 0xFFFFFFFF; - __intcall(0x21, &inreg, &outreg); - return (REG_EAX(outreg) == 0x59530000) && - (REG_EBX(outreg) == 0x4c530000) && - (REG_ECX(outreg) == 0x4e490000) && (REG_EDX(outreg) == 0x58550000); -} - void runsyslinuxcmd(const char *cmd) { - strcpy(__com32.cs_bounce, cmd); - REG_AX(inreg) = 0x0003; // Run command - REG_BX(inreg) = OFFS(__com32.cs_bounce); - REG_ES(inreg) = SEG(__com32.cs_bounce); - __intcall(0x22, &inreg, &outreg); + char *bounce; + + bounce = lmalloc(strlen(cmd) + 1); + if (!bounce) + return; + + strcpy(bounce, cmd); + load_kernel(bounce); } void gototxtmode(void) { - REG_AX(inreg) = 0x0005; - __intcall(0x22, &inreg, &outreg); + syslinux_force_text_mode(); } void syslinux_idle(void) { - REG_AX(inreg) = 0x0013; - __intcall(0x22, &inreg, &outreg); + __idle(); } unsigned int getversion(char *deriv, unsigned int *numfun) { - REG_AX(inreg) = 0x0001; - __intcall(0x22, &inreg, &outreg); if (deriv) - *deriv = REG_DL(outreg); + *deriv = __syslinux_version.filesystem; if (numfun) - *numfun = REG_AX(outreg); - return REG_CX(outreg); + *numfun = __syslinux_version.max_api; + return __syslinux_version.version; } -void runsyslinuximage(const char *cmd, long ipappend) +char issyslinux(void) { - unsigned int numfun = 0; - char *ptr, *cmdline; + return !!getversion(NULL, NULL); +} +void runsyslinuximage(const char *cmd, long ipappend) +{ (void)ipappend; // XXX: Unused?! - getversion(NULL, &numfun); - // Function 16h not supported Fall back to runcommand - if (numfun < 0x16) - runsyslinuxcmd(cmd); - // Try the Run Kernel Image function - // Split command line into - strcpy(__com32.cs_bounce, cmd); - ptr = __com32.cs_bounce; - // serach for first space or end of string - while ((*ptr) && (*ptr != ' ')) - ptr++; - if (!*ptr) - cmdline = ptr; // no command line - else { - *ptr++ = '\0'; // terminate kernal name - cmdline = ptr + 1; - while (*cmdline != ' ') - cmdline++; // find first non-space - } - // Now call the interrupt - REG_BX(inreg) = OFFS(cmdline); - REG_ES(inreg) = SEG(cmdline); - REG_SI(inreg) = OFFS(__com32.cs_bounce); - REG_DS(inreg) = SEG(__com32.cs_bounce); - REG_EDX(inreg) = 0; - - __intcall(0x22, &inreg, &outreg); // If successful does not return + getversion(NULL, NULL); + runsyslinuxcmd(cmd); } |