View difference between Paste ID: a5HpUVYL and dyvydHtK
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