View difference between Paste ID: hFKwYGBv and MCjPAhyz
SHOW: | | - or go back to the newest paste.
1-
local p = peripheral.wrap("back")
1+
local p = peripheral.wrap("right")
2
p.clear()
3
local mon = {}
4
5
mon.minY = 8 * 9
6
mon.maxY = 24 * 9 + 4
7
mon.minX = 0 * 6
8
mon.maxX = 68 * 6 + 4
9
mon.rows = math.floor((mon.maxY - mon.minY) / 9)
10
mon.cols = math.floor((mon.maxX - mon.minX) / 6)
11
mon.lines = {}
12
mon.mtrx = {}
13
for i = 1, mon.rows do
14
 mon.mtrx[i] = {}
15
end
16
mon.scale = 1
17
mon.curr = 1
18
mon.curc = 1
19
mon.cur = p.addText(math.floor((mon.curc - 1) * 6 * mon.scale) + mon.minX + 2, math.floor(((mon.curr - 1) * 9 + 1) * mon.scale) + mon.minY + 2, " ", 0)
20
mon.colors = {[1] = 0xffffff, [2] = 0xffc125, [4] = 0xff3e96, [8] = 0x836fff, [16] = 0xffff00, [32] = 0x00ff00, [64] = 0xff82ab, [128] = 0x444444, [256] = 0x999999, [512] = 0x009acd, [1024] = 0x9400d3, [2048] = 0x0000ff, [4096] = 0x8b5a2b, [8192] = 0x458b00, [16384] = 0xff0000, [32768] = 0}
21
22
mon.bgColor = 0
23
mon.color = 0xffffff
24
mon.box = p.addBox(mon.minX, mon.minY, mon.maxX - mon.minX + 1, mon.maxY - mon.minY + 1, mon.bgColor, 0)
25
mon.box.setZIndex(-1)
26
27
mon.write = function(s)
28
 for i = 1, #s do
29
  local x = math.floor((mon.curc - 1) * 6 * mon.scale) + mon.minX + 2
30
  local y = math.floor((mon.curr - 1) * 9 * mon.scale) + mon.minY + 2
31
  local j = 1
32
  local t = mon.mtrx[mon.curr][mon.curc]
33
  if t then
34
   t.delete()
35
  end
36
  t = p.addText(x, y, s:sub(i,i), mon.color)
37
  mon.mtrx[mon.curr][mon.curc] = t
