SHOW:
|
|
- or go back to the newest paste.
| 1 | function split(sourceString,splittingChar,index) | |
| 2 | results={}
| |
| 3 | currentWord="" | |
| 4 | for i=1,string.len(sourceString) do | |
| 5 | letter=string.sub(sourceString,i,i) | |
| 6 | if letter==splittingChar then | |
| 7 | results[#results+1]=currentWord | |
| 8 | currentWord="" | |
| 9 | else | |
| 10 | currentWord=currentWord..letter | |
| 11 | end | |
| 12 | end | |
| 13 | results[#results+1]=currentWord | |
| 14 | return results[index] | |
| 15 | end | |
| 16 | ||
| 17 | function getSplits(sourceString,splittingChar) | |
| 18 | results={}
| |
| 19 | currentWord="" | |
| 20 | for i=1,string.len(sourceString) do | |
| 21 | letter=string.sub(sourceString,i,i) | |
| 22 | if letter==splittingChar then | |
| 23 | results[#results+1]=currentWord | |
| 24 | currentWord="" | |
| 25 | else | |
| 26 | currentWord=currentWord..letter | |
| 27 | end | |
| 28 | end | |
| 29 | results[#results+1]=currentWord | |
| 30 | return results | |
| 31 | end | |
| 32 | ||
| 33 | ||
| 34 | - | if fs.exists("event")==false then shell.run("pastebin get UKPy4iiE event") end
|
| 34 | + | if fs.exists("event")==false then shell.run("pastebin get CGn8AsPe event") end
|
| 35 | if os.loadAPI("event")==false then error("Failed to load event API") end
| |
| 36 | ||
| 37 | local timers = {}
| |
| 38 | ||
| 39 | function setTimer(func,timeOut,count,...) | |
| 40 | local id = os.startTimer(timeOut) | |
| 41 | timers[id] = {func = func, args = { ... }, timeOut = timeOut, count = count, executed = 0, id = id }
| |
| 42 | return id | |
| 43 | end | |
| 44 | ||
| 45 | function handleTimers(timer) | |
| 46 | if timers[timer] == nil then return end | |
| 47 | local tableTimer = timers[timer] | |
| 48 | tableTimer.func(table.unpack(table.args or {}))
| |
| 49 | tableTimer.executed = tableTimer.executed + 1 | |
| 50 | if tableTimer.executed < tableTimer.count or tableTimer.count == 0 then | |
| 51 | timers[os.startTimer(tableTimer.timeOut)] = tableTimer | |
| 52 | end | |
| 53 | timers[timer] = nil | |
| 54 | end | |
| 55 | event.addHandler("timer",handleTimers)
| |
| 56 | ||
| 57 | ||
| 58 | function killTimer(id) | |
| 59 | for i,timer in pairs(timers) do | |
| 60 | if timer.id == id then | |
| 61 | timers[i] = nil | |
| 62 | end | |
| 63 | end | |
| 64 | end | |
| 65 | ||
| 66 | local isReading = false | |
| 67 | local readCache = "" | |
| 68 | local readPos = { x = 0, y = y }
| |
| 69 | ||
| 70 | function read(length) | |
| 71 | isReading = true | |
| 72 | readCache = "" | |
| 73 | event.addHandler("key",handleReadKey)
| |
| 74 | event.addHandler("char",handleReadChar)
| |
| 75 | event.addHandler("paste",handleReadPaste)
| |
| 76 | readPos.x, readPos.y = term.getCursorPos() | |
| 77 | readPos.length = length or term.getSize() | |
| 78 | term.setCursorBlink(true) | |
| 79 | writeReadString() | |
| 80 | while isReading do | |
| 81 | event.handleCCEvents() | |
| 82 | end | |
| 83 | cancelRead() | |
| 84 | return readCache | |
| 85 | end | |
| 86 | ||
| 87 | function handleReadKey(key,held) | |
| 88 | if key == keys.backspace then | |
| 89 | readCache = string.sub(readCache,0,string.len(readCache) - 1 ) | |
| 90 | elseif key == keys.enter then | |
| 91 | isReading = false | |
| 92 | end | |
| 93 | writeReadString() | |
| 94 | end | |
| 95 | ||
| 96 | function handleReadChar(typedLetter) | |
| 97 | readCache = readCache .. typedLetter | |
| 98 | writeReadString() | |
| 99 | end | |
| 100 | ||
| 101 | function handleReadPaste(pastedString) | |
| 102 | readCache = readCache .. pastedString | |
| 103 | writeReadString() | |
| 104 | end | |
| 105 | ||
| 106 | function getReadString() | |
| 107 | return readCache | |
| 108 | end | |
| 109 | ||
| 110 | function writeReadString() | |
| 111 | event.trigger("onReadUpdate",readCache)
| |
| 112 | term.setCursorPos(readPos.x,readPos.y) | |
| 113 | term.setBackgroundColor(colors.white) | |
| 114 | term.setTextColor(colors.black) | |
| 115 | local readCache = readCache | |
| 116 | if string.len(readCache) > readPos.length then | |
| 117 | readCache = string.sub(readCache,string.len(readCache) - readPos.length +1, string.len(readCache) +1 ) | |
| 118 | end | |
| 119 | term.write(readCache) | |
| 120 | if string.len(readCache) - 1 < readPos.length then | |
| 121 | local x,y = term.getCursorPos() | |
| 122 | for i=string.len(readCache), readPos.length do | |
| 123 | term.write(" ")
| |
| 124 | end | |
| 125 | term.setCursorPos(x,y) | |
| 126 | end | |
| 127 | end | |
| 128 | ||
| 129 | function cancelRead() | |
| 130 | isReading = false | |
| 131 | term.setCursorBlink(false) | |
| 132 | event.removeHandler("key",handleReadKey)
| |
| 133 | event.removeHandler("char",handleReadChar)
| |
| 134 | event.removeHandler("paste",handleReadPaste)
| |
| 135 | return readCache | |
| 136 | end |