1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
local m = peripheral.find"monitor"
m.setTextScale(0.5)
local W,H = m.getSize()
local function read_lines(fname)
local out = {}
local fp = assert(fs.open(fname,"r"))
repeat
local line = fp.readLine()
table.insert(out, line)
until not line
fp.close()
return out
end
local cities = read_lines("/cities.txt")
local verbs = read_lines("/verbs.txt")
local function choice(list)
return list[math.random(#list)]
end
local function maybe(list, prob)
prob = prob or 0.5
if math.random() < prob then
return choice(list) .. " "
else
return ""
end
end
local function write_str(m,s,slow)
local W,H = m.getSize()
for i = 1,#s do
m.write(s:sub(i,i))
if slow then
os.sleep(0.1)
end
if (m.getCursorPos()) == W then
m.scroll(1)
m.setCursorPos(1,H)
end
end
end
local function f_write(mon, tab, slow)
for _,val in ipairs(tab) do
if type(val) == "string" then write_str(mon, val, slow)
elseif type(val) == "number" then mon.setTextColor(val)
else f_write(mon, val, slow)
end
end
end
local norm_color = colors.gray
local urgent = { "URGENT", "WARNING", "ALERT", "CRITICAL", "BREAKING" }
local orgs = {"Council", "Committee", "Board" }
local orgtype = { "Executive", "Leadership", "Management" }
local function pretitle()
local out = ""
while math.random() < 0.25 do out = choice{"Acting","Provisional","Provisional"} .. " " .. out end
return out
end
local function beecount()
if math.random() < 0.4 then return {colors.yellow, "all bees ", norm_color} end
local n = ("%4d"):format(math.random(9999))
return {colors.yellow, n, " bees ", norm_color}
end
local function timeframe()
return choice {
"the end of the day",
("%02d:00 tomorrow"):format(math.random(23)),
"next "..choice{"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"},
}
end
local function news_item()
return {
colors.red, choice(urgent), norm_color, ": ",
"The ", choice{colors.red, colors.blue, colors.green}, pretitle(), choice(orgtype), " ", choice(orgs),
norm_color, " has ", choice {
-- the council has condemned all bees for [being/having been] boiled [illegally/without a permit/behind schedule]
{ "condemned ", beecount(), "for ", choice{"being","having been"}, " ", colors.blue, choice(verbs),
norm_color, " ", choice{"illegally","without a permit","behind schedule"} },
-- the council has decreed that 1234 bees shall be skewed by next tuesday
{ "decreed that ", beecount(), "shall be ", colors.orange, choice(verbs),
norm_color, " by ", timeframe() },
-- the council has scheduled 9998 bees to be translated by next thursday
{ "scheduled ", beecount(), "to be ", colors.brown, choice(verbs),
norm_color, " by ", timeframe() },
}, norm_color, "." }
end
local function regular_item()
return {
choice{colors.yellow, colors.red, colors.cyan},
string.format("%5d",math.random(0,99999)),
norm_color, " bees ", choice{"have been ","were "},
choice{colors.lime, colors.lightBlue, colors.pink},
choice(verbs),
norm_color, " in ",
choice{colors.orange, colors.yellow, colors.purple},
choice(cities),
norm_color, "."}
end
for _ = 1,H do
m.scroll(1)
m.setCursorPos(1,H)
f_write(m,regular_item(), false)
end
while true do
m.scroll(1)
m.setCursorPos(1,H)
local it
if math.random()<0.05 then it = news_item() else it = regular_item() end
f_write(m, it, true)
os.sleep(math.random(5,100)/10)
end
|