38
  mon.lines[#mon.lines + 1] = t
39
  mon.curc = mon.curc + 1
40
  if mon.curc > mon.cols then
41
   mon.curc = 1
42
   if mon.curr == mon.rows then
43
    return
44
   else
45
    mon.curr = mon.curr + 1
46
   end
47
  end
48
 end
49
 mon.cur.setX(math.floor((mon.curc - 1) * 6 * mon.scale) + mon.minX + 2)
50
 mon.cur.setY(math.floor(((mon.curr - 1) * 9 + 1) * mon.scale) + mon.minY + 2)
51
end
52
53
mon.clear = function()
54
 for i = 1, #mon.lines do
55
  mon.lines[i].delete()
56
  mon.lines[i] = nil
57
 end
58
end
59
60
mon.clearLine = function(n)
61
 local y = math.floor(((n or mon.curr) - 1) * 9 * mon.scale) + mon.minY + 2
62
 local i = 1
63
 while i <= #mon.lines do
64
  if not mon.lines[i].getY() or mon.lines[i].getY() == y then
65
   mon.lines[i].delete()
66
   mon.lines[i] = mon.lines[#mon.lines]
67
   mon.lines[#mon.lines] = nil
68
  else
69
   i = i + 1
70
  end
71
 end
72
end
73
74
mon.scroll = function()
75
 mon.clearLine(1)
76
 local i = 1
77
 while i <= #mon.lines do
78
  if not mon.lines[i].getY() then
79
   mon.lines[i].delete()
80
   mon.lines[i] = mon.lines[#mon.lines]
81
   mon.lines[#mon.lines] = nil
82
  else
83
   mon.lines[i].setY(mon.lines[i].getY() - (9 * mon.scale))
84
   i = i + 1
85
  end
86
 end
87
 for i = 1, mon.rows - 1 do
88
  mon.mtrx[i] = mon.mtrx[i + 1]
89
 end
90
 mon.mtrx[mon.rows] = {}
91
end
92
93
mon.setBackgroundColor = function(n)
94
 if mon.colors[n] then
95
  n = mon.colors[n]
96
 end
97
 mon.bgColor = n
98
 mon.box.setColor(n)
99
 mon.box.setOpacity(n == 0 and 0 or 0.40)
100
end
101
102
mon.setBackgroundColour = mon.setBackgroundColor
103
104
mon.setTextColor = function(n)
105
 if mon.colors[n] then
106
  n = mon.colors[n]
107
 end
108
 mon.color = n
109
 mon.cur.setColor(n)
110
end
111
112
mon.setTextColour = mon.setTextColor
113
114
mon.setTextScale = function(n)
115
 mon.rows = math.floor((mon.maxY - mon.minY - 4)/(9 * n))
116
 mon.cols = math.floor((mon.maxX - mon.minX - 4)/(6 * n))
117
 local y = nil
118
 local x = nil
119
 if n > mon.scale then
120
  y = math.floor((mon.rows + 1) * 9 * mon.scale) + mon.minY + 2
121
  x = math.floor((mon.cols + 1) * 6 * mon.scale) + mon.minX + 2
122
 end
123
 local i = 1
124
 while i < #mon.lines do
125
  if not mon.lines.getY() or y and (mon.lines[i].getY() >= y or mon.lines[i].getX() >= x) then
126
   mon.lines[i].delete()
127
   mon.lines[i] = mon.lines[#mon.lines]
128
   mon.lines[#mon.lines] = nil
129
  else
130
   local ny = (mon.lines[i].getY() - mon.minY - 2) / mon.scale * n
131
   local nx = (mon.lines[i].getX() - mon.minX - 2) / mon.scale * n
132
   mon.lines[i].setY(ny)
133
   mon.lines[i].setX(nx)
134
   mon.lines[i].setScale(n)
135
   i = i + 1
136
  end
137
 end
138
 for i = 1, mon.rows do
139
  if not mon.mtrx[i] then
140
   mon.mtrx[i] = {}
141
  end
142
 end
143
 mon.scale = n
144
 mon.cur.setX(math.floor((mon.curc - 1) * 6 * mon.scale) + mon.minX + 2)
145
 mon.cur.setY(math.floor(((mon.curr - 1) * 9 + 1) * mon.scale) + mon.minY + 2)
146
end
147
148
mon.setCursorPos = function(x,y)
149
 mon.curc = x
150
 mon.curr = y
151
 mon.cur.setX(math.floor((mon.curc - 1) * 6 * mon.scale) + mon.minX + 2)
152
 mon.cur.setY(math.floor(((mon.curr - 1) * 9 + 1) * mon.scale) + mon.minY + 2)
153
end
154
155
mon.getCursorPos = function()
156
 return mon.curc, mon.curr
157
end
158
159
mon.getSize = function()
160
 return mon.cols, mon.rows
161
end
162
163
local blink = true
164
local blinkstate = false
165
local nextBlink = os.startTimer(0.3)
166
mon.setCursorBlink = function(b)
167
 blink = b
168
end
169
170
local function doBlink()
171
 blinkstate = not blinkstate
172
 mon.cur.setText(blinkstate and blink and "_" or " ")
173
 nextBlink = os.startTimer(0.3)
174
end
175
176
mon.isColor = function() return true end
177
mon.isColour = function() return true end
178
179
local pullEvent = os.pullEvent
180
local charQueue = ""
181
os.pullEvent = function(...)
182
 while true do
183
  if charQueue ~= "" then
184
   local c = charQueue:sub(1,1)
185
   charQueue = charQueue:sub(2)
186
   if c == "\\" then
187
    c = charQueue:sub(1,1)
188
    charQueue = charQueue:sub(2)
189
    if c == "\\" then
190
     return "char",c
191
    elseif c == "n" then
192
     return "key",28
193
    elseif c == "b" then
194
     return "key",14
195
    elseif c == "t" then
196
     error("Terminated")
197
    elseif c == "r" then
198
     os.reboot()
199
    elseif c == "s" then
200
     os.shutdown()
201
    end
202
   end
203
   return "char",c
204
  end
205
  local t = {pullEvent(...)}
206
  if t[1] == "chat_command" then
207
   charQueue = charQueue..t[2]
208
   local c = charQueue:sub(1,1)
209
   charQueue = charQueue:sub(2)
210
   if c == "\\" then 
211
    charQueue = c..charQueue 
212
   else
213
    return "char",c
214
   end
215
  elseif t[1] == "timer" and t[2] == nextBlink then
216
   doBlink()
217
  else
218
   return unpack(t)
219
  end
220
 end
221
end
222
223
local reboot = os.reboot
224
os.reboot = function()
225
 p.clear()
226
 mon.box.delete()
227
 mon.cur.delete()
228
 reboot()
229
end
230
231
local shutdown = os.shutdown
232
os.shutdown = function()
233
 p.clear()
234
 shutdown()
235
end
236
237
term.redirect(mon)
238
239
print("Welcome to CcGlasses!")