lthr = require "love.thread"
imgd = limg.newImageData(8,4)
-netchan = lthr.getChannel ( "netc" )
+drawchan = lthr.getChannel ( "drawc" )
framechan = lthr.getChannel ( "framec" )
-- emulate enough framebuffer functionality, backed by a Lua array <<<
-- >>>
while true do
- local line = netchan:demand(snooze)
+ local line = drawchan:demand(snooze)
if line then
local from, cmd = line:match("^(%S+)%s+(.*)$")
function love.threaderror(thread, errorstr)
print("Thread error!", thread, errorstr)
- love.event.push('quit')
+ love.event.quit(1)
end
function love.load()
love.window.setTitle("lampulator")
love.window.setMode(32, 16, { display = 1, x = 0, y = 0 })
- framechan = love.thread.getChannel ( "framec" );
- netchan = love.thread.getChannel ( "netc" );
+ drawchan = love.thread.getChannel ("drawc" ) -- main -> draw
+ framechan = love.thread.getChannel ("framec") -- draw -> main
+ netchan = love.thread.getChannel ("netc" ) -- net -> main
- netthread = love.thread.newThread ( "net.lua" );
+ netthread = love.thread.newThread ("net.lua")
netthread:start()
- drawthread = love.thread.newThread ( "draw.lua" );
+ drawthread = love.thread.newThread ("draw.lua")
drawthread:start()
end
--- Override the event loop
-function love.run()
- if love.load then love.load(love.arg.parseGameArguments(arg), arg) end
- if love.timer then love.timer.step() end
-
- return function()
- local dt = 0
-
- if love.event then
- local name, a,b,c,d,e,f
- love.event.pump()
- for name, a,b,c,d,e,f in love.event.poll() do
- if name == "quit" then
- if not love.quit or not love.quit() then
- return a or 0
- end
- end
- love.handlers[name](a,b,c,d,e,f)
- end
- end
+love.timer = nil -- don't tick, we do that ourselves in update
+
+local lastnetline
+
+function love.mousepressed(x, y, btn, ist, presses)
+ if btn == 1 and lastnetline then
+ love.system.setClipboardText(lastnetline)
+ end
+end
- -- XXX We have to poll the threads periodically to catch errors
- local imgd = framechan:demand(1)
- if imgd then
+function love.update()
+ -- Poor man's fanout
+ local line = netchan:pop()
+ if line then
+ lastnetline = line
+ drawchan:push(line)
+ end
+
+ -- We have to let the event loop run every so often, even if there
+ -- aren't frames coming our way.
+ local imgd = framechan:demand(1)
+ if imgd then
+ love.draw = function()
local img = love.graphics.newImage(imgd)
img:setFilter('nearest')
love.graphics.clear(love.graphics.getBackgroundColor())
love.graphics.draw(img, 0, 0, 0, 4, 4)
end
- love.graphics.present()
-
- if love.timer then dt = love.timer.step() end
-
end
end