Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal

Je06

Members
  • Content Count

    7
  • Joined

  • Last visited

Posts posted by Je06

  1. 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

     

  2. 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)

     

  3. 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

    pastebin get 3bt1LuFW pse.lua

  4. 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.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.