From cec521ffd06a8ff8550445ab4b92f235da46c948 Mon Sep 17 00:00:00 2001 From: Gert Hulselmans Date: Wed, 7 Jul 2010 02:54:53 +0200 Subject: [PATCH] lua: Add .syslinux.derivative() and .syslinux.version() Add .syslinux.derivative() and .syslinux.version(). Add an example script which shows how you can use .syslinux.derivative(). Signed-off-by: Gert Hulselmans --- com32/lua/doc/syslinux.asc | 9 ++++++++ com32/lua/src/syslinux.c | 40 +++++++++++++++++++++++++++++++++- com32/lua/test/syslinux-derivative.lua | 38 ++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 com32/lua/test/syslinux-derivative.lua diff --git a/com32/lua/doc/syslinux.asc b/com32/lua/doc/syslinux.asc index eb8ca7f..64dc18c 100644 --- a/com32/lua/doc/syslinux.asc +++ b/com32/lua/doc/syslinux.asc @@ -23,6 +23,15 @@ Modules SYSLINUX ~~~~~~~~ +.syslinux.version() + +Returns version string + +.syslinux.derivative() + +Returns running Syslinux's derivative (ISOLINUX, PXELINUX or SYSLINUX). +See com32/lua/test/syslinux-derivative.lua for an example. + .syslinux.sleep(s) Sleep for +s+ seconds diff --git a/com32/lua/src/syslinux.c b/com32/lua/src/syslinux.c index f7c05de..fa54d7f 100644 --- a/com32/lua/src/syslinux.c +++ b/com32/lua/src/syslinux.c @@ -38,6 +38,7 @@ #include "syslinux/boot.h" #include "syslinux/loadfile.h" #include "syslinux/linux.h" +#include "syslinux/config.h" int __parse_argv(char ***argv, const char *str); @@ -386,7 +387,7 @@ static int sl_initramfs_add_file(lua_State * L) if (initramfs_add_file(initramfs, file_data, file_len, file_len, "/testfile1", 0, 0755)) - return 0; + return 0; } static int sl_boot_it(lua_State * L) @@ -403,6 +404,41 @@ static int sl_boot_it(lua_State * L) return 0; } +static int sl_derivative(lua_State * L) +{ + const struct syslinux_version *sv; + + sv = syslinux_version(); + + switch (sv->filesystem) { + case SYSLINUX_FS_SYSLINUX: + lua_pushstring(L, "SYSLINUX"); + break; + case SYSLINUX_FS_PXELINUX: + lua_pushstring(L, "PXELINUX"); + break; + case SYSLINUX_FS_ISOLINUX: + lua_pushstring(L, "ISOLINUX"); + break; + case SYSLINUX_FS_UNKNOWN: + default: + lua_pushstring(L, "Unknown Syslinux derivative"); + break; + } + + return 1; +} + +static int sl_version(lua_State * L) +{ + const struct syslinux_version *sv; + + sv = syslinux_version(); + lua_pushstring(L, sv->version_string); + + return 1; +} + static const luaL_reg syslinuxlib[] = { {"run_command", sl_run_command}, {"run_default", sl_run_default}, @@ -419,6 +455,8 @@ static const luaL_reg syslinuxlib[] = { {"initramfs_load_archive", sl_initramfs_load_archive}, {"initramfs_add_file", sl_initramfs_add_file}, {"boot_it", sl_boot_it}, + {"derivative", sl_derivative}, + {"version", sl_version}, {NULL, NULL} }; diff --git a/com32/lua/test/syslinux-derivative.lua b/com32/lua/test/syslinux-derivative.lua new file mode 100644 index 0000000..fbdf5d5 --- /dev/null +++ b/com32/lua/test/syslinux-derivative.lua @@ -0,0 +1,38 @@ +-- get nice output +printf = function(s,...) + return io.write(s:format(...)) + end + +-- get syslinux derivative (ISOLINUX, PXELINUX, SYSLINUX) +derivative = syslinux.derivative() + +printf("Run specific command depending on the Syslinux derivate:\n") +printf("--------------------------------------------------------\n\n") +printf(" Detected Syslinux derivative: %s\n", derivative) + +if derivative == "SYSLINUX" then + -- swap internal (hd1) hard drive with USB stick (hd0) + commandline = 'chain.c32 hd1 swap' +elseif derivative == "ISOLINUX" then + -- boot first hard drive + commandline = 'chain.c32 hd0' +elseif derivative == "PXELINUX" then + -- boot first hard drive + commandline = 'chain.c32 hd0' +else + printf("Do nothing\n") + return 1 +end + +printf("\n commandline for derivative: %s\n\n", commandline) + + +-- Count down from 7 +for time = 7, 1, -1 do + printf(" Boot in %d second(s)... \r", time) + syslinux.sleep(1) +end + +-- Boot +syslinux.run_command(commandline) + -- 2.7.4