Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- (c) ProgramCrafter
- -- Program that shows different banners.
- local s = require('serialization')
- local cmp = require('computer')
- local c = require('component')
- local e = require('event')
- local time_change = 60
- local banners = {...}
- local loaded_banners = {}
- if tonumber(banners[1]) then
- time_change = tonumber(banners[1])
- table.remove(banners, 1)
- elseif not banners[1] then
- banners[1] = '/tmp/last_banner.dat'
- end
- local banners_count = #banners
- local cur_banner = 1
- local banner_path = banners[cur_banner]
- if banners_count == 1 then time_change = math.huge end
- local colors = {
- 0x0000FF, 0x00FFFF, 0x00FF00, 0xFFFF00, 0xFF0000, 0xFF00FF,
- 0x000000, 0x333333, 0x666666, 0x999999, 0xAAAAAA, 0xFFFFFF
- }
- local gpu = c.gpu
- local w,h = gpu.getResolution()
- local function changeColors(fcol, bcol)
- return gpu.setForeground(fcol), gpu.setBackground(bcol)
- end
- local function drawText(x, y, fcol, bcol, txt)
- fcol, bcol = changeColors(fcol, bcol)
- gpu.set(x, y, txt)
- changeColors(fcol, bcol)
- end
- local function clearScreen()
- gpu.fill(1, 1, w, h, ' ')
- end
- local messages = {}
- local function drawMessage(msg)
- drawText(msg.x, msg.y, colors[msg.fcol or 1], colors[msg.bcol or 1], msg.text)
- end
- local function drawMessages()
- for _,v in pairs(messages) do drawMessage(v) end
- end
- local function loadMessages()
- if loaded_banners[banner_path] then
- messages = loaded_banners[banner_path]
- else
- local f = io.open(banner_path, 'r')
- if not f then return end
- messages = s.unserialize(f:read())
- f:close()
- end
- if messages.back.w then w = messages.back.w end
- if messages.back.h then h = messages.back.h end
- gpu.setResolution(w, h)
- gpu.setBackground(colors[messages.back.backcolor or 1])
- loaded_banners[banner_path] = messages
- end
- loadMessages()
- clearScreen()
- drawMessages()
- while true do
- local e = {e.pull(time_change, 'interrupted')}
- if e[1] == 'interrupted' then break end
- cur_banner = cur_banner + 1
- while cur_banner > banners_count do
- cur_banner = cur_banner - banners_count
- end
- banner_path = banners[cur_banner]
- loadMessages()
- clearScreen()
- drawMessages()
- end
- gpu.setForeground(0xFFFFFF)
- gpu.setBackground(0)
- gpu.setResolution(40, 16)
- clearScreen()
Add Comment
Please, Sign In to add comment