local types = { {"e", "anything"}, {"v", "any variable"}, {"ve", "any set variable"}, {"s", "string"}, {"vs", "string variable"}, {"n", "number"}, {"vn", "number variable"}, {"ui", "unsigned integer number"}, {"b", "bool"}, {"vn", "bool variable"} } local instr = { {"mov", ", ", "Copies from into to."}, {"xchg", ", ", "Switches a with b."}, {"getvar", "[, ]", "Sets varname to the current variable called if it's set. If exists is passed, it's set to a bool indicating whether the variable was set."}, {"copytable", ", ", "Copies ${origin}.* to ${target}.*."}, {"add", ", ", "to += from"}, {"add", "[, [, […]]]", "to indicates whether at least one of the arguments is true"}, {"add", ", ", "to = to .. from"}, {"sub", ", ", "num -= tosub"}, {"sub", ", [, ]", "str = str:sub(start, end)"}, {"mul", ", ", "to *= from"}, {"mul", "[, [, […]]]", "to indicates whether all of the arguments are true"}, {"mul", ", ", "str = str:rep(from)"}, {"div", ", ", "num /= todiv"}, {"inc", "", "++num"}, {"dec", "", "--num"}, {"neg", "", "num = -num"}, {"neg", "", "var = not var"}, {"neg", "", "str = str:rev()"}, {"inv", "", "num = 1 / num"}, {"mod", ", ", "num = num mod dv"}, {"jmp", "[, ]", "If c is not false, the instruction pointer is set to p. To disallow infinite loops, the program is interrupted after changing the ip, the mod should then consider restarting it."}, {"call", "[, ]", "push the ip, then jmp p; used to execute subroutines"}, {"ret", "", "pop something, then jmp there; used to exit subroutines"}, {"push", "[, [, […]]]", "put values onto the stack; from left to right"}, {"pop", "[, [, […]]]", "takes values from the stack and sets the passed variables to them; from left to right"}, {"equal", ", ", "a = a == b"}, {"less", ", ", "a = a < b; after executing, a is a bool"}, {"less", ", ", "a = a < b; less also works for strings"}, {"greater", ", ", "executes less b,a"}, {"usleep", "", "aborts the program for at least floor(max(0, t)) ms"}, {"sleep", "", "executes usleep with t * 1000000 as argument"}, {"get_us_time", "", "stores minetest.get_us_time() into to; can be used to measure time differences"}, {"tostring", "", "var = tostring(var)"}, {"tonumber", "", "var = tonumber(var)"}, {"toboolean", "", "var = var and true or false"}, {"print", "[, [, […]]]", "adds variables to the log, seperated by \\t, \\n is added at the end"}, {"flush", "", "Output the log, this should vary for every mod."}, } --[[ local mbl = 0 local mal = 0 for i = 1,#instr do local bef = instr[i] mbl = math.max(#bef[1], mbl) mal = math.max(#bef[2], mal) end--]] local mtl = 2 local o = "Types:\n\n" for i = 1,#types do local t = types[i] o = o .. t[1] .. (" "):rep(mtl - #t[1] + 2) .. t[2] .. "\n" end o = o .. "\n\nInstructions:\n\n" for i = 1,#instr do i = instr[i] o = o .. i[1] .. " " .. i[2] .. "\n" .. " " .. i[3] .. "\n\n" -- TODO: max 80 letters each line end print(o)