[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