- Sky
- Blueberry
- Slate
- Blackcurrant
- Watermelon
- Strawberry
- Orange
- Banana
- Apple
- Emerald
- Chocolate
- Charcoal
Je06
-
Content Count
7 -
Joined
-
Last visited
Posts posted by Je06
-
-
Point3D
Point3d is a simple proof of concept program. It is design to render points in 3d space.
It does this in a similar way to how opengl or directx would render.
Point3d can be ran on pretty much any computer with openos, but it is recomended
that a tier 2 gpu is used. It does need at least one 1.5 tier memory stick.
Download
pastebin get AGLr9F7Q points3d
-
This is a duplicate post. I do not know how to delete post. The real post is https://oc.cil.li/index.php?/topic/1185-pse-protected-script-environment/
-
The PSE will run any code you give it and will run it in it's own sandbox environment. What this means is that code will run with absolutely no functions or variables except for what you give it.
This means, unless you say so, the PSE will run code without any of the lua standard functions. However, any code the PSE runs cannot affect anything other than the functions and variables you give it.
I named my function by putting an underscore in between words, however, I also provided functions named in camel case that do the same thing. For example: new_sandbox() and newSandbox() do the same thing.
Functions
new_sandbox()
Returns a sandbox that is ready to run your code in
debug_sandbox(sandbox)
Will print some debug data to the screen
add_code(sandbox, name, code)
Will add code the the sandbox using name as the index
add_argument(sandbox, argument)
Adds the argument to the sandbox as a command line argument
add_file(sandbox, name, path)
Will add whatever the file at path returns when it runs to the sandbox using name as the index
add_global(sandbox, name)
Adds any global functions or variables with the index of name to the sandbox using name as the index
run_string(sandbox, name, data)
-
The PSE will run any code you give it and will run it in it's own sandbox environment. What this means is that code will run with absolutely no functions or variables except for what you give it.
This means, unless you say so, the PSE will run code without any of the lua standard functions. However, any code the PSE runs cannot affect anything other than the functions and variables you give it.
I named my function by putting an underscore in between words, however, I also provided functions named in camel case that do the same thing. For example: new_sandbox() and newSandbox() do the same thing.
Functions
new_sandbox()
Returns a sandbox that is ready to run your code in
debug_sandbox(sandbox)
Will print some debug data to the screen
add_code(sandbox, name, code)
Will add code the the sandbox using name as the index
Returns the modified sandbox
add_argument(sandbox, argument)
Adds the argument to the sandbox as a command line argument
Returns the modified sandbox
add_file(sandbox, name, path)
Will add whatever the file at path returns when it runs to the sandbox using name as the index
Returns the modified sandbox
add_global(sandbox, name)
Adds any global functions or variables with the index of name to the sandbox using name as the index
Returns the modified sandbox
run_string(sandbox, name, data)
Will run data as name in the sandbox
Returns false,reason if the code failed to run
Returns what the code returns
run(sandbox, name, path)
Will run the file at path as name in the sandbox
Returns false,reason if the code failed to run
Returns what the code returns
Example
local sandbox = pse.new_sandbox() sandbox = pse.add_global(sandbox,"print") sandbox = pse.add_file(sandbox,"my_lib","/path_to_lib/my_lib.lua") pse.run_string(sandbox,"my_code","my_lib:add_2_to_2()")
Download
-
I found a way!!! computer.pullSignal() works enough for my os
-
I'm writing a custom OS for educational purposes and I'm having issues getting keyboard input.
Everything completely works in OpenOS so everything is hooked up correctly.
My init.lua code
do _G._OSVERSION = "0.1" _G._OSRELEASE = "ALPHA" _G._OSNAME = "C_OS" local rom = {} function rom.invoke(method, ...) return component.invoke(computer.getBootAddress(), method, ...) end function rom.open(file) return rom.invoke("open", file) end function rom.read(handle) return rom.invoke("read", handle, math.huge) end function rom.close(handle) return rom.invoke("close", handle) end function rom.isDirectory(path) return rom.invoke("isDirectory", path) end _G.rom = rom screen = component.list("screen", true)() for address in component.list("screen", true) do if #component.invoke(address, "getKeyboards") > 0 then screen = address end end local gpu = component.list("gpu", true)() local w, h if gpu and screen then component.invoke(gpu, "bind", screen) w,h = component.invoke(gpu, "maxResolution") component.invoke(gpu, "setResolution", w, h) component.invoke(gpu, "setBackground", 0x000000) component.invoke(gpu, "setForeground", 0xFFFFFF) component.invoke(gpu, "fill", 1, 1, w, h, " ") end function write(msg, x, y) if gpu and screen then component.invoke(gpu, "set", x, y, msg) end end local y = 1 function clearscreen() component.invoke(gpu, "fill", 1, 1, w, h, " ") y = 1 end function print(msg) if y == h then clearscreen() y = 1 end write(msg,1,y) y = y + 1 end function loadfile(file) local handle, reason = rom.open(file) if not handle then error(reason) end local buffer = "" repeat local data, reason = rom.read(handle) if not data and reason then error(reason) end buffer = buffer .. (data or "") until not data rom.close(handle) return load(buffer, "=" .. file) end end _G.loadfile = loadfile _G.print = print _G.write = write _G.clearscreen = clearscreen local a = loadfile("/lib/reg.lua") a().register("/lib/reg.lua") register("/test.lua") register("/lib/os.lua") keyboard = dofile("/lib/keyboard.lua") _G.keyboard = keyboard test() while true do clearscreen() print("Keys:") for a,b in pairs(keyboard.pressedCodes) do print(a, end sleep(1) end
Here is my keyboard code
local keyboard = {pressedChars = {}, pressedCodes = {}} keyboard.keys = { ["1"] = 0x02, ["2"] = 0x03, ["3"] = 0x04, ["4"] = 0x05, ["5"] = 0x06, ["6"] = 0x07, ["7"] = 0x08, ["8"] = 0x09, ["9"] = 0x0A, ["0"] = 0x0B, a = 0x1E, b = 0x30, c = 0x2E, d = 0x20, e = 0x12, f = 0x21, g = 0x22, h = 0x23, i = 0x17, j = 0x24, k = 0x25, l = 0x26, m = 0x32, n = 0x31, o = 0x18, p = 0x19, q = 0x10, r = 0x13, s = 0x1F, t = 0x14, u = 0x16, v = 0x2F, w = 0x11, x = 0x2D, y = 0x15, z = 0x2C, apostrophe = 0x28, at = 0x91, back = 0x0E, -- backspace backslash = 0x2B, colon = 0x92, comma = 0x33, enter = 0x1C, equals = 0x0D, grave = 0x29, -- accent grave lbracket = 0x1A, lcontrol = 0x1D, lmenu = 0x38, -- left Alt lshift = 0x2A, minus = 0x0C, numlock = 0x45, pause = 0xC5, period = 0x34, rbracket = 0x1B, rcontrol = 0x9D, rmenu = 0xB8, -- right Alt rshift = 0x36, scroll = 0x46, -- Scroll Lock semicolon = 0x27, slash = 0x35, -- / on main keyboard space = 0x39, stop = 0x95, tab = 0x0F, underline = 0x93, -- Keypad (and numpad with numlock off) up = 0xC8, down = 0xD0, left = 0xCB, right = 0xCD, home = 0xC7, ["end"] = 0xCF, pageUp = 0xC9, pageDown = 0xD1, insert = 0xD2, delete = 0xD3, -- Function keys f1 = 0x3B, f2 = 0x3C, f3 = 0x3D, f4 = 0x3E, f5 = 0x3F, f6 = 0x40, f7 = 0x41, f8 = 0x42, f9 = 0x43, f10 = 0x44, f11 = 0x57, f12 = 0x58, f13 = 0x64, f14 = 0x65, f15 = 0x66, f16 = 0x67, f17 = 0x68, f18 = 0x69, f19 = 0x71, -- Japanese keyboards kana = 0x70, kanji = 0x94, convert = 0x79, noconvert = 0x7B, yen = 0x7D, circumflex = 0x90, ax = 0x96, -- Numpad numpad0 = 0x52, numpad1 = 0x4F, numpad2 = 0x50, numpad3 = 0x51, numpad4 = 0x4B, numpad5 = 0x4C, numpad6 = 0x4D, numpad7 = 0x47, numpad8 = 0x48, numpad9 = 0x49, numpadmul = 0x37, numpaddiv = 0xB5, numpadsub = 0x4A, numpadadd = 0x4E, numpaddecimal = 0x53, numpadcomma = 0xB3, numpadenter = 0x9C, numpadequals = 0x8D, } -- Create inverse mapping for name lookup. do local keys = {} for k in pairs(keyboard.keys) do table.insert(keys, k) end for _, k in pairs(keys) do keyboard.keys[keyboard.keys[k]] = k end end ------------------------------------------------------------------------------- function keyboard.isAltDown() return (keyboard.pressedCodes[keyboard.keys.lmenu] or keyboard.pressedCodes[keyboard.keys.rmenu]) ~= nil end function keyboard.isControl(char) return type(char) == "number" and (char < 0x20 or (char >= 0x7F and char <= 0x9F)) end function keyboard.isControlDown() return (keyboard.pressedCodes[keyboard.keys.lcontrol] or keyboard.pressedCodes[keyboard.keys.rcontrol]) ~= nil end function keyboard.isKeyDown(charOrCode) checkArg(1, charOrCode, "string", "number") if type(charOrCode) == "string" then return keyboard.pressedChars[charOrCode] elseif type(charOrCode) == "number" then return keyboard.pressedCodes[charOrCode] end end function keyboard.isShiftDown() return (keyboard.pressedCodes[keyboard.keys.lshift] or keyboard.pressedCodes[keyboard.keys.rshift]) ~= nil end ------------------------------------------------------------------------------- return keyboard
I've copied the dofile function from OpenOS so it should work with my code.
KLang: C++-styled programming language using Lua.
in Libraries & API's
Posted
I'm excited to see the outcome. How are you doing the libraries?