--TSLib --A product of Advanced Mesecons Devices, a Cheapie Systems company --This is free and unencumbered software released into the public domain. --See http://unlicense.org/ for more information --Since LuaCs can't dynamically link libraries, --you will have to "statically link" it by pasting this file --above the code that will use it. local tslib = { getColorEscapeSequence = function(color) return(string.char(0x1b).."(c@"..color..")") end, colorize = function(color,message) return(string.char(0x1b).."(c@"..color..")"..message..string.char(0x1b).."(c@#FFFFFF)") end, explode_textlist_event = function(event) local ret = {type = "INV"} if string.sub(event,1,3) == "CHG" then local index = tonumber(string.sub(event,5,-1)) if index then ret.type = "CHG" ret.index = index end elseif string.sub(event,1,3) == "DCL" then local index = tonumber(string.sub(event,5,-1)) if index then ret.type = "DCL" ret.index = index end end return ret end, _mt = { setChannel = function(self,channel) self._channel = channel end, getChannel = function(self) return(self._channel) end, draw = function(self) digiline_send(self._channel,self._commands) end, clear = function(self) self._commands = {{command="clear"}} end, setLock = function(self,lock) if lock then table.insert(self._commands,{command="lock"}) else table.insert(self._commands,{command="unlock"}) end end, addLabel = function(self,x,y,label,vertical) assert((type(x))=="number","Invalid X position") assert((type(y))=="number","Invalid Y position") if type(label) ~= "string" then label = tostring(label) end local cmd = { command = "addlabel", X = x, Y = y, label = label, } if vertical then cmd.command = "addvertlabel" end table.insert(self._commands,cmd) end, addImage = function(self,x,y,w,h,tex) assert((type(x))=="number","Invalid X position") assert((type(y))=="number","Invalid Y position") assert((type(w))=="number","Invalid width") assert((type(h))=="number","Invalid height") if type(tex) ~= "string" then tex = tostring(tex) end local cmd = { command = "addimage", X = x, Y = y, W = w, H = h, texture_name = tex, } table.insert(self._commands,cmd) end, addButton = function(self,x,y,w,h,name,label,exit) assert((type(x))=="number","Invalid X position") assert((type(y))=="number","Invalid Y position") assert((type(w))=="number","Invalid width") assert((type(h))=="number","Invalid height") if type(name) ~= "string" then name = tostring(name) end if type(label) ~= "string" then label = tostring(label) end local cmd = { command = "addbutton", X = x, Y = y, W = w, H = h, name = name, label = label, } if exit then cmd.command = "addbutton_exit" end table.insert(self._commands,cmd) end, addImageButton = function(self,x,y,w,h,name,label,tex,exit) assert((type(x))=="number","Invalid X position") assert((type(y))=="number","Invalid Y position") assert((type(w))=="number","Invalid width") assert((type(h))=="number","Invalid height") if type(name) ~= "string" then name = tostring(name) end if type(label) ~= "string" then label = tostring(label) end if type(tex) ~= "string" then tex = tostring(tex) end local cmd = { command = "addimage_button", X = x, Y = y, W = w, H = h, name = name, label = label, image = tex, } if exit then cmd.command = "addimage_button_exit" end table.insert(self._commands,cmd) end, addField = function(self,x,y,w,h,name,label,default,password) assert((type(x))=="number","Invalid X position") assert((type(y))=="number","Invalid Y position") assert((type(w))=="number","Invalid width") assert((type(h))=="number","Invalid height") if type(name) ~= "string" then name = tostring(name) end if type(label) ~= "string" then label = tostring(label) end if type(default) ~= "string" then default = tostring(default) end local cmd = { command = "addfield", X = x, Y = y, W = w, H = h, name = name, label = label, default = default, } if password then cmd.command = "addpwdfield" end table.insert(self._commands,cmd) end, addTextArea = function(self,x,y,w,h,name,label,default) assert((type(x))=="number","Invalid X position") assert((type(y))=="number","Invalid Y position") assert((type(w))=="number","Invalid width") assert((type(h))=="number","Invalid height") if type(name) ~= "string" then name = tostring(name) end if type(label) ~= "string" then label = tostring(label) end if type(default) ~= "string" then default = tostring(default) end local cmd = { command = "addtextarea", X = x, Y = y, W = w, H = h, name = name, label = label, default = default, } table.insert(self._commands,cmd) end, addDropdown = function(self,x,y,w,h,name,choices,selected) assert((type(x))=="number","Invalid X position") assert((type(y))=="number","Invalid Y position") assert((type(w))=="number","Invalid width") assert((type(h))=="number","Invalid height") if not selected then selected = 1 end assert((type(selected))=="number","Invalid selection index") if type(name) ~= "string" then name = tostring(name) end assert((type(choices) == "table" and #choices >= 1),"Invalid choices list") local cmd = { command = "adddropdown", X = x, Y = y, W = w, H = h, name = name, choices = choices, selected_id = selected, } table.insert(self._commands,cmd) end, addTextlist = function(self,x,y,w,h,name,choices,selected,transparent) assert((type(x))=="number","Invalid X position") assert((type(y))=="number","Invalid Y position") assert((type(w))=="number","Invalid width") assert((type(h))=="number","Invalid height") if not selected then selected = 1 end assert((type(selected))=="number","Invalid selection index") if type(name) ~= "string" then name = tostring(name) end assert((type(transparent)) == "boolean","Invalid transparent flag") assert((type(choices) == "table" and #choices >= 1),"Invalid choices list") local cmd = { command = "addtextlist", X = x, Y = y, W = w, H = h, name = name, listelements = choices, selected_id = selected, transparent = transparent, } table.insert(self._commands,cmd) end, }, new = function(self,channel) local ret = {} for k,v in pairs(self._mt) do ret[k] = v end ret._channel = channel ret._commands = {{command="clear"}} return ret end, }