[syslinux:master] lua: Add .syslinux.derivative() and .syslinux.version()

syslinux-bot for Gert Hulselmans gerth at zytor.com
Mon Jul 19 13:21:27 PDT 2010


Commit-ID:  cec521ffd06a8ff8550445ab4b92f235da46c948
Gitweb:     http://syslinux.zytor.com/commit/cec521ffd06a8ff8550445ab4b92f235da46c948
Author:     Gert Hulselmans <gerth at zytor.com>
AuthorDate: Wed, 7 Jul 2010 02:54:53 +0200
Committer:  Gert Hulselmans <gerth at zytor.com>
CommitDate: Wed, 7 Jul 2010 02:54:53 +0200

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 <gerth at zytor.com>


---
 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 deletions(-)

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)
+



More information about the Syslinux-commits mailing list