KedrikFeeD

basalt.lua

Feb 12th, 2025
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 190.78 KB | None | 0 0
  1. local aa={}local ba=true;local ca=require
  2. local da=function(ab)
  3. for bb,cb in pairs(aa)do
  4. if(type(cb)=="table")then for db,_c in pairs(cb)do if(db==ab)then
  5. return _c()end end else if(bb==ab)then return cb()end end end;return ca(ab)end
  6. local _b=function(ab)if(ab~=nil)then return aa[ab]end;return aa end
  7. aa["plugin"]=function(...)local ab={...}local bb={}local cb={}
  8. local db=fs.getDir(ab[2]or"Basalt")local _c=fs.combine(db,"plugins")
  9. if(ba)then
  10. for bc,cc in pairs(_b("plugins"))do
  11. table.insert(cb,bc)local dc=cc()
  12. if(type(dc)=="table")then for _d,ad in pairs(dc)do
  13. if(type(_d)=="string")then if(bb[_d]==nil)then
  14. bb[_d]={}end;table.insert(bb[_d],ad)end end end end else
  15. if(fs.exists(_c))then
  16. for bc,cc in pairs(fs.list(_c))do local dc
  17. if
  18. (fs.isDir(fs.combine(_c,cc)))then table.insert(cb,fs.combine(_c,cc))
  19. dc=da(cc.."/init")else table.insert(cb,cc)dc=da(cc:gsub(".lua",""))end
  20. if(type(dc)=="table")then for _d,ad in pairs(dc)do
  21. if(type(_d)=="string")then
  22. if(bb[_d]==nil)then bb[_d]={}end;table.insert(bb[_d],ad)end end end end end end;local function ac(bc)return bb[bc]end
  23. return
  24. {get=ac,getAvailablePlugins=function()return cb end,addPlugin=function(bc)
  25. if(fs.exists(bc))then
  26. if(fs.isDir(bc))then
  27. for cc,dc in
  28. pairs(fs.list(bc))do table.insert(cb,dc)
  29. if
  30. not(fs.isDir(fs.combine(bc,dc)))then local _d=dc:gsub(".lua","")local ad=da(fs.combine(bc,_d))
  31. if(
  32. type(ad)=="table")then for bd,cd in pairs(ad)do
  33. if(type(bd)=="string")then
  34. if(bb[bd]==nil)then bb[bd]={}end;table.insert(bb[bd],cd)end end end end end else local cc=da(bc:gsub(".lua",""))
  35. table.insert(cb,bc:match("[\\/]?([^\\/]-([^%.]+))$"))
  36. if(type(cc)=="table")then for dc,_d in pairs(cc)do
  37. if(type(dc)=="string")then
  38. if(bb[dc]==nil)then bb[dc]={}end;table.insert(bb[dc],_d)end end end end end end,loadPlugins=function(bc,cc)
  39. for dc,_d in
  40. pairs(bc)do local ad=bb[dc]
  41. if(ad~=nil)then
  42. bc[dc]=function(...)local bd=_d(...)
  43. for cd,dd in pairs(ad)do local __a=dd(bd,cc,...)
  44. __a.__index=__a;bd=setmetatable(__a,bd)end;return bd end end end;return bc end}end
  45. aa["main"]=function(...)local ab=da("basaltEvent")()
  46. local bb=da("loadObjects")local cb;local db=da("plugin")local _c=da("utils")local ac=da("basaltLogs")
  47. local bc=_c.uuid;local cc=_c.wrapText;local dc=_c.tableCount;local _d=300;local ad=0;local bd=0;local cd={}
  48. local dd=term.current()local __a="1.7.0"
  49. local a_a=fs.getDir(table.pack(...)[2]or"")local b_a,c_a,d_a,_aa,aaa={},{},{},{},{}local baa,caa,daa,_ba;local aba={}if not term.isColor or
  50. not term.isColor()then
  51. error('Basalt requires an advanced (golden) computer to run.',0)end;local bba={}
  52. for adb,bdb in
  53. pairs(colors)do if(type(bdb)=="number")then
  54. bba[adb]={dd.getPaletteColor(bdb)}end end
  55. local function cba()_ba=false;dd.clear()dd.setCursorPos(1,1)
  56. for adb,bdb in pairs(colors)do if(type(bdb)==
  57. "number")then
  58. dd.setPaletteColor(bdb,colors.packRGB(table.unpack(bba[adb])))end end end
  59. local function dba(adb)
  60. assert(adb~="function","Schedule needs a function in order to work!")
  61. return function(...)local bdb=coroutine.create(adb)
  62. local cdb,ddb=coroutine.resume(bdb,...)
  63. if(cdb)then table.insert(aaa,bdb)else aba.basaltError(ddb)end end end;aba.log=function(...)ac(...)end
  64. local _ca=function(adb,bdb)_aa[adb]=bdb end;local aca=function(adb)return _aa[adb]end
  65. local bca=function()return cb end;local cca=function(adb)return bca()[adb]end;local dca=function(adb,bdb,cdb)return
  66. cca(bdb)(cdb,adb)end
  67. local _da={getDynamicValueEventSetting=function()return
  68. aba.dynamicValueEvents end,getMainFrame=function()return baa end,setVariable=_ca,getVariable=aca,setMainFrame=function(adb)baa=adb end,getActiveFrame=function()return
  69. caa end,setActiveFrame=function(adb)caa=adb end,getFocusedObject=function()return daa end,setFocusedObject=function(adb)daa=adb end,getMonitorFrame=function(adb)return
  70. d_a[adb]or monGroups[adb][1]end,setMonitorFrame=function(adb,bdb,cdb)if(
  71. baa==bdb)then baa=nil end;if(cdb)then monGroups[adb]={bdb,sides}else
  72. d_a[adb]=bdb end
  73. if(bdb==nil)then monGroups[adb]=nil end end,getTerm=function()return
  74. dd end,schedule=dba,stop=cba,debug=aba.debug,log=aba.log,getObjects=bca,getObject=cca,createObject=dca,getDirectory=function()return a_a end}
  75. local function ada(adb)dd.clear()dd.setBackgroundColor(colors.black)
  76. dd.setTextColor(colors.red)local bdb,cdb=dd.getSize()if(aba.logging)then ac(adb,"Error")end;local ddb=cc(
  77. "Basalt error: "..adb,bdb)local __c=1;for a_c,b_c in pairs(ddb)do
  78. dd.setCursorPos(1,__c)dd.write(b_c)__c=__c+1 end;dd.setCursorPos(1,
  79. __c+1)_ba=false end
  80. local function bda(adb,bdb,cdb,ddb,__c)
  81. if(#aaa>0)then local a_c={}
  82. for n=1,#aaa do
  83. if(aaa[n]~=nil)then
  84. if
  85. (coroutine.status(aaa[n])=="suspended")then
  86. local b_c,c_c=coroutine.resume(aaa[n],adb,bdb,cdb,ddb,__c)if not(b_c)then aba.basaltError(c_c)end else
  87. table.insert(a_c,n)end end end
  88. for n=1,#a_c do table.remove(aaa,a_c[n]- (n-1))end end end
  89. local function cda()if(_ba==false)then return end;if(baa~=nil)then baa:render()
  90. baa:updateTerm()end;for adb,bdb in pairs(d_a)do bdb:render()
  91. bdb:updateTerm()end end;local dda,__b,a_b=nil,nil,nil;local b_b=nil
  92. local function c_b(adb,bdb,cdb,ddb)dda,__b,a_b=bdb,cdb,ddb;if(b_b==nil)then
  93. b_b=os.startTimer(_d/1000)end end
  94. local function d_b()b_b=nil;baa:hoverHandler(__b,a_b,dda)caa=baa end;local _ab,aab,bab=nil,nil,nil;local cab=nil;local function dab()cab=nil;baa:dragHandler(_ab,aab,bab)
  95. caa=baa end;local function _bb(adb,bdb,cdb,ddb)_ab,aab,bab=bdb,cdb,ddb
  96. if(ad<50)then dab()else if(cab==nil)then cab=os.startTimer(
  97. ad/1000)end end end
  98. local abb=nil;local function bbb()abb=nil;cda()end
  99. local function cbb(adb)if(bd<50)then cda()else if(abb==nil)then
  100. abb=os.startTimer(bd/1000)end end end
  101. local function dbb(adb,...)local bdb={...}if
  102. (ab:sendEvent("basaltEventCycle",adb,...)==false)then return end
  103. if(adb=="terminate")then aba.stop()end
  104. if(baa~=nil)then
  105. local cdb={mouse_click=baa.mouseHandler,mouse_up=baa.mouseUpHandler,mouse_scroll=baa.scrollHandler,mouse_drag=_bb,mouse_move=c_b}local ddb=cdb[adb]
  106. if(ddb~=nil)then ddb(baa,...)bda(adb,...)cbb()return end end
  107. if(adb=="monitor_touch")then
  108. for cdb,ddb in pairs(d_a)do if
  109. (ddb:mouseHandler(1,bdb[2],bdb[3],true,bdb[1]))then caa=ddb end end;bda(adb,...)cbb()return end
  110. if(caa~=nil)then
  111. local cdb={char=caa.charHandler,key=caa.keyHandler,key_up=caa.keyUpHandler}local ddb=cdb[adb]if(ddb~=nil)then if(adb=="key")then b_a[bdb[1]]=true elseif(adb=="key_up")then
  112. b_a[bdb[1]]=false end;ddb(caa,...)bda(adb,...)
  113. cbb()return end end
  114. if(adb=="timer")and(bdb[1]==b_b)then d_b()elseif
  115. (adb=="timer")and(bdb[1]==cab)then dab()elseif(adb=="timer")and(bdb[1]==abb)then bbb()else for cdb,ddb in pairs(c_a)do
  116. ddb:eventHandler(adb,...)end
  117. for cdb,ddb in pairs(d_a)do ddb:eventHandler(adb,...)end;bda(adb,...)cbb()end end;local _cb=false;local acb=false
  118. local function bcb()
  119. if not(_cb)then
  120. for adb,bdb in pairs(cd)do
  121. if(fs.exists(bdb))then
  122. if(fs.isDir(bdb))then
  123. local cdb=fs.list(bdb)
  124. for ddb,__c in pairs(cdb)do
  125. if not(fs.isDir(bdb.."/"..__c))then
  126. local a_c=__c:gsub(".lua","")
  127. if
  128. (a_c~="example.lua")and not(a_c:find(".disabled"))then
  129. if(bb[a_c]==nil)then
  130. bb[a_c]=da(bdb.."."..__c:gsub(".lua",""))else error("Duplicate object name: "..a_c)end end end end else local cdb=bdb:gsub(".lua","")
  131. if(bb[cdb]==nil)then bb[cdb]=da(cdb)else error(
  132. "Duplicate object name: "..cdb)end end end end;_cb=true end
  133. if not(acb)then cb=db.loadPlugins(bb,_da)local adb=db.get("basalt")
  134. if
  135. (adb~=nil)then for cdb,ddb in pairs(adb)do
  136. for __c,a_c in pairs(ddb(aba))do aba[__c]=a_c;_da[__c]=a_c end end end;local bdb=db.get("basaltInternal")
  137. if(bdb~=nil)then for cdb,ddb in pairs(bdb)do for __c,a_c in pairs(ddb(aba))do
  138. _da[__c]=a_c end end end;acb=true end end
  139. local function ccb(adb)bcb()
  140. for cdb,ddb in pairs(c_a)do if(ddb:getName()==adb)then return nil end end;local bdb=cb["BaseFrame"](adb,_da)bdb:init()
  141. bdb:load()bdb:draw()table.insert(c_a,bdb)
  142. if(baa==nil)and(bdb:getName()~=
  143. "basaltDebuggingFrame")then bdb:show()end;return bdb end
  144. aba={basaltError=ada,logging=false,dynamicValueEvents=false,drawFrames=cda,log=ac,getVersion=function()return __a end,memory=function()return
  145. math.floor(collectgarbage("count")+0.5).."KB"end,addObject=function(adb)if
  146. (fs.exists(adb))then table.insert(cd,adb)end end,addPlugin=function(adb)
  147. db.addPlugin(adb)end,getAvailablePlugins=function()return db.getAvailablePlugins()end,getAvailableObjects=function()
  148. local adb={}for bdb,cdb in pairs(bb)do table.insert(adb,bdb)end;return adb end,setVariable=_ca,getVariable=aca,getObjects=bca,getObject=cca,createObject=dca,setBaseTerm=function(adb)
  149. dd=adb end,resetPalette=function()
  150. for adb,bdb in pairs(colors)do if(type(bdb)=="number")then end end end,setMouseMoveThrottle=function(adb)
  151. if(_HOST:find("CraftOS%-PC"))then if(
  152. config.get("mouse_move_throttle")~=10)then
  153. config.set("mouse_move_throttle",10)end
  154. if(adb<100)then _d=100 else _d=adb end;return true end;return false end,setRenderingThrottle=function(adb)if(
  155. adb<=0)then bd=0 else abb=nil;bd=adb end end,setMouseDragThrottle=function(adb)if
  156. (adb<=0)then ad=0 else cab=nil;ad=adb end end,autoUpdate=function(adb)_ba=adb;if(
  157. adb==nil)then _ba=true end;local function bdb()cda()while _ba do
  158. dbb(os.pullEventRaw())end end
  159. while _ba do
  160. local cdb,ddb=xpcall(bdb,debug.traceback)if not(cdb)then aba.basaltError(ddb)end end end,update=function(adb,...)
  161. if(
  162. adb~=nil)then local bdb={...}
  163. local cdb,ddb=xpcall(function()dbb(adb,table.unpack(bdb))end,debug.traceback)if not(cdb)then aba.basaltError(ddb)return end end end,stop=cba,stopUpdate=cba,isKeyDown=function(adb)if(
  164. b_a[adb]==nil)then return false end;return b_a[adb]end,getFrame=function(adb)for bdb,cdb in
  165. pairs(c_a)do if(cdb.name==adb)then return cdb end end end,getActiveFrame=function()return
  166. caa end,setActiveFrame=function(adb)
  167. if(adb:getType()=="Container")then caa=adb;return true end;return false end,getMainFrame=function()return baa end,onEvent=function(...)
  168. for adb,bdb in
  169. pairs(table.pack(...))do if(type(bdb)=="function")then
  170. ab:registerEvent("basaltEventCycle",bdb)end end end,schedule=dba,addFrame=ccb,createFrame=ccb,addMonitor=function(adb)
  171. bcb()
  172. for cdb,ddb in pairs(c_a)do if(ddb:getName()==adb)then return nil end end;local bdb=cb["MonitorFrame"](adb,_da)bdb:init()
  173. bdb:load()bdb:draw()table.insert(d_a,bdb)return bdb end,removeFrame=function(adb)c_a[adb]=
  174. nil end,setProjectDir=function(adb)a_a=adb end}local dcb=db.get("basalt")if(dcb~=nil)then
  175. for adb,bdb in pairs(dcb)do for cdb,ddb in pairs(bdb(aba))do
  176. aba[cdb]=ddb;_da[cdb]=ddb end end end
  177. local _db=db.get("basaltInternal")if(_db~=nil)then
  178. for adb,bdb in pairs(_db)do for cdb,ddb in pairs(bdb(aba))do _da[cdb]=ddb end end end;return aba end;aa["plugins"]={}
  179. aa["plugins"]["advancedBackground"]=function(...)
  180. local ab=da("xmlParser")
  181. return
  182. {VisualObject=function(bb)local cb=false;local db=colors.black
  183. local _c={setBackground=function(ac,bc,cc,dc)bb.setBackground(ac,bc)
  184. cb=cc or cb;db=dc or db;return ac end,setBackgroundSymbol=function(ac,bc,cc)cb=bc
  185. db=cc or db;ac:updateDraw()return ac end,getBackgroundSymbol=function(ac)return cb end,getBackgroundSymbolColor=function(ac)return
  186. db end,draw=function(ac)bb.draw(ac)
  187. ac:addDraw("advanced-bg",function()local bc,cc=ac:getSize()
  188. if
  189. (cb~=false)then ac:addTextBox(1,1,bc,cc,cb:sub(1,1))if(cb~=" ")then
  190. ac:addForegroundBox(1,1,bc,cc,db)end end end,2)end}return _c end}end
  191. aa["plugins"]["bigfonts"]=function(...)local ab=da("tHex")
  192. local bb={{"\32\32\32\137\156\148\158\159\148\135\135\144\159\139\32\136\157\32\159\139\32\32\143\32\32\143\32\32\32\32\32\32\32\32\147\148\150\131\148\32\32\32\151\140\148\151\140\147","\32\32\32\149\132\149\136\156\149\144\32\133\139\159\129\143\159\133\143\159\133\138\32\133\138\32\133\32\32\32\32\32\32\150\150\129\137\156\129\32\32\32\133\131\129\133\131\132","\32\32\32\130\131\32\130\131\32\32\129\32\32\32\32\130\131\32\130\131\32\32\32\32\143\143\143\32\32\32\32\32\32\130\129\32\130\135\32\32\32\32\131\32\32\131\32\131","\139\144\32\32\143\148\135\130\144\149\32\149\150\151\149\158\140\129\32\32\32\135\130\144\135\130\144\32\149\32\32\139\32\159\148\32\32\32\32\159\32\144\32\148\32\147\131\132","\159\135\129\131\143\149\143\138\144\138\32\133\130\149\149\137\155\149\159\143\144\147\130\132\32\149\32\147\130\132\131\159\129\139\151\129\148\32\32\139\131\135\133\32\144\130\151\32","\32\32\32\32\32\32\130\135\32\130\32\129\32\129\129\131\131\32\130\131\129\140\141\132\32\129\32\32\129\32\32\32\32\32\32\32\131\131\129\32\32\32\32\32\32\32\32\32","\32\32\32\32\149\32\159\154\133\133\133\144\152\141\132\133\151\129\136\153\32\32\154\32\159\134\129\130\137\144\159\32\144\32\148\32\32\32\32\32\32\32\32\32\32\32\151\129","\32\32\32\32\133\32\32\32\32\145\145\132\141\140\132\151\129\144\150\146\129\32\32\32\138\144\32\32\159\133\136\131\132\131\151\129\32\144\32\131\131\129\32\144\32\151\129\32","\32\32\32\32\129\32\32\32\32\130\130\32\32\129\32\129\32\129\130\129\129\32\32\32\32\130\129\130\129\32\32\32\32\32\32\32\32\133\32\32\32\32\32\129\32\129\32\32","\150\156\148\136\149\32\134\131\148\134\131\148\159\134\149\136\140\129\152\131\32\135\131\149\150\131\148\150\131\148\32\148\32\32\148\32\32\152\129\143\143\144\130\155\32\134\131\148","\157\129\149\32\149\32\152\131\144\144\131\148\141\140\149\144\32\149\151\131\148\32\150\32\150\131\148\130\156\133\32\144\32\32\144\32\130\155\32\143\143\144\32\152\129\32\134\32","\130\131\32\131\131\129\131\131\129\130\131\32\32\32\129\130\131\32\130\131\32\32\129\32\130\131\32\130\129\32\32\129\32\32\133\32\32\32\129\32\32\32\130\32\32\32\129\32","\150\140\150\137\140\148\136\140\132\150\131\132\151\131\148\136\147\129\136\147\129\150\156\145\138\143\149\130\151\32\32\32\149\138\152\129\149\32\32\157\152\149\157\144\149\150\131\148","\149\143\142\149\32\149\149\32\149\149\32\144\149\32\149\149\32\32\149\32\32\149\32\149\149\32\149\32\149\32\144\32\149\149\130\148\149\32\32\149\32\149\149\130\149\149\32\149","\130\131\129\129\32\129\131\131\32\130\131\32\131\131\32\131\131\129\129\32\32\130\131\32\129\32\129\130\131\32\130\131\32\129\32\129\131\131\129\129\32\129\129\32\129\130\131\32","\136\140\132\150\131\148\136\140\132\153\140\129\131\151\129\149\32\149\149\32\149\149\32\149\137\152\129\137\152\129\131\156\133\149\131\32\150\32\32\130\148\32\152\137\144\32\32\32","\149\32\32\149\159\133\149\32\149\144\32\149\32\149\32\149\32\149\150\151\129\138\155\149\150\130\148\32\149\32\152\129\32\149\32\32\32\150\32\32\149\32\32\32\32\32\32\32","\129\32\32\130\129\129\129\32\129\130\131\32\32\129\32\130\131\32\32\129\32\129\32\129\129\32\129\32\129\32\131\131\129\130\131\32\32\32\129\130\131\32\32\32\32\140\140\132","\32\154\32\159\143\32\149\143\32\159\143\32\159\144\149\159\143\32\159\137\145\159\143\144\149\143\32\32\145\32\32\32\145\149\32\144\32\149\32\143\159\32\143\143\32\159\143\32","\32\32\32\152\140\149\151\32\149\149\32\145\149\130\149\157\140\133\32\149\32\154\143\149\151\32\149\32\149\32\144\32\149\149\153\32\32\149\32\149\133\149\149\32\149\149\32\149","\32\32\32\130\131\129\131\131\32\130\131\32\130\131\129\130\131\129\32\129\32\140\140\129\129\32\129\32\129\32\137\140\129\130\32\129\32\130\32\129\32\129\129\32\129\130\131\32","\144\143\32\159\144\144\144\143\32\159\143\144\159\138\32\144\32\144\144\32\144\144\32\144\144\32\144\144\32\144\143\143\144\32\150\129\32\149\32\130\150\32\134\137\134\134\131\148","\136\143\133\154\141\149\151\32\129\137\140\144\32\149\32\149\32\149\154\159\133\149\148\149\157\153\32\154\143\149\159\134\32\130\148\32\32\149\32\32\151\129\32\32\32\32\134\32","\133\32\32\32\32\133\129\32\32\131\131\32\32\130\32\130\131\129\32\129\32\130\131\129\129\32\129\140\140\129\131\131\129\32\130\129\32\129\32\130\129\32\32\32\32\32\129\32","\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32","\32\32\32\32\32\32\32\32\32\32\32\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\32\32\32\32\32\32\32\32\32\32\32","\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32","\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32\32\32\32\32\149\32\32\149\32\32\32\32","\32\32\32\32\32\32\32\32\32\32\32\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\32\32\32\32\32\32\32\32\32\32\32","\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32\32\149\32","\32\32\32\32\145\32\159\139\32\151\131\132\155\143\132\134\135\145\32\149\32\158\140\129\130\130\32\152\147\155\157\134\32\32\144\144\32\32\32\32\32\32\152\131\155\131\131\129","\32\32\32\32\149\32\149\32\145\148\131\32\149\32\149\140\157\132\32\148\32\137\155\149\32\32\32\149\154\149\137\142\32\153\153\32\131\131\149\131\131\129\149\135\145\32\32\32","\32\32\32\32\129\32\130\135\32\131\131\129\134\131\132\32\129\32\32\129\32\131\131\32\32\32\32\130\131\129\32\32\32\32\129\129\32\32\32\32\32\32\130\131\129\32\32\32","\150\150\32\32\148\32\134\32\32\132\32\32\134\32\32\144\32\144\150\151\149\32\32\32\32\32\32\145\32\32\152\140\144\144\144\32\133\151\129\133\151\129\132\151\129\32\145\32","\130\129\32\131\151\129\141\32\32\142\32\32\32\32\32\149\32\149\130\149\149\32\143\32\32\32\32\142\132\32\154\143\133\157\153\132\151\150\148\151\158\132\151\150\148\144\130\148","\32\32\32\140\140\132\32\32\32\32\32\32\32\32\32\151\131\32\32\129\129\32\32\32\32\134\32\32\32\32\32\32\32\129\129\32\129\32\129\129\130\129\129\32\129\130\131\32","\156\143\32\159\141\129\153\140\132\153\137\32\157\141\32\159\142\32\150\151\129\150\131\132\140\143\144\143\141\145\137\140\148\141\141\144\157\142\32\159\140\32\151\134\32\157\141\32","\157\140\149\157\140\149\157\140\149\157\140\149\157\140\149\157\140\149\151\151\32\154\143\132\157\140\32\157\140\32\157\140\32\157\140\32\32\149\32\32\149\32\32\149\32\32\149\32","\129\32\129\129\32\129\129\32\129\129\32\129\129\32\129\129\32\129\129\131\129\32\134\32\131\131\129\131\131\129\131\131\129\131\131\129\130\131\32\130\131\32\130\131\32\130\131\32","\151\131\148\152\137\145\155\140\144\152\142\145\153\140\132\153\137\32\154\142\144\155\159\132\150\156\148\147\32\144\144\130\145\136\137\32\146\130\144\144\130\145\130\136\32\151\140\132","\151\32\149\151\155\149\149\32\149\149\32\149\149\32\149\149\32\149\149\32\149\152\137\144\157\129\149\149\32\149\149\32\149\149\32\149\149\32\149\130\150\32\32\157\129\149\32\149","\131\131\32\129\32\129\130\131\32\130\131\32\130\131\32\130\131\32\130\131\32\32\32\32\130\131\32\130\131\32\130\131\32\130\131\32\130\131\32\32\129\32\130\131\32\133\131\32","\156\143\32\159\141\129\153\140\132\153\137\32\157\141\32\159\142\32\159\159\144\152\140\144\156\143\32\159\141\129\153\140\132\157\141\32\130\145\32\32\147\32\136\153\32\130\146\32","\152\140\149\152\140\149\152\140\149\152\140\149\152\140\149\152\140\149\149\157\134\154\143\132\157\140\133\157\140\133\157\140\133\157\140\133\32\149\32\32\149\32\32\149\32\32\149\32","\130\131\129\130\131\129\130\131\129\130\131\129\130\131\129\130\131\129\130\130\131\32\134\32\130\131\129\130\131\129\130\131\129\130\131\129\32\129\32\32\129\32\32\129\32\32\129\32","\159\134\144\137\137\32\156\143\32\159\141\129\153\140\132\153\137\32\157\141\32\32\132\32\159\143\32\147\32\144\144\130\145\136\137\32\146\130\144\144\130\145\130\138\32\146\130\144","\149\32\149\149\32\149\149\32\149\149\32\149\149\32\149\149\32\149\149\32\149\131\147\129\138\134\149\149\32\149\149\32\149\149\32\149\149\32\149\154\143\149\32\157\129\154\143\149","\130\131\32\129\32\129\130\131\32\130\131\32\130\131\32\130\131\32\130\131\32\32\32\32\130\131\32\130\131\129\130\131\129\130\131\129\130\131\129\140\140\129\130\131\32\140\140\129"},{"000110000110110000110010101000000010000000100101","000000110110000000000010101000000010000000100101","000000000000000000000000000000000000000000000000","100010110100000010000110110000010100000100000110","000000110000000010110110000110000000000000110000","000000000000000000000000000000000000000000000000","000000110110000010000000100000100000000000000010","000000000110110100010000000010000000000000000100","000000000000000000000000000000000000000000000000","010000000000100110000000000000000000000110010000","000000000000000000000000000010000000010110000000","000000000000000000000000000000000000000000000000","011110110000000100100010110000000100000000000000","000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000","110000110110000000000000000000010100100010000000","000010000000000000110110000000000100010010000000","000000000000000000000000000000000000000000000000","010110010110100110110110010000000100000110110110","000000000000000000000110000000000110000000000000","000000000000000000000000000000000000000000000000","010100010110110000000000000000110000000010000000","110110000000000000110000110110100000000010000000","000000000000000000000000000000000000000000000000","000100011111000100011111000100011111000100011111","000000000000100100100100011011011011111111111111","000000000000000000000000000000000000000000000000","000100011111000100011111000100011111000100011111","000000000000100100100100011011011011111111111111","100100100100100100100100100100100100100100100100","000000110100110110000010000011110000000000011000","000000000100000000000010000011000110000000001000","000000000000000000000000000000000000000000000000","010000100100000000000000000100000000010010110000","000000000000000000000000000000110110110110110000","000000000000000000000000000000000000000000000000","110110110110110110000000110110110110110110110110","000000000000000000000110000000000000000000000000","000000000000000000000000000000000000000000000000","000000000000110110000110010000000000000000010010","000010000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000","110110110110110110110000110110110110000000000000","000000000000000000000110000000000000000000000000","000000000000000000000000000000000000000000000000","110110110110110110110000110000000000000000010000","000000000000000000000000100000000000000110000110","000000000000000000000000000000000000000000000000"}}local cb={}local db={}
  193. do local cc=0;local dc=#bb[1]local _d=#bb[1][1]
  194. for i=1,dc,3 do
  195. for j=1,_d,3 do
  196. local ad=string.char(cc)local bd={}bd[1]=bb[1][i]:sub(j,j+2)
  197. bd[2]=bb[1][i+1]:sub(j,j+2)bd[3]=bb[1][i+2]:sub(j,j+2)local cd={}cd[1]=bb[2][i]:sub(j,
  198. j+2)cd[2]=bb[2][i+1]:sub(j,j+2)cd[3]=bb[2][
  199. i+2]:sub(j,j+2)db[ad]={bd,cd}cc=cc+1 end end;cb[1]=db end
  200. local function _c(cc,dc)local _d={["0"]="1",["1"]="0"}if cc<=#cb then return true end
  201. for f=#cb+1,cc do local ad={}local bd=cb[
  202. f-1]
  203. for char=0,255 do local cd=string.char(char)local dd={}local __a={}
  204. local a_a=bd[cd][1]local b_a=bd[cd][2]
  205. for i=1,#a_a do local c_a,d_a,_aa,aaa,baa,caa={},{},{},{},{},{}
  206. for j=1,#a_a[1]do
  207. local daa=db[a_a[i]:sub(j,j)][1]table.insert(c_a,daa[1])
  208. table.insert(d_a,daa[2])table.insert(_aa,daa[3])
  209. local _ba=db[a_a[i]:sub(j,j)][2]
  210. if b_a[i]:sub(j,j)=="1"then
  211. table.insert(aaa,(_ba[1]:gsub("[01]",_d)))
  212. table.insert(baa,(_ba[2]:gsub("[01]",_d)))
  213. table.insert(caa,(_ba[3]:gsub("[01]",_d)))else table.insert(aaa,_ba[1])
  214. table.insert(baa,_ba[2])table.insert(caa,_ba[3])end end;table.insert(dd,table.concat(c_a))
  215. table.insert(dd,table.concat(d_a))table.insert(dd,table.concat(_aa))
  216. table.insert(__a,table.concat(aaa))table.insert(__a,table.concat(baa))
  217. table.insert(__a,table.concat(caa))end;ad[cd]={dd,__a}if dc then dc="Font"..f.."Yeld"..char
  218. os.queueEvent(dc)os.pullEvent(dc)end end;cb[f]=ad end;return true end
  219. local function ac(cc,dc,_d,ad,bd)
  220. if not type(dc)=="string"then error("Not a String",3)end
  221. local cd=type(_d)=="string"and _d:sub(1,1)or ab[_d]or
  222. error("Wrong Front Color",3)
  223. local dd=type(ad)=="string"and ad:sub(1,1)or ab[ad]or
  224. error("Wrong Back Color",3)if(cb[cc]==nil)then _c(3,false)end;local __a=cb[cc]or
  225. error("Wrong font size selected",3)if dc==""then
  226. return{{""},{""},{""}}end;local a_a={}
  227. for caa in dc:gmatch('.')do table.insert(a_a,caa)end;local b_a={}local c_a=#__a[a_a[1]][1]
  228. for nLine=1,c_a do local caa={}for i=1,#a_a do
  229. caa[i]=
  230. __a[a_a[i]]and __a[a_a[i]][1][nLine]or""end;b_a[nLine]=table.concat(caa)end;local d_a={}local _aa={}local aaa={["0"]=cd,["1"]=dd}local baa={["0"]=dd,["1"]=cd}
  231. for nLine=1,c_a do
  232. local caa={}local daa={}
  233. for i=1,#a_a do
  234. local _ba=__a[a_a[i]]and __a[a_a[i]][2][nLine]or""
  235. caa[i]=_ba:gsub("[01]",
  236. bd and{["0"]=_d:sub(i,i),["1"]=ad:sub(i,i)}or aaa)
  237. daa[i]=_ba:gsub("[01]",
  238. bd and{["0"]=ad:sub(i,i),["1"]=_d:sub(i,i)}or baa)end;d_a[nLine]=table.concat(caa)
  239. _aa[nLine]=table.concat(daa)end;return{b_a,d_a,_aa}end;local bc=da("xmlParser")
  240. return
  241. {Label=function(cc)local dc=1;local _d
  242. local ad={setFontSize=function(bd,cd)
  243. if(type(cd)=="number")then dc=cd
  244. if(dc>1)then
  245. bd:setDrawState("label",false)
  246. _d=ac(dc-1,bd:getText(),bd:getForeground(),bd:getBackground()or colors.lightGray)if(bd:getAutoSize())then
  247. bd:getBase():setSize(#_d[1][1],#_d[1]-1)end else
  248. bd:setDrawState("label",true)end;bd:updateDraw()end;return bd end,getFontSize=function(bd)return
  249. dc end,getSize=function(bd)local cd,dd=cc.getSize(bd)
  250. if
  251. (dc>1)and(bd:getAutoSize())then
  252. return dc==2 and bd:getText():len()*3 or math.floor(
  253. bd:getText():len()*8.5),
  254. dc==2 and dd*2 or math.floor(dd)else return cd,dd end end,getWidth=function(bd)
  255. local cd=cc.getWidth(bd)if(dc>1)and(bd:getAutoSize())then return dc==2 and
  256. bd:getText():len()*3 or
  257. math.floor(bd:getText():len()*8.5)else
  258. return cd end end,getHeight=function(bd)
  259. local cd=cc.getHeight(bd)if(dc>1)and(bd:getAutoSize())then return
  260. dc==2 and cd*2 or math.floor(cd)else return cd end end,draw=function(bd)
  261. cc.draw(bd)
  262. bd:addDraw("bigfonts",function()
  263. if(dc>1)then local cd,dd=bd:getPosition()local __a=bd:getParent()
  264. local a_a,b_a=__a:getSize()local c_a,d_a=#_d[1][1],#_d[1]cd=cd or
  265. math.floor((a_a-c_a)/2)+1;dd=dd or
  266. math.floor((b_a-d_a)/2)+1
  267. for i=1,d_a do bd:addFG(1,i,_d[2][i])
  268. bd:addBG(1,i,_d[3][i])bd:addText(1,i,_d[1][i])end end end)end}return ad end}end
  269. aa["plugins"]["border"]=function(...)local ab=da("xmlParser")
  270. return
  271. {VisualObject=function(bb)local cb=true
  272. local db={top=false,bottom=false,left=false,right=false}
  273. local _c={setBorder=function(ac,...)local bc={...}
  274. if(bc~=nil)then
  275. for cc,dc in pairs(bc)do
  276. if(dc=="left")or(#bc==1)then db["left"]=bc[1]end;if(dc=="top")or(#bc==1)then db["top"]=bc[1]end;if
  277. (dc=="right")or(#bc==1)then db["right"]=bc[1]end;if
  278. (dc=="bottom")or(#bc==1)then db["bottom"]=bc[1]end end end;ac:updateDraw()return ac end,draw=function(ac)
  279. bb.draw(ac)
  280. ac:addDraw("border",function()local bc,cc=ac:getPosition()local dc,_d=ac:getSize()
  281. local ad=ac:getBackground()
  282. if(cb)then
  283. if(db["left"]~=false)then ac:addTextBox(1,1,1,_d,"\149")if(ad~=false)then
  284. ac:addBackgroundBox(1,1,1,_d,ad)end
  285. ac:addForegroundBox(1,1,1,_d,db["left"])end
  286. if(db["top"]~=false)then ac:addTextBox(1,1,dc,1,"\131")if(ad~=false)then
  287. ac:addBackgroundBox(1,1,dc,1,ad)end
  288. ac:addForegroundBox(1,1,dc,1,db["top"])end
  289. if(db["left"]~=false)and(db["top"]~=false)then
  290. ac:addTextBox(1,1,1,1,"\151")
  291. if(ad~=false)then ac:addBackgroundBox(1,1,1,1,ad)end;ac:addForegroundBox(1,1,1,1,db["left"])end
  292. if(db["right"]~=false)then ac:addTextBox(dc,1,1,_d,"\149")if
  293. (ad~=false)then ac:addForegroundBox(dc,1,1,_d,ad)end
  294. ac:addBackgroundBox(dc,1,1,_d,db["right"])end
  295. if(db["bottom"]~=false)then ac:addTextBox(1,_d,dc,1,"\143")if
  296. (ad~=false)then ac:addForegroundBox(1,_d,dc,1,ad)end
  297. ac:addBackgroundBox(1,_d,dc,1,db["bottom"])end
  298. if(db["top"]~=false)and(db["right"]~=false)then
  299. ac:addTextBox(dc,1,1,1,"\148")
  300. if(ad~=false)then ac:addForegroundBox(dc,1,1,1,ad)end;ac:addBackgroundBox(dc,1,1,1,db["right"])end
  301. if(db["right"]~=false)and(db["bottom"]~=false)then
  302. ac:addTextBox(dc,_d,1,1,"\133")
  303. if(ad~=false)then ac:addForegroundBox(dc,_d,1,1,ad)end;ac:addBackgroundBox(dc,_d,1,1,db["right"])end
  304. if(db["bottom"]~=false)and(db["left"]~=false)then
  305. ac:addTextBox(1,_d,1,1,"\138")
  306. if(ad~=false)then ac:addForegroundBox(0,_d,1,1,ad)end;ac:addBackgroundBox(1,_d,1,1,db["left"])end end end)end}return _c end}end
  307. aa["plugins"]["debug"]=function(...)local ab=da("utils")local bb=ab.wrapText
  308. return
  309. {basalt=function(cb)
  310. local db=cb.getMainFrame()local _c;local ac;local bc;local cc
  311. local function dc()local _d=16;local ad=6;local bd=99;local cd=99;local dd,__a=db:getSize()
  312. _c=db:addMovableFrame("basaltDebuggingFrame"):setSize(
  313. dd-20,__a-10):setBackground(colors.gray):setForeground(colors.white):setZIndex(100):hide()
  314. _c:addPane():setSize("parent.w",1):setPosition(1,1):setBackground(colors.black):setForeground(colors.white)
  315. _c:setPosition(-dd,__a/2 -_c:getHeight()/2):setBorder(colors.black)
  316. local a_a=_c:addButton():setPosition("parent.w","parent.h"):setSize(1,1):setText("\133"):setForeground(colors.gray):setBackground(colors.black):onClick(function()
  317. end):onDrag(function(b_a,c_a,d_a,_aa,aaa)
  318. local baa,caa=_c:getSize()local daa,_ba=baa,caa;if(baa+_aa-1 >=_d)and(baa+_aa-1 <=bd)then daa=baa+
  319. _aa-1 end
  320. if(caa+aaa-1 >=ad)and(
  321. caa+aaa-1 <=cd)then _ba=caa+aaa-1 end;_c:setSize(daa,_ba)end)
  322. cc=_c:addButton():setText("Close"):setPosition("parent.w - 6",1):setSize(7,1):setBackground(colors.red):setForeground(colors.white):onClick(function()
  323. _c:animatePosition(
  324. -dd,__a/2 -_c:getHeight()/2,0.5)end)
  325. ac=_c:addList():setSize("parent.w - 2","parent.h - 3"):setPosition(2,3):setBackground(colors.gray):setForeground(colors.white):setSelectionColor(colors.gray,colors.white)
  326. if(bc==nil)then
  327. bc=db:addLabel():setPosition(1,"parent.h"):setBackground(colors.black):setForeground(colors.white):setZIndex(100):onClick(function()
  328. _c:show()
  329. _c:animatePosition(dd/2 -_c:getWidth()/2,__a/2 -_c:getHeight()/2,0.5)end)end end
  330. return
  331. {debug=function(...)local _d={...}if(db==nil)then db=cb.getMainFrame()
  332. if(db~=nil)then dc()else print(...)return end end
  333. if
  334. (db:getName()~="basaltDebuggingFrame")then if(db~=_c)then bc:setParent(db)end end;local ad=""for bd,cd in pairs(_d)do
  335. ad=ad..tostring(cd).. (#_d~=bd and", "or"")end
  336. bc:setText("[Debug] "..ad)
  337. for bd,cd in pairs(bb(ad,ac:getWidth()))do ac:addItem(cd)end
  338. if(ac:getItemCount()>50)then ac:removeItem(1)end
  339. ac:setValue(ac:getItem(ac:getItemCount()))
  340. if(ac.getItemCount()>ac:getHeight())then ac:setOffset(ac:getItemCount()-
  341. ac:getHeight())end;bc:show()end}end}end
  342. aa["plugins"]["animations"]=function(...)
  343. local ab,bb,cb,db,_c,ac=math.floor,math.sin,math.cos,math.pi,math.sqrt,math.pow;local function bc(aab,bab,cab)return aab+ (bab-aab)*cab end
  344. local function cc(aab)return aab end;local function dc(aab)return 1 -aab end
  345. local function _d(aab)return aab*aab*aab end;local function ad(aab)return dc(_d(dc(aab)))end;local function bd(aab)return
  346. bc(_d(aab),ad(aab),aab)end
  347. local function cd(aab)return bb((aab*db)/2)end;local function dd(aab)return dc(cb((aab*db)/2))end;local function __a(aab)return- (
  348. cb(db*x)-1)/2 end
  349. local function a_a(aab)local bab=1.70158
  350. local cab=bab+1;return cab*aab^3 -bab*aab^2 end;local function b_a(aab)return aab^3 end;local function c_a(aab)local bab=(2 *db)/3
  351. return aab==0 and 0 or(aab==1 and 1 or
  352. (-2 ^ (10 *
  353. aab-10)*bb((aab*10 -10.75)*bab)))end
  354. local function d_a(aab)return
  355. aab==0 and 0 or 2 ^ (10 *aab-10)end
  356. local function _aa(aab)return aab==0 and 0 or 2 ^ (10 *aab-10)end
  357. local function aaa(aab)local bab=1.70158;local cab=bab*1.525;return
  358. aab<0.5 and( (2 *aab)^2 *
  359. ( (cab+1)*2 *aab-cab))/2 or
  360. (
  361. (2 *aab-2)^2 * ( (cab+1)* (aab*2 -2)+cab)+2)/2 end;local function baa(aab)return
  362. aab<0.5 and 4 *aab^3 or 1 - (-2 *aab+2)^3 /2 end
  363. local function caa(aab)
  364. local bab=(2 *db)/4.5
  365. return
  366. aab==0 and 0 or(aab==1 and 1 or
  367. (
  368. aab<0.5 and- (2 ^ (20 *aab-10)*
  369. bb((20 *aab-11.125)*bab))/2 or
  370. (2 ^ (-20 *aab+10)*bb((20 *aab-11.125)*bab))/2 +1))end
  371. local function daa(aab)return
  372. aab==0 and 0 or(aab==1 and 1 or
  373. (
  374. aab<0.5 and 2 ^ (20 *aab-10)/2 or(2 -2 ^ (-20 *aab+10))/2))end;local function _ba(aab)return
  375. aab<0.5 and 2 *aab^2 or 1 - (-2 *aab+2)^2 /2 end;local function aba(aab)return
  376. aab<0.5 and 8 *
  377. aab^4 or 1 - (-2 *aab+2)^4 /2 end;local function bba(aab)return
  378. aab<0.5 and 16 *
  379. aab^5 or 1 - (-2 *aab+2)^5 /2 end;local function cba(aab)
  380. return aab^2 end;local function dba(aab)return aab^4 end
  381. local function _ca(aab)return aab^5 end;local function aca(aab)local bab=1.70158;local cab=bab+1;return
  382. 1 +cab* (aab-1)^3 +bab* (aab-1)^2 end;local function bca(aab)return 1 -
  383. (1 -aab)^3 end
  384. local function cca(aab)local bab=(2 *db)/3;return
  385.  
  386. aab==0 and 0 or(aab==1 and 1 or(
  387. 2 ^ (-10 *aab)*bb((aab*10 -0.75)*bab)+1))end
  388. local function dca(aab)return aab==1 and 1 or 1 -2 ^ (-10 *aab)end;local function _da(aab)return 1 - (1 -aab)* (1 -aab)end;local function ada(aab)return 1 - (
  389. 1 -aab)^4 end;local function bda(aab)
  390. return 1 - (1 -aab)^5 end
  391. local function cda(aab)return 1 -_c(1 -ac(aab,2))end;local function dda(aab)return _c(1 -ac(aab-1,2))end
  392. local function __b(aab)return
  393.  
  394. aab<0.5 and(1 -_c(
  395. 1 -ac(2 *aab,2)))/2 or(_c(1 -ac(-2 *aab+2,2))+1)/2 end
  396. local function a_b(aab)local bab=7.5625;local cab=2.75
  397. if(aab<1 /cab)then return bab*aab*aab elseif(aab<2 /cab)then local dab=aab-
  398. 1.5 /cab;return bab*dab*dab+0.75 elseif(aab<2.5 /cab)then local dab=aab-
  399. 2.25 /cab;return bab*dab*dab+0.9375 else
  400. local dab=aab-2.625 /cab;return bab*dab*dab+0.984375 end end;local function b_b(aab)return 1 -a_b(1 -aab)end;local function c_b(aab)return
  401. x<0.5 and(1 -
  402. a_b(1 -2 *aab))/2 or(1 +a_b(2 *aab-1))/2 end
  403. local d_b={linear=cc,lerp=bc,flip=dc,easeIn=_d,easeInSine=dd,easeInBack=a_a,easeInCubic=b_a,easeInElastic=c_a,easeInExpo=_aa,easeInQuad=cba,easeInQuart=dba,easeInQuint=_ca,easeInCirc=cda,easeInBounce=b_b,easeOut=ad,easeOutSine=cd,easeOutBack=aca,easeOutCubic=bca,easeOutElastic=cca,easeOutExpo=dca,easeOutQuad=_da,easeOutQuart=ada,easeOutQuint=bda,easeOutCirc=dda,easeOutBounce=a_b,easeInOut=bd,easeInOutSine=__a,easeInOutBack=aaa,easeInOutCubic=baa,easeInOutElastic=caa,easeInOutExpo=daa,easeInOutQuad=_ba,easeInOutQuart=aba,easeInOutQuint=bba,easeInOutCirc=__b,easeInOutBounce=c_b}local _ab=da("xmlParser")
  404. return
  405. {VisualObject=function(aab,bab)local cab={}local dab="linear"
  406. local function _bb(dbb,_cb)for acb,bcb in pairs(cab)do if(bcb.timerId==_cb)then
  407. return bcb end end end
  408. local function abb(dbb,_cb,acb,bcb,ccb,dcb,_db,adb,bdb,cdb)local ddb,__c=bdb(dbb)if(cab[_db]~=nil)then
  409. os.cancelTimer(cab[_db].timerId)end;cab[_db]={}
  410. cab[_db].call=function()
  411. local a_c=cab[_db].progress
  412. local b_c=math.floor(d_b.lerp(ddb,_cb,d_b[dcb](a_c/bcb))+0.5)
  413. local c_c=math.floor(d_b.lerp(__c,acb,d_b[dcb](a_c/bcb))+0.5)cdb(dbb,b_c,c_c)end
  414. cab[_db].finished=function()cdb(dbb,_cb,acb)if(adb~=nil)then adb(dbb)end end;cab[_db].timerId=os.startTimer(0.05 +ccb)
  415. cab[_db].progress=0;cab[_db].duration=bcb;cab[_db].mode=dcb
  416. dbb:listenEvent("other_event")end
  417. local function bbb(dbb,_cb,acb,bcb,ccb,...)local dcb={...}if(cab[bcb]~=nil)then
  418. os.cancelTimer(cab[bcb].timerId)end;cab[bcb]={}local _db=1;cab[bcb].call=function()
  419. local adb=dcb[_db]ccb(dbb,adb)end end
  420. local cbb={animatePosition=function(dbb,_cb,acb,bcb,ccb,dcb,_db)dcb=dcb or dab;bcb=bcb or 1;ccb=ccb or 0
  421. _cb=math.floor(_cb+0.5)acb=math.floor(acb+0.5)
  422. abb(dbb,_cb,acb,bcb,ccb,dcb,"position",_db,dbb.getPosition,dbb.setPosition)return dbb end,animateSize=function(dbb,_cb,acb,bcb,ccb,dcb,_db)dcb=
  423. dcb or dab;bcb=bcb or 1;ccb=ccb or 0
  424. abb(dbb,_cb,acb,bcb,ccb,dcb,"size",_db,dbb.getSize,dbb.setSize)return dbb end,animateOffset=function(dbb,_cb,acb,bcb,ccb,dcb,_db)dcb=
  425. dcb or dab;bcb=bcb or 1;ccb=ccb or 0
  426. abb(dbb,_cb,acb,bcb,ccb,dcb,"offset",_db,dbb.getOffset,dbb.setOffset)return dbb end,animateBackground=function(dbb,_cb,acb,bcb,ccb,dcb)ccb=
  427. ccb or dab;acb=acb or 1;bcb=bcb or 0
  428. bbb(dbb,_cb,nil,acb,bcb,ccb,"background",dcb,dbb.getBackground,dbb.setBackground)return dbb end,doneHandler=function(dbb,_cb,...)
  429. for acb,bcb in
  430. pairs(cab)do if(bcb.timerId==_cb)then cab[acb]=nil
  431. dbb:sendEvent("animation_done",dbb,"animation_done",acb)end end end,onAnimationDone=function(dbb,...)
  432. for _cb,acb in
  433. pairs(table.pack(...))do if(type(acb)=="function")then
  434. dbb:registerEvent("animation_done",acb)end end;return dbb end,eventHandler=function(dbb,_cb,acb,...)
  435. aab.eventHandler(dbb,_cb,acb,...)
  436. if(_cb=="timer")then local bcb=_bb(dbb,acb)
  437. if(bcb~=nil)then
  438. if(bcb.progress<bcb.duration)then
  439. bcb.call()bcb.progress=bcb.progress+0.05
  440. bcb.timerId=os.startTimer(0.05)else bcb.finished()dbb:doneHandler(acb)end end end end}return cbb end}end
  441. aa["plugins"]["basaltAdditions"]=function(...)return
  442. {basalt=function()return
  443. {cool=function()print("ello")sleep(2)end}end}end
  444. aa["plugins"]["dynamicValues"]=function(...)local ab=da("utils")local bb=ab.tableCount
  445. return
  446. {VisualObject=function(cb,db)
  447. local _c={}local ac={}local bc={x="getX",y="getY",w="getWidth",h="getHeight"}
  448. local function cc(bd)
  449. local cd,dd=pcall(load(
  450. "return "..bd,"",nil,{math=math}))if not(cd)then
  451. error(bd.." - is not a valid dynamic value string")end;return dd end
  452. local function dc(bd,cd,dd)local __a={}local a_a=bc
  453. for d_a,_aa in pairs(a_a)do for aaa in dd:gmatch("%a+%."..d_a)do
  454. local baa=aaa:gsub("%."..d_a,"")
  455. if(baa~="self")and(baa~="parent")then table.insert(__a,baa)end end end;local b_a=bd:getParent()local c_a={}
  456. for d_a,_aa in pairs(__a)do
  457. c_a[_aa]=b_a:getChild(_aa)if(c_a[_aa]==nil)then
  458. error("Dynamic Values - unable to find object: ".._aa)end end;c_a["self"]=bd;c_a["parent"]=b_a
  459. _c[cd]=function()local d_a=dd
  460. for _aa,aaa in pairs(a_a)do
  461. for baa in
  462. dd:gmatch("%w+%.".._aa)do local caa=c_a[baa:gsub("%.".._aa,"")]if(caa~=nil)then
  463. d_a=d_a:gsub(baa,caa[aaa](caa))else
  464. error("Dynamic Values - unable to find object: "..baa)end end end;ac[cd]=math.floor(cc(d_a)+0.5)end;_c[cd]()end
  465. local function _d(bd)
  466. if(bb(_c)>0)then for dd,__a in pairs(_c)do __a()end
  467. local cd={x="getX",y="getY",w="getWidth",h="getHeight"}
  468. for dd,__a in pairs(cd)do
  469. if(_c[dd]~=nil)then
  470. if(ac[dd]~=bd[__a](bd))then if(dd=="x")or(dd=="y")then
  471. cb.setPosition(bd,
  472. ac["x"]or bd:getX(),ac["y"]or bd:getY())end;if(dd=="w")or(dd=="h")then
  473. cb.setSize(bd,
  474. ac["w"]or bd:getWidth(),ac["h"]or bd:getHeight())end end end end end end
  475. local ad={updatePositions=_d,createDynamicValue=dc,setPosition=function(bd,cd,dd,__a)ac.x=cd;ac.y=dd
  476. if(type(cd)=="string")then dc(bd,"x",cd)else _c["x"]=nil end
  477. if(type(dd)=="string")then dc(bd,"y",dd)else _c["y"]=nil end;cb.setPosition(bd,ac.x,ac.y,__a)return bd end,setSize=function(bd,cd,dd,__a)
  478. ac.w=cd;ac.h=dd
  479. if(type(cd)=="string")then dc(bd,"w",cd)else _c["w"]=nil end
  480. if(type(dd)=="string")then dc(bd,"h",dd)else _c["h"]=nil end;cb.setSize(bd,ac.w,ac.h,__a)return bd end,customEventHandler=function(bd,cd,...)
  481. cb.customEventHandler(bd,cd,...)if
  482. (cd=="basalt_FrameReposition")or(cd=="basalt_FrameResize")then _d(bd)end end}return ad end}end
  483. aa["plugins"]["shadow"]=function(...)local ab=da("xmlParser")
  484. return
  485. {VisualObject=function(bb)local cb=false
  486. local db={setShadow=function(_c,ac)cb=ac
  487. _c:updateDraw()return _c end,getShadow=function(_c)return cb end,draw=function(_c)bb.draw(_c)
  488. _c:addDraw("shadow",function()
  489. if(
  490. cb~=false)then local ac,bc=_c:getSize()
  491. if(cb)then
  492. _c:addBackgroundBox(ac+1,2,1,bc,cb)_c:addBackgroundBox(2,bc+1,ac,1,cb)
  493. _c:addForegroundBox(ac+1,2,1,bc,cb)_c:addForegroundBox(2,bc+1,ac,1,cb)end end end)end}return db end}end
  494. aa["plugins"]["textures"]=function(...)local ab=da("images")local bb=da("utils")
  495. local cb=da("xmlParser")
  496. return
  497. {VisualObject=function(db)local _c,ac=1,true;local bc,cc,dc;local _d="default"
  498. local ad={addTexture=function(bd,cd,dd)bc=ab.loadImageAsBimg(cd)
  499. cc=bc[1]
  500. if(dd)then if(bc.animated)then bd:listenEvent("other_event")local __a=bc[_c].duration or
  501. bc.secondsPerFrame or 0.2
  502. dc=os.startTimer(__a)end end;bd:setBackground(false)bd:setForeground(false)
  503. bd:setDrawState("texture-base",true)bd:updateDraw()return bd end,setTextureMode=function(bd,cd)_d=
  504. cd or _d;bd:updateDraw()return bd end,setInfinitePlay=function(bd,cd)ac=cd
  505. return bd end,eventHandler=function(bd,cd,dd,...)db.eventHandler(bd,cd,dd,...)
  506. if(cd=="timer")then
  507. if
  508. (dd==dc)then
  509. if(bc[_c+1]~=nil)then _c=_c+1;cc=bc[_c]local __a=
  510. bc[_c].duration or bc.secondsPerFrame or 0.2
  511. dc=os.startTimer(__a)bd:updateDraw()else
  512. if(ac)then _c=1;cc=bc[1]local __a=
  513. bc[_c].duration or bc.secondsPerFrame or 0.2
  514. dc=os.startTimer(__a)bd:updateDraw()end end end end end,draw=function(bd)
  515. db.draw(bd)
  516. bd:addDraw("texture-base",function()local cd=bd:getParent()or bd
  517. local dd,__a=bd:getPosition()local a_a,b_a=bd:getSize()local c_a,d_a=cd:getSize()local _aa=bc.width or
  518. #bc[_c][1][1]local aaa=bc.height or#bc[_c]
  519. local baa,caa=0,0
  520. if(_d=="center")then
  521. baa=dd+math.floor((a_a-_aa)/2 +0.5)-1
  522. caa=__a+math.floor((b_a-aaa)/2 +0.5)-1 elseif(_d=="default")then baa,caa=dd,__a elseif(_d=="right")then
  523. baa,caa=dd+a_a-_aa,__a+b_a-aaa end;local daa=dd-baa;local _ba=__a-caa;if baa<dd then baa=dd;_aa=_aa-daa end;if
  524. caa<__a then caa=__a;aaa=aaa-_ba end;if baa+_aa>dd+a_a then
  525. _aa=(dd+a_a)-baa end
  526. if caa+aaa>__a+b_a then aaa=(__a+b_a)-caa end
  527. for k=1,aaa do if(cc[k+_ba]~=nil)then local aba,bba,cba=table.unpack(cc[k+_ba])
  528. bd:addBlit(1,k,aba:sub(daa,
  529. daa+_aa),bba:sub(daa,daa+_aa),cba:sub(daa,daa+_aa))end end end,1)bd:setDrawState("texture-base",false)end}return ad end}end
  530. aa["plugins"]["pixelbox"]=function(...)
  531. local ab,bb,cb=table.sort,table.concat,string.char;local function db(dc,_d)return dc[2]>_d[2]end
  532. local _c={{5,256,16,8,64,32},{4,16,16384,256,128},[4]={4,64,1024,256,128},[8]={4,512,2048,256,1},[16]={4,2,16384,256,1},[32]={4,8192,4096,256,1},[64]={4,4,1024,256,1},[128]={6,32768,256,1024,2048,4096,16384},[256]={6,1,128,2,512,4,8192},[512]={4,8,2048,256,128},[1024]={4,4,64,128,32768},[2048]={4,512,8,128,32768},[4096]={4,8192,32,128,32768},[8192]={3,32,4096,256128},[16384]={4,2,16,128,32768},[32768]={5,128,1024,2048,4096,16384}}local ac={}for i=0,15 do ac[("%x"):format(i)]=2 ^i end
  533. local bc={}for i=0,15 do bc[2 ^i]=("%x"):format(i)end
  534. local function cc(dc,_d)_d=_d or"f"local ad,bd=#
  535. dc[1],#dc;local cd={}local dd={}local __a=false
  536. local function a_a()
  537. for y=1,bd*3 do for x=1,ad*2 do
  538. if not dd[y]then dd[y]={}end;dd[y][x]=_d end end;for _aa,aaa in ipairs(dc)do
  539. for x=1,#aaa do local baa=aaa:sub(x,x)dd[_aa][x]=ac[baa]end end end;a_a()local function b_a(_aa,aaa)ad,bd=_aa,aaa;dd={}__a=false;a_a()end
  540. local function c_a(_aa,aaa,baa,caa,daa,_ba)
  541. local aba={_aa,aaa,baa,caa,daa,_ba}local bba={}local cba={}local dba=0
  542. for i=1,6 do local cca=aba[i]if not bba[cca]then dba=dba+1
  543. bba[cca]={0,dba}end;local dca=bba[cca]local _da=dca[1]+1;dca[1]=_da
  544. cba[dca[2]]={cca,_da}end;local _ca=#cba
  545. while _ca>2 do ab(cba,db)local cca=_c[cba[_ca][1]]
  546. local dca,_da=1,false;local ada=_ca-1
  547. for i=2,cca[1]do if _da then break end;local dda=cca[i]for j=1,ada do if cba[j][1]==dda then dca=j
  548. _da=true;break end end end;local bda,cda=cba[_ca][1],cba[dca][1]
  549. for i=1,6 do if aba[i]==bda then aba[i]=cda
  550. local dda=cba[dca]dda[2]=dda[2]+1 end end;cba[_ca]=nil;_ca=_ca-1 end;local aca=128;local bca=aba[6]if aba[1]~=bca then aca=aca+1 end;if aba[2]~=bca then aca=aca+
  551. 2 end;if aba[3]~=bca then aca=aca+4 end;if
  552. aba[4]~=bca then aca=aca+8 end;if aba[5]~=bca then aca=aca+16 end;if
  553. cba[1][1]==aba[6]then return cb(aca),cba[2][1],aba[6]else
  554. return cb(aca),cba[1][1],aba[6]end end
  555. local function d_a()local _aa=ad*2;local aaa=0
  556. for y=1,bd*3,3 do aaa=aaa+1;local baa=dd[y]local caa=dd[y+1]local daa=dd[y+2]
  557. local _ba,aba,bba={},{},{}local cba=0
  558. for x=1,_aa,2 do local dba=x+1
  559. local _ca,aca,bca,cca,dca,_da=baa[x],baa[dba],caa[x],caa[dba],daa[x],daa[dba]local ada,bda,cda=" ",1,_ca;if not(
  560. aca==_ca and bca==_ca and cca==_ca and dca==_ca and _da==_ca)then
  561. ada,bda,cda=c_a(_ca,aca,bca,cca,dca,_da)end;cba=cba+1
  562. _ba[cba]=ada;aba[cba]=bc[bda]bba[cba]=bc[cda]end;cd[aaa]={bb(_ba),bb(aba),bb(bba)}end;__a=true end
  563. return
  564. {convert=d_a,generateCanvas=a_a,setSize=b_a,getSize=function()return ad,bd end,set=function(_aa,aaa)dc=_aa;_d=aaa or _d;dd={}__a=false;a_a()end,get=function(_aa)if
  565. not __a then d_a()end
  566. return _aa~=nil and cd[_aa]or cd end}end
  567. return
  568. {Image=function(dc,_d)
  569. return
  570. {shrink=function(ad)local bd=ad:getImageFrame(1)local cd={}for __a,a_a in pairs(bd)do if(type(__a)=="number")then
  571. table.insert(cd,a_a[3])end end
  572. local dd=cc(cd,ad:getBackground()).get()ad:setImage(dd)return ad end,getShrinkedImage=function(ad)
  573. local bd=ad:getImageFrame(1)local cd={}for dd,__a in pairs(bd)do
  574. if(type(dd)=="number")then table.insert(cd,__a[3])end end;return
  575. cc(cd,ad:getBackground()).get()end}end}end
  576. aa["plugins"]["reactive"]=function(...)local ab=da("xmlParser")local bb={}
  577. bb.currentEffect=nil
  578. bb.observable=function(ac)local bc=ac;local cc={}
  579. local dc=function()if(bb.currentEffect~=nil)then
  580. table.insert(cc,bb.currentEffect)
  581. table.insert(bb.currentEffect.dependencies,cc)end;return bc end
  582. local _d=function(ad)bc=ad;local bd={}for cd,dd in ipairs(cc)do bd[cd]=dd end;for cd,dd in ipairs(bd)do
  583. dd.execute()end end;return dc,_d end
  584. bb.untracked=function(ac)local bc=bb.currentEffect;bb.currentEffect=nil;local cc=ac()
  585. bb.currentEffect=bc;return cc end
  586. bb.effect=function(ac)local bc={dependencies={}}
  587. local cc=function()bb.clearEffectDependencies(bc)
  588. local dc=bb.currentEffect;bb.currentEffect=bc;ac()bb.currentEffect=dc end;bc.execute=cc;bc.execute()end
  589. bb.derived=function(ac)local bc,cc=bb.observable()
  590. bb.effect(function()cc(ac())end)return bc end
  591. bb.clearEffectDependencies=function(ac)
  592. for bc,cc in ipairs(ac.dependencies)do for dc,_d in ipairs(cc)do if(_d==ac)then
  593. table.remove(cc,dc)end end end;ac.dependencies={}end
  594. local cb={fromXML=function(ac)local bc=ab.parseText(ac)local cc=nil
  595. for dc,_d in ipairs(bc)do if(_d.tag=="script")then cc=_d.value
  596. table.remove(bc,dc)break end end;return{nodes=bc,script=cc}end}
  597. local db=function(ac,bc)return load(ac,nil,"t",bc)()end
  598. local _c=function(ac,bc,cc,dc)
  599. bc(ac,function(...)local _d,ad=pcall(load(cc,nil,"t",dc))if not _d then
  600. error("XML Error: "..ad)end end)end
  601. return
  602. {basalt=function(ac)
  603. local bc=function(dc,_d)local ad=_d[dc.tag]
  604. if(ad~=nil)then local dd={}for __a,a_a in pairs(dc.attributes)do
  605. dd[__a]=load("return "..a_a,nil,"t",_d)end
  606. return ac.createObjectsFromLayout(ad,dd)end;local bd=dc.tag:gsub("^%l",string.upper)
  607. local cd=ac:createObject(bd,dc.attributes["id"])
  608. for dd,__a in pairs(dc.attributes)do
  609. if(dd:sub(1,2)=="on")then
  610. _c(cd,cd[dd],__a.."()",_d)else
  611. local a_a=function()local b_a=load("return "..__a,nil,"t",_d)()
  612. cd:setProperty(dd,b_a)end;ac.effect(a_a)end end
  613. for dd,__a in ipairs(dc.children)do
  614. local a_a=ac.createObjectsFromXMLNode(__a,_d)for b_a,c_a in ipairs(a_a)do cd:addChild(c_a)end end;return{cd}end
  615. local cc={observable=bb.observable,untracked=bb.untracked,effect=bb.effect,derived=bb.derived,layout=function(dc)if(not fs.exists(dc))then
  616. error("Can't open file "..dc)end;local _d=fs.open(dc,"r")
  617. local ad=_d.readAll()_d.close()return cb.fromXML(ad)end,createObjectsFromLayout=function(dc,_d)
  618. local ad=_ENV;ad.props={}local bd={}for dd,__a in pairs(_d)do
  619. bd[dd]=ac.derived(function()return __a()end)end
  620. setmetatable(ad.props,{__index=function(dd,__a)return bd[__a]()end})if(dc.script~=nil)then db(dc.script,ad)end;local cd={}for dd,__a in
  621. ipairs(dc.nodes)do local a_a=bc(__a,ad)
  622. for b_a,c_a in ipairs(a_a)do table.insert(cd,c_a)end end;return cd end}return cc end,Container=function(ac,bc)
  623. local cc={loadLayout=function(dc,_d,ad)
  624. local bd={}if(ad==nil)then ad={}end
  625. for __a,a_a in pairs(ad)do bd[__a]=function()return a_a end end;local cd=bc.layout(_d)
  626. local dd=bc.createObjectsFromLayout(cd,bd)for __a,a_a in ipairs(dd)do dc:addChild(a_a)end;return dc end}return cc end}end
  627. aa["plugins"]["themes"]=function(...)
  628. local ab={BaseFrameBG=colors.lightGray,BaseFrameText=colors.black,FrameBG=colors.gray,FrameText=colors.black,ButtonBG=colors.gray,ButtonText=colors.black,CheckboxBG=colors.lightGray,CheckboxText=colors.black,InputBG=colors.black,InputText=colors.lightGray,TextfieldBG=colors.black,TextfieldText=colors.white,ListBG=colors.gray,ListText=colors.black,MenubarBG=colors.gray,MenubarText=colors.black,DropdownBG=colors.gray,DropdownText=colors.black,RadioBG=colors.gray,RadioText=colors.black,SelectionBG=colors.black,SelectionText=colors.lightGray,GraphicBG=colors.black,ImageBG=colors.black,PaneBG=colors.black,ProgramBG=colors.black,ProgressbarBG=colors.gray,ProgressbarText=colors.black,ProgressbarActiveBG=colors.black,ScrollbarBG=colors.lightGray,ScrollbarText=colors.gray,ScrollbarSymbolColor=colors.black,SliderBG=false,SliderText=colors.gray,SliderSymbolColor=colors.black,SwitchBG=colors.lightGray,SwitchText=colors.gray,LabelBG=false,LabelText=colors.black,GraphBG=colors.gray,GraphText=colors.black}
  629. local bb={Container=function(cb,db,_c)local ac={}
  630. local bc={getTheme=function(cc,dc)local _d=cc:getParent()return ac[dc]or(_d~=nil and _d:getTheme(dc)or
  631. ab[dc])end,setTheme=function(cc,dc,_d)
  632. if(
  633. type(dc)=="table")then ac=dc elseif(type(dc)=="string")then ac[dc]=_d end;cc:updateDraw()return cc end}return bc end,basalt=function()
  634. return
  635. {getTheme=function(cb)return
  636. ab[cb]end,setTheme=function(cb,db)if(type(cb)=="table")then ab=cb elseif(type(cb)=="string")then
  637. ab[cb]=db end end}end}
  638. for cb,db in
  639. pairs({"BaseFrame","Frame","ScrollableFrame","MovableFrame","Button","Checkbox","Dropdown","Graph","Graphic","Input","Label","List","Menubar","Pane","Program","Progressbar","Radio","Scrollbar","Slider","Switch","Textfield"})do
  640. bb[db]=function(_c,ac,bc)
  641. local cc={init=function(dc)if(_c.init(dc))then local _d=dc:getParent()or dc
  642. dc:setBackground(_d:getTheme(db.."BG"))
  643. dc:setForeground(_d:getTheme(db.."Text"))end end}return cc end end;return bb end;aa["libraries"]={}
  644. aa["libraries"]["basaltDraw"]=function(...)
  645. local ab=da("tHex")local bb=da("utils")local cb=bb.splitString;local db,_c=string.sub,string.rep
  646. return
  647. function(ac)local bc=ac or
  648. term.current()local cc;local dc,_d=bc.getSize()local ad={}local bd={}local cd={}
  649. local dd;local __a={}local function a_a()dd=_c(" ",dc)
  650. for n=0,15 do local caa=2 ^n;local daa=ab[caa]__a[caa]=_c(daa,dc)end end;a_a()
  651. local function b_a()a_a()local caa=dd
  652. local daa=__a[colors.white]local _ba=__a[colors.black]
  653. for currentY=1,_d do
  654. ad[currentY]=db(
  655. ad[currentY]==nil and caa or
  656. ad[currentY]..caa:sub(1,dc-ad[currentY]:len()),1,dc)
  657. cd[currentY]=db(cd[currentY]==nil and daa or cd[currentY]..daa:sub(1,dc-
  658. cd[currentY]:len()),1,dc)
  659. bd[currentY]=db(bd[currentY]==nil and _ba or bd[currentY].._ba:sub(1,dc-
  660. bd[currentY]:len()),1,dc)end end;b_a()
  661. local function c_a(caa,daa,_ba,aba,bba)
  662. if#_ba==#aba and#_ba==#bba then
  663. if daa>=1 and daa<=_d then
  664. if
  665. caa+#_ba>0 and caa<=dc then local cba,dba,_ca;local aca,bca,cca=ad[daa],cd[daa],bd[daa]
  666. local dca,_da=1,#_ba
  667. if caa<1 then dca=1 -caa+1;_da=dc-caa+1 elseif caa+#_ba>dc then _da=dc-caa+1 end;cba=db(aca,1,caa-1)..db(_ba,dca,_da)dba=
  668. db(bca,1,caa-1)..db(aba,dca,_da)_ca=db(cca,1,caa-1)..
  669. db(bba,dca,_da)
  670. if caa+#_ba<=dc then cba=cba..
  671. db(aca,caa+#_ba,dc)
  672. dba=dba..db(bca,caa+#_ba,dc)_ca=_ca..db(cca,caa+#_ba,dc)end;ad[daa],cd[daa],bd[daa]=cba,dba,_ca end end end end
  673. local function d_a(caa,daa,_ba)
  674. if daa>=1 and daa<=_d then
  675. if caa+#_ba>0 and caa<=dc then local aba;local bba=ad[daa]
  676. local cba,dba=1,#_ba
  677. if caa<1 then cba=1 -caa+1;dba=dc-caa+1 elseif caa+#_ba>dc then dba=dc-caa+1 end;aba=db(bba,1,caa-1)..db(_ba,cba,dba)
  678. if
  679. caa+#_ba<=dc then aba=aba..db(bba,caa+#_ba,dc)end;ad[daa]=aba end end end
  680. local function _aa(caa,daa,_ba)
  681. if daa>=1 and daa<=_d then
  682. if caa+#_ba>0 and caa<=dc then local aba;local bba=bd[daa]
  683. local cba,dba=1,#_ba
  684. if caa<1 then cba=1 -caa+1;dba=dc-caa+1 elseif caa+#_ba>dc then dba=dc-caa+1 end;aba=db(bba,1,caa-1)..db(_ba,cba,dba)
  685. if
  686. caa+#_ba<=dc then aba=aba..db(bba,caa+#_ba,dc)end;bd[daa]=aba end end end
  687. local function aaa(caa,daa,_ba)
  688. if daa>=1 and daa<=_d then
  689. if caa+#_ba>0 and caa<=dc then local aba;local bba=cd[daa]
  690. local cba,dba=1,#_ba
  691. if caa<1 then cba=1 -caa+1;dba=dc-caa+1 elseif caa+#_ba>dc then dba=dc-caa+1 end;aba=db(bba,1,caa-1)..db(_ba,cba,dba)
  692. if
  693. caa+#_ba<=dc then aba=aba..db(bba,caa+#_ba,dc)end;cd[daa]=aba end end end
  694. local baa={setSize=function(caa,daa)dc,_d=caa,daa;b_a()end,setMirror=function(caa)cc=caa end,setBG=function(caa,daa,_ba)
  695. _aa(caa,daa,_ba)end,setText=function(caa,daa,_ba)d_a(caa,daa,_ba)end,setFG=function(caa,daa,_ba)
  696. aaa(caa,daa,_ba)end,blit=function(caa,daa,_ba,aba,bba)c_a(caa,daa,_ba,aba,bba)end,drawBackgroundBox=function(caa,daa,_ba,aba,bba)
  697. local cba=_c(ab[bba],_ba)for n=1,aba do _aa(caa,daa+ (n-1),cba)end end,drawForegroundBox=function(caa,daa,_ba,aba,bba)
  698. local cba=_c(ab[bba],_ba)for n=1,aba do aaa(caa,daa+ (n-1),cba)end end,drawTextBox=function(caa,daa,_ba,aba,bba)
  699. local cba=_c(bba,_ba)for n=1,aba do d_a(caa,daa+ (n-1),cba)end end,update=function()
  700. local caa,daa=bc.getCursorPos()local _ba=false
  701. if(bc.getCursorBlink~=nil)then _ba=bc.getCursorBlink()end;bc.setCursorBlink(false)if(cc~=nil)then
  702. cc.setCursorBlink(false)end
  703. for n=1,_d do bc.setCursorPos(1,n)
  704. bc.blit(ad[n],cd[n],bd[n])if(cc~=nil)then cc.setCursorPos(1,n)
  705. cc.blit(ad[n],cd[n],bd[n])end end;bc.setBackgroundColor(colors.black)
  706. bc.setCursorBlink(_ba)bc.setCursorPos(caa,daa)
  707. if(cc~=nil)then
  708. cc.setBackgroundColor(colors.black)cc.setCursorBlink(_ba)cc.setCursorPos(caa,daa)end end,setTerm=function(caa)
  709. bc=caa end}return baa end end
  710. aa["libraries"]["basaltEvent"]=function(...)
  711. return
  712. function()local ab={}
  713. local bb={registerEvent=function(cb,db,_c)
  714. if(ab[db]==nil)then ab[db]={}end;table.insert(ab[db],_c)end,removeEvent=function(cb,db,_c)ab[db][_c[db]]=
  715. nil end,hasEvent=function(cb,db)return ab[db]~=nil end,getEventCount=function(cb,db)return
  716. ab[db]~=nil and#ab[db]or 0 end,getEvents=function(cb)
  717. local db={}for _c,ac in pairs(ab)do table.insert(db,_c)end;return db end,clearEvent=function(cb,db)ab[db]=
  718. nil end,clear=function(cb,db)ab={}end,sendEvent=function(cb,db,...)local _c
  719. if(ab[db]~=nil)then for ac,bc in pairs(ab[db])do
  720. local cc=bc(...)if(cc==false)then _c=cc end end end;return _c end}bb.__index=bb;return bb end end
  721. aa["libraries"]["bimg"]=function(...)local ab,bb=string.sub,string.rep
  722. local function cb(db,_c)local ac,bc=0,0
  723. local cc,dc,_d={},{},{}local ad,bd=1,1;local cd={}
  724. local function dd()
  725. for y=1,bc do if(cc[y]==nil)then cc[y]=bb(" ",ac)else cc[y]=cc[y]..
  726. bb(" ",ac-#cc[y])end;if
  727. (dc[y]==nil)then dc[y]=bb("0",ac)else
  728. dc[y]=dc[y]..bb("0",ac-#dc[y])end
  729. if(_d[y]==nil)then _d[y]=bb("f",ac)else _d[y]=
  730. _d[y]..bb("f",ac-#_d[y])end end end
  731. local __a=function(d_a,_aa,aaa)ad=_aa or ad;bd=aaa or bd
  732. if(cc[bd]==nil)then cc[bd]=bb(" ",ad-1)..d_a..
  733. bb(" ",ac- (#d_a+ad))else cc[bd]=
  734. ab(cc[bd],1,ad-1)..
  735. bb(" ",ad-#cc[bd])..d_a..ab(cc[bd],ad+#d_a,ac)end;if(#cc[bd]>ac)then ac=#cc[bd]end;if(bd>bc)then bc=bd end
  736. _c.updateSize(ac,bc)end
  737. local a_a=function(d_a,_aa,aaa)ad=_aa or ad;bd=aaa or bd
  738. if(_d[bd]==nil)then _d[bd]=bb("f",ad-1)..d_a..
  739. bb("f",ac- (#d_a+ad))else _d[bd]=
  740. ab(_d[bd],1,ad-1)..
  741. bb("f",ad-#_d[bd])..d_a..ab(_d[bd],ad+#d_a,ac)end;if(#_d[bd]>ac)then ac=#_d[bd]end;if(bd>bc)then bc=bd end
  742. _c.updateSize(ac,bc)end
  743. local b_a=function(d_a,_aa,aaa)ad=_aa or ad;bd=aaa or bd
  744. if(dc[bd]==nil)then dc[bd]=bb("0",ad-1)..d_a..
  745. bb("0",ac- (#d_a+ad))else dc[bd]=
  746. ab(dc[bd],1,ad-1)..
  747. bb("0",ad-#dc[bd])..d_a..ab(dc[bd],ad+#d_a,ac)end;if(#dc[bd]>ac)then ac=#dc[bd]end;if(bd>bc)then bc=bd end
  748. _c.updateSize(ac,bc)end
  749. local function c_a(d_a)cd={}cc,dc,_d={},{},{}
  750. for _aa,aaa in pairs(db)do if(type(_aa)=="string")then cd[_aa]=aaa else
  751. cc[_aa],dc[_aa],_d[_aa]=aaa[1],aaa[2],aaa[3]end end;_c.updateSize(ac,bc)end
  752. if(db~=nil)then if(#db>0)then ac=#db[1][1]bc=#db;c_a(db)end end
  753. return
  754. {recalculateSize=dd,setFrame=c_a,getFrame=function()local d_a={}for _aa,aaa in pairs(cc)do
  755. table.insert(d_a,{aaa,dc[_aa],_d[_aa]})end
  756. for _aa,aaa in pairs(cd)do d_a[_aa]=aaa end;return d_a,ac,bc end,getImage=function()
  757. local d_a={}for _aa,aaa in pairs(cc)do
  758. table.insert(d_a,{aaa,dc[_aa],_d[_aa]})end;return d_a end,setFrameData=function(d_a,_aa)
  759. if(
  760. _aa~=nil)then cd[d_a]=_aa else if(type(d_a)=="table")then cd=d_a end end end,setFrameImage=function(d_a)
  761. for _aa,aaa in pairs(d_a.t)do
  762. cc[_aa]=d_a.t[_aa]dc[_aa]=d_a.fg[_aa]_d[_aa]=d_a.bg[_aa]end end,getFrameImage=function()
  763. return{t=cc,fg=dc,bg=_d}end,getFrameData=function(d_a)if(d_a~=nil)then return cd[d_a]else return cd end end,blit=function(d_a,_aa,aaa,baa,caa)
  764. __a(d_a,baa,caa)b_a(_aa,baa,caa)a_a(aaa,baa,caa)end,text=__a,fg=b_a,bg=a_a,getSize=function()return
  765. ac,bc end,setSize=function(d_a,_aa)local aaa,baa,caa={},{},{}
  766. for _y=1,_aa do
  767. if(cc[_y]~=nil)then aaa[_y]=ab(cc[_y],1,d_a)..bb(" ",
  768. d_a-ac)else aaa[_y]=bb(" ",d_a)end;if(dc[_y]~=nil)then
  769. baa[_y]=ab(dc[_y],1,d_a)..bb("0",d_a-ac)else baa[_y]=bb("0",d_a)end;if
  770. (_d[_y]~=nil)then caa[_y]=ab(_d[_y],1,d_a)..bb("f",d_a-ac)else
  771. caa[_y]=bb("f",d_a)end end;cc,dc,_d=aaa,baa,caa;ac,bc=d_a,_aa end}end
  772. return
  773. function(db)local _c={}
  774. local ac={creator="Bimg Library by NyoriE",date=os.date("!%Y-%m-%dT%TZ")}local bc,cc=0,0;if(db~=nil)then
  775. if(db[1][1][1]~=nil)then bc,cc=ac.width or#db[1][1][1],
  776. ac.height or#db[1]end end;local dc={}
  777. local function _d(cd,dd)cd=cd or#_c+1
  778. local __a=cb(dd,dc)table.insert(_c,cd,__a)if(dd==nil)then
  779. _c[cd].setSize(bc,cc)end;return __a end;local function ad(cd)table.remove(_c,cd or#_c)end
  780. local function bd(cd,dd)
  781. local __a=_c[cd]
  782. if(__a~=nil)then local a_a=cd+dd;if(a_a>=1)and(a_a<=#_c)then table.remove(_c,cd)
  783. table.insert(_c,a_a,__a)end end end
  784. dc={updateSize=function(cd,dd,__a)local a_a=__a==true and true or false
  785. if(cd>bc)then a_a=true;bc=cd end;if(dd>cc)then a_a=true;cc=dd end
  786. if(a_a)then for b_a,c_a in pairs(_c)do c_a.setSize(bc,cc)
  787. c_a.recalculateSize()end end end,text=function(cd,dd,__a,a_a)
  788. local b_a=_c[cd]if(b_a==nil)then b_a=_d(cd)end;b_a.text(dd,__a,a_a)end,fg=function(cd,dd,__a,a_a)
  789. local b_a=_c[cd]if(b_a==nil)then b_a=_d(cd)end;b_a.fg(dd,__a,a_a)end,bg=function(cd,dd,__a,a_a)
  790. local b_a=_c[cd]if(b_a==nil)then b_a=_d(cd)end;b_a.bg(dd,__a,a_a)end,blit=function(cd,dd,__a,a_a,b_a,c_a)
  791. local d_a=_c[cd]if(d_a==nil)then d_a=_d(cd)end;d_a.blit(dd,__a,a_a,b_a,c_a)end,setSize=function(cd,dd)
  792. bc=cd;cc=dd;for __a,a_a in pairs(_c)do a_a.setSize(cd,dd)end end,getFrame=function(cd)if(
  793. _c[cd]~=nil)then return _c[cd].getFrame()end end,getFrameObjects=function()return
  794. _c end,getFrames=function()local cd={}for dd,__a in pairs(_c)do local a_a=__a.getFrame()
  795. table.insert(cd,a_a)end;return cd end,getFrameObject=function(cd)return
  796. _c[cd]end,addFrame=function(cd)if(#_c<=1)then
  797. if(ac.animated==nil)then ac.animated=true end
  798. if(ac.secondsPerFrame==nil)then ac.secondsPerFrame=0.2 end end;return _d(cd)end,removeFrame=ad,moveFrame=bd,setFrameData=function(cd,dd,__a)
  799. if(
  800. _c[cd]~=nil)then _c[cd].setFrameData(dd,__a)end end,getFrameData=function(cd,dd)if(_c[cd]~=nil)then return
  801. _c[cd].getFrameData(dd)end end,getSize=function()return
  802. bc,cc end,setAnimation=function(cd)ac.animation=cd end,setMetadata=function(cd,dd)if(dd~=nil)then ac[cd]=dd else if(
  803. type(cd)=="table")then ac=cd end end end,getMetadata=function(cd)if(
  804. cd~=nil)then return ac[cd]else return ac end end,createBimg=function()
  805. local cd={}
  806. for dd,__a in pairs(_c)do local a_a=__a.getFrame()table.insert(cd,a_a)end;for dd,__a in pairs(ac)do cd[dd]=__a end;cd.width=bc;cd.height=cc;return cd end}
  807. if(db~=nil)then
  808. for cd,dd in pairs(db)do if(type(cd)=="string")then ac[cd]=dd end end
  809. if(ac.width==nil)or(ac.height==nil)then
  810. bc=ac.width or#db[1][1][1]cc=ac.height or#db[1]dc.updateSize(bc,cc,true)end
  811. for cd,dd in pairs(db)do if(type(cd)=="number")then _d(cd,dd)end end else _d(1)end;return dc end end
  812. aa["libraries"]["basaltMon"]=function(...)
  813. local ab={[colors.white]="0",[colors.orange]="1",[colors.magenta]="2",[colors.lightBlue]="3",[colors.yellow]="4",[colors.lime]="5",[colors.pink]="6",[colors.gray]="7",[colors.lightGray]="8",[colors.cyan]="9",[colors.purple]="a",[colors.blue]="b",[colors.brown]="c",[colors.green]="d",[colors.red]="e",[colors.black]="f"}local bb,cb,db,_c=type,string.len,string.rep,string.sub
  814. return
  815. function(ac)local bc={}
  816. for _ba,aba in pairs(ac)do
  817. bc[_ba]={}
  818. for bba,cba in pairs(aba)do local dba=peripheral.wrap(cba)if(dba==nil)then
  819. error("Unable to find monitor "..cba)end;bc[_ba][bba]=dba
  820. bc[_ba][bba].name=cba end end;local cc,dc,_d,ad,bd,cd,dd,__a=1,1,1,1,0,0,0,0;local a_a,b_a=false,1
  821. local c_a,d_a=colors.white,colors.black
  822. local function _aa()local _ba,aba=0,0
  823. for bba,cba in pairs(bc)do local dba,_ca=0,0
  824. for aca,bca in pairs(cba)do local cca,dca=bca.getSize()
  825. dba=dba+cca;_ca=dca>_ca and dca or _ca end;_ba=_ba>dba and _ba or dba;aba=aba+_ca end;dd,__a=_ba,aba end;_aa()
  826. local function aaa()local _ba=0;local aba,bba=0,0
  827. for cba,dba in pairs(bc)do local _ca=0;local aca=0
  828. for bca,cca in pairs(dba)do
  829. local dca,_da=cca.getSize()if(cc-_ca>=1)and(cc-_ca<=dca)then aba=bca end;cca.setCursorPos(
  830. cc-_ca,dc-_ba)_ca=_ca+dca
  831. if(aca<_da)then aca=_da end end;if(dc-_ba>=1)and(dc-_ba<=aca)then bba=cba end
  832. _ba=_ba+aca end;_d,ad=aba,bba end;aaa()
  833. local function baa(_ba,...)local aba={...}return
  834. function()for bba,cba in pairs(bc)do for dba,_ca in pairs(cba)do
  835. _ca[_ba](table.unpack(aba))end end end end
  836. local function caa()baa("setCursorBlink",false)()
  837. if not(a_a)then return end;if(bc[ad]==nil)then return end;local _ba=bc[ad][_d]
  838. if(_ba==nil)then return end;_ba.setCursorBlink(a_a)end
  839. local function daa(_ba,aba,bba)if(bc[ad]==nil)then return end;local cba=bc[ad][_d]
  840. if(cba==nil)then return end;cba.blit(_ba,aba,bba)local dba,_ca=cba.getSize()
  841. if
  842. (cb(_ba)+cc>dba)then local aca=bc[ad][_d+1]if(aca~=nil)then aca.blit(_ba,aba,bba)_d=_d+1;cc=cc+
  843. cb(_ba)end end;aaa()end
  844. return
  845. {clear=baa("clear"),setCursorBlink=function(_ba)a_a=_ba;caa()end,getCursorBlink=function()return a_a end,getCursorPos=function()return cc,dc end,setCursorPos=function(_ba,aba)
  846. cc,dc=_ba,aba;aaa()caa()end,setTextScale=function(_ba)
  847. baa("setTextScale",_ba)()_aa()aaa()b_a=_ba end,getTextScale=function()return b_a end,blit=function(_ba,aba,bba)
  848. daa(_ba,aba,bba)end,write=function(_ba)_ba=tostring(_ba)local aba=cb(_ba)
  849. daa(_ba,db(ab[c_a],aba),db(ab[d_a],aba))end,getSize=function()return dd,__a end,setBackgroundColor=function(_ba)
  850. baa("setBackgroundColor",_ba)()d_a=_ba end,setTextColor=function(_ba)
  851. baa("setTextColor",_ba)()c_a=_ba end,calculateClick=function(_ba,aba,bba)local cba=0
  852. for dba,_ca in pairs(bc)do local aca=0;local bca=0
  853. for cca,dca in pairs(_ca)do
  854. local _da,ada=dca.getSize()if(dca.name==_ba)then return aba+aca,bba+cba end
  855. aca=aca+_da;if(ada>bca)then bca=ada end end;cba=cba+bca end;return aba,bba end}end end
  856. aa["libraries"]["basaltLogs"]=function(...)local ab=""local bb="basaltLog.txt"local cb="Debug"
  857. fs.delete(
  858. ab~=""and ab.."/"..bb or bb)
  859. local db={__call=function(_c,ac,bc)if(ac==nil)then return end
  860. local cc=ab~=""and ab.."/"..bb or bb
  861. local dc=fs.open(cc,fs.exists(cc)and"a"or"w")
  862. dc.writeLine("[Basalt]["..
  863. os.date("%Y-%m-%d %H:%M:%S").."][".. (bc and bc or cb)..
  864. "]: "..tostring(ac))dc.close()end}return setmetatable({},db)end
  865. aa["libraries"]["xmlParser"]=function(...)
  866. local ab={new=function(db)
  867. return
  868. {tag=db,value=nil,attributes={},children={},addChild=function(_c,ac)
  869. table.insert(_c.children,ac)end,addAttribute=function(_c,ac,bc)_c.attributes[ac]=bc end}end}
  870. local bb=function(db,_c)
  871. local ac,bc=string.gsub(_c,"(%w+)=([\"'])(.-)%2",function(_d,ad,bd)
  872. db:addAttribute(_d,"\""..bd.."\"")end)
  873. local cc,dc=string.gsub(_c,"(%w+)={(.-)}",function(_d,ad)db:addAttribute(_d,ad)end)end
  874. local cb={parseText=function(db)local _c={}local ac=ab.new()table.insert(_c,ac)local bc,cc,dc,_d,ad;local bd,cd=1,1
  875. while true do
  876. bc,cd,cc,dc,_d,ad=string.find(db,"<(%/?)([%w_:]+)(.-)(%/?)>",bd)if not bc then break end;local __a=string.sub(db,bd,bc-1)if not
  877. string.find(__a,"^%s*$")then local a_a=(ac.value or"")..__a
  878. _c[#_c].value=a_a end
  879. if ad=="/"then local a_a=ab.new(dc)
  880. bb(a_a,_d)ac:addChild(a_a)elseif cc==""then local a_a=ab.new(dc)bb(a_a,_d)
  881. table.insert(_c,a_a)ac=a_a else local a_a=table.remove(_c)ac=_c[#_c]
  882. if#_c<1 then error("XMLParser: nothing to close with "..
  883. dc)end;if a_a.tag~=dc then
  884. error("XMLParser: trying to close "..a_a.tag.." with "..dc)end;ac:addChild(a_a)end;bd=cd+1 end;local dd=string.sub(db,bd)if#_c>1 then
  885. error("XMLParser: unclosed ".._c[#_c].tag)end;return ac.children end}return cb end
  886. aa["libraries"]["images"]=function(...)local ab,bb=string.sub,math.floor;local function cb(ad)return
  887. {[1]={{},{},paintutils.loadImage(ad)}},"bimg"end;local function db(ad)return
  888. paintutils.loadImage(ad),"nfp"end
  889. local function _c(ad,bd)
  890. local cd=fs.open(ad,bd and"rb"or"r")if(cd==nil)then
  891. error("Path - "..ad.." doesn't exist!")end
  892. local dd=textutils.unserialize(cd.readAll())cd.close()if(dd~=nil)then return dd,"bimg"end end;local function ac(ad)end;local function bc(ad)end;local function cc(ad,bd,cd)
  893. if(ab(ad,-4)==".bimg")then return _c(ad,cd)elseif
  894. (ab(ad,-3)==".bbf")then return ac(ad,cd)else return db(ad,cd)end end;local function dc(ad)
  895. if
  896. (ad:find(".bimg"))then return _c(ad)elseif(ad:find(".bbf"))then return bc(ad)else return cb(ad)end end
  897. local function _d(ad,bd,cd)local dd,__a=ad.width or#
  898. ad[1][1][1],ad.height or#ad[1]local a_a={}
  899. for b_a,c_a in
  900. pairs(ad)do
  901. if(type(b_a)=="number")then local d_a={}
  902. for y=1,cd do local _aa,aaa,baa="","",""
  903. local caa=bb(y/cd*__a+0.5)
  904. if(c_a[caa]~=nil)then
  905. for x=1,bd do local daa=bb(x/bd*dd+0.5)_aa=_aa..
  906. ab(c_a[caa][1],daa,daa)
  907. aaa=aaa..ab(c_a[caa][2],daa,daa)baa=baa..ab(c_a[caa][3],daa,daa)end;table.insert(d_a,{_aa,aaa,baa})end end;table.insert(a_a,b_a,d_a)else a_a[b_a]=c_a end end;a_a.width=bd;a_a.height=cd;return a_a end
  908. return{loadNFP=db,loadBIMG=_c,loadImage=cc,resizeBIMG=_d,loadImageAsBimg=dc}end
  909. aa["libraries"]["utils"]=function(...)local ab=da("tHex")
  910. local bb,cb,db,_c,ac,bc=string.sub,string.find,string.reverse,string.rep,table.insert,string.len
  911. local function cc(cd,dd)local __a={}if cd==""or dd==""then return __a end;local a_a=1
  912. local b_a,c_a=cb(cd,dd,a_a)while b_a do ac(__a,bb(cd,a_a,b_a-1))a_a=c_a+1
  913. b_a,c_a=cb(cd,dd,a_a)end;ac(__a,bb(cd,a_a))return __a end;local function dc(cd)return cd:gsub("{[^}]+}","")end
  914. local function _d(cd,dd)cd=dc(cd)if
  915. (cd=="")or(dd==0)then return{""}end;local __a=cc(cd,"\n")local a_a={}
  916. for b_a,c_a in
  917. pairs(__a)do
  918. if#c_a==0 then table.insert(a_a,"")else
  919. while#c_a>dd do local d_a=dd;for i=dd,1,-1 do if bb(c_a,i,i)==" "then
  920. d_a=i;break end end
  921. if d_a==dd then
  922. local _aa=bb(c_a,1,d_a-1).."-"table.insert(a_a,_aa)c_a=bb(c_a,d_a)else
  923. local _aa=bb(c_a,1,d_a-1)table.insert(a_a,_aa)c_a=bb(c_a,d_a+1)end;if#c_a<=dd then break end end;if#c_a>0 then table.insert(a_a,c_a)end end end;return a_a end
  924. local function ad(cd)local dd={}local __a=1;local a_a=1
  925. while __a<=#cd do local b_a,c_a;local d_a,_aa;local aaa,baa
  926. for _ba,aba in pairs(colors)do
  927. local bba="{fg:".._ba.."}"local cba="{bg:".._ba.."}"local dba,_ca=cd:find(bba,__a)
  928. local aca,bca=cd:find(cba,__a)
  929. if dba and(not b_a or dba<b_a)then b_a=dba;d_a=_ba;aaa=_ca end
  930. if aca and(not c_a or aca<c_a)then c_a=aca;_aa=_ba;baa=bca end end;local caa
  931. if b_a and(not c_a or b_a<c_a)then caa=b_a elseif c_a then caa=c_a else caa=#cd+1 end;local daa=cd:sub(__a,caa-1)
  932. if#daa>0 then
  933. table.insert(dd,{color=nil,bgColor=nil,text=daa,position=a_a})a_a=a_a+#daa;__a=__a+#daa end
  934. if b_a and(not c_a or b_a<c_a)then
  935. table.insert(dd,{color=d_a,bgColor=nil,text="",position=a_a})__a=aaa+1 elseif c_a then
  936. table.insert(dd,{color=nil,bgColor=_aa,text="",position=a_a})__a=baa+1 else break end end;return dd end
  937. local function bd(cd,dd)local __a=ad(cd)local a_a={}local b_a,c_a=1,1;local d_a,_aa;local function aaa(baa)
  938. table.insert(a_a,{x=b_a,y=c_a,text=baa.text,color=baa.color or d_a,bgColor=
  939. baa.bgColor or _aa})end
  940. for baa,caa in ipairs(__a)do
  941. if
  942. caa.color then d_a=caa.color elseif caa.bgColor then _aa=caa.bgColor else local daa=cc(caa.text," ")
  943. for _ba,aba in
  944. ipairs(daa)do local bba=#aba
  945. if _ba>1 then if b_a+1 +bba<=dd then aaa({text=" "})b_a=b_a+1 else b_a=1;c_a=c_a+
  946. 1 end end;while bba>0 do local cba=aba:sub(1,dd-b_a+1)
  947. aba=aba:sub(dd-b_a+2)bba=#aba;aaa({text=cba})
  948. if bba>0 then b_a=1;c_a=c_a+1 else b_a=b_a+#cba end end end end;if b_a>dd then b_a=1;c_a=c_a+1 end end;return a_a end
  949. return
  950. {getTextHorizontalAlign=function(cd,dd,__a,a_a)cd=bb(cd,1,dd)local b_a=dd-bc(cd)
  951. if(__a=="right")then
  952. cd=_c(a_a or" ",b_a)..cd elseif(__a=="center")then
  953. cd=_c(a_a or" ",math.floor(b_a/2))..cd.._c(a_a or" ",math.floor(
  954. b_a/2))
  955. cd=cd.. (bc(cd)<dd and(a_a or" ")or"")else cd=cd.._c(a_a or" ",b_a)end;return cd end,getTextVerticalAlign=function(cd,dd)
  956. local __a=0
  957. if(dd=="center")then __a=math.ceil(cd/2)if(__a<1)then __a=1 end end;if(dd=="bottom")then __a=cd end;if(__a<1)then __a=1 end;return __a end,orderedTable=function(cd)
  958. local dd={}for __a,a_a in pairs(cd)do dd[#dd+1]=a_a end;return dd end,rpairs=function(cd)return
  959. function(dd,__a)__a=
  960. __a-1;if __a~=0 then return __a,dd[__a]end end,cd,#cd+1 end,tableCount=function(cd)
  961. local dd=0;if(cd~=nil)then for __a,a_a in pairs(cd)do dd=dd+1 end end
  962. return dd end,splitString=cc,removeTags=dc,wrapText=_d,convertRichText=ad,writeRichText=function(cd,dd,__a,a_a)local b_a=ad(a_a)if(#b_a==0)then
  963. cd:addText(dd,__a,a_a)return end
  964. local c_a,d_a=cd:getForeground(),cd:getBackground()
  965. for _aa,aaa in pairs(b_a)do
  966. cd:addText(dd+aaa.position-1,__a,aaa.text)
  967. if(aaa.color~=nil)then
  968. cd:addFG(dd+aaa.position-1,__a,ab[colors[aaa.color]]:rep(
  969. #aaa.text))c_a=colors[aaa.color]else cd:addFG(dd+aaa.position-1,__a,ab[c_a]:rep(#
  970. aaa.text))end
  971. if(aaa.bgColor~=nil)then
  972. cd:addBG(dd+aaa.position-1,__a,ab[colors[aaa.bgColor]]:rep(
  973. #aaa.text))d_a=colors[aaa.bgColor]else if(d_a~=false)then
  974. cd:addBG(dd+aaa.position-1,__a,ab[d_a]:rep(
  975. #aaa.text))end end end end,wrapRichText=bd,writeWrappedText=function(cd,dd,__a,a_a,b_a,c_a)
  976. local d_a=bd(a_a,b_a)
  977. for _aa,aaa in pairs(d_a)do if(aaa.y>c_a)then break end
  978. if(aaa.text~=nil)then cd:addText(dd+aaa.x-1,__a+
  979. aaa.y-1,aaa.text)end;if(aaa.color~=nil)then
  980. cd:addFG(dd+aaa.x-1,__a+aaa.y-1,ab[colors[aaa.color]]:rep(
  981. #aaa.text))end;if(aaa.bgColor~=nil)then
  982. cd:addBG(dd+
  983. aaa.x-1,__a+aaa.y-1,ab[colors[aaa.bgColor]]:rep(#
  984. aaa.text))end end end,uuid=function()
  985. return
  986. string.gsub(string.format('%x-%x-%x-%x-%x',math.random(0,0xffff),math.random(0,0xffff),math.random(0,0xffff),
  987. math.random(0,0x0fff)+0x4000,math.random(0,0x3fff)+0x8000),' ','0')end}end
  988. aa["libraries"]["process"]=function(...)local ab={}local bb={}local cb=0
  989. local db=dofile("rom/modules/main/cc/require.lua").make
  990. function bb:new(_c,ac,bc,...)local cc={...}
  991. local dc=setmetatable({path=_c},{__index=self})dc.window=ac;ac.current=term.current;ac.redirect=term.redirect
  992. dc.processId=cb
  993. if(type(_c)=="string")then
  994. dc.coroutine=coroutine.create(function()
  995. local _d=shell.resolveProgram(_c)local ad=setmetatable(bc,{__index=_ENV})ad.shell=shell
  996. ad.basaltProgram=true;ad.arg={[0]=_c,table.unpack(cc)}
  997. if(_d==nil)then error("The path ".._c..
  998. " does not exist!")end;ad.require,ad.package=db(ad,fs.getDir(_d))
  999. if(fs.exists(_d))then
  1000. local bd=fs.open(_d,"r")local cd=bd.readAll()bd.close()local dd=load(cd,_c,"bt",ad)if(dd~=nil)then return
  1001. dd()end end end)elseif(type(_c)=="function")then
  1002. dc.coroutine=coroutine.create(function()
  1003. _c(table.unpack(cc))end)else return end;ab[cb]=dc;cb=cb+1;return dc end
  1004. function bb:resume(_c,...)local ac=term.current()term.redirect(self.window)
  1005. if(
  1006. self.filter~=nil)then if(_c~=self.filter)then return end;self.filter=nil end;local bc,cc=coroutine.resume(self.coroutine,_c,...)if bc then
  1007. self.filter=cc else printError(cc)end;term.redirect(ac)
  1008. return bc,cc end
  1009. function bb:isDead()
  1010. if(self.coroutine~=nil)then
  1011. if
  1012. (coroutine.status(self.coroutine)=="dead")then table.remove(ab,self.processId)return true end else return true end;return false end
  1013. function bb:getStatus()if(self.coroutine~=nil)then
  1014. return coroutine.status(self.coroutine)end;return nil end
  1015. function bb:start()coroutine.resume(self.coroutine)end;return bb end
  1016. aa["libraries"]["tHex"]=function(...)local ab={}
  1017. for i=0,15 do ab[2 ^i]=("%x"):format(i)end;return ab end
  1018. aa["libraries"]["reactivePrimitives"]=function(...)
  1019. local ab={CURRENT=0,STALE=1,MAYBE_STALE=2}local bb={}
  1020. bb.new=function()
  1021. return
  1022. {fn=nil,value=nil,status=ab.STALE,parents={},children={},cleanup=function(_c)
  1023. for ac,bc in ipairs(_c.parents)do for cc,dc in ipairs(bc.children)do if(dc==_c)then
  1024. table.remove(bc.children,cc)break end end end;_c.parents={}end}end
  1025. local cb={listeningNode=nil,sourceNodes={},effectNodes={},transaction=false}local db={}
  1026. db.pushUpdates=function()for _c,ac in ipairs(cb.sourceNodes)do
  1027. db.pushSourceNodeUpdate(ac)end;db.pullUpdates()end
  1028. db.pushSourceNodeUpdate=function(_c)if(_c.status==ab.CURRENT)then return end
  1029. db.pushNodeUpdate(_c)for ac,bc in ipairs(_c.children)do bc.status=ab.STALE end
  1030. _c.status=ab.CURRENT end
  1031. db.pushNodeUpdate=function(_c)if(_c==nil)then return end;_c.status=ab.MAYBE_STALE;for ac,bc in
  1032. ipairs(_c.children)do db.pushNodeUpdate(bc)end end
  1033. db.pullUpdates=function()
  1034. for _c,ac in ipairs(cb.effectNodes)do db.pullNodeUpdates(ac)end end
  1035. db.pullNodeUpdates=function(_c)if(_c.status==ab.CURRENT)then return end;if
  1036. (_c.status==ab.MAYBE_STALE)then
  1037. for ac,bc in ipairs(_c.parents)do db.pullNodeUpdates(bc)end end
  1038. if(_c.status==ab.STALE)then
  1039. _c:cleanup()local ac=cb.listeningNode;cb.listeningNode=_c;local bc=_c.value;_c.value=_c.fn()
  1040. cb.listeningNode=ac;for cc,dc in ipairs(_c.children)do
  1041. if(bc==_c.value)then dc.status=ab.CURRENT else dc.status=ab.STALE end end end;_c.status=ab.CURRENT end
  1042. db.subscribe=function(_c)local ac=cb.listeningNode
  1043. if(ac~=nil)then
  1044. table.insert(_c.children,ac)table.insert(ac.parents,_c)end end
  1045. db.observable=function(_c)local ac=bb.new()ac.value=_c;ac.status=ab.CURRENT;local bc=function()
  1046. db.subscribe(ac)return ac.value end
  1047. local cc=function(dc)if
  1048. (ac.value==dc)then return end;ac.value=dc;ac.status=cb.STALE;if(not cb.transaction)then
  1049. db.pushUpdates()end end;table.insert(cb.sourceNodes,ac)return bc,cc end
  1050. db.derived=function(_c)local ac=bb.new()ac.fn=_c;return
  1051. function()if(ac.status~=ab.CURRENT)then
  1052. db.pullNodeUpdates(ac)end;db.subscribe(ac)return ac.value end end
  1053. db.effect=function(_c)local ac=bb.new()ac.fn=_c
  1054. table.insert(cb.effectNodes,ac)db.pushUpdates()end
  1055. db.transaction=function(_c)cb.transaction=true;_c()cb.transaction=false
  1056. db.pushUpdates()end
  1057. db.untracked=function(_c)local ac=cb.listeningNode;cb.listeningNode=nil;local bc=_c()
  1058. cb.listeningNode=ac;return bc end;return db end
  1059. aa["loadObjects"]=function(...)local ab={}if(ba)then
  1060. for db,_c in pairs(_b("objects"))do ab[db]=_c()end;return ab end;local bb=table.pack(...)local cb=fs.getDir(
  1061. bb[2]or"Basalt")if(cb==nil)then
  1062. error("Unable to find directory "..bb[2]..
  1063. " please report this bug to our discord.")end
  1064. for db,_c in
  1065. pairs(fs.list(fs.combine(cb,"objects")))do if(_c~="example.lua")and not(_c:find(".disabled"))then
  1066. local ac=_c:gsub(".lua","")ab[ac]=da(ac)end end;return ab end;aa["objects"]={}
  1067. aa["objects"]["Graph"]=function(...)
  1068. return
  1069. function(ab,bb)
  1070. local cb=bb.getObject("ChangeableObject")(ab,bb)local db="Graph"cb:setZIndex(5)cb:setSize(30,10)local _c={}
  1071. local ac=colors.gray;local bc="\7"local cc=colors.black;local dc=100;local _d=0;local ad="line"local bd=10
  1072. local cd={getType=function(dd)return db end,setGraphColor=function(dd,__a)ac=
  1073. __a or ac;dd:updateDraw()return dd end,setGraphSymbol=function(dd,__a,a_a)
  1074. bc=__a or bc;cc=a_a or cc;dd:updateDraw()return dd end,setGraphSymbolColor=function(dd,__a)return dd:setGraphSymbolColor(
  1075. nil,__a)end,getGraphSymbol=function(dd)
  1076. return bc,cc end,getGraphSymbolColor=function(dd)return cc end,addDataPoint=function(dd,__a)if __a>=_d and __a<=dc then
  1077. table.insert(_c,__a)dd:updateDraw()end;if(#_c>100)then
  1078. table.remove(_c,1)end;return dd end,setMaxValue=function(dd,__a)
  1079. dc=__a;dd:updateDraw()return dd end,getMaxValue=function(dd)return dc end,setMinValue=function(dd,__a)
  1080. _d=__a;dd:updateDraw()return dd end,getMinValue=function(dd)return _d end,setGraphType=function(dd,__a)if __a==
  1081. "scatter"or __a=="line"or __a=="bar"then ad=__a
  1082. dd:updateDraw()end;return dd end,getGraphType=function(dd)return
  1083. ad end,setMaxEntries=function(dd,__a)bd=__a;dd:updateDraw()return dd end,getMaxEntries=function(dd)return
  1084. bd end,clear=function(dd)_c={}dd:updateDraw()return dd end,draw=function(dd)
  1085. cb.draw(dd)
  1086. dd:addDraw("graph",function()local __a,a_a=dd:getPosition()local b_a,c_a=dd:getSize()
  1087. local d_a,_aa=dd:getBackground(),dd:getForeground()local aaa=dc-_d;local baa,caa;local daa=#_c-bd+1;if daa<1 then daa=1 end
  1088. for i=daa,#_c do local _ba=_c[i]
  1089. local aba=math.floor(( (
  1090. b_a-1)/ (bd-1))* (i-daa)+1.5)
  1091. local bba=math.floor((c_a-1)- ( (c_a-1)/aaa)* (_ba-_d)+1.5)
  1092. if ad=="scatter"then dd:addBackgroundBox(aba,bba,1,1,ac)
  1093. dd:addForegroundBox(aba,bba,1,1,cc)dd:addTextBox(aba,bba,1,1,bc)elseif ad=="line"then
  1094. if baa and caa then
  1095. local cba=math.abs(aba-baa)local dba=math.abs(bba-caa)local _ca=baa<aba and 1 or-1;local aca=caa<
  1096. bba and 1 or-1;local bca=cba-dba
  1097. while true do
  1098. dd:addBackgroundBox(baa,caa,1,1,ac)dd:addForegroundBox(baa,caa,1,1,cc)
  1099. dd:addTextBox(baa,caa,1,1,bc)if baa==aba and caa==bba then break end;local cca=2 *bca;if cca>-dba then
  1100. bca=bca-dba;baa=baa+_ca end
  1101. if cca<cba then bca=bca+cba;caa=caa+aca end end end;baa,caa=aba,bba elseif ad=="bar"then
  1102. dd:addBackgroundBox(aba-1,bba,1,c_a-bba,ac)end end end)end}cd.__index=cd;return setmetatable(cd,cb)end end
  1103. aa["objects"]["Image"]=function(...)local ab=da("images")local bb=da("bimg")
  1104. local cb,db,_c,ac=table.unpack,string.sub,math.max,math.min
  1105. return
  1106. function(bc,cc)local dc=cc.getObject("VisualObject")(bc,cc)
  1107. local _d="Image"local ad=bb()local bd=ad.getFrameObject(1)local cd;local dd;local __a=1;local a_a=false;local b_a
  1108. local c_a=false;local d_a=true;local _aa,aaa=0,0;dc:setSize(24,8)dc:setZIndex(2)
  1109. local function baa(_ba)local aba={}
  1110. for dba,_ca in
  1111. pairs(colors)do if(type(_ca)=="number")then
  1112. aba[dba]={term.nativePaletteColor(_ca)}end end;local bba=ad.getMetadata("palette")if(bba~=nil)then for dba,_ca in pairs(bba)do
  1113. aba[dba]=tonumber(_ca)end end
  1114. local cba=ad.getFrameData("palette")cc.log(cba)if(cba~=nil)then
  1115. for dba,_ca in pairs(cba)do aba[dba]=tonumber(_ca)end end;return aba end;local function caa()
  1116. if(d_a)then if(ad~=nil)then dc:setSize(ad.getSize())end end end
  1117. local daa={getType=function(_ba)return _d end,isType=function(_ba,aba)return
  1118. _d==aba or
  1119. dc.isType~=nil and dc.isType(aba)or false end,setOffset=function(_ba,aba,bba,cba)
  1120. if(cba)then _aa=_aa+
  1121. aba or 0;aaa=aaa+bba or 0 else _aa=aba or _aa;aaa=bba or aaa end;_ba:updateDraw()return _ba end,setXOffset=function(_ba,aba)return _ba:setOffset(_ba,aba,
  1122. nil)end,setYOffset=function(_ba,aba)return
  1123. _ba:setOffset(_ba,nil,aba)end,setSize=function(_ba,aba,bba)dc:setSize(aba,bba)
  1124. d_a=false;return _ba end,getOffset=function(_ba)return _aa,aaa end,getXOffset=function(_ba)return _aa end,getYOffset=function(_ba)return
  1125. aaa end,selectFrame=function(_ba,aba)if(ad.getFrameObject(aba)==nil)then
  1126. ad.addFrame(aba)end;bd=ad.getFrameObject(aba)
  1127. dd=bd.getImage(aba)__a=aba;_ba:updateDraw()end,addFrame=function(_ba,aba)
  1128. ad.addFrame(aba)return _ba end,getFrame=function(_ba,aba)return ad.getFrame(aba)end,getFrameObject=function(_ba,aba)return
  1129. ad.getFrameObject(aba)end,removeFrame=function(_ba,aba)ad.removeFrame(aba)return _ba end,moveFrame=function(_ba,aba,bba)
  1130. ad.moveFrame(aba,bba)return _ba end,getFrames=function(_ba)return ad.getFrames()end,getFrameCount=function(_ba)return
  1131. #ad.getFrames()end,getActiveFrame=function(_ba)return __a end,loadImage=function(_ba,aba)if
  1132. (fs.exists(aba))then local bba=ab.loadBIMG(aba)ad=bb(bba)__a=1
  1133. bd=ad.getFrameObject(1)cd=ad.createBimg()dd=bd.getImage()caa()
  1134. _ba:updateDraw()end;return
  1135. _ba end,setPath=function(_ba,aba)return
  1136. _ba:loadImage(aba)end,setImage=function(_ba,aba)if(type(aba)=="table")then ad=bb(aba)__a=1
  1137. bd=ad.getFrameObject(1)cd=ad.createBimg()dd=bd.getImage()caa()
  1138. _ba:updateDraw()end;return _ba end,clear=function(_ba)
  1139. ad=bb()bd=ad.getFrameObject(1)dd=nil;_ba:updateDraw()return _ba end,getImage=function(_ba)return
  1140. ad.createBimg()end,getImageFrame=function(_ba,aba)return bd.getImage(aba)end,usePalette=function(_ba,aba)c_a=
  1141. aba~=nil and aba or true;return _ba end,getUsePalette=function(_ba)return
  1142. c_a end,setUsePalette=function(_ba,aba)return _ba:usePalette(aba)end,play=function(_ba,aba)
  1143. if
  1144. (ad.getMetadata("animated"))then
  1145. local bba=
  1146. ad.getMetadata("duration")or ad.getMetadata("secondsPerFrame")or 0.2;_ba:listenEvent("other_event")
  1147. b_a=os.startTimer(bba)a_a=aba or false end;return _ba end,setPlay=function(_ba,aba)return
  1148. _ba:play(aba)end,stop=function(_ba)os.cancelTimer(b_a)b_a=nil;a_a=false
  1149. return _ba end,eventHandler=function(_ba,aba,bba,...)
  1150. dc.eventHandler(_ba,aba,bba,...)
  1151. if(aba=="timer")then
  1152. if(bba==b_a)then
  1153. if(ad.getFrame(__a+1)~=nil)then __a=__a+1
  1154. _ba:selectFrame(__a)
  1155. local cba=
  1156. ad.getFrameData(__a,"duration")or ad.getMetadata("secondsPerFrame")or 0.2;b_a=os.startTimer(cba)else
  1157. if(a_a)then __a=1;_ba:selectFrame(__a)
  1158. local cba=
  1159. ad.getFrameData(__a,"duration")or ad.getMetadata("secondsPerFrame")or 0.2;b_a=os.startTimer(cba)end end;_ba:updateDraw()end end end,setMetadata=function(_ba,aba,bba)
  1160. ad.setMetadata(aba,bba)return _ba end,getMetadata=function(_ba,aba)return ad.getMetadata(aba)end,getFrameMetadata=function(_ba,aba,bba)return
  1161. ad.getFrameData(aba,bba)end,setFrameMetadata=function(_ba,aba,bba,cba)
  1162. ad.setFrameData(aba,bba,cba)return _ba end,blit=function(_ba,aba,bba,cba,dba,_ca)x=dba or x;y=_ca or y
  1163. bd.blit(aba,bba,cba,x,y)dd=bd.getImage()_ba:updateDraw()return _ba end,setText=function(_ba,aba,bba,cba)x=
  1164. bba or x;y=cba or y;bd.text(aba,x,y)dd=bd.getImage()
  1165. _ba:updateDraw()return _ba end,setBg=function(_ba,aba,bba,cba)x=bba or x;y=
  1166. cba or y;bd.bg(aba,x,y)dd=bd.getImage()
  1167. _ba:updateDraw()return _ba end,setFg=function(_ba,aba,bba,cba)x=bba or x
  1168. y=cba or y;bd.fg(aba,x,y)dd=bd.getImage()_ba:updateDraw()return _ba end,getImageSize=function(_ba)return
  1169. ad.getSize()end,setImageSize=function(_ba,aba,bba)ad.setSize(aba,bba)
  1170. dd=bd.getImage()_ba:updateDraw()return _ba end,resizeImage=function(_ba,aba,bba)
  1171. local cba=ab.resizeBIMG(cd,aba,bba)ad=bb(cba)__a=1;bd=ad.getFrameObject(1)dd=bd.getImage()
  1172. _ba:updateDraw()return _ba end,draw=function(_ba)
  1173. dc.draw(_ba)
  1174. _ba:addDraw("image",function()local aba,bba=_ba:getSize()local cba,dba=_ba:getPosition()
  1175. local _ca,aca=_ba:getParent():getSize()local bca,cca=_ba:getParent():getOffset()
  1176. if
  1177. (cba-bca>_ca)or(dba-cca>aca)or(cba-bca+aba<1)or(dba-
  1178. cca+bba<1)then return end
  1179. if(c_a)then _ba:getParent():setPalette(baa(__a))end
  1180. if(dd~=nil)then
  1181. for dca,_da in pairs(dd)do
  1182. if(dca+aaa<=bba)and(dca+aaa>=1)then
  1183. local ada,bda,cda=_da[1],_da[2],_da[3]local dda=_c(1 -_aa,1)local __b=ac(aba-_aa,#ada)
  1184. ada=db(ada,dda,__b)bda=db(bda,dda,__b)cda=db(cda,dda,__b)
  1185. _ba:addBlit(_c(1 +_aa,1),dca+aaa,ada,bda,cda)end end end end)end}daa.__index=daa;return setmetatable(daa,dc)end end
  1186. aa["objects"]["List"]=function(...)local ab=da("utils")local bb=da("tHex")
  1187. return
  1188. function(cb,db)
  1189. local _c=db.getObject("ChangeableObject")(cb,db)local ac="List"local bc={}local cc=colors.black;local dc=colors.lightGray;local _d=true
  1190. local ad="left"local bd=0;local cd=true;_c:setSize(16,8)_c:setZIndex(5)
  1191. local dd={init=function(__a)
  1192. local a_a=__a:getParent()__a:listenEvent("mouse_click")
  1193. __a:listenEvent("mouse_drag")__a:listenEvent("mouse_scroll")return _c.init(__a)end,getBase=function(__a)return
  1194. _c end,setTextAlign=function(__a,a_a)ad=a_a;return __a end,getTextAlign=function(__a)return ad end,getBase=function(__a)return _c end,getType=function(__a)return
  1195. ac end,isType=function(__a,a_a)return
  1196. ac==a_a or _c.isType~=nil and _c.isType(a_a)or false end,addItem=function(__a,a_a,b_a,c_a,...)
  1197. table.insert(bc,{text=a_a,bgCol=
  1198. b_a or __a:getBackground(),fgCol=c_a or __a:getForeground(),args={...}})if(#bc<=1)then __a:setValue(bc[1],false)end
  1199. __a:updateDraw()return __a end,setOptions=function(__a,...)
  1200. bc={}
  1201. for a_a,b_a in pairs(...)do
  1202. if(type(b_a)=="string")then
  1203. table.insert(bc,{text=b_a,bgCol=__a:getBackground(),fgCol=__a:getForeground(),args={}})else
  1204. table.insert(bc,{text=b_a[1],bgCol=b_a[2]or __a:getBackground(),fgCol=b_a[3]or
  1205. __a:getForeground(),args=b_a[4]or{}})end end;__a:setValue(bc[1],false)__a:updateDraw()return __a end,setOffset=function(__a,a_a)
  1206. bd=a_a;__a:updateDraw()return __a end,getOffset=function(__a)return bd end,removeItem=function(__a,a_a)
  1207. if(
  1208. type(a_a)=="number")then table.remove(bc,a_a)elseif(type(a_a)=="table")then
  1209. for b_a,c_a in
  1210. pairs(bc)do if(c_a==a_a)then table.remove(bc,b_a)break end end end;__a:updateDraw()return __a end,getItem=function(__a,a_a)return
  1211. bc[a_a]end,getAll=function(__a)return bc end,getOptions=function(__a)return bc end,getItemIndex=function(__a)
  1212. local a_a=__a:getValue()for b_a,c_a in pairs(bc)do if(c_a==a_a)then return b_a end end end,clear=function(__a)
  1213. bc={}__a:setValue({},false)__a:updateDraw()return __a end,getItemCount=function(__a)return
  1214. #bc end,editItem=function(__a,a_a,b_a,c_a,d_a,...)table.remove(bc,a_a)
  1215. table.insert(bc,a_a,{text=b_a,bgCol=c_a or
  1216. __a:getBackground(),fgCol=d_a or __a:getForeground(),args={...}})__a:updateDraw()return __a end,selectItem=function(__a,a_a)__a:setValue(
  1217. bc[a_a]or{},false)__a:updateDraw()return __a end,setSelectionColor=function(__a,a_a,b_a,c_a)cc=
  1218. a_a or __a:getBackground()
  1219. dc=b_a or __a:getForeground()_d=c_a~=nil and c_a or true;__a:updateDraw()
  1220. return __a end,setSelectionBG=function(__a,a_a)return __a:setSelectionColor(a_a,
  1221. nil,_d)end,setSelectionFG=function(__a,a_a)return __a:setSelectionColor(
  1222. nil,a_a,_d)end,getSelectionColor=function(__a)
  1223. return cc,dc end,getSelectionBG=function(__a)return cc end,getSelectionFG=function(__a)return dc end,isSelectionColorActive=function(__a)return _d end,setScrollable=function(__a,a_a)
  1224. cd=a_a;if(a_a==nil)then cd=true end;__a:updateDraw()return __a end,getScrollable=function(__a)return
  1225. cd end,scrollHandler=function(__a,a_a,b_a,c_a)
  1226. if(_c.scrollHandler(__a,a_a,b_a,c_a))then
  1227. if(cd)then
  1228. local d_a,_aa=__a:getSize()bd=bd+a_a;if(bd<0)then bd=0 end;if(a_a>=1)then
  1229. if(#bc>_aa)then
  1230. if(bd>#bc-_aa)then bd=#bc-_aa end;if(bd>=#bc)then bd=#bc-1 end else bd=bd-1 end end
  1231. __a:updateDraw()end;return true end;return false end,mouseHandler=function(__a,a_a,b_a,c_a)
  1232. if
  1233. (_c.mouseHandler(__a,a_a,b_a,c_a))then local d_a,_aa=__a:getAbsolutePosition()local aaa,baa=__a:getSize()
  1234. if
  1235. (#bc>0)then
  1236. for n=1,baa do
  1237. if(bc[n+bd]~=nil)then if
  1238. (d_a<=b_a)and(d_a+aaa>b_a)and(_aa+n-1 ==c_a)then __a:setValue(bc[n+bd])__a:selectHandler()
  1239. __a:updateDraw()end end end end;return true end;return false end,dragHandler=function(__a,a_a,b_a,c_a)return
  1240. __a:mouseHandler(a_a,b_a,c_a)end,touchHandler=function(__a,a_a,b_a)return
  1241. __a:mouseHandler(1,a_a,b_a)end,onSelect=function(__a,...)
  1242. for a_a,b_a in
  1243. pairs(table.pack(...))do if(type(b_a)=="function")then
  1244. __a:registerEvent("select_item",b_a)end end;return __a end,selectHandler=function(__a)
  1245. __a:sendEvent("select_item",__a:getValue())end,draw=function(__a)_c.draw(__a)
  1246. __a:addDraw("list",function()
  1247. local a_a,b_a=__a:getSize()
  1248. for n=1,b_a do
  1249. if bc[n+bd]then local c_a=bc[n+bd].text
  1250. local d_a,_aa=bc[n+bd].fgCol,bc[n+bd].bgCol
  1251. if bc[n+bd]==__a:getValue()and _d then d_a,_aa=dc,cc end;__a:addText(1,n,c_a:sub(1,a_a))
  1252. __a:addBG(1,n,bb[_aa]:rep(a_a))__a:addFG(1,n,bb[d_a]:rep(a_a))end end end)end}dd.__index=dd;return setmetatable(dd,_c)end end
  1253. aa["objects"]["ChangeableObject"]=function(...)
  1254. return
  1255. function(ab,bb)
  1256. local cb=bb.getObject("VisualObject")(ab,bb)local db="ChangeableObject"local _c
  1257. local ac={setValue=function(bc,cc,dc)if(_c~=cc)then _c=cc;bc:updateDraw()if(dc~=false)then
  1258. bc:valueChangedHandler()end end;return bc end,getValue=function(bc)return
  1259. _c end,onChange=function(bc,...)
  1260. for cc,dc in pairs(table.pack(...))do if(type(dc)=="function")then
  1261. bc:registerEvent("value_changed",dc)end end;return bc end,valueChangedHandler=function(bc)
  1262. bc:sendEvent("value_changed",_c)end}ac.__index=ac;return setmetatable(ac,cb)end end
  1263. aa["objects"]["Frame"]=function(...)local ab=da("utils")
  1264. local bb,cb,db,_c,ac=math.max,math.min,string.sub,string.rep,string.len
  1265. return
  1266. function(bc,cc)local dc=cc.getObject("Container")(bc,cc)local _d="Frame"
  1267. local ad;local bd=true;local cd,dd=0,0;dc:setSize(30,10)dc:setZIndex(10)
  1268. local __a={getType=function()return _d end,isType=function(a_a,b_a)return
  1269.  
  1270. _d==b_a or dc.isType~=nil and dc.isType(b_a)or false end,getBase=function(a_a)
  1271. return dc end,getOffset=function(a_a)return cd,dd end,setOffset=function(a_a,b_a,c_a)cd=b_a or cd;dd=c_a or dd
  1272. a_a:updateDraw()return a_a end,getXOffset=function(a_a)return cd end,setXOffset=function(a_a,b_a)return
  1273. a_a:setOffset(b_a,nil)end,getYOffset=function(a_a)return dd end,setYOffset=function(a_a,b_a)return
  1274. a_a:setOffset(nil,b_a)end,setParent=function(a_a,b_a,...)
  1275. dc.setParent(a_a,b_a,...)ad=b_a;return a_a end,render=function(a_a)
  1276. if(dc.render~=nil)then
  1277. if
  1278. (a_a:isVisible())then dc.render(a_a)local b_a=a_a:getChildren()for c_a,d_a in ipairs(b_a)do
  1279. if(
  1280. d_a.element.render~=nil)then d_a.element:render()end end end end end,updateDraw=function(a_a)if(
  1281. ad~=nil)then ad:updateDraw()end;return a_a end,blit=function(a_a,b_a,c_a,d_a,_aa,aaa)
  1282. local baa,caa=a_a:getPosition()local daa,_ba=ad:getOffset()baa=baa-daa;caa=caa-_ba
  1283. local aba,bba=a_a:getSize()
  1284. if c_a>=1 and c_a<=bba then
  1285. local cba=db(d_a,bb(1 -b_a+1,1),bb(aba-b_a+1,1))
  1286. local dba=db(_aa,bb(1 -b_a+1,1),bb(aba-b_a+1,1))
  1287. local _ca=db(aaa,bb(1 -b_a+1,1),bb(aba-b_a+1,1))
  1288. ad:blit(bb(b_a+ (baa-1),baa),caa+c_a-1,cba,dba,_ca)end end,setCursor=function(a_a,b_a,c_a,d_a,_aa)
  1289. local aaa,baa=a_a:getPosition()local caa,daa=a_a:getOffset()
  1290. ad:setCursor(b_a or false,(c_a or 0)+aaa-1 -caa,(
  1291. d_a or 0)+baa-1 -daa,_aa or colors.white)return a_a end}
  1292. for a_a,b_a in
  1293. pairs({"drawBackgroundBox","drawForegroundBox","drawTextBox"})do
  1294. __a[b_a]=function(c_a,d_a,_aa,aaa,baa,caa)local daa,_ba=c_a:getPosition()local aba,bba=ad:getOffset()
  1295. daa=daa-aba;_ba=_ba-bba
  1296. baa=(_aa<1 and(
  1297. baa+_aa>c_a:getHeight()and c_a:getHeight()or baa+_aa-1)or(
  1298. baa+
  1299. _aa>c_a:getHeight()and c_a:getHeight()-_aa+1 or baa))
  1300. aaa=(d_a<1 and(aaa+d_a>c_a:getWidth()and c_a:getWidth()or aaa+
  1301. d_a-1)or(
  1302.  
  1303. aaa+d_a>c_a:getWidth()and c_a:getWidth()-d_a+1 or aaa))
  1304. ad[b_a](ad,bb(d_a+ (daa-1),daa),bb(_aa+ (_ba-1),_ba),aaa,baa,caa)end end
  1305. for a_a,b_a in pairs({"setBG","setFG","setText"})do
  1306. __a[b_a]=function(c_a,d_a,_aa,aaa)
  1307. local baa,caa=c_a:getPosition()local daa,_ba=ad:getOffset()baa=baa-daa;caa=caa-_ba
  1308. local aba,bba=c_a:getSize()if(_aa>=1)and(_aa<=bba)then
  1309. ad[b_a](ad,bb(d_a+ (baa-1),baa),caa+_aa-1,db(aaa,bb(
  1310. 1 -d_a+1,1),bb(aba-d_a+1,1)))end end end;__a.__index=__a;return setmetatable(__a,dc)end end
  1311. aa["objects"]["BaseFrame"]=function(...)local ab=da("basaltDraw")
  1312. local bb=da("utils")local cb,db,_c,ac=math.max,math.min,string.sub,string.rep
  1313. return
  1314. function(bc,cc)
  1315. local dc=cc.getObject("Container")(bc,cc)local _d="BaseFrame"local ad,bd=0,0;local cd={}local dd=true;local __a=cc.getTerm()
  1316. local a_a=ab(__a)local b_a,c_a,d_a,_aa=1,1,false,colors.white
  1317. local aaa={getType=function()return _d end,isType=function(baa,caa)
  1318. return _d==caa or dc.isType~=nil and
  1319. dc.isType(caa)or false end,getBase=function(baa)return dc end,getOffset=function(baa)return ad,bd end,setOffset=function(baa,caa,daa)ad=
  1320. caa or ad;bd=daa or bd;baa:updateDraw()return baa end,getXOffset=function(baa)return
  1321. ad end,setXOffset=function(baa,caa)return baa:setOffset(caa,nil)end,getYOffset=function(baa)return
  1322. bd end,setYOffset=function(baa,caa)return baa:setOffset(nil,caa)end,setPalette=function(baa,caa,...)
  1323. if(
  1324. baa==cc.getActiveFrame())then
  1325. if(type(caa)=="string")then cd[caa]=...
  1326. __a.setPaletteColor(
  1327. type(caa)=="number"and caa or colors[caa],...)elseif(type(caa)=="table")then
  1328. for daa,_ba in pairs(caa)do cd[daa]=_ba
  1329. if(type(_ba)=="number")then
  1330. __a.setPaletteColor(
  1331. type(daa)=="number"and daa or colors[daa],_ba)else local aba,bba,cba=table.unpack(_ba)
  1332. __a.setPaletteColor(
  1333. type(daa)=="number"and daa or colors[daa],aba,bba,cba)end end end end;return baa end,setSize=function(baa,...)
  1334. dc.setSize(baa,...)a_a=ab(__a)return baa end,getSize=function()return __a.getSize()end,getWidth=function(baa)return
  1335. ({__a.getSize()})[1]end,getHeight=function(baa)
  1336. return({__a.getSize()})[2]end,show=function(baa)dc.show(baa)cc.setActiveFrame(baa)
  1337. for caa,daa in
  1338. pairs(colors)do if(type(daa)=="number")then
  1339. __a.setPaletteColor(daa,colors.packRGB(term.nativePaletteColor((daa))))end end
  1340. for caa,daa in pairs(cd)do
  1341. if(type(daa)=="number")then
  1342. __a.setPaletteColor(
  1343. type(caa)=="number"and caa or colors[caa],daa)else local _ba,aba,bba=table.unpack(daa)
  1344. __a.setPaletteColor(
  1345. type(caa)=="number"and caa or colors[caa],_ba,aba,bba)end end;cc.setMainFrame(baa)return baa end,render=function(baa)
  1346. if(
  1347. dc.render~=nil)then
  1348. if(baa:isVisible())then
  1349. if(dd)then dc.render(baa)
  1350. local caa=baa:getChildren()for daa,_ba in ipairs(caa)do if(_ba.element.render~=nil)then
  1351. _ba.element:render()end end
  1352. dd=false end end end end,updateDraw=function(baa)
  1353. dd=true;return baa end,eventHandler=function(baa,caa,...)dc.eventHandler(baa,caa,...)if
  1354. (caa=="term_resize")then baa:setSize(__a.getSize())end end,updateTerm=function(baa)if(
  1355. a_a~=nil)then a_a.update()end end,setTerm=function(baa,caa)__a=caa;if(caa==
  1356. nil)then a_a=nil else a_a=ab(__a)end;return baa end,getTerm=function()return
  1357. __a end,blit=function(baa,caa,daa,_ba,aba,bba)local cba,dba=baa:getPosition()
  1358. local _ca,aca=baa:getSize()
  1359. if daa>=1 and daa<=aca then
  1360. local bca=_c(_ba,cb(1 -caa+1,1),cb(_ca-caa+1,1))
  1361. local cca=_c(aba,cb(1 -caa+1,1),cb(_ca-caa+1,1))
  1362. local dca=_c(bba,cb(1 -caa+1,1),cb(_ca-caa+1,1))
  1363. a_a.blit(cb(caa+ (cba-1),cba),dba+daa-1,bca,cca,dca)end end,setCursor=function(baa,caa,daa,_ba,aba)
  1364. local bba,cba=baa:getAbsolutePosition()local dba,_ca=baa:getOffset()d_a=caa or false;if(daa~=nil)then
  1365. b_a=bba+daa-1 -dba end
  1366. if(_ba~=nil)then c_a=cba+_ba-1 -_ca end;_aa=aba or _aa
  1367. if(d_a)then __a.setTextColor(_aa)
  1368. __a.setCursorPos(b_a,c_a)__a.setCursorBlink(d_a)else __a.setCursorBlink(false)end;return baa end}
  1369. for baa,caa in
  1370. pairs({mouse_click={"mouseHandler",true},mouse_up={"mouseUpHandler",false},mouse_drag={"dragHandler",false},mouse_scroll={"scrollHandler",true},mouse_hover={"hoverHandler",false}})do
  1371. aaa[caa[1]]=function(daa,_ba,aba,bba,...)if(dc[caa[1]](daa,_ba,aba,bba,...))then
  1372. cc.setActiveFrame(daa)end end end
  1373. for baa,caa in
  1374. pairs({"drawBackgroundBox","drawForegroundBox","drawTextBox"})do
  1375. aaa[caa]=function(daa,_ba,aba,bba,cba,dba)local _ca,aca=daa:getPosition()local bca,cca=daa:getSize()
  1376. cba=(aba<1 and(cba+
  1377. aba>daa:getHeight()and daa:getHeight()or cba+aba-
  1378. 1)or(cba+aba>
  1379. daa:getHeight()and daa:getHeight()-aba+1 or
  1380. cba))
  1381. bba=(_ba<1 and(bba+_ba>daa:getWidth()and daa:getWidth()or bba+
  1382. _ba-1)or(
  1383.  
  1384. bba+_ba>daa:getWidth()and daa:getWidth()-_ba+1 or bba))
  1385. a_a[caa](cb(_ba+ (_ca-1),_ca),cb(aba+ (aca-1),aca),bba,cba,dba)end end
  1386. for baa,caa in pairs({"setBG","setFG","setText"})do
  1387. aaa[caa]=function(daa,_ba,aba,bba)
  1388. local cba,dba=daa:getPosition()local _ca,aca=daa:getSize()if(aba>=1)and(aba<=aca)then
  1389. a_a[caa](cb(_ba+ (cba-1),cba),
  1390. dba+aba-1,_c(bba,cb(1 -_ba+1,1),cb(_ca-_ba+1,1)))end end end;aaa.__index=aaa;return setmetatable(aaa,dc)end end
  1391. aa["objects"]["Container"]=function(...)local ab=da("utils")local bb=ab.tableCount
  1392. return
  1393. function(cb,db)
  1394. local _c=db.getObject("VisualObject")(cb,db)local ac="Container"local bc={}local cc={}local dc={}local _d;local ad=true;local bd,cd=0,0
  1395. local dd=function(cba,dba)
  1396. if
  1397. cba.zIndex==dba.zIndex then return cba.objId<dba.objId else return cba.zIndex<dba.zIndex end end
  1398. local __a=function(cba,dba)if cba.zIndex==dba.zIndex then return cba.evId>dba.evId else return
  1399. cba.zIndex>dba.zIndex end end;local function a_a(cba)cba:sortChildren()return bc end
  1400. local function b_a(cba,dba)if
  1401. (type(dba)=="table")then dba=dba:getName()end
  1402. for _ca,aca in ipairs(bc)do if
  1403. aca.element:getName()==dba then return aca.element end end end
  1404. local function c_a(cba,dba)local _ca=b_a(dba)if(_ca~=nil)then return _ca end;for aca,bca in ipairs(bc)do
  1405. if
  1406. (bca:getType()=="Container")then local cca=bca:getDeepChild(dba)if(cca~=nil)then return cca end end end end
  1407. local function d_a(cba,dba)if(b_a(dba:getName())~=nil)then return end;bd=bd+1
  1408. local _ca=dba:getZIndex()
  1409. table.insert(bc,{element=dba,zIndex=_ca,objId=bd})ad=false;dba:setParent(cba,true)for aca,bca in
  1410. pairs(dba:getRegisteredEvents())do cba:addEvent(aca,dba)end;if(dba.init~=
  1411. nil)then dba:init()end
  1412. if(dba.load~=nil)then dba:load()end;if(dba.draw~=nil)then dba:draw()end;return dba end
  1413. local function _aa(cba,dba)
  1414. if(type(dba)=="string")then dba=b_a(dba:getName())end;if(dba==nil)then return end
  1415. for _ca,aca in ipairs(bc)do if aca.element==dba then
  1416. table.remove(bc,_ca)return true end end;cba:removeEvents(dba)ad=false end;local function aaa(cba)local dba=cba:getParent()bc={}cc={}ad=false;bd=0;cd=0;_d=nil
  1417. dba:removeEvents(cba)end
  1418. local function baa(cba,dba,_ca)bd=bd+1;cd=cd+1;for aca,bca in
  1419. pairs(bc)do
  1420. if(bca.element==dba)then bca.zIndex=_ca;bca.objId=bd;break end end;for aca,bca in pairs(cc)do
  1421. for cca,dca in pairs(bca)do if
  1422. (dca.element==dba)then dca.zIndex=_ca;dca.evId=cd end end end;ad=false
  1423. cba:updateDraw()end
  1424. local function caa(cba,dba)local _ca=cba:getParent()
  1425. for aca,bca in pairs(cc)do for cca,dca in pairs(bca)do if(dca.element==dba)then
  1426. table.remove(cc[aca],cca)end end
  1427. if(
  1428. bb(cc[aca])<=0)then if(_ca~=nil)then _ca:removeEvent(aca,cba)end end end;ad=false end
  1429. local function daa(cba,dba,_ca)if(type(_ca)=="table")then _ca=_ca:getName()end
  1430. if(cc[dba]~=
  1431. nil)then for aca,bca in pairs(cc[dba])do
  1432. if(bca.element:getName()==_ca)then return bca end end end end
  1433. local function _ba(cba,dba,_ca)
  1434. if(daa(cba,dba,_ca:getName())~=nil)then return end;local aca=_ca:getZIndex()cd=cd+1
  1435. if(cc[dba]==nil)then cc[dba]={}end
  1436. table.insert(cc[dba],{element=_ca,zIndex=aca,evId=cd})ad=false;cba:listenEvent(dba)return _ca end
  1437. local function aba(cba,dba,_ca)
  1438. if(cc[dba]~=nil)then for aca,bca in pairs(cc[dba])do if(bca.element==_ca)then
  1439. table.remove(cc[dba],aca)end end;if(
  1440. bb(cc[dba])<=0)then cba:listenEvent(dba,false)end end;ad=false end
  1441. local function bba(cba,dba)return dba~=nil and cc[dba]or cc end
  1442. dc={getType=function()return ac end,getBase=function(cba)return _c end,isType=function(cba,dba)
  1443. return ac==dba or
  1444. _c.isType~=nil and _c.isType(dba)or false end,setSize=function(cba,...)_c.setSize(cba,...)
  1445. cba:customEventHandler("basalt_FrameResize")return cba end,setPosition=function(cba,...)
  1446. _c.setPosition(cba,...)cba:customEventHandler("basalt_FrameReposition")
  1447. return cba end,searchChildren=function(cba,dba)local _ca={}
  1448. for aca,bca in pairs(bc)do if
  1449. (string.find(bca.element:getName(),dba))then table.insert(_ca,bca)end end;return _ca end,getChildrenByType=function(cba,dba)
  1450. local _ca={}for aca,bca in pairs(bc)do
  1451. if(bca.element:isType(dba))then table.insert(_ca,bca)end end;return _ca end,setImportant=function(cba,dba)bd=
  1452. bd+1;cd=cd+1
  1453. for _ca,aca in pairs(cc)do for bca,cca in pairs(aca)do
  1454. if(cca.element==dba)then cca.evId=cd
  1455. table.remove(cc[_ca],bca)table.insert(cc[_ca],cca)break end end end
  1456. for _ca,aca in ipairs(bc)do if aca.element==dba then aca.objId=bd;table.remove(bc,_ca)
  1457. table.insert(bc,aca)break end end;if(cba.updateDraw~=nil)then cba:updateDraw()end
  1458. ad=false end,sortChildren=function(cba)if
  1459. (ad)then return end;table.sort(bc,dd)for dba,_ca in pairs(cc)do
  1460. table.sort(cc[dba],__a)end;ad=true end,clearFocusedChild=function(cba)if(
  1461. _d~=nil)then
  1462. if(b_a(cba,_d)~=nil)then _d:loseFocusHandler()end end;_d=nil;return cba end,setFocusedChild=function(cba,dba)
  1463. if(
  1464. _d~=dba)then if(_d~=nil)then
  1465. if(b_a(cba,_d)~=nil)then _d:loseFocusHandler()end end;if(dba~=nil)then if(b_a(cba,dba)~=nil)then
  1466. dba:getFocusHandler()end end;_d=dba;return true end;return false end,getFocused=function(cba)return
  1467. _d end,getChild=b_a,getChildren=a_a,getDeepChildren=c_a,addChild=d_a,removeChild=_aa,removeChildren=aaa,getEvents=bba,getEvent=daa,addEvent=_ba,removeEvent=aba,removeEvents=caa,updateZIndex=baa,listenEvent=function(cba,dba,_ca)_c.listenEvent(cba,dba,_ca)if(
  1468. cc[dba]==nil)then cc[dba]={}end;return cba end,customEventHandler=function(cba,...)
  1469. _c.customEventHandler(cba,...)
  1470. for dba,_ca in pairs(bc)do if(_ca.element.customEventHandler~=nil)then
  1471. _ca.element:customEventHandler(...)end end end,loseFocusHandler=function(cba)
  1472. _c.loseFocusHandler(cba)if(_d~=nil)then _d:loseFocusHandler()_d=nil end end,getBasalt=function(cba)return
  1473. db end,setPalette=function(cba,dba,...)local _ca=cba:getParent()
  1474. _ca:setPalette(dba,...)return cba end,eventHandler=function(cba,...)
  1475. if(_c.eventHandler~=nil)then
  1476. _c.eventHandler(cba,...)
  1477. if(cc["other_event"]~=nil)then cba:sortChildren()
  1478. for dba,_ca in
  1479. ipairs(cc["other_event"])do if(_ca.element.eventHandler~=nil)then
  1480. _ca.element.eventHandler(_ca.element,...)end end end end end}
  1481. for cba,dba in
  1482. pairs({mouse_click={"mouseHandler",true},mouse_up={"mouseUpHandler",false},mouse_drag={"dragHandler",false},mouse_scroll={"scrollHandler",true},mouse_hover={"hoverHandler",false}})do
  1483. dc[dba[1]]=function(_ca,aca,bca,cca,...)
  1484. if(_c[dba[1]]~=nil)then
  1485. if(_c[dba[1]](_ca,aca,bca,cca,...))then
  1486. if
  1487. (cc[cba]~=nil)then _ca:sortChildren()
  1488. for dca,_da in ipairs(cc[cba])do
  1489. if
  1490. (_da.element[dba[1]]~=nil)then local ada,bda=0,0
  1491. if(_ca.getOffset~=nil)then ada,bda=_ca:getOffset()end
  1492. if(_da.element.getIgnoreOffset~=nil)then if(_da.element.getIgnoreOffset())then
  1493. ada,bda=0,0 end end;if(_da.element[dba[1]](_da.element,aca,bca+ada,cca+bda,...))then return
  1494. true end end end;if(dba[2])then _ca:clearFocusedChild()end end;return true end end end end
  1495. for cba,dba in
  1496. pairs({key="keyHandler",key_up="keyUpHandler",char="charHandler"})do
  1497. dc[dba]=function(_ca,...)
  1498. if(_c[dba]~=nil)then
  1499. if(_c[dba](_ca,...))then
  1500. if(cc[cba]~=nil)then
  1501. _ca:sortChildren()for aca,bca in ipairs(cc[cba])do
  1502. if(bca.element[dba]~=nil)then if
  1503. (bca.element[dba](bca.element,...))then return true end end end end end end end end;for cba,dba in pairs(db.getObjects())do
  1504. dc["add"..cba]=function(_ca,aca)return
  1505. _ca:addChild(db:createObject(cba,aca))end end
  1506. dc.__index=dc;return setmetatable(dc,_c)end end
  1507. aa["objects"]["Checkbox"]=function(...)local ab=da("utils")local bb=da("tHex")
  1508. return
  1509. function(cb,db)
  1510. local _c=db.getObject("ChangeableObject")(cb,db)local ac="Checkbox"_c:setZIndex(5)_c:setValue(false)
  1511. _c:setSize(1,1)local bc,cc,dc,_d="\42"," ","","right"
  1512. local ad={load=function(bd)bd:listenEvent("mouse_click",bd)
  1513. bd:listenEvent("mouse_up",bd)end,getType=function(bd)return ac end,isType=function(bd,cd)return
  1514. ac==cd or
  1515. _c.isType~=nil and _c.isType(cd)or false end,setSymbol=function(bd,cd,dd)
  1516. bc=cd or bc;cc=dd or cc;bd:updateDraw()return bd end,setActiveSymbol=function(bd,cd)return bd:setSymbol(cd,
  1517. nil)end,setInactiveSymbol=function(bd,cd)
  1518. return bd:setSymbol(nil,cd)end,getSymbol=function(bd)return bc,cc end,getActiveSymbol=function(bd)return bc end,getInactiveSymbol=function(bd)return cc end,setText=function(bd,cd)
  1519. dc=cd;return bd end,getText=function(bd)return dc end,setTextPosition=function(bd,cd)_d=cd or _d;return bd end,getTextPosition=function(bd)return
  1520. _d end,setChecked=_c.setValue,getChecked=_c.getValue,mouseHandler=function(bd,cd,dd,__a)
  1521. if(_c.mouseHandler(bd,cd,dd,__a))then
  1522. if(cd==1)then
  1523. if(
  1524. bd:getValue()~=true)and(bd:getValue()~=false)then
  1525. bd:setValue(false)else bd:setValue(not bd:getValue())end;bd:updateDraw()return true end end;return false end,draw=function(bd)
  1526. _c.draw(bd)
  1527. bd:addDraw("checkbox",function()local cd,dd=bd:getPosition()local __a,a_a=bd:getSize()
  1528. local b_a=ab.getTextVerticalAlign(a_a,"center")local c_a,d_a=bd:getBackground(),bd:getForeground()
  1529. if
  1530. (bd:getValue())then
  1531. bd:addBlit(1,b_a,ab.getTextHorizontalAlign(bc,__a,"center"),bb[d_a],bb[c_a])else
  1532. bd:addBlit(1,b_a,ab.getTextHorizontalAlign(cc,__a,"center"),bb[d_a],bb[c_a])end;if(dc~="")then local _aa=_d=="left"and-dc:len()or 3
  1533. bd:addText(_aa,b_a,dc)end end)end}ad.__index=ad;return setmetatable(ad,_c)end end
  1534. aa["objects"]["Button"]=function(...)local ab=da("utils")local bb=da("tHex")
  1535. return
  1536. function(cb,db)
  1537. local _c=db.getObject("VisualObject")(cb,db)local ac="Button"local bc="center"local cc="center"local dc="Button"_c:setSize(12,3)
  1538. _c:setZIndex(5)
  1539. local _d={getType=function(ad)return ac end,isType=function(ad,bd)return
  1540. ac==bd or _c.isType~=nil and _c.isType(bd)or false end,getBase=function(ad)return
  1541. _c end,getHorizontalAlign=function(ad)return bc end,setHorizontalAlign=function(ad,bd)bc=bd;ad:updateDraw()return ad end,getVerticalAlign=function(ad)return
  1542. cc end,setVerticalAlign=function(ad,bd)cc=bd;ad:updateDraw()return ad end,getText=function(ad)
  1543. return dc end,setText=function(ad,bd)dc=bd;ad:updateDraw()return ad end,draw=function(ad)
  1544. _c.draw(ad)
  1545. ad:addDraw("button",function()local bd,cd=ad:getSize()
  1546. local dd=ab.getTextVerticalAlign(cd,cc)local __a
  1547. if(bc=="center")then
  1548. __a=math.floor((bd-dc:len())/2)elseif(bc=="right")then __a=bd-dc:len()end;ad:addText(__a+1,dd,dc)
  1549. ad:addFG(__a+1,dd,bb[ad:getForeground()or colors.white]:rep(dc:len()))end)end}_d.__index=_d;return setmetatable(_d,_c)end end
  1550. aa["objects"]["Dropdown"]=function(...)local ab=da("utils")local bb=da("tHex")
  1551. return
  1552. function(cb,db)
  1553. local _c=db.getObject("List")(cb,db)local ac="Dropdown"_c:setSize(12,1)_c:setZIndex(6)local bc=true
  1554. local cc="left"local dc=0;local _d=0;local ad=0;local bd=true;local cd="\16"local dd="\31"local __a=false
  1555. local a_a={getType=function(b_a)return ac end,isType=function(b_a,c_a)return
  1556.  
  1557. ac==c_a or _c.isType~=nil and _c.isType(c_a)or false end,load=function(b_a)
  1558. b_a:listenEvent("mouse_click",b_a)b_a:listenEvent("mouse_up",b_a)
  1559. b_a:listenEvent("mouse_scroll",b_a)b_a:listenEvent("mouse_drag",b_a)end,setOffset=function(b_a,c_a)
  1560. dc=c_a;b_a:updateDraw()return b_a end,getOffset=function(b_a)return dc end,addItem=function(b_a,c_a,...)
  1561. _c.addItem(b_a,c_a,...)if(bd)then _d=math.max(_d,#c_a)ad=ad+1 end;return b_a end,removeItem=function(b_a,c_a)
  1562. _c.removeItem(b_a,c_a)if(bd)then _d=0;ad=0
  1563. for n=1,#list do _d=math.max(_d,#list[n].text)end;ad=#list end end,isOpened=function(b_a)return
  1564. __a end,setOpened=function(b_a,c_a)__a=c_a;b_a:updateDraw()return b_a end,setDropdownSize=function(b_a,c_a,d_a)
  1565. _d,ad=c_a,d_a;bd=false;b_a:updateDraw()return b_a end,setDropdownWidth=function(b_a,c_a)return
  1566. b_a:setDropdownSize(c_a,ad)end,setDropdownHeight=function(b_a,c_a)
  1567. return b_a:setDropdownSize(_d,c_a)end,getDropdownSize=function(b_a)return _d,ad end,getDropdownWidth=function(b_a)return _d end,getDropdownHeight=function(b_a)return ad end,mouseHandler=function(b_a,c_a,d_a,_aa,aaa)
  1568. if
  1569. (__a)then local caa,daa=b_a:getAbsolutePosition()
  1570. if(c_a==1)then local _ba=b_a:getAll()
  1571. if(#
  1572. _ba>0)then
  1573. for n=1,ad do
  1574. if(_ba[n+dc]~=nil)then
  1575. if
  1576. (caa<=d_a)and(caa+_d>d_a)and(daa+n==_aa)then b_a:setValue(_ba[n+dc])b_a:updateDraw()
  1577. local aba=b_a:sendEvent("mouse_click",b_a,"mouse_click",c_a,d_a,_aa)if(aba==false)then return aba end;if(aaa)then
  1578. db.schedule(function()sleep(0.1)
  1579. b_a:mouseUpHandler(c_a,d_a,_aa)end)()end;return true end end end end end end;local baa=_c:getBase()
  1580. if(baa.mouseHandler(b_a,c_a,d_a,_aa))then __a=not __a
  1581. b_a:getParent():setImportant(b_a)b_a:updateDraw()return true else
  1582. if(__a)then b_a:updateDraw()__a=false end;return false end end,mouseUpHandler=function(b_a,c_a,d_a,_aa)
  1583. if
  1584. (__a)then local aaa,baa=b_a:getAbsolutePosition()
  1585. if(c_a==1)then local caa=b_a:getAll()
  1586. if(#
  1587. caa>0)then
  1588. for n=1,ad do
  1589. if(caa[n+dc]~=nil)then
  1590. if
  1591. (aaa<=d_a)and(aaa+_d>d_a)and(baa+n==_aa)then __a=false;b_a:updateDraw()
  1592. local daa=b_a:sendEvent("mouse_up",b_a,"mouse_up",c_a,d_a,_aa)if(daa==false)then return daa end;return true end end end end end end end,dragHandler=function(b_a,c_a,d_a,_aa)if
  1593. (_c.dragHandler(b_a,c_a,d_a,_aa))then __a=true end end,scrollHandler=function(b_a,c_a,d_a,_aa)
  1594. if
  1595. (__a)then local aaa,baa=b_a:getAbsolutePosition()if
  1596. (d_a>=aaa)and(d_a<=aaa+_d)and(_aa>=baa)and(_aa<=baa+ad)then
  1597. b_a:setFocus()end end
  1598. if(__a)and(b_a:isFocused())then
  1599. local aaa,baa=b_a:getAbsolutePosition()if
  1600. (d_a<aaa)or(d_a>aaa+_d)or(_aa<baa)or(_aa>baa+ad)then return false end;if(#b_a:getAll()<=ad)then return
  1601. false end;local caa=b_a:getAll()dc=dc+c_a
  1602. if(dc<0)then dc=0 end
  1603. if(c_a==1)then if(#caa>ad)then if(dc>#caa-ad)then dc=#caa-ad end else
  1604. dc=math.min(#caa-1,0)end end
  1605. local daa=b_a:sendEvent("mouse_scroll",b_a,"mouse_scroll",c_a,d_a,_aa)if(daa==false)then return daa end;b_a:updateDraw()return true end end,draw=function(b_a)
  1606. _c.draw(b_a)b_a:setDrawState("list",false)
  1607. b_a:addDraw("dropdown",function()
  1608. local c_a,d_a=b_a:getPosition()local _aa,aaa=b_a:getSize()local baa=b_a:getValue()
  1609. local caa=b_a:getAll()local daa,_ba=b_a:getBackground(),b_a:getForeground()
  1610. local aba=ab.getTextHorizontalAlign((
  1611. baa~=nil and baa.text or""),_aa,cc):sub(1,
  1612. _aa-1).. (__a and dd or cd)
  1613. b_a:addBlit(1,1,aba,bb[_ba]:rep(#aba),bb[daa]:rep(#aba))
  1614. if(__a)then b_a:addTextBox(1,2,_d,ad," ")
  1615. b_a:addBackgroundBox(1,2,_d,ad,daa)b_a:addForegroundBox(1,2,_d,ad,_ba)
  1616. for n=1,ad do
  1617. if(caa[n+dc]~=nil)then local bba=ab.getTextHorizontalAlign(caa[
  1618. n+dc].text,_d,cc)
  1619. if(
  1620. caa[n+dc]==baa)then
  1621. if(bc)then local cba,dba=b_a:getSelectionColor()
  1622. b_a:addBlit(1,n+1,bba,bb[dba]:rep(
  1623. #bba),bb[cba]:rep(#bba))else
  1624. b_a:addBlit(1,n+1,bba,bb[caa[n+dc].fgCol]:rep(#bba),bb[caa[n+dc].bgCol]:rep(
  1625. #bba))end else
  1626. b_a:addBlit(1,n+1,bba,bb[caa[n+dc].fgCol]:rep(#bba),bb[caa[n+dc].bgCol]:rep(
  1627. #bba))end end end end end)end}a_a.__index=a_a;return setmetatable(a_a,_c)end end
  1628. aa["objects"]["Flexbox"]=function(...)
  1629. local function ab(bb,cb)local db=0;local _c=0;local ac=0;local bc,cc=bb:getSize()
  1630. local dc={getFlexGrow=function(_d)return db end,setFlexGrow=function(_d,ad)
  1631. db=ad;return _d end,getFlexShrink=function(_d)return _c end,setFlexShrink=function(_d,ad)_c=ad;return _d end,getFlexBasis=function(_d)return ac end,setFlexBasis=function(_d,ad)
  1632. ac=ad;return _d end,getSize=function(_d)return bc,cc end,getWidth=function(_d)return bc end,getHeight=function(_d)return cc end,setSize=function(_d,ad,bd,cd,dd)
  1633. bb.setSize(_d,ad,bd,cd)if not dd then bc,cc=bb:getSize()end;return _d end}dc.__index=dc;return setmetatable(dc,bb)end
  1634. return
  1635. function(bb,cb)
  1636. local db=cb.getObject("ScrollableFrame")(bb,cb)local _c="Flexbox"local ac="row"local bc=1;local cc="flex-start"local dc="nowrap"local _d={}local ad={}
  1637. local bd=false
  1638. local cd=ab({getHeight=function(d_a)return 0 end,getWidth=function(d_a)return 0 end,getPosition=function(d_a)return 0,0 end,getSize=function(d_a)return 0,0 end,isType=function(d_a)return
  1639. false end,getType=function(d_a)return"lineBreakFakeObject"end,setPosition=function(d_a)end,setSize=function(d_a)end})
  1640. cd:setFlexBasis(0):setFlexGrow(0):setFlexShrink(0)
  1641. local function dd(d_a)
  1642. if(dc=="nowrap")then ad={}local _aa=1;local aaa=1;local baa=1
  1643. for caa,daa in pairs(_d)do if(ad[_aa]==nil)then
  1644. ad[_aa]={offset=1}end
  1645. local _ba=ac=="row"and daa:getHeight()or daa:getWidth()if _ba>aaa then aaa=_ba end
  1646. if(daa==cd)then baa=baa+aaa+bc;aaa=1;_aa=_aa+1
  1647. ad[_aa]={offset=baa}else table.insert(ad[_aa],daa)end end elseif(dc=="wrap")then ad={}local _aa=1;local aaa=1;local baa=ac=="row"and d_a:getWidth()or
  1648. d_a:getHeight()local caa=0;local daa=1
  1649. for _ba,aba in pairs(_d)do if(
  1650. ad[daa]==nil)then ad[daa]={offset=1}end
  1651. if aba==cd then
  1652. aaa=aaa+_aa+bc;caa=0;_aa=1;daa=daa+1;ad[daa]={offset=aaa}else local bba=
  1653. ac=="row"and aba:getWidth()or aba:getHeight()
  1654. if
  1655. (bba+caa<=baa)then table.insert(ad[daa],aba)caa=caa+bba+bc else
  1656. aaa=aaa+_aa+bc
  1657. _aa=ac=="row"and aba:getHeight()or aba:getWidth()daa=daa+1;caa=bba+bc;ad[daa]={offset=aaa,aba}end
  1658. local cba=ac=="row"and aba:getHeight()or aba:getWidth()if cba>_aa then _aa=cba end end end end end
  1659. local function __a(d_a,_aa)local aaa,baa=d_a:getSize()local caa=0;local daa=0;local _ba=0
  1660. for cba,dba in ipairs(_aa)do caa=caa+
  1661. dba:getFlexGrow()daa=daa+dba:getFlexShrink()_ba=_ba+
  1662. dba:getFlexBasis()end;local aba=aaa-_ba- (bc* (#_aa-1))local bba=1
  1663. for cba,dba in ipairs(_aa)do
  1664. if(dba~=cd)then
  1665. local _ca;local aca=dba:getFlexGrow()local bca=dba:getFlexShrink()
  1666. local cca=
  1667. dba:getFlexBasis()~=0 and dba:getFlexBasis()or dba:getWidth()if caa>0 then _ca=cca+aca/caa*aba else _ca=cca end;if aba<0 and
  1668. daa>0 then _ca=cca+bca/daa*aba end;dba:setPosition(bba,
  1669. _aa.offset or 1)
  1670. dba:setSize(_ca,dba:getHeight(),false,true)bba=bba+_ca+bc end end
  1671. if cc=="flex-end"then local cba=bba-bc;local dba=aaa-cba+1
  1672. for _ca,aca in ipairs(_aa)do
  1673. local bca,cca=aca:getPosition()aca:setPosition(bca+dba,cca)end elseif cc=="center"then local cba=bba-bc;local dba=(aaa-cba)/2 +1
  1674. for _ca,aca in ipairs(_aa)do
  1675. local bca,cca=aca:getPosition()aca:setPosition(bca+dba,cca)end elseif cc=="space-between"then local cba=bba-bc
  1676. local dba=(aaa-cba)/ (#_aa-1)+1
  1677. for _ca,aca in ipairs(_aa)do if _ca>1 then local bca,cca=aca:getPosition()
  1678. aca:setPosition(bca+dba* (_ca-1),cca)end end elseif cc=="space-around"then local cba=bba-bc;local dba=(aaa-cba)/#_aa
  1679. for _ca,aca in ipairs(_aa)do
  1680. local bca,cca=aca:getPosition()aca:setPosition(bca+dba*_ca-dba/2,cca)end elseif cc=="space-evenly"then local cba=#_aa+1;local dba=0;for cca,dca in ipairs(_aa)do
  1681. dba=dba+dca:getWidth()end;local _ca=aaa-dba
  1682. local aca=math.floor(_ca/cba)local bca=_ca-aca*cba;bba=aca+ (bca>0 and 1 or 0)bca=bca>
  1683. 0 and bca-1 or 0
  1684. for cca,dca in ipairs(_aa)do
  1685. dca:setPosition(bba,1)
  1686. bba=bba+dca:getWidth()+aca+ (bca>0 and 1 or 0)bca=bca>0 and bca-1 or 0 end end end
  1687. local function a_a(d_a,_aa)local aaa,baa=d_a:getSize()local caa=0;local daa=0;local _ba=0
  1688. for cba,dba in ipairs(_aa)do caa=caa+
  1689. dba:getFlexGrow()daa=daa+dba:getFlexShrink()_ba=_ba+
  1690. dba:getFlexBasis()end;local aba=baa-_ba- (bc* (#_aa-1))local bba=1
  1691. for cba,dba in ipairs(_aa)do
  1692. if(dba~=cd)then
  1693. local _ca;local aca=dba:getFlexGrow()local bca=dba:getFlexShrink()
  1694. local cca=
  1695. dba:getFlexBasis()~=0 and dba:getFlexBasis()or dba:getHeight()if caa>0 then _ca=cca+aca/caa*aba else _ca=cca end;if aba<0 and
  1696. daa>0 then _ca=cca+bca/daa*aba end
  1697. dba:setPosition(_aa.offset,bba)dba:setSize(dba:getWidth(),_ca,false,true)bba=
  1698. bba+_ca+bc end end
  1699. if cc=="flex-end"then local cba=bba-bc;local dba=baa-cba+1
  1700. for _ca,aca in ipairs(_aa)do
  1701. local bca,cca=aca:getPosition()aca:setPosition(bca,cca+dba)end elseif cc=="center"then local cba=bba-bc;local dba=(baa-cba)/2
  1702. for _ca,aca in ipairs(_aa)do
  1703. local bca,cca=aca:getPosition()aca:setPosition(bca,cca+dba)end elseif cc=="space-between"then local cba=bba-bc
  1704. local dba=(baa-cba)/ (#_aa-1)+1
  1705. for _ca,aca in ipairs(_aa)do if _ca>1 then local bca,cca=aca:getPosition()
  1706. aca:setPosition(bca,cca+dba* (_ca-1))end end elseif cc=="space-around"then local cba=bba-bc;local dba=(baa-cba)/#_aa
  1707. for _ca,aca in ipairs(_aa)do
  1708. local bca,cca=aca:getPosition()aca:setPosition(bca,cca+dba*_ca-dba/2)end elseif cc=="space-evenly"then local cba=#_aa+1;local dba=0;for cca,dca in ipairs(_aa)do
  1709. dba=dba+dca:getHeight()end;local _ca=baa-dba
  1710. local aca=math.floor(_ca/cba)local bca=_ca-aca*cba;bba=aca+ (bca>0 and 1 or 0)bca=bca>
  1711. 0 and bca-1 or 0
  1712. for cca,dca in ipairs(_aa)do
  1713. local _da,ada=dca:getPosition()dca:setPosition(_da,bba)bba=
  1714. bba+dca:getHeight()+aca+ (bca>0 and 1 or 0)bca=bca>0 and
  1715. bca-1 or 0 end end end
  1716. local function b_a(d_a)dd(d_a)
  1717. if ac=="row"then for _aa,aaa in pairs(ad)do __a(d_a,aaa)end else for _aa,aaa in pairs(ad)do
  1718. a_a(d_a,aaa)end end;bd=false end
  1719. local c_a={getType=function()return _c end,isType=function(d_a,_aa)return
  1720. _c==_aa or db.isType~=nil and db.isType(_aa)or false end,setJustifyContent=function(d_a,_aa)
  1721. cc=_aa;bd=true;d_a:updateDraw()return d_a end,getJustifyContent=function(d_a)return cc end,setDirection=function(d_a,_aa)
  1722. ac=_aa;bd=true;d_a:updateDraw()return d_a end,getDirection=function(d_a)return ac end,setSpacing=function(d_a,_aa)
  1723. bc=_aa;bd=true;d_a:updateDraw()return d_a end,getSpacing=function(d_a)return bc end,setWrap=function(d_a,_aa)
  1724. dc=_aa;bd=true;d_a:updateDraw()return d_a end,getWrap=function(d_a)return dc end,updateLayout=function(d_a)
  1725. bd=true;d_a:updateDraw()end,addBreak=function(d_a)table.insert(_d,cd)
  1726. bd=true;d_a:updateDraw()return d_a end,customEventHandler=function(d_a,_aa,...)
  1727. db.customEventHandler(d_a,_aa,...)if _aa=="basalt_FrameResize"then bd=true end end,draw=function(d_a)
  1728. db.draw(d_a)
  1729. d_a:addDraw("flexboxDraw",function()if bd then b_a(d_a)end end,1)end}
  1730. for d_a,_aa in pairs(cb.getObjects())do
  1731. c_a["add"..d_a]=function(aaa,baa)
  1732. local caa=db["add"..d_a](aaa,baa)local daa=ab(caa,cb)table.insert(_d,daa)bd=true;return daa end end;c_a.__index=c_a;return setmetatable(c_a,db)end end
  1733. aa["objects"]["Label"]=function(...)local ab=da("utils")local bb=ab.wrapText
  1734. local cb=ab.writeWrappedText;local db=da("tHex")
  1735. return
  1736. function(_c,ac)
  1737. local bc=ac.getObject("VisualObject")(_c,ac)local cc="Label"bc:setZIndex(3)bc:setSize(5,1)
  1738. bc:setBackground(false)local dc=true;local _d,ad="Label","left"
  1739. local bd={getType=function(cd)return cc end,getBase=function(cd)return bc end,setText=function(cd,dd)
  1740. _d=tostring(dd)
  1741. if(dc)then local __a=bb(_d,#_d)local a_a,b_a=1,1;for c_a,d_a in pairs(__a)do b_a=b_a+1
  1742. a_a=math.max(a_a,d_a:len())end;cd:setSize(a_a,b_a)dc=true end;cd:updateDraw()return cd end,getAutoSize=function(cd)return
  1743. dc end,setAutoSize=function(cd,dd)dc=dd;return cd end,getText=function(cd)return _d end,setSize=function(cd,dd,__a)
  1744. bc.setSize(cd,dd,__a)dc=false;return cd end,getTextAlign=function(cd)return ad end,setTextAlign=function(cd,dd)ad=dd or ad;return
  1745. cd end,draw=function(cd)bc.draw(cd)
  1746. cd:addDraw("label",function()local dd,__a=cd:getSize()
  1747. local a_a=
  1748.  
  1749.  
  1750. ad=="center"and math.floor(dd/2 -_d:len()/2 +0.5)or ad=="right"and dd- (_d:len()-1)or 1;cb(cd,a_a,1,_d,dd+1,__a)end)end,init=function(cd)
  1751. bc.init(cd)local dd=cd:getParent()
  1752. cd:setForeground(dd:getForeground())end}bd.__index=bd;return setmetatable(bd,bc)end end
  1753. aa["objects"]["Input"]=function(...)local ab=da("utils")local bb=da("tHex")
  1754. return
  1755. function(cb,db)
  1756. local _c=db.getObject("ChangeableObject")(cb,db)local ac="Input"local bc="text"local cc=0;_c:setZIndex(5)_c:setValue("")
  1757. _c:setSize(12,1)local dc=1;local _d=1;local ad=""local bd=colors.black;local cd=colors.lightGray;local dd=ad
  1758. local __a=false
  1759. local a_a={load=function(b_a)b_a:listenEvent("mouse_click")
  1760. b_a:listenEvent("key")b_a:listenEvent("char")
  1761. b_a:listenEvent("other_event")b_a:listenEvent("mouse_drag")end,getType=function(b_a)return
  1762. ac end,isType=function(b_a,c_a)return
  1763. ac==c_a or _c.isType~=nil and _c.isType(c_a)or false end,setDefaultFG=function(b_a,c_a)return b_a:setDefaultText(b_a,ad,c_a,
  1764. nil)end,setDefaultBG=function(b_a,c_a)return b_a:setDefaultText(b_a,ad,
  1765. nil,c_a)end,setDefaultText=function(b_a,c_a,d_a,_aa)
  1766. ad=c_a;cd=d_a or cd;bd=_aa or bd;if(b_a:isFocused())then dd=""else dd=ad end
  1767. b_a:updateDraw()return b_a end,getDefaultText=function(b_a)return ad,cd,
  1768. bd end,setOffset=function(b_a,c_a)_d=c_a;b_a:updateDraw()return b_a end,getOffset=function(b_a)return
  1769. _d end,setTextOffset=function(b_a,c_a)dc=c_a;b_a:updateDraw()return b_a end,getTextOffset=function(b_a)return
  1770. dc end,setInputType=function(b_a,c_a)bc=c_a;b_a:updateDraw()return b_a end,getInputType=function(b_a)return
  1771. bc end,setValue=function(b_a,c_a)_c.setValue(b_a,tostring(c_a))
  1772. if not(__a)then dc=
  1773. tostring(c_a):len()+1
  1774. _d=math.max(1,dc-b_a:getWidth()+1)
  1775. if(b_a:isFocused())then local d_a=b_a:getParent()
  1776. local _aa,aaa=b_a:getPosition()
  1777. d_a:setCursor(true,_aa+dc-_d,aaa+math.floor(b_a:getHeight()/2),b_a:getForeground())end end;b_a:updateDraw()return b_a end,getValue=function(b_a)
  1778. local c_a=_c.getValue(b_a)
  1779. return bc=="number"and tonumber(c_a)or c_a end,setInputLimit=function(b_a,c_a)
  1780. cc=tonumber(c_a)or cc;b_a:updateDraw()return b_a end,getInputLimit=function(b_a)return cc end,getFocusHandler=function(b_a)
  1781. _c.getFocusHandler(b_a)local c_a=b_a:getParent()
  1782. if(c_a~=nil)then local d_a,_aa=b_a:getPosition()dd=""if(ad~=
  1783. "")then b_a:updateDraw()end
  1784. c_a:setCursor(true,d_a+dc-_d,_aa+math.max(math.ceil(
  1785. b_a:getHeight()/2 -1,1)),b_a:getForeground())end end,loseFocusHandler=function(b_a)
  1786. _c.loseFocusHandler(b_a)local c_a=b_a:getParent()dd=ad
  1787. if(ad~="")then b_a:updateDraw()end;c_a:setCursor(false)end,keyHandler=function(b_a,c_a)
  1788. if
  1789. (_c.keyHandler(b_a,c_a))then local d_a,_aa=b_a:getSize()local aaa=b_a:getParent()__a=true
  1790. if
  1791. (c_a==keys.backspace)then local _ba=tostring(_c.getValue())
  1792. if(dc>1)then b_a:setValue(_ba:sub(1,dc-2)..
  1793. _ba:sub(dc,_ba:len()))dc=math.max(
  1794. dc-1,1)if(dc<_d)then _d=math.max(_d-1,1)end end end
  1795. if(c_a==keys.enter)then aaa:clearFocusedChild(b_a)end
  1796. if(c_a==keys.right)then
  1797. local _ba=tostring(_c.getValue()):len()dc=dc+1;if(dc>_ba)then dc=_ba+1 end;dc=math.max(dc,1)if(dc<_d)or
  1798. (dc>=d_a+_d)then _d=dc-d_a+1 end;_d=math.max(_d,1)end;if(c_a==keys.left)then dc=dc-1;if(dc>=1)then
  1799. if(dc<_d)or(dc>=d_a+_d)then _d=dc end end;dc=math.max(dc,1)
  1800. _d=math.max(_d,1)end
  1801. local baa,caa=b_a:getPosition()local daa=tostring(_c.getValue())b_a:updateDraw()
  1802. __a=false;return true end end,charHandler=function(b_a,c_a)
  1803. if
  1804. (_c.charHandler(b_a,c_a))then __a=true;local d_a,_aa=b_a:getSize()local aaa=_c.getValue()
  1805. if(
  1806. aaa:len()<cc or cc<=0)then
  1807. if(bc=="number")then local _ba=aaa
  1808. if
  1809. (dc==1 and c_a=="-")or(c_a==".")or(tonumber(c_a)~=nil)then
  1810. b_a:setValue(aaa:sub(1,dc-1)..
  1811. c_a..aaa:sub(dc,aaa:len()))dc=dc+1;if(c_a==".")or(c_a=="-")and(#aaa>0)then
  1812. if(
  1813. tonumber(_c.getValue())==nil)then b_a:setValue(_ba)dc=dc-1 end end end else
  1814. b_a:setValue(aaa:sub(1,dc-1)..c_a..aaa:sub(dc,aaa:len()))dc=dc+1 end;if(dc>=d_a+_d)then _d=_d+1 end end;local baa,caa=b_a:getPosition()
  1815. local daa=tostring(_c.getValue())__a=false;b_a:updateDraw()return true end end,mouseHandler=function(b_a,c_a,d_a,_aa)
  1816. if
  1817. (_c.mouseHandler(b_a,c_a,d_a,_aa))then local aaa=b_a:getParent()local baa,caa=b_a:getPosition()
  1818. local daa,_ba=b_a:getAbsolutePosition(baa,caa)local aba,bba=b_a:getSize()dc=d_a-daa+_d;local cba=_c.getValue()if(dc>
  1819. cba:len())then dc=cba:len()+1 end;if(dc<_d)then _d=dc-1
  1820. if(_d<1)then _d=1 end end
  1821. aaa:setCursor(true,baa+dc-_d,caa+
  1822. math.max(math.ceil(bba/2 -1,1)),b_a:getForeground())return true end end,dragHandler=function(b_a,c_a,d_a,_aa,aaa,baa)
  1823. if
  1824. (b_a:isFocused())then if(b_a:isCoordsInObject(d_a,_aa))then
  1825. if(_c.dragHandler(b_a,c_a,d_a,_aa,aaa,baa))then return true end end
  1826. local caa=b_a:getParent()caa:clearFocusedChild()end end,draw=function(b_a)
  1827. _c.draw(b_a)
  1828. b_a:addDraw("input",function()local c_a=b_a:getParent()local d_a,_aa=b_a:getPosition()
  1829. local aaa,baa=b_a:getSize()local caa=ab.getTextVerticalAlign(baa,textVerticalAlign)
  1830. local daa=tostring(_c.getValue())local _ba=b_a:getBackground()local aba=b_a:getForeground()local bba;if(
  1831. daa:len()<=0)then bba=dd;_ba=bd or _ba;aba=cd or aba end
  1832. bba=dd;if(daa~="")then bba=daa end;bba=bba:sub(_d,aaa+_d-1)local cba=aaa-
  1833. bba:len()if(cba<0)then cba=0 end
  1834. if
  1835. (bc=="password")and(daa~="")then bba=string.rep("*",bba:len())end;bba=bba..string.rep(" ",cba)
  1836. b_a:addBlit(1,caa,bba,bb[aba]:rep(bba:len()),bb[_ba]:rep(bba:len()))if(b_a:isFocused())then
  1837. c_a:setCursor(true,d_a+dc-_d,_aa+
  1838. math.floor(b_a:getHeight()/2),b_a:getForeground())end end)end}a_a.__index=a_a;return setmetatable(a_a,_c)end end
  1839. aa["objects"]["Menubar"]=function(...)local ab=da("utils")local bb=da("tHex")
  1840. return
  1841. function(cb,db)
  1842. local _c=db.getObject("List")(cb,db)local ac="Menubar"local bc={}_c:setSize(30,1)_c:setZIndex(5)local cc=0
  1843. local dc,_d=1,1;local ad=true
  1844. local function bd()local cd=0;local dd=_c:getWidth()local __a=_c:getAll()for n=1,#__a do cd=cd+
  1845. __a[n].text:len()+dc*2 end;return
  1846. math.max(cd-dd,0)end
  1847. bc={init=function(cd)local dd=cd:getParent()cd:listenEvent("mouse_click")
  1848. cd:listenEvent("mouse_drag")cd:listenEvent("mouse_scroll")return _c.init(cd)end,getType=function(cd)return
  1849. ac end,getBase=function(cd)return _c end,setSpace=function(cd,dd)dc=dd or dc;cd:updateDraw()
  1850. return cd end,getSpace=function(cd)return dc end,setScrollable=function(cd,dd)ad=dd
  1851. if(dd==nil)then ad=true end;return cd end,getScrollable=function(cd)return ad end,mouseHandler=function(cd,dd,__a,a_a)
  1852. if
  1853. (_c:getBase().mouseHandler(cd,dd,__a,a_a))then local b_a,c_a=cd:getAbsolutePosition()local d_a,_aa=cd:getSize()local aaa=0
  1854. local baa=cd:getAll()
  1855. for n=1,#baa do
  1856. if(baa[n]~=nil)then
  1857. if
  1858. (b_a+aaa<=__a+cc)and(
  1859. b_a+aaa+baa[n].text:len()+ (dc*2)>__a+cc)and(c_a==a_a)then
  1860. cd:setValue(baa[n])cd:sendEvent(event,cd,event,0,__a,a_a,baa[n])end;aaa=aaa+baa[n].text:len()+dc*2 end end;cd:updateDraw()return true end end,scrollHandler=function(cd,dd,__a,a_a)
  1861. if
  1862. (_c:getBase().scrollHandler(cd,dd,__a,a_a))then if(ad)then cc=cc+dd;if(cc<0)then cc=0 end;local b_a=bd()if(cc>b_a)then cc=b_a end
  1863. cd:updateDraw()end;return true end;return false end,draw=function(cd)
  1864. _c.draw(cd)
  1865. cd:addDraw("list",function()local dd=cd:getParent()local __a,a_a=cd:getSize()local b_a=""local c_a=""
  1866. local d_a=""local _aa,aaa=cd:getSelectionColor()
  1867. for baa,caa in pairs(cd:getAll())do
  1868. local daa=
  1869. (" "):rep(dc)..caa.text.. (" "):rep(dc)b_a=b_a..daa
  1870. if(caa==cd:getValue())then c_a=c_a..
  1871. bb[_aa or caa.bgCol or
  1872. cd:getBackground()]:rep(daa:len())d_a=d_a..
  1873. bb[aaa or
  1874. caa.FgCol or cd:getForeground()]:rep(daa:len())else c_a=c_a..
  1875. bb[caa.bgCol or
  1876. cd:getBackground()]:rep(daa:len())d_a=d_a..
  1877. bb[caa.FgCol or
  1878. cd:getForeground()]:rep(daa:len())end end
  1879. cd:addBlit(1,1,b_a:sub(cc+1,__a+cc),d_a:sub(cc+1,__a+cc),c_a:sub(cc+1,__a+cc))end)end}bc.__index=bc;return setmetatable(bc,_c)end end
  1880. aa["objects"]["Pane"]=function(...)
  1881. return
  1882. function(ab,bb)
  1883. local cb=bb.getObject("VisualObject")(ab,bb)local db="Pane"cb:setSize(25,10)
  1884. local _c={getType=function(ac)return db end}_c.__index=_c;return setmetatable(_c,cb)end end
  1885. aa["objects"]["Slider"]=function(...)local ab=da("tHex")
  1886. return
  1887. function(bb,cb)
  1888. local db=cb.getObject("ChangeableObject")(bb,cb)local _c="Slider"db:setSize(12,1)db:setValue(1)
  1889. db:setBackground(false,"\140",colors.black)local ac="horizontal"local bc=" "local cc=colors.black;local dc=colors.gray;local _d=12;local ad=1
  1890. local bd=1
  1891. local function cd(__a,a_a,b_a,c_a)local d_a,_aa=__a:getPosition()local aaa,baa=__a:getSize()local caa=
  1892. ac=="vertical"and baa or aaa
  1893. for i=0,caa do
  1894. if
  1895.  
  1896. (
  1897. (ac=="vertical"and _aa+i==c_a)or(ac=="horizontal"and d_a+i==b_a))and(d_a<=b_a)and(d_a+aaa>b_a)and(_aa<=c_a)and
  1898. (_aa+baa>c_a)then ad=math.min(i+1,caa- (#
  1899. bc+bd-2))
  1900. __a:setValue(_d/caa*ad)__a:updateDraw()end end end
  1901. local dd={getType=function(__a)return _c end,load=function(__a)__a:listenEvent("mouse_click")
  1902. __a:listenEvent("mouse_drag")__a:listenEvent("mouse_scroll")end,setSymbol=function(__a,a_a)
  1903. bc=a_a:sub(1,1)__a:updateDraw()return __a end,getSymbol=function(__a)return bc end,setIndex=function(__a,a_a)
  1904. ad=a_a;if(ad<1)then ad=1 end;local b_a,c_a=__a:getSize()
  1905. ad=math.min(ad,(
  1906. ac=="vertical"and c_a or b_a)- (bd-1))
  1907. __a:setValue(_d/ (ac=="vertical"and c_a or b_a)*ad)__a:updateDraw()return __a end,getIndex=function(__a)return
  1908. ad end,setMaxValue=function(__a,a_a)_d=a_a;return __a end,getMaxValue=function(__a)return _d end,setSymbolColor=function(__a,a_a)
  1909. symbolColor=a_a;__a:updateDraw()return __a end,getSymbolColor=function(__a)
  1910. return symbolColor end,setBarType=function(__a,a_a)ac=a_a:lower()__a:updateDraw()return __a end,getBarType=function(__a)return
  1911. ac end,mouseHandler=function(__a,a_a,b_a,c_a)if(db.mouseHandler(__a,a_a,b_a,c_a))then cd(__a,a_a,b_a,c_a)return
  1912. true end;return false end,dragHandler=function(__a,a_a,b_a,c_a)if
  1913. (db.dragHandler(__a,a_a,b_a,c_a))then cd(__a,a_a,b_a,c_a)return true end
  1914. return false end,scrollHandler=function(__a,a_a,b_a,c_a)
  1915. if
  1916. (db.scrollHandler(__a,a_a,b_a,c_a))then local d_a,_aa=__a:getSize()ad=ad+a_a;if(ad<1)then ad=1 end
  1917. ad=math.min(ad,(
  1918. ac=="vertical"and _aa or d_a)- (bd-1))
  1919. __a:setValue(_d/ (ac=="vertical"and _aa or d_a)*ad)__a:updateDraw()return true end;return false end,draw=function(__a)
  1920. db.draw(__a)
  1921. __a:addDraw("slider",function()local a_a,b_a=__a:getSize()
  1922. local c_a,d_a=__a:getBackground(),__a:getForeground()
  1923. if(ac=="horizontal")then __a:addText(ad,oby,bc:rep(bd))
  1924. if(dc~=false)then __a:addBG(ad,1,ab[dc]:rep(
  1925. #bc*bd))end;if(cc~=false)then
  1926. __a:addFG(ad,1,ab[cc]:rep(#bc*bd))end end
  1927. if(ac=="vertical")then
  1928. for n=0,b_a-1 do
  1929. if(ad==n+1)then for curIndexOffset=0,math.min(bd-1,b_a)do
  1930. __a:addBlit(1,1 +n+curIndexOffset,bc,ab[symbolColor],ab[symbolColor])end else if(n+1 <ad)or(n+1 >
  1931. ad-1 +bd)then
  1932. __a:addBlit(1,1 +n,bgSymbol,ab[d_a],ab[c_a])end end end end end)end}dd.__index=dd;return setmetatable(dd,db)end end
  1933. aa["objects"]["MovableFrame"]=function(...)
  1934. local ab,bb,cb,db=math.max,math.min,string.sub,string.rep
  1935. return
  1936. function(_c,ac)local bc=ac.getObject("Frame")(_c,ac)local cc="MovableFrame"
  1937. local dc;local _d,ad,bd=0,0,false;local cd={{x1=1,x2="width",y1=1,y2=1}}
  1938. local dd={getType=function()return cc end,setDraggingMap=function(__a,a_a)
  1939. cd=a_a;return __a end,getDraggingMap=function(__a)return cd end,isType=function(__a,a_a)
  1940. return cc==a_a or(bc.isType~=nil and
  1941. bc.isType(a_a))or false end,getBase=function(__a)return bc end,load=function(__a)
  1942. bc.load(__a)__a:listenEvent("mouse_click")
  1943. __a:listenEvent("mouse_up")__a:listenEvent("mouse_drag")end,removeChildren=function(__a)
  1944. bc.removeChildren(__a)__a:listenEvent("mouse_click")
  1945. __a:listenEvent("mouse_up")__a:listenEvent("mouse_drag")end,dragHandler=function(__a,a_a,b_a,c_a)
  1946. if
  1947. (bc.dragHandler(__a,a_a,b_a,c_a))then
  1948. if(bd)then local d_a,_aa=dc:getOffset()
  1949. d_a=d_a<0 and math.abs(d_a)or-d_a;_aa=_aa<0 and math.abs(_aa)or-_aa;local aaa=1
  1950. local baa=1;aaa,baa=dc:getAbsolutePosition()
  1951. __a:setPosition(b_a+_d- (aaa-1)+d_a,
  1952. c_a+ad- (baa-1)+_aa)__a:updateDraw()end;return true end end,mouseHandler=function(__a,a_a,b_a,c_a,...)
  1953. if
  1954. (bc.mouseHandler(__a,a_a,b_a,c_a,...))then dc:setImportant(__a)local d_a,_aa=__a:getAbsolutePosition()
  1955. local aaa,baa=__a:getSize()
  1956. for caa,daa in pairs(cd)do local _ba,aba=daa.x1 =="width"and aaa or daa.x1,daa.x2 =="width"and
  1957. aaa or daa.x2;local bba,cba=
  1958. daa.y1 =="height"and baa or daa.y1,
  1959. daa.y2 =="height"and baa or daa.y2
  1960. if
  1961. (b_a>=
  1962. d_a+_ba-1)and(b_a<=d_a+aba-1)and(c_a>=_aa+bba-1)and(c_a<=_aa+cba-1)then bd=true
  1963. _d=d_a-b_a;ad=_aa-c_a;return true end end;return true end end,mouseUpHandler=function(__a,...)
  1964. bd=false;return bc.mouseUpHandler(__a,...)end,setParent=function(__a,a_a,...)
  1965. bc.setParent(__a,a_a,...)dc=a_a;return __a end}dd.__index=dd;return setmetatable(dd,bc)end end
  1966. aa["objects"]["Radio"]=function(...)local ab=da("utils")local bb=da("tHex")
  1967. return
  1968. function(cb,db)
  1969. local _c=db.getObject("List")(cb,db)local ac="Radio"_c:setSize(1,1)_c:setZIndex(5)local bc={}
  1970. local cc=colors.black;local dc=colors.green;local _d=colors.black;local ad=colors.red;local bd=true;local cd="\7"
  1971. local dd="left"
  1972. local __a={getType=function(a_a)return ac end,addItem=function(a_a,b_a,c_a,d_a,_aa,aaa,...)_c.addItem(a_a,b_a,_aa,aaa,...)table.insert(bc,{x=c_a or 1,y=
  1973. d_a or#bc*2})
  1974. return a_a end,removeItem=function(a_a,b_a)
  1975. _c.removeItem(a_a,b_a)table.remove(bc,b_a)return a_a end,clear=function(a_a)
  1976. _c.clear(a_a)bc={}return a_a end,editItem=function(a_a,b_a,c_a,d_a,_aa,aaa,baa,...)
  1977. _c.editItem(a_a,b_a,c_a,aaa,baa,...)table.remove(bc,b_a)
  1978. table.insert(bc,b_a,{x=d_a or 1,y=_aa or 1})return a_a end,setBoxSelectionColor=function(a_a,b_a,c_a)
  1979. cc=b_a;dc=c_a;return a_a end,setBoxSelectionBG=function(a_a,b_a)
  1980. return a_a:setBoxSelectionColor(b_a,dc)end,setBoxSelectionFG=function(a_a,b_a)
  1981. return a_a:setBoxSelectionColor(cc,b_a)end,getBoxSelectionColor=function(a_a)return cc,dc end,getBoxSelectionBG=function(a_a)return cc end,getBoxSelectionFG=function(a_a)
  1982. return dc end,setBoxDefaultColor=function(a_a,b_a,c_a)_d=b_a;ad=c_a;return a_a end,setBoxDefaultBG=function(a_a,b_a)return
  1983. a_a:setBoxDefaultColor(b_a,ad)end,setBoxDefaultFG=function(a_a,b_a)return
  1984. a_a:setBoxDefaultColor(_d,b_a)end,getBoxDefaultColor=function(a_a)return _d,ad end,getBoxDefaultBG=function(a_a)return _d end,getBoxDefaultFG=function(a_a)return
  1985. ad end,mouseHandler=function(a_a,b_a,c_a,d_a,...)
  1986. if(#bc>0)then local _aa,aaa=a_a:getAbsolutePosition()
  1987. local baa=a_a:getAll()
  1988. for caa,daa in pairs(baa)do
  1989. if
  1990.  
  1991. (_aa+bc[caa].x-1 <=c_a)and(_aa+bc[caa].x-1 +
  1992. daa.text:len()+1 >=c_a)and(aaa+bc[caa].y-1 ==d_a)then a_a:setValue(daa)
  1993. local _ba=a_a:sendEvent("mouse_click",a_a,"mouse_click",b_a,c_a,d_a,...)a_a:updateDraw()if(_ba==false)then return _ba end;return true end end end end,draw=function(a_a)
  1994. a_a:addDraw("radio",function()
  1995. local b_a,c_a=a_a:getSelectionColor()local d_a=a_a:getAll()
  1996. for _aa,aaa in pairs(d_a)do
  1997. if(aaa==a_a:getValue())then
  1998. a_a:addBlit(bc[_aa].x,bc[_aa].y,cd,bb[dc],bb[cc])
  1999. a_a:addBlit(bc[_aa].x+2,bc[_aa].y,aaa.text,bb[c_a]:rep(#aaa.text),bb[b_a]:rep(
  2000. #aaa.text))else
  2001. a_a:addBackgroundBox(bc[_aa].x,bc[_aa].y,1,1,_d or colors.black)
  2002. a_a:addBlit(bc[_aa].x+2,bc[_aa].y,aaa.text,bb[aaa.fgCol]:rep(#aaa.text),bb[aaa.bgCol]:rep(
  2003. #aaa.text))end end;return true end)end}__a.__index=__a;return setmetatable(__a,_c)end end
  2004. aa["objects"]["VisualObject"]=function(...)local ab=da("utils")local bb=da("tHex")
  2005. local cb,db,_c=string.sub,string.find,table.insert
  2006. return
  2007. function(ac,bc)local cc=bc.getObject("Object")(ac,bc)
  2008. local dc="VisualObject"local _d,ad,bd,cd,dd=true,false,false,false,false;local __a=1;local a_a,b_a,c_a,d_a=1,1,1,1
  2009. local _aa,aaa,baa,caa=0,0,0,0;local daa,_ba,aba=colors.black,colors.white,false;local bba;local cba={}local dba={}local _ca={}
  2010. local aca={}
  2011. local function bca(dca,_da)local ada={}if dca==""then return ada end;_da=_da or" "local bda=1
  2012. local cda,dda=db(dca,_da,bda)
  2013. while cda do
  2014. _c(ada,{x=bda,value=cb(dca,bda,cda-1)})bda=dda+1;cda,dda=db(dca,_da,bda)end;_c(ada,{x=bda,value=cb(dca,bda)})return ada end
  2015. local cca={getType=function(dca)return dc end,getBase=function(dca)return cc end,isType=function(dca,_da)
  2016. return dc==_da or
  2017. cc.isType~=nil and cc.isType(_da)or false end,getBasalt=function(dca)return bc end,show=function(dca)_d=true
  2018. dca:updateDraw()return dca end,hide=function(dca)_d=false;dca:updateDraw()return dca end,isVisible=function(dca)return
  2019. _d end,setVisible=function(dca,_da)_d=_da or not _d;dca:updateDraw()return dca end,setTransparency=function(dca,_da)aba=
  2020. _da~=nil and _da or true;dca:updateDraw()
  2021. return dca end,setParent=function(dca,_da,ada)
  2022. cc.setParent(dca,_da,ada)bba=_da;return dca end,setFocus=function(dca)if(bba~=nil)then
  2023. bba:setFocusedChild(dca)end;return dca end,setZIndex=function(dca,_da)__a=_da
  2024. if
  2025. (bba~=nil)then bba:updateZIndex(dca,__a)dca:updateDraw()end;return dca end,getZIndex=function(dca)return __a end,updateDraw=function(dca)if(
  2026. bba~=nil)then bba:updateDraw()end;return dca end,setPosition=function(dca,_da,ada,bda)
  2027. local cda,dda=a_a,b_a
  2028. if(type(_da)=="number")then a_a=bda and a_a+_da or _da end
  2029. if(type(ada)=="number")then b_a=bda and b_a+ada or ada end;if(bba~=nil)then
  2030. bba:customEventHandler("basalt_FrameReposition",dca)end;if(dca:getType()=="Container")then
  2031. bba:customEventHandler("basalt_FrameReposition",dca)end;dca:updateDraw()
  2032. dca:repositionHandler(cda,dda)return dca end,getX=function(dca)return
  2033. a_a end,setX=function(dca,_da)return dca:setPosition(_da,b_a)end,getY=function(dca)return
  2034. b_a end,setY=function(dca,_da)return dca:setPosition(a_a,_da)end,getPosition=function(dca)return
  2035. a_a,b_a end,setSize=function(dca,_da,ada,bda)local cda,dda=c_a,d_a;if(type(_da)=="number")then c_a=
  2036. bda and c_a+_da or _da end;if
  2037. (type(ada)=="number")then d_a=bda and d_a+ada or ada end
  2038. if
  2039. (bba~=nil)then bba:customEventHandler("basalt_FrameResize",dca)if(
  2040. dca:getType()=="Container")then
  2041. bba:customEventHandler("basalt_FrameResize",dca)end end;dca:resizeHandler(cda,dda)dca:updateDraw()return dca end,getHeight=function(dca)return
  2042. d_a end,setHeight=function(dca,_da)return dca:setSize(c_a,_da)end,getWidth=function(dca)return
  2043. c_a end,setWidth=function(dca,_da)return dca:setSize(_da,d_a)end,getSize=function(dca)return
  2044. c_a,d_a end,setBackground=function(dca,_da)daa=_da;dca:updateDraw()return dca end,getBackground=function(dca)return
  2045. daa end,setForeground=function(dca,_da)_ba=_da or false;dca:updateDraw()return dca end,getForeground=function(dca)return
  2046. _ba end,getAbsolutePosition=function(dca,_da,ada)if(_da==nil)or(ada==nil)then
  2047. _da,ada=dca:getPosition()end
  2048. if(bba~=nil)then
  2049. local bda,cda=bba:getAbsolutePosition()_da=bda+_da-1;ada=cda+ada-1 end;return _da,ada end,ignoreOffset=function(dca,_da)
  2050. ad=_da;if(_da==nil)then ad=true end;return dca end,getIgnoreOffset=function(dca)return ad end,isCoordsInObject=function(dca,_da,ada)
  2051. if
  2052. (_d)and(dca:isEnabled())then
  2053. if(_da==nil)or(ada==nil)then return false end;local bda,cda=dca:getAbsolutePosition()local dda,__b=dca:getSize()if
  2054.  
  2055. (bda<=_da)and(bda+dda>_da)and(cda<=ada)and(cda+__b>ada)then return true end end;return false end,onGetFocus=function(dca,...)
  2056. for _da,ada in
  2057. pairs(table.pack(...))do if(type(ada)=="function")then
  2058. dca:registerEvent("get_focus",ada)end end;return dca end,onLoseFocus=function(dca,...)
  2059. for _da,ada in
  2060. pairs(table.pack(...))do if(type(ada)=="function")then
  2061. dca:registerEvent("lose_focus",ada)end end;return dca end,isFocused=function(dca)if(
  2062. bba~=nil)then return bba:getFocused()==dca end;return
  2063. true end,resizeHandler=function(dca,...)
  2064. if(dca:isEnabled())then
  2065. local _da=dca:sendEvent("basalt_resize",...)if(_da==false)then return false end end;return true end,repositionHandler=function(dca,...)if
  2066. (dca:isEnabled())then local _da=dca:sendEvent("basalt_reposition",...)if(_da==false)then
  2067. return false end end;return
  2068. true end,onResize=function(dca,...)
  2069. for _da,ada in
  2070. pairs(table.pack(...))do if(type(ada)=="function")then
  2071. dca:registerEvent("basalt_resize",ada)end end;return dca end,onReposition=function(dca,...)
  2072. for _da,ada in
  2073. pairs(table.pack(...))do if(type(ada)=="function")then
  2074. dca:registerEvent("basalt_reposition",ada)end end;return dca end,mouseHandler=function(dca,_da,ada,bda,cda)
  2075. if
  2076. (dca:isCoordsInObject(ada,bda))then local dda,__b=dca:getAbsolutePosition()
  2077. local a_b=dca:sendEvent("mouse_click",_da,ada- (dda-1),
  2078. bda- (__b-1),ada,bda,cda)if(a_b==false)then return false end;if(bba~=nil)then
  2079. bba:setFocusedChild(dca)end;cd=true;dd=true;_aa,aaa=ada,bda;return true end end,mouseUpHandler=function(dca,_da,ada,bda)
  2080. dd=false
  2081. if(cd)then local cda,dda=dca:getAbsolutePosition()
  2082. local __b=dca:sendEvent("mouse_release",_da,ada- (cda-1),
  2083. bda- (dda-1),ada,bda)cd=false end
  2084. if(dca:isCoordsInObject(ada,bda))then local cda,dda=dca:getAbsolutePosition()
  2085. local __b=dca:sendEvent("mouse_up",_da,
  2086. ada- (cda-1),bda- (dda-1),ada,bda)if(__b==false)then return false end;return true end end,dragHandler=function(dca,_da,ada,bda)
  2087. if
  2088. (dd)then local cda,dda=dca:getAbsolutePosition()
  2089. local __b=dca:sendEvent("mouse_drag",_da,ada- (cda-1),bda- (
  2090. dda-1),_aa-ada,aaa-bda,ada,bda)_aa,aaa=ada,bda;if(__b==false)then return false end;if(bba~=nil)then
  2091. bba:setFocusedChild(dca)end;return true end
  2092. if(dca:isCoordsInObject(ada,bda))then local cda,dda=dca:getAbsolutePosition()
  2093. _aa,aaa=ada,bda;baa,caa=cda-ada,dda-bda end end,scrollHandler=function(dca,_da,ada,bda)
  2094. if
  2095. (dca:isCoordsInObject(ada,bda))then local cda,dda=dca:getAbsolutePosition()
  2096. local __b=dca:sendEvent("mouse_scroll",_da,ada- (cda-1),
  2097. bda- (dda-1))if(__b==false)then return false end;if(bba~=nil)then
  2098. bba:setFocusedChild(dca)end;return true end end,hoverHandler=function(dca,_da,ada,bda)
  2099. if
  2100. (dca:isCoordsInObject(_da,ada))then local cda=dca:sendEvent("mouse_hover",_da,ada,bda)if(cda==false)then return
  2101. false end;bd=true;return true end
  2102. if(bd)then local cda=dca:sendEvent("mouse_leave",_da,ada,bda)if
  2103. (cda==false)then return false end;bd=false end end,keyHandler=function(dca,_da,ada)if
  2104. (dca:isEnabled())and(_d)then
  2105. if(dca:isFocused())then
  2106. local bda=dca:sendEvent("key",_da,ada)if(bda==false)then return false end;return true end end end,keyUpHandler=function(dca,_da)if
  2107. (dca:isEnabled())and(_d)then
  2108. if(dca:isFocused())then
  2109. local ada=dca:sendEvent("key_up",_da)if(ada==false)then return false end;return true end end end,charHandler=function(dca,_da)if
  2110. (dca:isEnabled())and(_d)then
  2111. if(dca:isFocused())then local ada=dca:sendEvent("char",_da)if(ada==
  2112. false)then return false end;return true end end end,getFocusHandler=function(dca)
  2113. local _da=dca:sendEvent("get_focus")if(_da~=nil)then return _da end;return true end,loseFocusHandler=function(dca)
  2114. dd=false;local _da=dca:sendEvent("lose_focus")
  2115. if(_da~=nil)then return _da end;return true end,addDraw=function(dca,_da,ada,bda,cda,dda)
  2116. local __b=
  2117. (cda==nil or cda==1)and dba or cda==2 and cba or cda==3 and _ca;bda=bda or#__b+1
  2118. if(_da~=nil)then for b_b,c_b in pairs(__b)do if(c_b.name==_da)then
  2119. table.remove(__b,b_b)break end end
  2120. local a_b={name=_da,f=ada,pos=bda,active=
  2121. dda~=nil and dda or true}table.insert(__b,bda,a_b)end;dca:updateDraw()return dca end,addPreDraw=function(dca,_da,ada,bda,cda)
  2122. dca:addDraw(_da,ada,bda,2)return dca end,addPostDraw=function(dca,_da,ada,bda,cda)
  2123. dca:addDraw(_da,ada,bda,3)return dca end,setDrawState=function(dca,_da,ada,bda)
  2124. local cda=
  2125. (bda==nil or bda==1)and dba or bda==2 and cba or bda==3 and _ca
  2126. for dda,__b in pairs(cda)do if(__b.name==_da)then __b.active=ada;break end end;dca:updateDraw()return dca end,getDrawId=function(dca,_da,ada)local bda=
  2127.  
  2128. ada==1 and dba or ada==2 and cba or ada==3 and _ca or dba;for cda,dda in pairs(bda)do if(
  2129. dda.name==_da)then return cda end end end,addText=function(dca,_da,ada,bda)local cda=
  2130. dca:getParent()or dca;local dda,__b=dca:getPosition()if(bba~=nil)then
  2131. local b_b,c_b=bba:getOffset()dda=ad and dda or dda-b_b
  2132. __b=ad and __b or __b-c_b end
  2133. if not(aba)then cda:setText(_da+dda-1,
  2134. ada+__b-1,bda)return end;local a_b=bca(bda,"\0")
  2135. for b_b,c_b in pairs(a_b)do if
  2136. (c_b.value~="")and(c_b.value~="\0")then
  2137. cda:setText(_da+c_b.x+dda-2,ada+__b-1,c_b.value)end end end,addBG=function(dca,_da,ada,bda,cda)local dda=
  2138. bba or dca;local __b,a_b=dca:getPosition()if(bba~=nil)then
  2139. local c_b,d_b=bba:getOffset()__b=ad and __b or __b-c_b
  2140. a_b=ad and a_b or a_b-d_b end
  2141. if not(aba)then dda:setBG(_da+__b-1,
  2142. ada+a_b-1,bda)return end;local b_b=bca(bda)
  2143. for c_b,d_b in pairs(b_b)do
  2144. if(d_b.value~="")and(d_b.value~=" ")then
  2145. if(cda~=
  2146. true)then
  2147. dda:setText(_da+d_b.x+__b-2,ada+a_b-1,(" "):rep(#d_b.value))
  2148. dda:setBG(_da+d_b.x+__b-2,ada+a_b-1,d_b.value)else
  2149. table.insert(aca,{x=_da+d_b.x-1,y=ada,bg=d_b.value})dda:setBG(_da+__b-1,ada+a_b-1,fg)end end end end,addFG=function(dca,_da,ada,bda)local cda=
  2150. bba or dca;local dda,__b=dca:getPosition()if(bba~=nil)then
  2151. local b_b,c_b=bba:getOffset()dda=ad and dda or dda-b_b
  2152. __b=ad and __b or __b-c_b end
  2153. if not(aba)then cda:setFG(_da+dda-1,
  2154. ada+__b-1,bda)return end;local a_b=bca(bda)
  2155. for b_b,c_b in pairs(a_b)do if(c_b.value~="")and(c_b.value~=" ")then
  2156. cda:setFG(
  2157. _da+c_b.x+dda-2,ada+__b-1,c_b.value)end end end,addBlit=function(dca,_da,ada,bda,cda,dda)local __b=
  2158. bba or dca;local a_b,b_b=dca:getPosition()if(bba~=nil)then
  2159. local aab,bab=bba:getOffset()a_b=ad and a_b or a_b-aab
  2160. b_b=ad and b_b or b_b-bab end
  2161. if not(aba)then __b:blit(_da+a_b-1,
  2162. ada+b_b-1,bda,cda,dda)return end;local c_b=bca(bda,"\0")local d_b=bca(cda)local _ab=bca(dda)
  2163. for aab,bab in pairs(c_b)do if
  2164. (bab.value~="")or(bab.value~="\0")then
  2165. __b:setText(_da+bab.x+a_b-2,ada+b_b-1,bab.value)end end;for aab,bab in pairs(_ab)do
  2166. if(bab.value~="")or(bab.value~=" ")then __b:setBG(
  2167. _da+bab.x+a_b-2,ada+b_b-1,bab.value)end end;for aab,bab in pairs(d_b)do
  2168. if(
  2169. bab.value~="")or(bab.value~=" ")then __b:setFG(_da+bab.x+a_b-2,ada+
  2170. b_b-1,bab.value)end end end,addTextBox=function(dca,_da,ada,bda,cda,dda)local __b=
  2171. bba or dca;local a_b,b_b=dca:getPosition()if(bba~=nil)then
  2172. local c_b,d_b=bba:getOffset()a_b=ad and a_b or a_b-c_b
  2173. b_b=ad and b_b or b_b-d_b end;__b:drawTextBox(_da+a_b-1,
  2174. ada+b_b-1,bda,cda,dda)end,addForegroundBox=function(dca,_da,ada,bda,cda,dda)local __b=
  2175. bba or dca;local a_b,b_b=dca:getPosition()if(bba~=nil)then
  2176. local c_b,d_b=bba:getOffset()a_b=ad and a_b or a_b-c_b
  2177. b_b=ad and b_b or b_b-d_b end;__b:drawForegroundBox(_da+a_b-1,
  2178. ada+b_b-1,bda,cda,dda)end,addBackgroundBox=function(dca,_da,ada,bda,cda,dda)local __b=
  2179. bba or dca;local a_b,b_b=dca:getPosition()if(bba~=nil)then
  2180. local c_b,d_b=bba:getOffset()a_b=ad and a_b or a_b-c_b
  2181. b_b=ad and b_b or b_b-d_b end;__b:drawBackgroundBox(_da+a_b-1,
  2182. ada+b_b-1,bda,cda,dda)end,render=function(dca)if
  2183. (_d)then dca:redraw()end end,redraw=function(dca)for _da,ada in pairs(cba)do if(ada.active)then
  2184. ada.f(dca)end end;for _da,ada in pairs(dba)do if(ada.active)then
  2185. ada.f(dca)end end;for _da,ada in pairs(_ca)do if(ada.active)then
  2186. ada.f(dca)end end;return true end,draw=function(dca)
  2187. dca:addDraw("base",function()
  2188. local _da,ada=dca:getSize()if(daa~=false)then dca:addTextBox(1,1,_da,ada," ")
  2189. dca:addBackgroundBox(1,1,_da,ada,daa)end;if(_ba~=false)then
  2190. dca:addForegroundBox(1,1,_da,ada,_ba)end end,1)end}cca.__index=cca;return setmetatable(cca,cc)end end
  2191. aa["objects"]["ScrollableFrame"]=function(...)
  2192. local ab,bb,cb,db=math.max,math.min,string.sub,string.rep
  2193. return
  2194. function(_c,ac)local bc=ac.getObject("Frame")(_c,ac)
  2195. local cc="ScrollableFrame"local dc;local _d=0;local ad=0;local bd=true
  2196. local function cd(b_a)local c_a=0;local d_a=b_a:getChildren()
  2197. for _aa,aaa in pairs(d_a)do
  2198. if(
  2199. aaa.element.getWidth~=nil)and(aaa.element.getX~=nil)then
  2200. local baa,caa=aaa.element:getWidth(),aaa.element:getX()local daa=b_a:getWidth()
  2201. if
  2202. (aaa.element:getType()=="Dropdown")then if(aaa.element:isOpened())then
  2203. local _ba=aaa.element:getDropdownSize()
  2204. if(_ba+caa-daa>=c_a)then c_a=ab(_ba+caa-daa,0)end end end
  2205. if(baa+caa-daa>=c_a)then c_a=ab(baa+caa-daa,0)end end end;return c_a end
  2206. local function dd(b_a)local c_a=0;local d_a=b_a:getChildren()
  2207. for _aa,aaa in pairs(d_a)do
  2208. if
  2209. (aaa.element.getHeight~=nil)and(aaa.element.getY~=nil)then
  2210. local baa,caa=aaa.element:getHeight(),aaa.element:getY()local daa=b_a:getHeight()
  2211. if
  2212. (aaa.element:getType()=="Dropdown")then if(aaa.element:isOpened())then
  2213. local _ba,aba=aaa.element:getDropdownSize()
  2214. if(aba+caa-daa>=c_a)then c_a=ab(aba+caa-daa,0)end end end
  2215. if(baa+caa-daa>=c_a)then c_a=ab(baa+caa-daa,0)end end end;return c_a end
  2216. local function __a(b_a,c_a)local d_a,_aa=b_a:getOffset()local aaa
  2217. if(_d==1)then
  2218. aaa=bd and cd(b_a)or ad
  2219. b_a:setOffset(bb(aaa,ab(0,d_a+c_a)),_aa)elseif(_d==0)then aaa=bd and dd(b_a)or ad
  2220. b_a:setOffset(d_a,bb(aaa,ab(0,_aa+c_a)))end;b_a:updateDraw()end
  2221. local a_a={getType=function()return cc end,isType=function(b_a,c_a)return
  2222. cc==c_a or bc.isType~=nil and bc.isType(c_a)or false end,setDirection=function(b_a,c_a)_d=
  2223. c_a=="horizontal"and 1 or c_a=="vertical"and 0 or
  2224. _d;return b_a end,setScrollAmount=function(b_a,c_a)
  2225. ad=c_a;bd=false;return b_a end,getBase=function(b_a)return bc end,load=function(b_a)bc.load(b_a)
  2226. b_a:listenEvent("mouse_scroll")end,removeChildren=function(b_a)bc.removeChildren(b_a)
  2227. b_a:listenEvent("mouse_scroll")end,setParent=function(b_a,c_a,...)bc.setParent(b_a,c_a,...)
  2228. dc=c_a;return b_a end,scrollHandler=function(b_a,c_a,d_a,_aa)
  2229. if
  2230. (bc:getBase().scrollHandler(b_a,c_a,d_a,_aa))then b_a:sortChildren()
  2231. for aaa,baa in
  2232. ipairs(b_a:getEvents("mouse_scroll"))do
  2233. if(baa.element.scrollHandler~=nil)then local caa,daa=0,0;if(b_a.getOffset~=nil)then
  2234. caa,daa=b_a:getOffset()end
  2235. if(baa.element.getIgnoreOffset())then caa,daa=0,0 end;if(baa.element.scrollHandler(baa.element,c_a,d_a+caa,_aa+daa))then
  2236. return true end end end;__a(b_a,c_a,d_a,_aa)b_a:clearFocusedChild()return true end end,draw=function(b_a)
  2237. bc.draw(b_a)
  2238. b_a:addDraw("scrollableFrame",function()if(bd)then __a(b_a,0)end end,0)end}a_a.__index=a_a;return setmetatable(a_a,bc)end end
  2239. aa["objects"]["Scrollbar"]=function(...)local ab=da("tHex")
  2240. return
  2241. function(bb,cb)
  2242. local db=cb.getObject("VisualObject")(bb,cb)local _c="Scrollbar"db:setZIndex(2)db:setSize(1,8)
  2243. db:setBackground(colors.lightGray,"\127",colors.gray)local ac="vertical"local bc=" "local cc=colors.black;local dc=colors.black;local _d=3;local ad=1
  2244. local bd=1;local cd=true
  2245. local function dd()local b_a,c_a=db:getSize()if(cd)then
  2246. bd=math.max((ac=="vertical"and c_a or
  2247. b_a- (#bc))- (_d-1),1)end end;dd()
  2248. local function __a(b_a,c_a,d_a,_aa)local aaa,baa=b_a:getAbsolutePosition()
  2249. local caa,daa=b_a:getSize()dd()local _ba=ac=="vertical"and daa or caa
  2250. for i=0,_ba do
  2251. if
  2252.  
  2253. ( (
  2254. ac=="vertical"and baa+i==_aa)or(ac=="horizontal"and aaa+i==d_a))and(aaa<=d_a)and(aaa+caa>d_a)and(baa<=_aa)and
  2255. (baa+daa>_aa)then ad=math.min(i+1,
  2256. _ba- (#bc+bd-2))
  2257. b_a:scrollbarMoveHandler()b_a:updateDraw()end end end
  2258. local a_a={getType=function(b_a)return _c end,load=function(b_a)db.load(b_a)local c_a=b_a:getParent()
  2259. b_a:listenEvent("mouse_click")b_a:listenEvent("mouse_up")
  2260. b_a:listenEvent("mouse_scroll")b_a:listenEvent("mouse_drag")end,setSymbol=function(b_a,c_a,d_a,_aa)
  2261. bc=c_a:sub(1,1)cc=d_a or cc;dc=_aa or dc;dd()b_a:updateDraw()return b_a end,setSymbolBG=function(b_a,c_a)return b_a:setSymbol(bc,c_a,
  2262. nil)end,setSymbolFG=function(b_a,c_a)return
  2263. b_a:setSymbol(bc,nil,c_a)end,getSymbol=function(b_a)return bc end,getSymbolBG=function(b_a)return cc end,getSymbolFG=function(b_a)return
  2264. dc end,setIndex=function(b_a,c_a)ad=c_a;if(ad<1)then ad=1 end;local d_a,_aa=b_a:getSize()dd()
  2265. b_a:updateDraw()return b_a end,setScrollAmount=function(b_a,c_a)_d=c_a;dd()
  2266. b_a:updateDraw()return b_a end,getScrollAmount=function(b_a)return _d end,getIndex=function(b_a)
  2267. local c_a,d_a=b_a:getSize()return
  2268. _d> (ac=="vertical"and d_a or c_a)and
  2269. math.floor(_d/ (
  2270. ac=="vertical"and d_a or c_a)*ad)or ad end,setSymbolSize=function(b_a,c_a)bd=
  2271. tonumber(c_a)or 1;cd=c_a~=false and false or true
  2272. dd()b_a:updateDraw()return b_a end,getSymbolSize=function(b_a)return
  2273. bd end,setBarType=function(b_a,c_a)ac=c_a:lower()dd()b_a:updateDraw()return b_a end,getBarType=function(b_a)return
  2274. ac end,mouseHandler=function(b_a,c_a,d_a,_aa,...)if(db.mouseHandler(b_a,c_a,d_a,_aa,...))then
  2275. __a(b_a,c_a,d_a,_aa)return true end;return false end,dragHandler=function(b_a,c_a,d_a,_aa)if
  2276. (db.dragHandler(b_a,c_a,d_a,_aa))then __a(b_a,c_a,d_a,_aa)return true end;return
  2277. false end,setSize=function(b_a,...)
  2278. db.setSize(b_a,...)dd()return b_a end,scrollHandler=function(b_a,c_a,d_a,_aa)
  2279. if(db.scrollHandler(b_a,c_a,d_a,_aa))then
  2280. local aaa,baa=b_a:getSize()dd()ad=ad+c_a;if(ad<1)then ad=1 end
  2281. ad=math.min(ad,
  2282. (ac=="vertical"and baa or aaa)- (ac=="vertical"and bd-1 or#bc+bd-2))b_a:scrollbarMoveHandler()b_a:updateDraw()end end,onChange=function(b_a,...)
  2283. for c_a,d_a in
  2284. pairs(table.pack(...))do if(type(d_a)=="function")then
  2285. b_a:registerEvent("scrollbar_moved",d_a)end end;return b_a end,scrollbarMoveHandler=function(b_a)
  2286. b_a:sendEvent("scrollbar_moved",b_a:getIndex())end,customEventHandler=function(b_a,c_a,...)
  2287. db.customEventHandler(b_a,c_a,...)if(c_a=="basalt_FrameResize")then dd()end end,draw=function(b_a)
  2288. db.draw(b_a)
  2289. b_a:addDraw("scrollbar",function()local c_a=b_a:getParent()local d_a,_aa=b_a:getSize()
  2290. local aaa,baa=b_a:getBackground(),b_a:getForeground()
  2291. if(ac=="horizontal")then for n=0,_aa-1 do
  2292. b_a:addBlit(ad,1 +n,bc:rep(bd),ab[dc]:rep(#bc*bd),ab[cc]:rep(
  2293. #bc*bd))end elseif(ac=="vertical")then
  2294. for n=0,_aa-1 do
  2295. if(ad==n+1)then
  2296. for curIndexOffset=0,math.min(
  2297. bd-1,_aa)do
  2298. b_a:addBlit(1,ad+curIndexOffset,bc:rep(math.max(#bc,d_a)),ab[dc]:rep(math.max(
  2299. #bc,d_a)),ab[cc]:rep(math.max(#bc,d_a)))end end end end end)end}a_a.__index=a_a;return setmetatable(a_a,db)end end
  2300. aa["objects"]["Thread"]=function(...)
  2301. return
  2302. function(ab,bb)
  2303. local cb=bb.getObject("Object")(ab,bb)local db="Thread"local _c;local ac;local bc=false;local cc
  2304. local dc={getType=function(_d)return db end,start=function(_d,ad)if(ad==nil)then
  2305. error("Function provided to thread is nil")end;_c=ad;ac=coroutine.create(_c)
  2306. bc=true;cc=nil;local bd,cd=coroutine.resume(ac)cc=cd;if not(bd)then
  2307. if(cd~="Terminated")then error(
  2308. "Thread Error Occurred - "..cd)end end
  2309. _d:listenEvent("mouse_click")_d:listenEvent("mouse_up")
  2310. _d:listenEvent("mouse_scroll")_d:listenEvent("mouse_drag")_d:listenEvent("key")
  2311. _d:listenEvent("key_up")_d:listenEvent("char")
  2312. _d:listenEvent("other_event")return _d end,getStatus=function(_d,ad)if(
  2313. ac~=nil)then return coroutine.status(ac)end;return nil end,stop=function(_d,ad)
  2314. bc=false;_d:listenEvent("mouse_click",false)
  2315. _d:listenEvent("mouse_up",false)_d:listenEvent("mouse_scroll",false)
  2316. _d:listenEvent("mouse_drag",false)_d:listenEvent("key",false)
  2317. _d:listenEvent("key_up",false)_d:listenEvent("char",false)
  2318. _d:listenEvent("other_event",false)return _d end,mouseHandler=function(_d,...)
  2319. _d:eventHandler("mouse_click",...)end,mouseUpHandler=function(_d,...)_d:eventHandler("mouse_up",...)end,mouseScrollHandler=function(_d,...)
  2320. _d:eventHandler("mouse_scroll",...)end,mouseDragHandler=function(_d,...)
  2321. _d:eventHandler("mouse_drag",...)end,mouseMoveHandler=function(_d,...)
  2322. _d:eventHandler("mouse_move",...)end,keyHandler=function(_d,...)_d:eventHandler("key",...)end,keyUpHandler=function(_d,...)
  2323. _d:eventHandler("key_up",...)end,charHandler=function(_d,...)_d:eventHandler("char",...)end,eventHandler=function(_d,ad,...)
  2324. cb.eventHandler(_d,ad,...)
  2325. if(bc)then
  2326. if(coroutine.status(ac)=="suspended")then if(cc~=nil)then
  2327. if(ad~=cc)then return end;cc=nil end
  2328. local bd,cd=coroutine.resume(ac,ad,...)cc=cd;if not(bd)then if(cd~="Terminated")then
  2329. error("Thread Error Occurred - "..cd)end end else
  2330. _d:stop()end end end}dc.__index=dc;return setmetatable(dc,cb)end end
  2331. aa["objects"]["Object"]=function(...)local ab=da("basaltEvent")
  2332. local bb=da("utils")local cb=bb.uuid;local db,_c=table.unpack,string.sub
  2333. return
  2334. function(ac,bc)ac=ac or cb()
  2335. assert(bc~=nil,
  2336. "Unable to find basalt instance! ID: "..ac)local cc="Object"local dc,_d=true,false;local ad=ab()local bd={}local cd={}local dd
  2337. local __a={init=function(a_a)
  2338. if(_d)then return false end;_d=true;return true end,load=function(a_a)end,getType=function(a_a)return cc end,isType=function(a_a,b_a)return cc==
  2339. b_a end,getProperty=function(a_a,b_a)
  2340. local c_a=a_a["get"..b_a:gsub("^%l",string.upper)]if(c_a~=nil)then return c_a(a_a)end end,setProperty=function(a_a,b_a,...)
  2341. local c_a=a_a[
  2342. "set"..b_a:gsub("^%l",string.upper)]if(c_a~=nil)then return c_a(a_a,...)end end,getName=function(a_a)return
  2343. ac end,getParent=function(a_a)return dd end,setParent=function(a_a,b_a,c_a)if(c_a)then dd=b_a;return a_a end
  2344. if(b_a.getType~=
  2345. nil and b_a:isType("Container"))then a_a:remove()
  2346. b_a:addChild(a_a)if(a_a.show)then a_a:show()end;dd=b_a end;return a_a end,updateEvents=function(a_a)for b_a,c_a in
  2347. pairs(cd)do dd:removeEvent(b_a,a_a)
  2348. if(c_a)then dd:addEvent(b_a,a_a)end end;return a_a end,listenEvent=function(a_a,b_a,c_a)if(
  2349. dd~=nil)then
  2350. if(c_a)or(c_a==nil)then cd[b_a]=true;dd:addEvent(b_a,a_a)elseif
  2351. (c_a==false)then cd[b_a]=false;dd:removeEvent(b_a,a_a)end end
  2352. return a_a end,getZIndex=function(a_a)return
  2353. 1 end,enable=function(a_a)dc=true;return a_a end,disable=function(a_a)dc=false;return a_a end,isEnabled=function(a_a)return
  2354. dc end,remove=function(a_a)if(dd~=nil)then dd:removeChild(a_a)end
  2355. a_a:updateDraw()return a_a end,getBaseFrame=function(a_a)if(dd~=nil)then
  2356. return dd:getBaseFrame()end;return a_a end,onEvent=function(a_a,...)
  2357. for b_a,c_a in
  2358. pairs(table.pack(...))do if(type(c_a)=="function")then
  2359. a_a:registerEvent("other_event",c_a)end end;return a_a end,getEventSystem=function(a_a)return
  2360. ad end,getRegisteredEvents=function(a_a)return bd end,registerEvent=function(a_a,b_a,c_a)
  2361. if(dd~=nil)then
  2362. if(b_a=="mouse_drag")then
  2363. dd:addEvent("mouse_click",a_a)dd:addEvent("mouse_up",a_a)end;dd:addEvent(b_a,a_a)end;ad:registerEvent(b_a,c_a)
  2364. if(bd[b_a]==nil)then bd[b_a]={}end;table.insert(bd[b_a],c_a)end,removeEvent=function(a_a,b_a,c_a)if(
  2365. ad:getEventCount(b_a)<1)then
  2366. if(dd~=nil)then dd:removeEvent(b_a,a_a)end end;ad:removeEvent(b_a,c_a)if(
  2367. bd[b_a]~=nil)then table.remove(bd[b_a],c_a)if(#bd[b_a]==0)then
  2368. bd[b_a]=nil end end end,eventHandler=function(a_a,b_a,...)
  2369. local c_a=a_a:sendEvent("other_event",b_a,...)if(c_a~=nil)then return c_a end end,customEventHandler=function(a_a,b_a,...)
  2370. local c_a=a_a:sendEvent("custom_event",b_a,...)if(c_a~=nil)then return c_a end;return true end,sendEvent=function(a_a,b_a,...)if(
  2371. b_a=="other_event")or(b_a=="custom_event")then return
  2372. ad:sendEvent(b_a,a_a,...)end;return
  2373. ad:sendEvent(b_a,a_a,b_a,...)end,onClick=function(a_a,...)
  2374. for b_a,c_a in
  2375. pairs(table.pack(...))do if(type(c_a)=="function")then
  2376. a_a:registerEvent("mouse_click",c_a)end end;return a_a end,onClickUp=function(a_a,...)for b_a,c_a in
  2377. pairs(table.pack(...))do
  2378. if(type(c_a)=="function")then a_a:registerEvent("mouse_up",c_a)end end;return a_a end,onRelease=function(a_a,...)
  2379. for b_a,c_a in
  2380. pairs(table.pack(...))do if(type(c_a)=="function")then
  2381. a_a:registerEvent("mouse_release",c_a)end end;return a_a end,onScroll=function(a_a,...)
  2382. for b_a,c_a in
  2383. pairs(table.pack(...))do if(type(c_a)=="function")then
  2384. a_a:registerEvent("mouse_scroll",c_a)end end;return a_a end,onHover=function(a_a,...)
  2385. for b_a,c_a in
  2386. pairs(table.pack(...))do if(type(c_a)=="function")then
  2387. a_a:registerEvent("mouse_hover",c_a)end end;return a_a end,onLeave=function(a_a,...)
  2388. for b_a,c_a in
  2389. pairs(table.pack(...))do if(type(c_a)=="function")then
  2390. a_a:registerEvent("mouse_leave",c_a)end end;return a_a end,onDrag=function(a_a,...)
  2391. for b_a,c_a in
  2392. pairs(table.pack(...))do if(type(c_a)=="function")then
  2393. a_a:registerEvent("mouse_drag",c_a)end end;return a_a end,onKey=function(a_a,...)for b_a,c_a in
  2394. pairs(table.pack(...))do
  2395. if(type(c_a)=="function")then a_a:registerEvent("key",c_a)end end;return a_a end,onChar=function(a_a,...)for b_a,c_a in
  2396. pairs(table.pack(...))do
  2397. if(type(c_a)=="function")then a_a:registerEvent("char",c_a)end end;return a_a end,onKeyUp=function(a_a,...)for b_a,c_a in
  2398. pairs(table.pack(...))do
  2399. if(type(c_a)=="function")then a_a:registerEvent("key_up",c_a)end end;return a_a end}__a.__index=__a;return __a end end
  2400. aa["objects"]["MonitorFrame"]=function(...)local ab=da("basaltMon")
  2401. local bb,cb,db,_c=math.max,math.min,string.sub,string.rep
  2402. return
  2403. function(ac,bc)local cc=bc.getObject("BaseFrame")(ac,bc)
  2404. local dc="MonitorFrame"cc:setTerm(nil)local _d=false;local ad
  2405. local bd={getType=function()return dc end,isType=function(cd,dd)
  2406. return dc==dd or cc.isType~=nil and
  2407. cc.isType(dd)or false end,getBase=function(cd)return cc end,setMonitor=function(cd,dd)
  2408. if
  2409. (type(dd)=="string")then local __a=peripheral.wrap(dd)
  2410. if(__a~=nil)then cd:setTerm(__a)end elseif(type(dd)=="table")then cd:setTerm(dd)end;return cd end,setMonitorGroup=function(cd,dd)
  2411. ad=ab(dd)cd:setTerm(ad)_d=true;return cd end,render=function(cd)if(cd:getTerm()~=
  2412. nil)then cc.render(cd)end end,show=function(cd)
  2413. cc:getBase().show(cd)bc.setActiveFrame(cd)
  2414. for dd,__a in pairs(colors)do if(type(__a)=="number")then
  2415. termObject.setPaletteColor(__a,colors.packRGB(term.nativePaletteColor((__a))))end end
  2416. for dd,__a in pairs(colorTheme)do
  2417. if(type(__a)=="number")then
  2418. termObject.setPaletteColor(
  2419. type(dd)=="number"and dd or colors[dd],__a)else local a_a,b_a,c_a=table.unpack(__a)
  2420. termObject.setPaletteColor(
  2421. type(dd)=="number"and dd or colors[dd],a_a,b_a,c_a)end end;return cd end}
  2422. bd.mouseHandler=function(cd,dd,__a,a_a,b_a,c_a,...)
  2423. if(_d)then __a,a_a=ad.calculateClick(c_a,__a,a_a)end;cc.mouseHandler(cd,dd,__a,a_a,b_a,c_a,...)end;bd.__index=bd;return setmetatable(bd,cc)end end
  2424. aa["objects"]["Switch"]=function(...)
  2425. return
  2426. function(ab,bb)
  2427. local cb=bb.getObject("ChangeableObject")(ab,bb)local db="Switch"cb:setSize(4,1)cb:setValue(false)
  2428. cb:setZIndex(5)local _c=colors.black;local ac=colors.red;local bc=colors.green
  2429. local cc={getType=function(dc)return db end,setSymbol=function(dc,_d)
  2430. _c=_d;return dc end,getSymbol=function(dc)return _c end,setActiveBackground=function(dc,_d)bc=_d;return dc end,getActiveBackground=function(dc)return bc end,setInactiveBackground=function(dc,_d)
  2431. ac=_d;return dc end,getInactiveBackground=function(dc)return ac end,load=function(dc)
  2432. dc:listenEvent("mouse_click")end,mouseHandler=function(dc,...)
  2433. if(cb.mouseHandler(dc,...))then
  2434. dc:setValue(not dc:getValue())dc:updateDraw()return true end end,draw=function(dc)cb.draw(dc)
  2435. dc:addDraw("switch",function()
  2436. local _d=dc:getParent()local ad,bd=dc:getBackground(),dc:getForeground()
  2437. local cd,dd=dc:getSize()
  2438. if(dc:getValue())then dc:addBackgroundBox(1,1,cd,dd,bc)
  2439. dc:addBackgroundBox(cd,1,1,dd,_c)else dc:addBackgroundBox(1,1,cd,dd,ac)
  2440. dc:addBackgroundBox(1,1,1,dd,_c)end end)end}cc.__index=cc;return setmetatable(cc,cb)end end
  2441. aa["objects"]["Treeview"]=function(...)local ab=da("utils")local bb=da("tHex")
  2442. return
  2443. function(cb,db)
  2444. local _c=db.getObject("ChangeableObject")(cb,db)local ac="Treeview"local bc={}local cc=colors.black;local dc=colors.lightGray;local _d=true
  2445. local ad="left"local bd,cd=0,0;local dd=true;_c:setSize(16,8)_c:setZIndex(5)
  2446. local function __a(c_a,d_a)
  2447. c_a=c_a or""d_a=d_a or false;local _aa=false;local aaa=nil;local baa={}local caa={}local daa
  2448. caa={getChildren=function(_ba)return baa end,setParent=function(_ba,aba)if(
  2449. aaa~=nil)then
  2450. aaa.removeChild(aaa.findChildrenByText(caa.getText()))end;aaa=aba;_c:updateDraw()return caa end,getParent=function(_ba)return
  2451. aaa end,addChild=function(_ba,aba,bba)local cba=__a(aba,bba)cba.setParent(caa)
  2452. table.insert(baa,cba)_c:updateDraw()return cba end,setExpanded=function(_ba,aba)if
  2453. (d_a)then _aa=aba end;_c:updateDraw()return caa end,isExpanded=function(_ba)return
  2454. _aa end,onSelect=function(_ba,...)for aba,bba in pairs(table.pack(...))do if(type(bba)=="function")then
  2455. daa=bba end end;return caa end,callOnSelect=function(_ba)if(
  2456. daa~=nil)then daa(caa)end end,setExpandable=function(_ba,aba)aba=aba
  2457. _c:updateDraw()return caa end,isExpandable=function(_ba)return d_a end,removeChild=function(_ba,aba)
  2458. if(type(aba)=="table")then for bba,cba in
  2459. pairs(aba)do if(cba==aba)then aba=bba;break end end end;table.remove(baa,aba)_c:updateDraw()return caa end,findChildrenByText=function(_ba,aba)
  2460. local bba={}
  2461. for cba,dba in ipairs(baa)do if string.find(dba.getText(),aba)then
  2462. table.insert(bba,dba)end end;return bba end,getText=function(_ba)return
  2463. c_a end,setText=function(_ba,aba)c_a=aba;_c:updateDraw()return caa end}return caa end;local a_a=__a("Root",true)a_a:setExpanded(true)
  2464. local b_a={init=function(c_a)
  2465. local d_a=c_a:getParent()c_a:listenEvent("mouse_click")
  2466. c_a:listenEvent("mouse_scroll")return _c.init(c_a)end,getBase=function(c_a)return
  2467. _c end,getType=function(c_a)return ac end,isType=function(c_a,d_a)
  2468. return ac==d_a or
  2469. _c.isType~=nil and _c.isType(d_a)or false end,setOffset=function(c_a,d_a,_aa)bd=d_a;cd=_aa;return c_a end,setXOffset=function(c_a,d_a)return
  2470. c_a:setOffset(d_a,cd)end,setYOffset=function(c_a,d_a)return c_a:setOffset(bd,d_a)end,getOffset=function(c_a)return
  2471. bd,cd end,getXOffset=function(c_a)return bd end,getYOffset=function(c_a)return cd end,setScrollable=function(c_a,d_a)dd=d_a;return c_a end,getScrollable=function(c_a,d_a)return
  2472. dd end,setSelectionColor=function(c_a,d_a,_aa,aaa)cc=d_a or c_a:getBackground()dc=_aa or
  2473. c_a:getForeground()_d=aaa~=nil and aaa or true
  2474. c_a:updateDraw()return c_a end,setSelectionBG=function(c_a,d_a)return c_a:setSelectionColor(d_a,
  2475. nil,_d)end,setSelectionFG=function(c_a,d_a)return c_a:setSelectionColor(
  2476. nil,d_a,_d)end,getSelectionColor=function(c_a)
  2477. return cc,dc end,getSelectionBG=function(c_a)return cc end,getSelectionFG=function(c_a)return dc end,isSelectionColorActive=function(c_a)return _d end,getRoot=function(c_a)
  2478. return a_a end,setRoot=function(c_a,d_a)a_a=d_a;d_a.setParent(nil)return c_a end,onSelect=function(c_a,...)
  2479. for d_a,_aa in
  2480. pairs(table.pack(...))do if(type(_aa)=="function")then
  2481. c_a:registerEvent("treeview_select",_aa)end end;return c_a end,selectionHandler=function(c_a,d_a)
  2482. d_a.callOnSelect(d_a)c_a:sendEvent("treeview_select",d_a)return c_a end,mouseHandler=function(c_a,d_a,_aa,aaa)
  2483. if
  2484. _c.mouseHandler(c_a,d_a,_aa,aaa)then local baa=1 -cd;local caa,daa=c_a:getAbsolutePosition()
  2485. local _ba,aba=c_a:getSize()
  2486. local function bba(cba,dba)
  2487. if aaa==daa+baa-1 then
  2488. if _aa>=caa and _aa<caa+_ba then cba:setExpanded(not
  2489. cba:isExpanded())
  2490. c_a:selectionHandler(cba)c_a:setValue(cba)c_a:updateDraw()return true end end;baa=baa+1
  2491. if cba:isExpanded()then for _ca,aca in ipairs(cba:getChildren())do if bba(aca,dba+1)then return
  2492. true end end end;return false end
  2493. for cba,dba in ipairs(a_a:getChildren())do if bba(dba,1)then return true end end end end,scrollHandler=function(c_a,d_a,_aa,aaa)
  2494. if
  2495. _c.scrollHandler(c_a,d_a,_aa,aaa)then
  2496. if dd then local baa,caa=c_a:getSize()cd=cd+d_a;if cd<0 then cd=0 end
  2497. if d_a>=1 then local daa=0
  2498. local function _ba(aba,bba)
  2499. daa=daa+1;if aba:isExpanded()then
  2500. for cba,dba in ipairs(aba:getChildren())do _ba(dba,bba+1)end end end;for aba,bba in ipairs(a_a:getChildren())do _ba(bba,1)end
  2501. if
  2502. daa>caa then if cd>daa-caa then cd=daa-caa end else cd=cd-1 end end;c_a:updateDraw()end;return true end;return false end,draw=function(c_a)
  2503. _c.draw(c_a)
  2504. c_a:addDraw("treeview",function()local d_a=1 -cd;local _aa=c_a:getValue()
  2505. local function aaa(baa,caa)
  2506. local daa,_ba=c_a:getSize()
  2507. if d_a>=1 and d_a<=_ba then
  2508. local aba=(baa==_aa)and cc or c_a:getBackground()
  2509. local bba=(baa==_aa)and dc or c_a:getForeground()local cba=baa.getText()
  2510. c_a:addBlit(1 +caa+bd,d_a,cba,bb[bba]:rep(#cba),bb[aba]:rep(
  2511. #cba))end;d_a=d_a+1;if baa:isExpanded()then for aba,bba in ipairs(baa:getChildren())do
  2512. aaa(bba,caa+1)end end end;for baa,caa in ipairs(a_a:getChildren())do aaa(caa,1)end end)end}b_a.__index=b_a;return setmetatable(b_a,_c)end end
  2513. aa["objects"]["Timer"]=function(...)
  2514. return
  2515. function(ab,bb)
  2516. local cb=bb.getObject("Object")(ab,bb)local db="Timer"local _c=0;local ac=0;local bc=0;local cc;local dc=false
  2517. local _d={getType=function(ad)return db end,setTime=function(ad,bd,cd)_c=bd or 0
  2518. ac=cd or 1;return ad end,getTime=function(ad)return _c end,start=function(ad)if(dc)then
  2519. os.cancelTimer(cc)end;bc=ac;cc=os.startTimer(_c)dc=true
  2520. ad:listenEvent("other_event")return ad end,isActive=function(ad)return dc end,cancel=function(ad)if(
  2521. cc~=nil)then os.cancelTimer(cc)end;dc=false
  2522. ad:removeEvent("other_event")return ad end,setStart=function(ad,bd)if(bd==true)then
  2523. return ad:start()else return ad:cancel()end end,onCall=function(ad,bd)
  2524. ad:registerEvent("timed_event",bd)return ad end,eventHandler=function(ad,bd,...)cb.eventHandler(ad,bd,...)
  2525. if
  2526. bd=="timer"and tObj==cc and dc then
  2527. ad:sendEvent("timed_event")if(bc>=1)then bc=bc-1;if(bc>=1)then cc=os.startTimer(_c)end elseif(bc==-1)then
  2528. cc=os.startTimer(_c)end end end}_d.__index=_d;return setmetatable(_d,cb)end end
  2529. aa["objects"]["Program"]=function(...)local ab=da("tHex")local bb=da("process")
  2530. local cb=string.sub
  2531. return
  2532. function(db,_c)local ac=_c.getObject("VisualObject")(db,_c)
  2533. local bc="Program"local cc;local dc;local _d={}
  2534. local function ad(_aa,aaa,baa,caa)local daa,_ba=1,1;local aba,bba=colors.black,colors.white;local cba=false
  2535. local dba=false;local _ca={}local aca={}local bca={}local cca={}local dca;local _da={}for i=0,15 do local cab=2 ^i
  2536. cca[cab]={_c.getTerm().getPaletteColour(cab)}end;local function ada()dca=(" "):rep(baa)
  2537. for n=0,15 do
  2538. local cab=2 ^n;local dab=ab[cab]_da[cab]=dab:rep(baa)end end
  2539. local function bda()ada()local cab=dca
  2540. local dab=_da[colors.white]local _bb=_da[colors.black]
  2541. for n=1,caa do
  2542. _ca[n]=cb(_ca[n]==nil and cab or _ca[n]..cab:sub(1,
  2543. baa-_ca[n]:len()),1,baa)
  2544. bca[n]=cb(bca[n]==nil and dab or bca[n]..
  2545. dab:sub(1,baa-bca[n]:len()),1,baa)
  2546. aca[n]=cb(aca[n]==nil and _bb or aca[n]..
  2547. _bb:sub(1,baa-aca[n]:len()),1,baa)end;ac.updateDraw(ac)end;bda()local function cda()if
  2548. daa>=1 and _ba>=1 and daa<=baa and _ba<=caa then else end end
  2549. local function dda(cab,dab,_bb)if
  2550.  
  2551. _ba<1 or _ba>caa or daa<1 or daa+#cab-1 >baa then return end
  2552. _ca[_ba]=cb(_ca[_ba],1,daa-1)..cab..cb(_ca[_ba],
  2553. daa+#cab,baa)bca[_ba]=cb(bca[_ba],1,daa-1)..
  2554. dab..cb(bca[_ba],daa+#cab,baa)
  2555. aca[_ba]=
  2556. cb(aca[_ba],1,daa-1).._bb..cb(aca[_ba],daa+#cab,baa)daa=daa+#cab;if dba then cda()end;cc:updateDraw()end
  2557. local function __b(cab,dab,_bb)
  2558. if(_bb~=nil)then local abb=_ca[dab]if(abb~=nil)then
  2559. _ca[dab]=cb(abb:sub(1,cab-1).._bb..abb:sub(cab+
  2560. (_bb:len()),baa),1,baa)end end;cc:updateDraw()end
  2561. local function a_b(cab,dab,_bb)
  2562. if(_bb~=nil)then local abb=aca[dab]if(abb~=nil)then
  2563. aca[dab]=cb(abb:sub(1,cab-1).._bb..abb:sub(cab+
  2564. (_bb:len()),baa),1,baa)end end;cc:updateDraw()end
  2565. local function b_b(cab,dab,_bb)
  2566. if(_bb~=nil)then local abb=bca[dab]if(abb~=nil)then
  2567. bca[dab]=cb(abb:sub(1,cab-1).._bb..abb:sub(cab+
  2568. (_bb:len()),baa),1,baa)end end;cc:updateDraw()end
  2569. local c_b=function(cab)
  2570. if type(cab)~="number"then
  2571. error("bad argument #1 (expected number, got "..type(cab)..")",2)elseif ab[cab]==nil then
  2572. error("Invalid color (got "..cab..")",2)end;bba=cab end
  2573. local d_b=function(cab)
  2574. if type(cab)~="number"then
  2575. error("bad argument #1 (expected number, got "..type(cab)..")",2)elseif ab[cab]==nil then
  2576. error("Invalid color (got "..cab..")",2)end;aba=cab end
  2577. local _ab=function(cab,dab,_bb,abb)if type(cab)~="number"then
  2578. error("bad argument #1 (expected number, got "..type(cab)..")",2)end
  2579. if ab[cab]==nil then error("Invalid color (got "..
  2580. cab..")",2)end;local bbb
  2581. if
  2582. type(dab)=="number"and _bb==nil and abb==nil then bbb={colours.rgb8(dab)}cca[cab]=bbb else if
  2583. type(dab)~="number"then
  2584. error("bad argument #2 (expected number, got "..type(dab)..")",2)end;if type(_bb)~="number"then
  2585. error(
  2586. "bad argument #3 (expected number, got "..type(_bb)..")",2)end;if type(abb)~="number"then
  2587. error(
  2588. "bad argument #4 (expected number, got "..type(abb)..")",2)end;bbb=cca[cab]bbb[1]=dab
  2589. bbb[2]=_bb;bbb[3]=abb end end
  2590. local aab=function(cab)if type(cab)~="number"then
  2591. error("bad argument #1 (expected number, got "..type(cab)..")",2)end
  2592. if ab[cab]==nil then error("Invalid color (got "..
  2593. cab..")",2)end;local dab=cca[cab]return dab[1],dab[2],dab[3]end
  2594. local bab={setCursorPos=function(cab,dab)if type(cab)~="number"then
  2595. error("bad argument #1 (expected number, got "..type(cab)..")",2)end;if type(dab)~="number"then
  2596. error(
  2597. "bad argument #2 (expected number, got "..type(dab)..")",2)end;daa=math.floor(cab)
  2598. _ba=math.floor(dab)if(dba)then cda()end end,getCursorPos=function()return
  2599. daa,_ba end,setCursorBlink=function(cab)if type(cab)~="boolean"then
  2600. error("bad argument #1 (expected boolean, got "..
  2601. type(cab)..")",2)end;cba=cab end,getCursorBlink=function()return
  2602. cba end,getPaletteColor=aab,getPaletteColour=aab,setBackgroundColor=d_b,setBackgroundColour=d_b,setTextColor=c_b,setTextColour=c_b,setPaletteColor=_ab,setPaletteColour=_ab,getBackgroundColor=function()return aba end,getBackgroundColour=function()return aba end,getSize=function()
  2603. return baa,caa end,getTextColor=function()return bba end,getTextColour=function()return bba end,basalt_resize=function(cab,dab)baa,caa=cab,dab;bda()end,basalt_reposition=function(cab,dab)
  2604. _aa,aaa=cab,dab end,basalt_setVisible=function(cab)dba=cab end,drawBackgroundBox=function(cab,dab,_bb,abb,bbb)for n=1,abb do
  2605. a_b(cab,dab+ (n-1),ab[bbb]:rep(_bb))end end,drawForegroundBox=function(cab,dab,_bb,abb,bbb)
  2606. for n=1,abb do b_b(cab,
  2607. dab+ (n-1),ab[bbb]:rep(_bb))end end,drawTextBox=function(cab,dab,_bb,abb,bbb)for n=1,abb do
  2608. __b(cab,dab+ (n-1),bbb:rep(_bb))end end,basalt_update=function()for n=1,caa do
  2609. cc:addBlit(1,n,_ca[n],bca[n],aca[n])end end,scroll=function(cab)
  2610. assert(type(cab)==
  2611. "number","bad argument #1 (expected number, got "..type(cab)..")")
  2612. if cab~=0 then
  2613. for newY=1,caa do local dab=newY+cab;if dab<1 or dab>caa then _ca[newY]=dca
  2614. bca[newY]=_da[bba]aca[newY]=_da[aba]else _ca[newY]=_ca[dab]aca[newY]=aca[dab]
  2615. bca[newY]=bca[dab]end end end;if(dba)then cda()end end,isColor=function()return
  2616. _c.getTerm().isColor()end,isColour=function()
  2617. return _c.getTerm().isColor()end,write=function(cab)cab=tostring(cab)if(dba)then
  2618. dda(cab,ab[bba]:rep(cab:len()),ab[aba]:rep(cab:len()))end end,clearLine=function()
  2619. if
  2620. (dba)then __b(1,_ba,(" "):rep(baa))
  2621. a_b(1,_ba,ab[aba]:rep(baa))b_b(1,_ba,ab[bba]:rep(baa))end;if(dba)then cda()end end,clear=function()
  2622. for n=1,caa
  2623. do __b(1,n,(" "):rep(baa))
  2624. a_b(1,n,ab[aba]:rep(baa))b_b(1,n,ab[bba]:rep(baa))end;if(dba)then cda()end end,blit=function(cab,dab,_bb)if
  2625. type(cab)~="string"then
  2626. error("bad argument #1 (expected string, got "..type(cab)..")",2)end;if type(dab)~="string"then
  2627. error(
  2628. "bad argument #2 (expected string, got "..type(dab)..")",2)end;if type(_bb)~="string"then
  2629. error(
  2630. "bad argument #3 (expected string, got "..type(_bb)..")",2)end
  2631. if
  2632. #dab~=#cab or#_bb~=#cab then error("Arguments must be the same length",2)end;if(dba)then dda(cab,dab,_bb)end end}return bab end;ac:setZIndex(5)ac:setSize(30,12)local bd=ad(1,1,30,12)local cd
  2633. local dd=false;local __a={}
  2634. local function a_a(_aa)local aaa=_aa:getParent()local baa,caa=bd.getCursorPos()
  2635. local daa,_ba=_aa:getPosition()local aba,bba=_aa:getSize()
  2636. if(daa+baa-1 >=1 and
  2637. daa+baa-1 <=daa+aba-1 and caa+_ba-1 >=1 and
  2638. caa+_ba-1 <=_ba+bba-1)then
  2639. aaa:setCursor(
  2640. _aa:isFocused()and bd.getCursorBlink(),daa+baa-1,caa+_ba-1,bd.getTextColor())end end
  2641. local function b_a(_aa,aaa,...)local baa,caa=cd:resume(aaa,...)
  2642. if(baa==false)and(caa~=nil)and
  2643. (caa~="Terminated")then
  2644. local daa=_aa:sendEvent("program_error",caa)
  2645. if(daa~=false)then error("Basalt Program - "..caa)end end
  2646. if(cd:getStatus()=="dead")then _aa:sendEvent("program_done")end end
  2647. local function c_a(_aa,aaa,baa,caa,daa)if(cd==nil)then return false end
  2648. if not(cd:isDead())then if not(dd)then
  2649. local _ba,aba=_aa:getAbsolutePosition()b_a(_aa,aaa,baa,caa-_ba+1,daa-aba+1)
  2650. a_a(_aa)end end end
  2651. local function d_a(_aa,aaa,baa,caa)if(cd==nil)then return false end
  2652. if not(cd:isDead())then if not(dd)then if(_aa.draw)then
  2653. b_a(_aa,aaa,baa,caa)a_a(_aa)end end end end
  2654. cc={getType=function(_aa)return bc end,show=function(_aa)ac.show(_aa)
  2655. bd.setBackgroundColor(_aa:getBackground())bd.setTextColor(_aa:getForeground())
  2656. bd.basalt_setVisible(true)return _aa end,hide=function(_aa)
  2657. ac.hide(_aa)bd.basalt_setVisible(false)return _aa end,setPosition=function(_aa,aaa,baa,caa)
  2658. ac.setPosition(_aa,aaa,baa,caa)bd.basalt_reposition(_aa:getPosition())return _aa end,getBasaltWindow=function()return
  2659. bd end,getBasaltProcess=function()return cd end,setSize=function(_aa,aaa,baa,caa)ac.setSize(_aa,aaa,baa,caa)
  2660. bd.basalt_resize(_aa:getWidth(),_aa:getHeight())return _aa end,getStatus=function(_aa)if(cd~=nil)then return
  2661. cd:getStatus()end;return"inactive"end,setEnviroment=function(_aa,aaa)_d=
  2662. aaa or{}return _aa end,execute=function(_aa,aaa,...)dc=aaa or dc
  2663. cd=bb:new(dc,bd,_d,...)bd.setBackgroundColor(colors.black)
  2664. bd.setTextColor(colors.white)bd.clear()bd.setCursorPos(1,1)
  2665. bd.setBackgroundColor(_aa:getBackground())
  2666. bd.setTextColor(_aa:getForeground()or colors.white)bd.basalt_setVisible(true)b_a(_aa)dd=false
  2667. _aa:listenEvent("mouse_click",_aa)_aa:listenEvent("mouse_up",_aa)
  2668. _aa:listenEvent("mouse_drag",_aa)_aa:listenEvent("mouse_scroll",_aa)
  2669. _aa:listenEvent("key",_aa)_aa:listenEvent("key_up",_aa)
  2670. _aa:listenEvent("char",_aa)_aa:listenEvent("other_event",_aa)return _aa end,setExecute=function(_aa,aaa,...)return
  2671. _aa:execute(aaa,...)end,stop=function(_aa)local aaa=_aa:getParent()
  2672. if(cd~=nil)then if not
  2673. (cd:isDead())then b_a(_aa,"terminate")if(cd:isDead())then
  2674. aaa:setCursor(false)end end end;aaa:removeEvents(_aa)return _aa end,pause=function(_aa,aaa)dd=
  2675. aaa or(not dd)if(cd~=nil)then
  2676. if not(cd:isDead())then if not(dd)then
  2677. _aa:injectEvents(table.unpack(__a))__a={}end end end;return _aa end,isPaused=function(_aa)return
  2678. dd end,injectEvent=function(_aa,aaa,baa,...)
  2679. if(cd~=nil)then if not(cd:isDead())then
  2680. if(dd==false)or(baa)then
  2681. b_a(_aa,aaa,...)else table.insert(__a,{event=aaa,args={...}})end end end;return _aa end,getQueuedEvents=function(_aa)return
  2682. __a end,updateQueuedEvents=function(_aa,aaa)__a=aaa or __a;return _aa end,injectEvents=function(_aa,...)if(cd~=nil)then
  2683. if not
  2684. (cd:isDead())then for aaa,baa in pairs({...})do
  2685. b_a(_aa,baa.event,table.unpack(baa.args))end end end;return _aa end,mouseHandler=function(_aa,aaa,baa,caa)
  2686. if
  2687. (ac.mouseHandler(_aa,aaa,baa,caa))then c_a(_aa,"mouse_click",aaa,baa,caa)return true end;return false end,mouseUpHandler=function(_aa,aaa,baa,caa)
  2688. if
  2689. (ac.mouseUpHandler(_aa,aaa,baa,caa))then c_a(_aa,"mouse_up",aaa,baa,caa)return true end;return false end,scrollHandler=function(_aa,aaa,baa,caa)
  2690. if
  2691. (ac.scrollHandler(_aa,aaa,baa,caa))then c_a(_aa,"mouse_scroll",aaa,baa,caa)return true end;return false end,dragHandler=function(_aa,aaa,baa,caa)
  2692. if
  2693. (ac.dragHandler(_aa,aaa,baa,caa))then c_a(_aa,"mouse_drag",aaa,baa,caa)return true end;return false end,keyHandler=function(_aa,aaa,baa)if
  2694. (ac.keyHandler(_aa,aaa,baa))then d_a(_aa,"key",aaa,baa)return true end;return
  2695. false end,keyUpHandler=function(_aa,aaa)if
  2696. (ac.keyUpHandler(_aa,aaa))then d_a(_aa,"key_up",aaa)return true end
  2697. return false end,charHandler=function(_aa,aaa)if
  2698. (ac.charHandler(_aa,aaa))then d_a(_aa,"char",aaa)return true end
  2699. return false end,getFocusHandler=function(_aa)
  2700. ac.getFocusHandler(_aa)
  2701. if(cd~=nil)then
  2702. if not(cd:isDead())then
  2703. if not(dd)then local aaa=_aa:getParent()
  2704. if(aaa~=nil)then
  2705. local baa,caa=bd.getCursorPos()local daa,_ba=_aa:getPosition()local aba,bba=_aa:getSize()
  2706. if
  2707. (
  2708.  
  2709. daa+baa-1 >=1 and daa+baa-1 <=daa+aba-1 and caa+_ba-1 >=1 and caa+_ba-1 <=_ba+bba-1)then
  2710. aaa:setCursor(bd.getCursorBlink(),daa+baa-1,caa+_ba-1,bd.getTextColor())end end end end end end,loseFocusHandler=function(_aa)
  2711. ac.loseFocusHandler(_aa)
  2712. if(cd~=nil)then if not(cd:isDead())then local aaa=_aa:getParent()if(aaa~=nil)then
  2713. aaa:setCursor(false)end end end end,eventHandler=function(_aa,aaa,...)
  2714. ac.eventHandler(_aa,aaa,...)if cd==nil then return end
  2715. if not cd:isDead()then
  2716. if not dd then b_a(_aa,aaa,...)
  2717. if
  2718. _aa:isFocused()then local baa=_aa:getParent()local caa,daa=_aa:getPosition()
  2719. local _ba,aba=bd.getCursorPos()local bba,cba=_aa:getSize()
  2720. if caa+_ba-1 >=1 and
  2721. caa+_ba-1 <=caa+bba-1 and aba+daa-1 >=1 and
  2722. aba+daa-1 <=daa+cba-1 then
  2723. baa:setCursor(bd.getCursorBlink(),
  2724. caa+_ba-1,aba+daa-1,bd.getTextColor())end end else table.insert(__a,{event=aaa,args={...}})end end end,resizeHandler=function(_aa,...)
  2725. ac.resizeHandler(_aa,...)
  2726. if(cd~=nil)then
  2727. if not(cd:isDead())then
  2728. if not(dd)then
  2729. bd.basalt_resize(_aa:getSize())b_a(_aa,"term_resize",_aa:getSize())else
  2730. bd.basalt_resize(_aa:getSize())
  2731. table.insert(__a,{event="term_resize",args={_aa:getSize()}})end end end end,repositionHandler=function(_aa,...)
  2732. ac.repositionHandler(_aa,...)
  2733. if(cd~=nil)then if not(cd:isDead())then
  2734. bd.basalt_reposition(_aa:getPosition())end end end,draw=function(_aa)
  2735. ac.draw(_aa)
  2736. _aa:addDraw("program",function()local aaa=_aa:getParent()local baa,caa=_aa:getPosition()
  2737. local daa,_ba=bd.getCursorPos()local aba,bba=_aa:getSize()bd.basalt_update()end)end,onError=function(_aa,...)
  2738. for baa,caa in
  2739. pairs(table.pack(...))do if(type(caa)=="function")then
  2740. _aa:registerEvent("program_error",caa)end end;local aaa=_aa:getParent()_aa:listenEvent("other_event")
  2741. return _aa end,onDone=function(_aa,...)
  2742. for baa,caa in
  2743. pairs(table.pack(...))do if(type(caa)=="function")then
  2744. _aa:registerEvent("program_done",caa)end end;local aaa=_aa:getParent()_aa:listenEvent("other_event")
  2745. return _aa end}cc.__index=cc;return setmetatable(cc,ac)end end
  2746. aa["objects"]["Progressbar"]=function(...)
  2747. return
  2748. function(ab,bb)
  2749. local cb=bb.getObject("ChangeableObject")(ab,bb)local db="Progressbar"local _c=0;cb:setZIndex(5)cb:setValue(false)
  2750. cb:setSize(25,3)local ac=colors.black;local bc=""local cc=colors.white;local dc=""local _d=0
  2751. local ad={getType=function(bd)return db end,setDirection=function(bd,cd)
  2752. _d=cd;bd:updateDraw()return bd end,getDirection=function(bd)return _d end,setProgressBar=function(bd,cd,dd,__a)
  2753. ac=cd or ac;bc=dd or bc;cc=__a or cc;bd:updateDraw()return bd end,getProgressBar=function(bd)return
  2754. ac,bc,cc end,setActiveBarColor=function(bd,cd)return bd:setProgressBar(cd,nil,nil)end,getActiveBarColor=function(bd)return
  2755. ac end,setActiveBarSymbol=function(bd,cd)return bd:setProgressBar(nil,cd,nil)end,getActiveBarSymbol=function(bd)return
  2756. bc end,setActiveBarSymbolColor=function(bd,cd)return bd:setProgressBar(nil,nil,cd)end,getActiveBarSymbolColor=function(bd)return
  2757. cc end,setBackgroundSymbol=function(bd,cd)dc=cd:sub(1,1)bd:updateDraw()return bd end,getBackgroundSymbol=function(bd)return
  2758. dc end,setProgress=function(bd,cd)
  2759. if(cd>=0)and(cd<=100)and(_c~=cd)then _c=cd
  2760. bd:setValue(_c)if(_c==100)then bd:progressDoneHandler()end end;bd:updateDraw()return bd end,getProgress=function(bd)return
  2761. _c end,onProgressDone=function(bd,cd)bd:registerEvent("progress_done",cd)
  2762. return bd end,progressDoneHandler=function(bd)
  2763. bd:sendEvent("progress_done")end,draw=function(bd)cb.draw(bd)
  2764. bd:addDraw("progressbar",function()
  2765. local cd,dd=bd:getPosition()local __a,a_a=bd:getSize()
  2766. local b_a,c_a=bd:getBackground(),bd:getForeground()
  2767. if(b_a~=false)then bd:addBackgroundBox(1,1,__a,a_a,b_a)end;if(dc~="")then bd:addTextBox(1,1,__a,a_a,dc)end
  2768. if
  2769. (c_a~=false)then bd:addForegroundBox(1,1,__a,a_a,c_a)end
  2770. if(_d==1)then bd:addBackgroundBox(1,1,__a,a_a/100 *_c,ac)bd:addForegroundBox(1,1,__a,
  2771. a_a/100 *_c,cc)
  2772. bd:addTextBox(1,1,__a,a_a/100 *_c,bc)elseif(_d==3)then
  2773. bd:addBackgroundBox(1,1 +math.ceil(a_a-a_a/100 *_c),__a,
  2774. a_a/100 *_c,ac)
  2775. bd:addForegroundBox(1,1 +math.ceil(a_a-a_a/100 *_c),__a,
  2776. a_a/100 *_c,cc)
  2777. bd:addTextBox(1,1 +math.ceil(a_a-a_a/100 *_c),__a,a_a/100 *_c,bc)elseif(_d==2)then
  2778. bd:addBackgroundBox(1 +math.ceil(__a-__a/100 *_c),1,__a/
  2779. 100 *_c,a_a,ac)
  2780. bd:addForegroundBox(1 +math.ceil(__a-__a/100 *_c),1,__a/100 *_c,a_a,cc)
  2781. bd:addTextBox(1 +math.ceil(__a-__a/100 *_c),1,__a/100 *_c,a_a,bc)else
  2782. bd:addBackgroundBox(1,1,math.ceil(__a/100 *_c),a_a,ac)
  2783. bd:addForegroundBox(1,1,math.ceil(__a/100 *_c),a_a,cc)
  2784. bd:addTextBox(1,1,math.ceil(__a/100 *_c),a_a,bc)end end)end}ad.__index=ad;return setmetatable(ad,cb)end end
  2785. aa["objects"]["Textfield"]=function(...)local ab=da("tHex")
  2786. local bb,cb,db,_c,ac=string.rep,string.find,string.gmatch,string.sub,string.len
  2787. return
  2788. function(bc,cc)
  2789. local dc=cc.getObject("ChangeableObject")(bc,cc)local _d="Textfield"local ad,bd,cd,dd=1,1,1,1;local __a={""}local a_a={""}local b_a={""}local c_a={}local d_a={}
  2790. local _aa,aaa,baa,caa;local daa,_ba=colors.lightBlue,colors.black;dc:setSize(30,12)
  2791. dc:setZIndex(5)
  2792. local function aba()if
  2793. (_aa~=nil)and(aaa~=nil)and(baa~=nil)and(caa~=nil)then return true end;return false end
  2794. local function bba()local cca,dca,_da,ada=_aa,aaa,baa,caa
  2795. if aba()then
  2796. if _aa<aaa and baa<=caa then cca=_aa;dca=aaa;if baa<caa then
  2797. _da=baa;ada=caa else _da=caa;ada=baa end elseif _aa>aaa and baa>=caa then
  2798. cca=aaa;dca=_aa;if baa>caa then _da=caa;ada=baa else _da=baa;ada=caa end elseif baa>caa then
  2799. cca=aaa;dca=_aa;_da=caa;ada=baa end;return cca,dca,_da,ada end end
  2800. local function cba(cca)local dca,_da,ada,bda=bba()local cda=__a[ada]local dda=__a[bda]__a[ada]=cda:sub(1,dca-1)..dda:sub(
  2801. _da+1,dda:len())
  2802. a_a[ada]=a_a[ada]:sub(1,
  2803. dca-1)..a_a[bda]:sub(_da+1,a_a[bda]:len())b_a[ada]=b_a[ada]:sub(1,dca-1)..
  2804. b_a[bda]:sub(_da+1,b_a[bda]:len())for i=bda,ada+1,-1 do
  2805. if i~=ada then
  2806. table.remove(__a,i)table.remove(a_a,i)table.remove(b_a,i)end end;cd,dd=dca,ada
  2807. _aa,aaa,baa,caa=nil,nil,nil,nil;return cca end
  2808. local function dba(cca,dca)local _da={}
  2809. if(cca:len()>0)then
  2810. for ada in db(cca,dca)do local bda,cda=cb(cca,ada)
  2811. if
  2812. (bda~=nil)and(cda~=nil)then table.insert(_da,bda)table.insert(_da,cda)
  2813. local dda=_c(cca,1,(bda-1))local __b=_c(cca,cda+1,cca:len())cca=dda.. (":"):rep(ada:len())..
  2814. __b end end end;return _da end
  2815. local function _ca(cca,dca)dca=dca or dd
  2816. local _da=ab[cca:getForeground()]:rep(b_a[dca]:len())
  2817. local ada=ab[cca:getBackground()]:rep(a_a[dca]:len())
  2818. for bda,cda in pairs(d_a)do local dda=dba(__a[dca],cda[1])
  2819. if(#dda>0)then
  2820. for x=1,#dda/2 do
  2821. local __b=x*2 -1;if(cda[2]~=nil)then
  2822. _da=_da:sub(1,dda[__b]-1)..ab[cda[2]]:rep(dda[__b+1]- (
  2823. dda[__b]-1))..
  2824. _da:sub(dda[__b+1]+1,_da:len())end;if
  2825. (cda[3]~=nil)then
  2826. ada=ada:sub(1,dda[__b]-1)..
  2827.  
  2828. ab[cda[3]]:rep(dda[__b+1]- (dda[__b]-1))..ada:sub(dda[__b+1]+1,ada:len())end end end end
  2829. for bda,cda in pairs(c_a)do
  2830. for dda,__b in pairs(cda)do local a_b=dba(__a[dca],__b)
  2831. if(#a_b>0)then for x=1,#a_b/2 do
  2832. local b_b=x*2 -1
  2833. _da=_da:sub(1,a_b[b_b]-1)..
  2834.  
  2835. ab[bda]:rep(a_b[b_b+1]- (a_b[b_b]-1)).._da:sub(a_b[b_b+1]+1,_da:len())end end end end;b_a[dca]=_da;a_a[dca]=ada;cca:updateDraw()end;local function aca(cca)for n=1,#__a do _ca(cca,n)end end
  2836. local bca={getType=function(cca)return _d end,setBackground=function(cca,dca)
  2837. dc.setBackground(cca,dca)aca(cca)return cca end,setForeground=function(cca,dca)
  2838. dc.setForeground(cca,dca)aca(cca)return cca end,setSelection=function(cca,dca,_da)_ba=dca or _ba
  2839. daa=_da or daa;return cca end,setSelectionFG=function(cca,dca)
  2840. return cca:setSelection(dca,nil)end,setSelectionBG=function(cca,dca)return cca:setSelection(nil,dca)end,getSelection=function(cca)return
  2841. _ba,daa end,getSelectionFG=function(cca)return _ba end,getSelectionBG=function(cca)return daa end,getLines=function(cca)return __a end,getLine=function(cca,dca)return
  2842. __a[dca]end,editLine=function(cca,dca,_da)__a[dca]=_da or __a[dca]
  2843. _ca(cca,dca)cca:updateDraw()return cca end,clear=function(cca)
  2844. __a={""}a_a={""}b_a={""}_aa,aaa,baa,caa=nil,nil,nil,nil;ad,bd,cd,dd=1,1,1,1
  2845. cca:updateDraw()return cca end,addLine=function(cca,dca,_da)
  2846. if(dca~=nil)then
  2847. local ada=cca:getBackground()local bda=cca:getForeground()
  2848. if(#__a==1)and(__a[1]=="")then
  2849. __a[1]=dca;a_a[1]=ab[ada]:rep(dca:len())
  2850. b_a[1]=ab[bda]:rep(dca:len())_ca(cca,1)return cca end
  2851. if(_da~=nil)then table.insert(__a,_da,dca)
  2852. table.insert(a_a,_da,ab[ada]:rep(dca:len()))
  2853. table.insert(b_a,_da,ab[bda]:rep(dca:len()))else table.insert(__a,dca)
  2854. table.insert(a_a,ab[ada]:rep(dca:len()))
  2855. table.insert(b_a,ab[bda]:rep(dca:len()))end end;_ca(cca,_da or#__a)cca:updateDraw()return cca end,addKeywords=function(cca,dca,_da)if(
  2856. c_a[dca]==nil)then c_a[dca]={}end;for ada,bda in pairs(_da)do
  2857. table.insert(c_a[dca],bda)end;cca:updateDraw()return cca end,addRule=function(cca,dca,_da,ada)
  2858. table.insert(d_a,{dca,_da,ada})cca:updateDraw()return cca end,editRule=function(cca,dca,_da,ada)for bda,cda in
  2859. pairs(d_a)do
  2860. if(cda[1]==dca)then d_a[bda][2]=_da;d_a[bda][3]=ada end end;cca:updateDraw()return cca end,removeRule=function(cca,dca)
  2861. for _da,ada in
  2862. pairs(d_a)do if(ada[1]==dca)then table.remove(d_a,_da)end end;cca:updateDraw()return cca end,setKeywords=function(cca,dca,_da)
  2863. c_a[dca]=_da;cca:updateDraw()return cca end,removeLine=function(cca,dca)
  2864. if(#__a>1)then table.remove(__a,
  2865. dca or#__a)
  2866. table.remove(a_a,dca or#a_a)table.remove(b_a,dca or#b_a)else __a={""}a_a={""}b_a={""}end;cca:updateDraw()return cca end,getTextCursor=function(cca)return
  2867. cd,dd end,getOffset=function(cca)return bd,ad end,setOffset=function(cca,dca,_da)bd=dca or bd;ad=_da or ad
  2868. cca:updateDraw()return cca end,getXOffset=function(cca)return bd end,setXOffset=function(cca,dca)return
  2869. cca:setOffset(dca,nil)end,getYOffset=function(cca)return ad end,setYOffset=function(cca,dca)return
  2870. cca:setOffset(nil,dca)end,getFocusHandler=function(cca)dc.getFocusHandler(cca)
  2871. local dca,_da=cca:getPosition()
  2872. cca:getParent():setCursor(true,dca+cd-bd,_da+dd-ad,cca:getForeground())end,loseFocusHandler=function(cca)
  2873. dc.loseFocusHandler(cca)cca:getParent():setCursor(false)end,keyHandler=function(cca,dca)
  2874. if
  2875. (dc.keyHandler(cca,dca))then local _da=cca:getParent()local ada,bda=cca:getPosition()
  2876. local cda,dda=cca:getSize()
  2877. if(dca==keys.backspace)then
  2878. if(aba())then cba(cca)else
  2879. if(__a[dd]=="")then
  2880. if(dd>1)then
  2881. table.remove(__a,dd)table.remove(b_a,dd)table.remove(a_a,dd)cd=
  2882. __a[dd-1]:len()+1;bd=cd-cda+1;if(bd<1)then bd=1 end;dd=dd-1 end elseif(cd<=1)then
  2883. if(dd>1)then cd=__a[dd-1]:len()+1;bd=cd-cda+1;if(bd<1)then
  2884. bd=1 end;__a[dd-1]=__a[dd-1]..__a[dd]b_a[dd-1]=
  2885. b_a[dd-1]..b_a[dd]
  2886. a_a[dd-1]=a_a[dd-1]..a_a[dd]table.remove(__a,dd)table.remove(b_a,dd)
  2887. table.remove(a_a,dd)dd=dd-1 end else __a[dd]=__a[dd]:sub(1,cd-2)..
  2888. __a[dd]:sub(cd,__a[dd]:len())
  2889. b_a[dd]=
  2890. b_a[dd]:sub(1,cd-2)..b_a[dd]:sub(cd,b_a[dd]:len())a_a[dd]=a_a[dd]:sub(1,cd-2)..
  2891. a_a[dd]:sub(cd,a_a[dd]:len())
  2892. if(cd>1)then cd=cd-1 end;if(bd>1)then if(cd<bd)then bd=bd-1 end end end;if(dd<ad)then ad=ad-1 end end;_ca(cca)cca:setValue("")elseif(dca==keys.delete)then
  2893. if(aba())then cba(cca)else
  2894. if(cd>
  2895. __a[dd]:len())then if(__a[dd+1]~=nil)then __a[dd]=__a[dd]..__a[dd+1]table.remove(__a,
  2896. dd+1)table.remove(a_a,dd+1)
  2897. table.remove(b_a,dd+1)end else
  2898. __a[dd]=__a[dd]:sub(1,
  2899. cd-1)..__a[dd]:sub(cd+1,__a[dd]:len())b_a[dd]=b_a[dd]:sub(1,cd-1)..
  2900. b_a[dd]:sub(cd+1,b_a[dd]:len())
  2901. a_a[dd]=a_a[dd]:sub(1,
  2902. cd-1)..a_a[dd]:sub(cd+1,a_a[dd]:len())end end;_ca(cca)elseif(dca==keys.enter)then if(aba())then cba(cca)end
  2903. table.insert(__a,dd+1,__a[dd]:sub(cd,__a[dd]:len()))
  2904. table.insert(b_a,dd+1,b_a[dd]:sub(cd,b_a[dd]:len()))
  2905. table.insert(a_a,dd+1,a_a[dd]:sub(cd,a_a[dd]:len()))__a[dd]=__a[dd]:sub(1,cd-1)
  2906. b_a[dd]=b_a[dd]:sub(1,cd-1)a_a[dd]=a_a[dd]:sub(1,cd-1)dd=dd+1;cd=1;bd=1;if(dd-ad>=dda)then
  2907. ad=ad+1 end;cca:setValue("")elseif(dca==keys.up)then
  2908. _aa,baa,aaa,caa=nil,nil,nil,nil
  2909. if(dd>1)then dd=dd-1;if(cd>__a[dd]:len()+1)then
  2910. cd=__a[dd]:len()+1 end;if(bd>1)then
  2911. if(cd<bd)then bd=cd-cda+1;if(bd<1)then bd=1 end end end
  2912. if(ad>1)then if(dd<ad)then ad=ad-1 end end end elseif(dca==keys.down)then _aa,baa,aaa,caa=nil,nil,nil,nil
  2913. if(dd<#__a)then dd=dd+1
  2914. if(cd>
  2915. __a[dd]:len()+1)then cd=__a[dd]:len()+1 end
  2916. if(bd>1)then if(cd<bd)then bd=cd-cda+1;if(bd<1)then bd=1 end end end;if(dd>=ad+dda)then ad=ad+1 end end elseif(dca==keys.right)then _aa,baa,aaa,caa=nil,nil,nil,nil;cd=cd+1
  2917. if(dd<#__a)then if(cd>
  2918. __a[dd]:len()+1)then cd=1;dd=dd+1 end elseif
  2919. (cd>__a[dd]:len())then cd=__a[dd]:len()+1 end;if(cd<1)then cd=1 end
  2920. if(cd<bd)or(cd>=cda+bd)then bd=cd-cda+1 end;if(bd<1)then bd=1 end elseif(dca==keys.left)then _aa,baa,aaa,caa=nil,nil,nil,nil;cd=cd-1
  2921. if(cd>=1)then if(
  2922. cd<bd)or(cd>=cda+bd)then bd=cd end end;if(dd>1)then
  2923. if(cd<1)then dd=dd-1;cd=__a[dd]:len()+1;bd=cd-cda+1 end end;if(cd<1)then cd=1 end;if(bd<1)then bd=1 end elseif(dca==
  2924. keys.tab)then
  2925. if(cd%3 ==0)then
  2926. __a[dd]=__a[dd]:sub(1,cd-1).." "..
  2927. __a[dd]:sub(cd,__a[dd]:len())
  2928. b_a[dd]=b_a[dd]:sub(1,cd-1)..ab[cca:getForeground()]..
  2929. b_a[dd]:sub(cd,b_a[dd]:len())
  2930. a_a[dd]=a_a[dd]:sub(1,cd-1)..ab[cca:getBackground()]..
  2931. a_a[dd]:sub(cd,a_a[dd]:len())cd=cd+1 end
  2932. while cd%3 ~=0 do
  2933. __a[dd]=__a[dd]:sub(1,cd-1).." "..
  2934. __a[dd]:sub(cd,__a[dd]:len())
  2935. b_a[dd]=b_a[dd]:sub(1,cd-1)..ab[cca:getForeground()]..
  2936. b_a[dd]:sub(cd,b_a[dd]:len())
  2937. a_a[dd]=a_a[dd]:sub(1,cd-1)..ab[cca:getBackground()]..
  2938. a_a[dd]:sub(cd,a_a[dd]:len())cd=cd+1 end end
  2939. if not
  2940. ( (ada+cd-bd>=ada and ada+cd-bd<ada+cda)and(
  2941. bda+dd-ad>=bda and bda+dd-ad<bda+dda))then bd=math.max(1,
  2942. __a[dd]:len()-cda+1)
  2943. ad=math.max(1,dd-dda+1)end;local __b=
  2944. (cd<=__a[dd]:len()and cd-1 or __a[dd]:len())- (bd-1)
  2945. if(__b>cca:getX()+
  2946. cda-1)then __b=cca:getX()+cda-1 end;local a_b=(dd-ad<dda and dd-ad or dd-ad-1)if
  2947. (__b<1)then __b=0 end
  2948. _da:setCursor(true,ada+__b,bda+a_b,cca:getForeground())cca:updateDraw()return true end end,charHandler=function(cca,dca)
  2949. if
  2950. (dc.charHandler(cca,dca))then local _da=cca:getParent()local ada,bda=cca:getPosition()
  2951. local cda,dda=cca:getSize()if(aba())then cba(cca)end
  2952. __a[dd]=__a[dd]:sub(1,cd-1)..dca..
  2953. __a[dd]:sub(cd,__a[dd]:len())
  2954. b_a[dd]=b_a[dd]:sub(1,cd-1)..ab[cca:getForeground()]..
  2955. b_a[dd]:sub(cd,b_a[dd]:len())
  2956. a_a[dd]=a_a[dd]:sub(1,cd-1)..ab[cca:getBackground()]..
  2957. a_a[dd]:sub(cd,a_a[dd]:len())cd=cd+1;if(cd>=cda+bd)then bd=bd+1 end;_ca(cca)
  2958. cca:setValue("")
  2959. if not
  2960. ( (ada+cd-bd>=ada and ada+cd-bd<ada+cda)and(
  2961. bda+dd-ad>=bda and bda+dd-ad<bda+dda))then bd=math.max(1,
  2962. __a[dd]:len()-cda+1)
  2963. ad=math.max(1,dd-dda+1)end;local __b=
  2964. (cd<=__a[dd]:len()and cd-1 or __a[dd]:len())- (bd-1)
  2965. if(__b>cca:getX()+
  2966. cda-1)then __b=cca:getX()+cda-1 end;local a_b=(dd-ad<dda and dd-ad or dd-ad-1)if
  2967. (__b<1)then __b=0 end
  2968. _da:setCursor(true,ada+__b,bda+a_b,cca:getForeground())cca:updateDraw()return true end end,dragHandler=function(cca,dca,_da,ada)
  2969. if
  2970. (dc.dragHandler(cca,dca,_da,ada))then local bda=cca:getParent()local cda,dda=cca:getAbsolutePosition()
  2971. local __b,a_b=cca:getPosition()local b_b,c_b=cca:getSize()
  2972. if(__a[ada-dda+ad]~=nil)then
  2973. if
  2974. (_da-cda+bd>0)and(_da-cda+bd<=b_b)then cd=_da-cda+bd
  2975. dd=ada-dda+ad
  2976. if cd>__a[dd]:len()then cd=__a[dd]:len()+1 end;aaa=cd;caa=dd;if cd<bd then bd=cd-1;if bd<1 then bd=1 end end
  2977. bda:setCursor(not
  2978. aba(),__b+cd-bd,a_b+dd-ad,cca:getForeground())cca:updateDraw()end end;return true end end,scrollHandler=function(cca,dca,_da,ada)
  2979. if
  2980. (dc.scrollHandler(cca,dca,_da,ada))then local bda=cca:getParent()local cda,dda=cca:getAbsolutePosition()
  2981. local __b,a_b=cca:getPosition()local b_b,c_b=cca:getSize()ad=ad+dca;if(ad>#__a- (c_b-1))then
  2982. ad=#__a- (c_b-1)end;if(ad<1)then ad=1 end
  2983. if(cda+cd-bd>=cda and cda+cd-bd<
  2984. cda+b_b)and
  2985. (a_b+dd-ad>=a_b and a_b+dd-ad<a_b+c_b)then
  2986. bda:setCursor(not aba(),__b+cd-bd,a_b+dd-ad,cca:getForeground())else bda:setCursor(false)end;cca:updateDraw()return true end end,mouseHandler=function(cca,dca,_da,ada)
  2987. if
  2988. (dc.mouseHandler(cca,dca,_da,ada))then local bda=cca:getParent()local cda,dda=cca:getAbsolutePosition()
  2989. local __b,a_b=cca:getPosition()
  2990. if(__a[ada-dda+ad]~=nil)then cd=_da-cda+bd;dd=ada-dda+ad;aaa=
  2991. nil;caa=nil;_aa=cd;baa=dd;if(cd>__a[dd]:len())then
  2992. cd=__a[dd]:len()+1;_aa=cd end
  2993. if(cd<bd)then bd=cd-1;if(bd<1)then bd=1 end end;cca:updateDraw()end
  2994. bda:setCursor(true,__b+cd-bd,a_b+dd-ad,cca:getForeground())return true end end,mouseUpHandler=function(cca,dca,_da,ada)
  2995. if
  2996. (dc.mouseUpHandler(cca,dca,_da,ada))then local bda,cda=cca:getAbsolutePosition()
  2997. if
  2998. (__a[ada-cda+ad]~=nil)then aaa=_da-bda+bd;caa=ada-cda+ad;if(aaa>__a[caa]:len())then aaa=
  2999. __a[caa]:len()+1 end;if(_aa==aaa)and(baa==caa)then _aa,aaa,baa,caa=
  3000. nil,nil,nil,nil end
  3001. cca:updateDraw()end;return true end end,eventHandler=function(cca,dca,_da,...)
  3002. dc.eventHandler(cca,dca,_da,...)
  3003. if(dca=="paste")then
  3004. if(cca:isFocused())then local ada=cca:getParent()
  3005. local bda,cda=cca:getForeground(),cca:getBackground()local dda,__b=cca:getSize()
  3006. __a[dd]=__a[dd]:sub(1,cd-1).._da..
  3007. __a[dd]:sub(cd,__a[dd]:len())
  3008. b_a[dd]=b_a[dd]:sub(1,cd-1)..ab[bda]:rep(_da:len())..
  3009. b_a[dd]:sub(cd,b_a[dd]:len())
  3010. a_a[dd]=a_a[dd]:sub(1,cd-1)..ab[cda]:rep(_da:len())..
  3011. a_a[dd]:sub(cd,a_a[dd]:len())cd=cd+_da:len()if(cd>=dda+bd)then bd=(cd+1)-dda end
  3012. local a_b,b_b=cca:getPosition()
  3013. ada:setCursor(true,a_b+cd-bd,b_b+dd-ad,bda)_ca(cca)cca:updateDraw()end end end,draw=function(cca)
  3014. dc.draw(cca)
  3015. cca:addDraw("textfield",function()local dca,_da=cca:getSize()
  3016. local ada=ab[cca:getBackground()]local bda=ab[cca:getForeground()]
  3017. for n=1,_da do local cda=""local dda=""local __b=""if __a[
  3018. n+ad-1]then cda=__a[n+ad-1]__b=b_a[n+ad-1]
  3019. dda=a_a[n+ad-1]end;cda=_c(cda,bd,dca+bd-1)
  3020. dda=bb(ada,dca)__b=bb(bda,dca)cca:addText(1,n,cda)cca:addBG(1,n,dda)
  3021. cca:addFG(1,n,__b)cca:addBlit(1,n,cda,__b,dda)end
  3022. if _aa and aaa and baa and caa then local cda,dda,__b,a_b=bba()
  3023. for n=__b,a_b do local b_b=#__a[n]
  3024. local c_b=0
  3025. if n==__b and n==a_b then c_b=cda-1 - (bd-1)b_b=
  3026. b_b- (cda-1 - (bd-1))- (b_b-dda+ (bd-1))elseif n==a_b then b_b=b_b- (
  3027. b_b-dda+ (bd-1))elseif n==__b then b_b=b_b- (cda-1)c_b=cda-1 -
  3028. (bd-1)end;local d_b=math.min(b_b,dca-c_b)
  3029. cca:addBG(1 +c_b,n,bb(ab[daa],d_b))cca:addFG(1 +c_b,n,bb(ab[_ba],d_b))end end end)end,load=function(cca)
  3030. cca:listenEvent("mouse_click")cca:listenEvent("mouse_up")
  3031. cca:listenEvent("mouse_scroll")cca:listenEvent("mouse_drag")
  3032. cca:listenEvent("key")cca:listenEvent("char")
  3033. cca:listenEvent("other_event")end}bca.__index=bca;return setmetatable(bca,dc)end end;return aa["main"]()
Add Comment
Please, Sign In to add comment