From 29cbf09403a779e91187ac71a9333d0d317469b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Mon, 4 Jan 2016 18:20:40 +0100 Subject: [PATCH] More stub code --- Makefile | 2 +- include/luares.h | 5 ++++ include/lupi.h | 9 +++++++ scripts/txt2c | 52 ++++++++++++++++++++++-------------- src/c/main.c | 2 +- src/c/modules.c | 22 +++++++++++++++ src/c/run.c | 2 ++ src/lua/core/boot.lua | 9 +++++++ src/lua/core/component.lua | 9 +++++++ src/lua/core/computer.lua | 1 + src/lua/core/init.lua | 25 ++++++++++++++++- src/lua/core/sandbox.lua | 1 + src/lua/core/util/random.lua | 11 ++++++++ 13 files changed, 127 insertions(+), 23 deletions(-) create mode 100644 src/c/modules.c create mode 100644 src/lua/core/boot.lua create mode 100644 src/lua/core/component.lua create mode 100644 src/lua/core/computer.lua create mode 100644 src/lua/core/sandbox.lua create mode 100644 src/lua/core/util/random.lua diff --git a/Makefile b/Makefile index 16a8ca2..749bb19 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ OBJECTS := $(patsubst $(SOURCE)%.c, $(BUILD)%.c.o, $(CFILES)) #Rules #Prepare $(BUILDDIRECTORIES): - mkdir $@ + mkdir -p $@ #Clean diff --git a/include/luares.h b/include/luares.h index 70b1250..76f9769 100644 --- a/include/luares.h +++ b/include/luares.h @@ -1,4 +1,9 @@ #ifndef LUARES_H #define LUARES_H +extern char lua_boot[]; +extern char lua_component[]; +extern char lua_computer[]; extern char lua_init[]; +extern char lua_sandbox[]; +extern char lua_util_random[]; #endif diff --git a/include/lupi.h b/include/lupi.h index e69de29..62f43d2 100644 --- a/include/lupi.h +++ b/include/lupi.h @@ -0,0 +1,9 @@ +#include +#include +#include +#ifndef LUPI_H +#define LUPI_H + +void run_init(); +void setup_modules(lua_State *L); +#endif diff --git a/scripts/txt2c b/scripts/txt2c index aa3fd31..25b416d 100755 --- a/scripts/txt2c +++ b/scripts/txt2c @@ -4,12 +4,38 @@ # $3 file to generate OUTPUTH H # $4 prefix -LUAFILES="$1/*" +generate() { + LUAFILES="$1/*" + OUTPUTH="$2" + OUTPUTC="$3" + PREFIX="$4" + + outname="$(basename "$OUTPUTH")" + outname="${outname%.*}" + guard=$(echo "$outname" | tr '[:lower:]' '[:upper:]') + guard="$guard""_H" + + + + for file in $LUAFILES + do + filename="$(basename "$file")" + if [ -d "$file" ] + then + generate $file $2 $3 ${PREFIX}${filename}_ + else + filename="${filename%.*}" + echo "extern char $PREFIX$filename[];" >> "$OUTPUTH" + + + echo "char $PREFIX$filename[] = {" >> "$OUTPUTC" + echo " " $(xxd -i < "$file") ",0x00" >> "$OUTPUTC" + echo "};" >> "$OUTPUTC" + fi + done +} + OUTPUTH="$2" -OUTPUTC="$3" -PREFIX="$4" - - outname="$(basename "$OUTPUTH")" outname="${outname%.*}" @@ -19,22 +45,8 @@ guard="$guard""_H" printf "#ifndef %s\n" "$guard" >> "$OUTPUTH" printf "#define %s\n" "$guard" >> "$OUTPUTH" -for file in $LUAFILES -do - -filename="$(basename "$file")" -filename="${filename%.*}" - -echo "extern char $PREFIX$filename[];" >> "$OUTPUTH" - - -echo "char $PREFIX$filename[] = {" >> "$OUTPUTC" -echo " " $(xxd -i < "$file") ",0x00" >> "$OUTPUTC" -echo "};" >> "$OUTPUTC" - -done +generate "$1" "$2" "$3" "$4" echo "#endif" >> "$OUTPUTH" - exit 0 diff --git a/src/c/main.c b/src/c/main.c index ccaec34..087c836 100644 --- a/src/c/main.c +++ b/src/c/main.c @@ -2,7 +2,7 @@ #include "lupi.h" int main (void) { - puts("LuPI 2\n"); + puts("LuPI L0 INIT"); run_init(); return 0; } diff --git a/src/c/modules.c b/src/c/modules.c new file mode 100644 index 0000000..bb3df71 --- /dev/null +++ b/src/c/modules.c @@ -0,0 +1,22 @@ +#include "luares.h" +#include "lupi.h" +#include +#include +#include +#include + +//TODO: move to utils +#define pushtuple(state, name, value) lua_pushstring((state), (name)); lua_pushstring((state), (value)); lua_settable((state), -3) + + +void setup_modules(lua_State *L) { + lua_createtable (L, 0, 1); + + pushtuple(L, "boot", lua_boot); + pushtuple(L, "component", lua_component); + pushtuple(L, "computer", lua_computer); + pushtuple(L, "sandbox", lua_sandbox); + pushtuple(L, "random", lua_util_random); + + lua_setglobal(L, "moduleCode"); +} \ No newline at end of file diff --git a/src/c/run.c b/src/c/run.c index 5a2e64e..029010d 100644 --- a/src/c/run.c +++ b/src/c/run.c @@ -3,11 +3,13 @@ #include #include #include +#include void run_init() { lua_State *L; L = luaL_newstate(); luaL_openlibs(L); + setup_modules(L); int status = luaL_loadstring(L, lua_init); if (status) { fprintf(stderr, "Couldn't load init: %s\n", lua_tostring(L, -1)); diff --git a/src/lua/core/boot.lua b/src/lua/core/boot.lua new file mode 100644 index 0000000..4c4bb3b --- /dev/null +++ b/src/lua/core/boot.lua @@ -0,0 +1,9 @@ +local boot = {} + +function boot.boot() + print("LuPI L2 INIT") + print("FIXME: boot stub") + error("Unable to boot") +end + +return boot diff --git a/src/lua/core/component.lua b/src/lua/core/component.lua new file mode 100644 index 0000000..764348b --- /dev/null +++ b/src/lua/core/component.lua @@ -0,0 +1,9 @@ +local component = {} +local api = {} +component.api = api + +function component.prepare() + print("Assembling initial component tree") +end + +return component diff --git a/src/lua/core/computer.lua b/src/lua/core/computer.lua new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/lua/core/computer.lua @@ -0,0 +1 @@ + diff --git a/src/lua/core/init.lua b/src/lua/core/init.lua index 11b15b1..cdfe173 100644 --- a/src/lua/core/init.lua +++ b/src/lua/core/init.lua @@ -1 +1,24 @@ -print("hello") +print("LuPI L1 INIT") +modules = {} + +local function loadModule(name) + print("LuPI L1 INIT > Load module > " .. name) + --TODO: PRERELEASE: Module sandboxing, preferably secure-ish + --TODO: ASAP: Handle load errors + if not moduleCode[name] then + error("No code for module " .. tostring(name)) + end + modules[name] = load(moduleCode[name])() +end + +--Load modules +loadModule("random") +loadModule("component") +loadModule("computer") +loadModule("sandbox") +loadModule("boot") + +--Setup core modules +modules.component.prepare() + +modules.boot.boot() diff --git a/src/lua/core/sandbox.lua b/src/lua/core/sandbox.lua new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/lua/core/sandbox.lua @@ -0,0 +1 @@ + diff --git a/src/lua/core/util/random.lua b/src/lua/core/util/random.lua new file mode 100644 index 0000000..98947cd --- /dev/null +++ b/src/lua/core/util/random.lua @@ -0,0 +1,11 @@ +local random = {} + +function random.uuid() + local template ='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' + return string.gsub(template, '[xy]', function (c) + local v = (c == 'x') and random(0, 0xf) or random(8, 0xb) + return string.format('%x', v) + end) +end + +return random \ No newline at end of file