Syslinux LUA User Guide
=======================
Marcel Ritter <Marcel.Ritter@rrze.uni-erlangen.de>

Invocation
----------

Running +lua.c32+ only results in an interactive shell.
......................................................
KERNEL lua.c32
......................................................

By using the +APPEND+ parameter you can specify a lua
script to be executed:
......................................................
KERNEL lua.c32
APPEND /testit.lua
......................................................

Modules
-------

Modules must be explicitly loaded into the namespace
before use, for example:
......................................................
syslinux = require ("syslinux")
......................................................

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

.syslinux.msleep(ms)

Sleep for +ms+ milliseconds

.run_command(command)

Execute syslinux command line +command+.

_Example_:
......................................................
	syslinux.run_command("memdisk initrd=/dos/BIOS/FSC-P7935-108.img raw")
......................................................

.run_default()

FIXME

.local_boot()

FIXME

.final_cleanup()

FIXME

.boot_linux(kernel, cmdline, [mem_limit], [videomode])

FIXME

.run_kernel_image(kernel, cmdline, ipappend_flags, type)

FIXME

.loadfile(filname)

Load file +filename+ (via TFTP)

.filesize(file)

Return size of +file+ (loaded by loadfile())

.filename(file)

Return name of +file+ (loaded by loadfile())

.in itramfs_init()

Return empty initramfs object

.initramfs_load_archive(initramfs, filename)

Load contents of +filename+ into +initramfs+. Initialize
+initramfs+ with initramfs_init() before use.

.initramfs_add_file(initramfs, file)

Adds +file+ to +initramfs+. +initramfs+ needs to be
initialized, +file+ has been loaded by loadfile().

_Example_:
......................................................
	-- get nice output
	printf = function(s,...)
	           return io.write(s:format(...))
	         end -- function
	
	kernel = syslinux.loadfile("/SuSE-11.1/x86_64/linux")
	
	printf("Filename/size: %s %d\n", syslinux.filename(kernel), syslinux.filesize(kernel))
	
	initrd = syslinux.loadfile("/SuSE-11.1/x86_64/initrd")
	
	printf("Filename/size: %s %d\n", syslinux.filename(initrd), syslinux.filesize(initrd))
	
	initrd = syslinux.initramfs_init()
	syslinux.initramfs_load_archive(initrd, "/SuSE-11.1/x86_64/initrd");
	
	syslinux.boot_it(kernel, initrd, "init=/bin/bash")
	
	syslinux.sleep(20)
	
......................................................



DMI
~~~

.dmi_supported()

Returns +true+ if DMI is supported on machine, +false+ otherwise.

.dmi_gettable()

Returns a list if key-value pairs. The key is one of the DMI property strings:
FIXME list

_Example_:
......................................................
	if (dmi.supported()) then
	
	  dmitable = dmi.gettable()
	
	  for k,v in pairs(dmitable) do
	    print(k, v)
	  end
	
	  print(dmitable["system.manufacturer"])
	  print(dmitable["system.product_name"])
	  print(dmitable["bios.bios_revision"])
	
	  if ( string.match(dmitable["system.product_name"], "ESPRIMO P7935") ) then
	    print("Matches")
	    syslinux.run_command("memdisk initrd=/dos/BIOS/FSC-P7935-108.img raw")
	  else
	    print("Does not match")
	    syslinux.run_command("memdisk initrd=/dos/BIOS/FSC-P7935-108.img raw")
	  end
	
	end

......................................................


PCI
~~~

.pci_getinfo()

Return list of value pairs (device_index, device) of all PCI devices.

.pci_getidlist(filename)

Load a tab separated list of PCI IDs and their description. 
Sample files can be found here: http://pciids.sourceforge.net/


_Example_:
......................................................
-- get nice output
printf = function(s,...)
           return io.write(s:format(...))
         end

-- get device info
pciinfo = pci.getinfo()

-- get plain text device description
pciids = pci.getidlist("/pci.ids")

-- list all pci busses
for dind,device in pairs(pciinfo) do

  -- search for device description
  search = string.format("%04x%04x", device['vendor'], device['product'])

  printf(" %04x:%04x:%04x:%04x = ", device['vendor'], device['product'],
			device['sub_vendor'], device['sub_product'])

  if ( pciids[search] ) then
         printf("%s\n", pciids[search])
  else
         printf("Unknown\n")
  end
end

-- print(pciids["8086"])
-- print(pciids["10543009"])
-- print(pciids["00700003"])
-- print(pciids["0070e817"])
-- print(pciids["1002437a1002437a"])
......................................................


VESA
~~~~

.getmodes()

Return list of available VESA modes.

_Example_:
......................................................
	-- get nice output
	printf = function(s,...)
	           return io.write(s:format(...))
	         end
	
	-- list available vesa modes
	-- only one supported right now, not of much use
	modes = vesa.getmodes()
	
	for mind,mode in pairs(modes) do
	   printf("%04x: %dx%dx%d\n", mode['mode'], mode['hres'], mode['vres'], mode['bpp'])
	end
......................................................


.setmode()

Set (only currently supported) VESA mode.

.load_background(filename)

Load +filename+ from TFTP, and use it as background image.

_Example_:
......................................................
	-- get nice output
	printf = function(s,...)
	           return io.write(s:format(...))
	         end
	
	-- lets go to graphics land
	vesa.setmode()
	
	printf("Hello World! - VESA mode")
	
	-- some text to display "typing style"
	textline=[[
	From syslinux GSOC 2009 home page:
	
	Finish the Lua engine
	
	We already have a Lua interpreter integrated with the Syslinux build. However, right now it is not very useful. We need to create a set of bindings to the Syslinux functionality, and have an array of documentation and examples so users can use them.
	
	This is not a documentation project, but the documentation deliverable will be particularly important for this one, since the intended target is system administrators, not developers.
	]]
	
	
	-- do display loop
	-- keep in mind: background change will not erase text!
	while ( true ) do
	
	vesa.load_background("/background1.jpg")
	
	syslinux.sleep(1)
	
	for i = 1, #textline do
	    local c = textline:sub(i,i)
	    printf("%s", c)
	    syslinux.msleep(200)
	end
	
	syslinux.sleep(10)

......................................................