OpenComputerScripts/libs/libgpu.lua
2018-11-24 21:33:02 +08:00

104 lines
2.1 KiB
Lua

-- LibGPU - A library help operating GPU.
-- Author: Github/Kiritow
local component=require("component")
-- y is line, x is col
local function GPUClear(t)
local w,h=t.gpu.getResolution()
t.gpu.fill(1,1,w,h," ")
end
local function GPUFill(t,x,y,w,h,char_str)
if(string.len(char_str)>1) then
char_str=string.sub(char_str,1,1)
end
t.gpu.fill(x,y,w,h,char_str)
end
local function GPUSet(t,line,col,str)
t.gpu.set(col,line,str)
end
local function GPUGet(t,line,col)
return t.gpu.get(col,line)
end
local function GPUSetColorFG(t,rgb)
t.gpu.setForeground(rgb)
end
local function GPUSetColorBG(t,rgb)
t.gpu.setBackground(rgb)
end
local function GPUGetColorFG(t)
return t.gpu.getForeground()
end
local function GPUGetColorBG(t)
return t.gpu.getBackground()
end
-- Store current fg, then set fg to rgb
local function GPUPushFG(t,rgb)
t.fgstk[t.fgstk.n+1]=t:getfg()
t.fgstk.n=t.fgstk.n+1
t:setfg(rgb)
end
local function GPUPopFG(t)
t:setfg(t.fgstk[t.fgstk.n])
t.fgstk[t.fgstk.n]=nil
t.fgstk.n=t.fgstk.n-1
end
local function GPUPushBG(t,rgb)
t.bgstk[t.bgstk.n+1]=t:getbg()
t.bgstk.n=t.bgstk.n+1
t:setbg(rgb)
end
local function GPUPopBG(t)
t:setbg(t.bgstk[t.bgstk.n])
t.bgstk[t.bgstk.n]=nil
t.bgstk.n=t.bgstk.n-1
end
local function GPUPushAll(t,fg_rgb,bg_rgb)
GPUPushFG(t,fg_rgb)
GPUPushBG(t,bg_rgb)
end
local function GPUPopAll(t)
GPUPopBG(t)
GPUPopFG(t)
end
-- API
function GetGPU(addr)
if(component.list("gpu")==nil) then
error("No GPU Found.")
else
local t={}
t.gpu=component.proxy(component.list("gpu")())
t.clear=GPUClear
t.set=GPUSet
t.get=GPUGet
t.fill=GPUFill
t.setfg=GPUSetColorFG
t.getfg=GPUGetColorFG
t.setbg=GPUSetColorBG
t.getbg=GPUGetColorBG
t.fgstk={n=0}
t.bgstk={n=0}
t.pushfg=GPUPushFG
t.popfg=GPUPopFG
t.pushbg=GPUPushBG
t.popbg=GPUPopBG
t.pushall=GPUPushAll
t.popall=GPUPopAll
return t
end
end