summaryrefslogtreecommitdiff
path: root/com32/lua
diff options
context:
space:
mode:
authorGert Hulselmans <gerth@zytor.com>2010-07-07 02:54:53 +0200
committerGert Hulselmans <gerth@zytor.com>2010-07-07 02:54:53 +0200
commitcec521ffd06a8ff8550445ab4b92f235da46c948 (patch)
tree93bc19f03f229124b297c1a21f8e01496760da85 /com32/lua
parent444426a9e552874ddb6f2f841db5565c3de678cc (diff)
downloadsyslinux-cec521ffd06a8ff8550445ab4b92f235da46c948.tar.gz
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@zytor.com>
Diffstat (limited to 'com32/lua')
-rw-r--r--com32/lua/doc/syslinux.asc9
-rw-r--r--com32/lua/src/syslinux.c40
-rw-r--r--com32/lua/test/syslinux-derivative.lua38
3 files changed, 86 insertions, 1 deletions
diff --git a/com32/lua/doc/syslinux.asc b/com32/lua/doc/syslinux.asc
index eb8ca7f1..64dc18c5 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 f7c05deb..fa54d7f1 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 00000000..fbdf5d57
--- /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)
+