aboutsummaryrefslogtreecommitdiff
path: root/src/syslua/lx
diff options
context:
space:
mode:
Diffstat (limited to 'src/syslua/lx')
-rw-r--r--src/syslua/lx/gui.lua76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/syslua/lx/gui.lua b/src/syslua/lx/gui.lua
new file mode 100644
index 0000000..beb382e
--- /dev/null
+++ b/src/syslua/lx/gui.lua
@@ -0,0 +1,76 @@
+local sys = require 'lx.sys'
+local sysdef= require 'lx.sysdef'
+local ioctl = require 'lx.ioctl'
+local draw = require 'lx.draw'
+
+local mainloop = require 'lx.mainloop'
+
+local gui = {
+ -- Keyboard info
+ -- TODO
+ -- Mouse info
+ mouse_x = 0,
+ mouse_y = 0,
+ mouse_lbtn = false,
+ mouse_rbtn = false,
+ mouse_midbtn = false,
+}
+
+function gui.open()
+ if sys.stat('io:/display/vesa') and sys.stat('io:/input/pckbd') and sys.stat('io:/input/pcmouse') then
+ gui.open_io()
+ elseif sys.stat_open(sysdef.STD_FD_GIP) then
+ gui.open_gip()
+ else
+ error("Could not open GUI!")
+ end
+end
+
+function gui.open_io()
+ -- Open display
+ gui.vesa_fd = sys.open("io:/display/vesa", sysdef.FM_IOCTL | sysdef.FM_READ | sysdef.FM_WRITE | sysdef.FM_MMAP)
+ assert(gui.vesa_fd ~= 0)
+
+ gui.vesa_info = ioctl.fb_get_info(gui.vesa_fd)
+ gui.surface = draw.surface_from_fd(gui.vesa_fd, gui.vesa_info)
+
+ -- Open keyboard
+ gui.pckbd_fd = sys.open("io:/input/pckbd", sysdef.FM_READ)
+ assert(gui.pckbd_fd ~= 0)
+
+ gui.pckbd_mainloop_fd = mainloop.add_fd(gui.pckbd_fd, function() error('pckbd fd error') end)
+ local function pckbd_handler(ev)
+ local scancode, ty = string.unpack("HH", ev)
+ gui.on_keyboard(scancode, ty)
+
+ gui.pckbd_mainloop_fd:expect(4, pckbd_handler)
+ end
+ gui.pckbd_mainloop_fd:expect(4, pckbd_handler)
+
+ -- Open mouse
+ gui.pcmouse_fd = sys.open("io:/input/pcmouse", sysdef.FM_READ)
+ assert(gui.pcmouse_fd ~= 0)
+
+ gui.pcmouse_mainloop_fd = mainloop.add_fd(gui.pcmouse_fd, function() error("pcmouse fd error") end)
+ local function pcmouse_handler(ev)
+ local dx, dy, dw, lb, rb, mb = string.unpack("hhbBBB", ev)
+ gui.on_mouse(dx, dy, dw, lb, rb, mb)
+
+ gui.pcmouse_mainloop_fd:expect(8, pcmouse_handler)
+ end
+ gui.pcmouse_mainloop_fd:expect(8, pcmouse_handler)
+end
+
+function gui.open_gip()
+ -- TODO
+end
+
+function gui.on_keyboard(scancode, ty)
+ -- TODO
+end
+
+function gui.on_mouse(dx, dy, dw, lb, rb, mb)
+ -- TODO
+end
+
+return gui