#include #include #define ldmilib_c /* Define the library */ /* Include the Lua API header files */ #include "lua.h" #include "lauxlib.h" #include "lualib.h" #include "dmi/dmi.h" static int dmi_gettable(lua_State *L) { s_dmi dmi; lua_newtable(L); if ( ! dmi_iterate(&dmi) ) { printf("No DMI Structure found\n"); return -1; } parse_dmitable(&dmi); /* bios */ lua_pushstring(L, "bios.vendor"); lua_pushstring(L, dmi.bios.vendor); lua_settable(L,-3); lua_pushstring(L, "bios.version"); lua_pushstring(L, dmi.bios.version); lua_settable(L,-3); lua_pushstring(L, "bios.release_date"); lua_pushstring(L, dmi.bios.release_date); lua_settable(L,-3); lua_pushstring(L, "bios.bios_revision"); lua_pushstring(L, dmi.bios.bios_revision); lua_settable(L,-3); lua_pushstring(L, "bios.firmware_revision"); lua_pushstring(L, dmi.bios.firmware_revision); lua_settable(L,-3); lua_pushstring(L, "bios.address"); lua_pushnumber(L, dmi.bios.address); lua_settable(L,-3); lua_pushstring(L, "bios.runtime_size"); lua_pushnumber(L, dmi.bios.runtime_size); lua_settable(L,-3); lua_pushstring(L, "bios.runtime_size_unit"); lua_pushstring(L, dmi.bios.runtime_size_unit); lua_settable(L,-3); lua_pushstring(L, "bios.rom_size"); lua_pushnumber(L, dmi.bios.rom_size); lua_settable(L,-3); lua_pushstring(L, "bios.rom_size_unit"); lua_pushstring(L, dmi.bios.rom_size_unit); lua_settable(L,-3); /* system */ lua_pushstring(L, "system.manufacturer"); lua_pushstring(L, dmi.system.manufacturer); lua_settable(L,-3); lua_pushstring(L, "system.product_name"); lua_pushstring(L, dmi.system.product_name); lua_settable(L,-3); lua_pushstring(L, "system.version"); lua_pushstring(L, dmi.system.version); lua_settable(L,-3); lua_pushstring(L, "system.serial"); lua_pushstring(L, dmi.system.serial); lua_settable(L,-3); lua_pushstring(L, "system.uuid"); lua_pushstring(L, dmi.system.uuid); lua_settable(L,-3); lua_pushstring(L, "system.wakeup_type"); lua_pushstring(L, dmi.system.wakeup_type); lua_settable(L,-3); lua_pushstring(L, "system.sku_number"); lua_pushstring(L, dmi.system.sku_number); lua_settable(L,-3); lua_pushstring(L, "system.family"); lua_pushstring(L, dmi.system.family); lua_settable(L,-3); /* base_board */ lua_pushstring(L, "base_board.manufacturer"); lua_pushstring(L, dmi.base_board.manufacturer); lua_settable(L,-3); lua_pushstring(L, "base_board.product_name"); lua_pushstring(L, dmi.base_board.product_name); lua_settable(L,-3); lua_pushstring(L, "base_board.version"); lua_pushstring(L, dmi.base_board.version); lua_settable(L,-3); lua_pushstring(L, "base_board.serial"); lua_pushstring(L, dmi.base_board.serial); lua_settable(L,-3); lua_pushstring(L, "base_board.asset_tag"); lua_pushstring(L, dmi.base_board.asset_tag); lua_settable(L,-3); lua_pushstring(L, "base_board.location"); lua_pushstring(L, dmi.base_board.location); lua_settable(L,-3); lua_pushstring(L, "base_board.type"); lua_pushstring(L, dmi.base_board.type); lua_settable(L,-3); /* chassis */ lua_pushstring(L, "chassis.manufacturer"); lua_pushstring(L, dmi.chassis.manufacturer); lua_settable(L,-3); lua_pushstring(L, "chassis.type"); lua_pushstring(L, dmi.chassis.type); lua_settable(L,-3); lua_pushstring(L, "chassis.lock"); lua_pushstring(L, dmi.chassis.lock); lua_settable(L,-3); lua_pushstring(L, "chassis.version"); lua_pushstring(L, dmi.chassis.version); lua_settable(L,-3); lua_pushstring(L, "chassis.serial"); lua_pushstring(L, dmi.chassis.serial); lua_settable(L,-3); lua_pushstring(L, "chassis.asset_tag"); lua_pushstring(L, dmi.chassis.asset_tag); lua_settable(L,-3); lua_pushstring(L, "chassis.boot_up_state"); lua_pushstring(L, dmi.chassis.boot_up_state); lua_settable(L,-3); lua_pushstring(L, "chassis.power_supply_state"); lua_pushstring(L, dmi.chassis.power_supply_state); lua_settable(L,-3); lua_pushstring(L, "chassis.thermal_state"); lua_pushstring(L, dmi.chassis.thermal_state); lua_settable(L,-3); lua_pushstring(L, "chassis.security_status"); lua_pushstring(L, dmi.chassis.security_status); lua_settable(L,-3); lua_pushstring(L, "chassis.oem_information"); lua_pushstring(L, dmi.chassis.oem_information); lua_settable(L,-3); lua_pushstring(L, "chassis.height"); lua_pushnumber(L, dmi.chassis.height); lua_settable(L,-3); lua_pushstring(L, "chassis.nb_power_cords"); lua_pushnumber(L, dmi.chassis.nb_power_cords); lua_settable(L,-3); /* processor */ lua_pushstring(L, "processor.socket_designation"); lua_pushstring(L, dmi.processor.socket_designation); lua_settable(L,-3); lua_pushstring(L, "processor.type"); lua_pushstring(L, dmi.processor.type); lua_settable(L,-3); lua_pushstring(L, "processor.family"); lua_pushstring(L, dmi.processor.family); lua_settable(L,-3); lua_pushstring(L, "processor.manufacturer"); lua_pushstring(L, dmi.processor.manufacturer); lua_settable(L,-3); lua_pushstring(L, "processor.version"); lua_pushstring(L, dmi.processor.version); lua_settable(L,-3); lua_pushstring(L, "processor.external_clock"); lua_pushnumber(L, dmi.processor.external_clock); lua_settable(L,-3); lua_pushstring(L, "processor.max_speed"); lua_pushnumber(L, dmi.processor.max_speed); lua_settable(L,-3); lua_pushstring(L, "processor.current_speed"); lua_pushnumber(L, dmi.processor.current_speed); lua_settable(L,-3); lua_pushstring(L, "processor.signature.type"); lua_pushnumber(L, dmi.processor.signature.type); lua_settable(L,-3); lua_pushstring(L, "processor.signature.family"); lua_pushnumber(L, dmi.processor.signature.family); lua_settable(L,-3); lua_pushstring(L, "processor.signature.model"); lua_pushnumber(L, dmi.processor.signature.model); lua_settable(L,-3); lua_pushstring(L, "processor.signature.stepping"); lua_pushnumber(L, dmi.processor.signature.stepping); lua_settable(L,-3); lua_pushstring(L, "processor.signature.minor_stepping"); lua_pushnumber(L, dmi.processor.signature.minor_stepping); lua_settable(L,-3); lua_pushstring(L, "processor.voltage_mv"); lua_pushnumber(L, dmi.processor.voltage_mv); lua_settable(L,-3); lua_pushstring(L, "processor.status"); lua_pushstring(L, dmi.processor.status); lua_settable(L,-3); lua_pushstring(L, "processor.upgrade"); lua_pushstring(L, dmi.processor.upgrade); lua_settable(L,-3); lua_pushstring(L, "processor.cache1"); lua_pushstring(L, dmi.processor.cache1); lua_settable(L,-3); lua_pushstring(L, "processor.cache2"); lua_pushstring(L, dmi.processor.cache2); lua_settable(L,-3); lua_pushstring(L, "processor.cache3"); lua_pushstring(L, dmi.processor.cache3); lua_settable(L,-3); lua_pushstring(L, "processor.serial"); lua_pushstring(L, dmi.processor.serial); lua_settable(L,-3); lua_pushstring(L, "processor.part_number"); lua_pushstring(L, dmi.processor.part_number); lua_settable(L,-3); lua_pushstring(L, "processor.id"); lua_pushstring(L, dmi.processor.id); lua_settable(L,-3); /* set global variable: lua_setglobal(L, "dmitable"); */ /* return number of return values on stack */ return 1; } static int dmi_supported(lua_State *L) { s_dmi dmi; if ( dmi_iterate(&dmi) ) { lua_pushboolean(L, 1); } else { lua_pushboolean(L, 0); } return 1; } static const luaL_Reg dmilib[] = { {"gettable", dmi_gettable}, {"supported", dmi_supported}, {NULL, NULL} }; LUALIB_API int luaopen_dmi (lua_State *L) { luaL_openlib(L, LUA_DMILIBNAME, dmilib, 0); return 1; }