From 5b23ea99fd15d110c9e69a8a23869b4e4cb4f494 Mon Sep 17 00:00:00 2001 From: Andrew-71 Date: Sun, 10 Mar 2024 23:45:44 +0300 Subject: [PATCH] initialize --- Dash/dash.lua | 8 + Dash/util/pixelbox_lite.lua | 184 +++++++++++++++++ Dash/widgets/ART.md | 19 ++ Dash/widgets/README.md | 10 + GLONASS/README.md | 1 + GLONASS/UNS.lua | 63 ++++++ MusicPlayer/Client/client.lua | 95 +++++++++ MusicPlayer/Client/graphics.lua | 167 +++++++++++++++ MusicPlayer/Client/playback.lua | 27 +++ MusicPlayer/Client/touch_processing.lua | 59 ++++++ MusicPlayer/Server/audio_manager.lua | 98 +++++++++ MusicPlayer/Server/logger.lua | 60 ++++++ MusicPlayer/Server/server.lua | 60 ++++++ MusicPlayer/Server/startup.lua | 14 ++ README.md | 4 + RSS/feeds.lua | 128 ++++++++++++ RSS/feeds/nytimes.json | 5 + RSS/feeds/tass.json | 5 + RSS/feeds/youtube_generic.json | 5 + RSS/graphics.lua | 71 +++++++ RSS/log.lua | 98 +++++++++ RSS/main.lua | 28 +++ RSS/slaxml.lua | 259 ++++++++++++++++++++++++ RSS/todo.txt | 3 + TARDIM/NavDash.lua | 96 +++++++++ TARDIM/NavDashTwo.lua | 85 ++++++++ TUI71/TUI71-time.lua | 148 ++++++++++++++ TUI71/TUI71.lua | 9 + apricot/README.md | 3 + apricot/node/logger.lua | 58 ++++++ apricot/node/modems.lua | 19 ++ apricot/scripts/receiver.lua | 12 ++ apricot/scripts/sender.lua | 6 + char_reference.png | Bin 0 -> 176216 bytes chest_monitor.lua | 86 ++++++++ dash_old/modules/clock.lua | 140 +++++++++++++ dash_old/modules/rss.lua | 25 +++ dash_old/smart_monitor.lua | 36 ++++ generator/README.md | 3 + generator/data.lua | 83 ++++++++ generator/network.lua | 0 generator/startup.lua | 0 logger.lua | 56 +++++ 43 files changed, 2336 insertions(+) create mode 100644 Dash/dash.lua create mode 100644 Dash/util/pixelbox_lite.lua create mode 100644 Dash/widgets/ART.md create mode 100644 Dash/widgets/README.md create mode 100644 GLONASS/README.md create mode 100644 GLONASS/UNS.lua create mode 100644 MusicPlayer/Client/client.lua create mode 100644 MusicPlayer/Client/graphics.lua create mode 100644 MusicPlayer/Client/playback.lua create mode 100644 MusicPlayer/Client/touch_processing.lua create mode 100644 MusicPlayer/Server/audio_manager.lua create mode 100644 MusicPlayer/Server/logger.lua create mode 100644 MusicPlayer/Server/server.lua create mode 100644 MusicPlayer/Server/startup.lua create mode 100644 README.md create mode 100644 RSS/feeds.lua create mode 100644 RSS/feeds/nytimes.json create mode 100644 RSS/feeds/tass.json create mode 100644 RSS/feeds/youtube_generic.json create mode 100644 RSS/graphics.lua create mode 100644 RSS/log.lua create mode 100644 RSS/main.lua create mode 100644 RSS/slaxml.lua create mode 100644 RSS/todo.txt create mode 100644 TARDIM/NavDash.lua create mode 100644 TARDIM/NavDashTwo.lua create mode 100644 TUI71/TUI71-time.lua create mode 100644 TUI71/TUI71.lua create mode 100644 apricot/README.md create mode 100644 apricot/node/logger.lua create mode 100644 apricot/node/modems.lua create mode 100644 apricot/scripts/receiver.lua create mode 100644 apricot/scripts/sender.lua create mode 100644 char_reference.png create mode 100644 chest_monitor.lua create mode 100644 dash_old/modules/clock.lua create mode 100644 dash_old/modules/rss.lua create mode 100644 dash_old/smart_monitor.lua create mode 100644 generator/README.md create mode 100644 generator/data.lua create mode 100644 generator/network.lua create mode 100644 generator/startup.lua create mode 100644 logger.lua diff --git a/Dash/dash.lua b/Dash/dash.lua new file mode 100644 index 0000000..110e0c8 --- /dev/null +++ b/Dash/dash.lua @@ -0,0 +1,8 @@ +local m = peripheral.find("monitor") +m.setTextScale(0.5) +local pixelbox = require("./util/pixelbox_lite") +local screen = pixelbox.new(m) +screen:set_pixel(3, 2, 1) +screen:render() + +print(screen:get_size()) \ No newline at end of file diff --git a/Dash/util/pixelbox_lite.lua b/Dash/util/pixelbox_lite.lua new file mode 100644 index 0000000..1fdc365 --- /dev/null +++ b/Dash/util/pixelbox_lite.lua @@ -0,0 +1,184 @@ +--[[ + Made by O. Caha (9551-Dev), licensed under MIT + + Modified by Andrew_7_1 +]] + +local PIXELBOX = {} +local OBJECT = {} + +local t_sort,t_cat,s_char = table.sort,table.concat,string.char +local function sort(a,b) return a[2] > b[2] end + +local distances = { + {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 to_blit = {} +for i = 0, 15 do + to_blit[2^i] = ("%x"):format(i) +end + + +function PIXELBOX.RESTORE(BOX,color) + local bc = {} + + for y=1,BOX.height*3 do + for x=1,BOX.width*2 do + if not bc[y] then bc[y] = {} end + bc[y][x] = color + end + end + + BOX.CANVAS = bc +end + +local function build_drawing_char(a,b,c,d,e,f) + local arr = {a,b,c,d,e,f} + local c_types = {} + local sortable = {} + local ind = 0 + for i=1,6 do + local c = arr[i] + if not c_types[c] then + ind = ind + 1 + c_types[c] = {0,ind} + end + + local t = c_types[c] + local t1 = t[1] + 1 + + t[1] = t1 + sortable[t[2]] = {c,t1} + end + local n = #sortable + while n > 2 do + t_sort(sortable,sort) + local bit6 = distances[sortable[n][1]] + local index,run = 1,false + local nm1 = n - 1 + for i=2,bit6[1] do + if run then break end + local tab = bit6[i] + for j=1,nm1 do + if sortable[j][1] == tab then + index = j + run = true + break + end + end + end + local from,to = sortable[n][1],sortable[index][1] + for i=1,6 do + if arr[i] == from then + arr[i] = to + local sindex = sortable[index] + sindex[2] = sindex[2] + 1 + end + end + + sortable[n] = nil + n = n - 1 + end + + local n = 128 + local a6 = arr[6] + + if arr[1] ~= a6 then n = n + 1 end + if arr[2] ~= a6 then n = n + 2 end + if arr[3] ~= a6 then n = n + 4 end + if arr[4] ~= a6 then n = n + 8 end + if arr[5] ~= a6 then n = n + 16 end + + if sortable[1][1] == arr[6] then + return s_char(n),sortable[2][1],arr[6] + else + return s_char(n),sortable[1][1],arr[6] + end +end + +function OBJECT:render() + local t = self.term + local blit_line,set_cursor = t.blit,t.setCursorPos + + local w_double = self.width*2 + local canv = self.CANVAS + + local sy = 0 + for y=1,self.height*3,3 do + sy = sy + 1 + local layer_1 = canv[y] + local layer_2 = canv[y+1] + local layer_3 = canv[y+2] + local char_line,fg_line,bg_line = {},{},{} + local n = 0 + for x=1,w_double,2 do + local xp1 = x+1 + local b11,b21,b12,b22,b13,b23 = + layer_1[x],layer_1[xp1], + layer_2[x],layer_2[xp1], + layer_3[x],layer_3[xp1] + + local char,fg,bg = " ",1,b11 + if not (b21 == b11 + and b12 == b11 + and b22 == b11 + and b13 == b11 + and b23 == b11) then + char,fg,bg = build_drawing_char(b11,b21,b12,b22,b13,b23) + end + n = n + 1 + char_line[n] = char + fg_line [n] = to_blit[fg] + bg_line [n] = to_blit[bg] + end + + set_cursor(1,sy) + blit_line( + t_cat(char_line,""), + t_cat(fg_line,""), + t_cat(bg_line,"") + ) + end +end + +function OBJECT:clear(color) + PIXELBOX.RESTORE(self,color) +end + +function OBJECT:set_pixel(x,y,color) + self.CANVAS[y][x] = color +end + +function OBJECT:get_size() + return #(self.CANVAS), #(self.CANVAS[1]) +end + +function PIXELBOX.new(terminal,bg) + local bg = bg or terminal.getBackgroundColor() or colors.black + local BOX = {} + local w,h = terminal.getSize() + BOX.term = terminal + setmetatable(BOX,{__index = OBJECT}) + BOX.width = w + BOX.height = h + PIXELBOX.RESTORE(BOX,bg) + return BOX +end + +return PIXELBOX \ No newline at end of file diff --git a/Dash/widgets/ART.md b/Dash/widgets/ART.md new file mode 100644 index 0000000..b6533ce --- /dev/null +++ b/Dash/widgets/ART.md @@ -0,0 +1,19 @@ + + +Changes through time: +* Morning +* Day +* Evening +* Night + +Changes with weather: +* Sunny +* Cloudy +* Rainy +* Stormy (diff from rain?) +* Snowy - alternative to rainy + +Changes with dates: + +Fireworks +Lowered flag diff --git a/Dash/widgets/README.md b/Dash/widgets/README.md new file mode 100644 index 0000000..0e6823d --- /dev/null +++ b/Dash/widgets/README.md @@ -0,0 +1,10 @@ +# Widgets I'll need +target: 5x3 monitors big (200x114 pixels allegedly) + +### Essential +* Time (with zones?) +* Weather +* Some kind of feed? + +### Cool +* Dynamic cityscape that changes with time and weather \ No newline at end of file diff --git a/GLONASS/README.md b/GLONASS/README.md new file mode 100644 index 0000000..e5917b2 --- /dev/null +++ b/GLONASS/README.md @@ -0,0 +1 @@ +I originally made this project in 2022 as a proof of concept. \ No newline at end of file diff --git a/GLONASS/UNS.lua b/GLONASS/UNS.lua new file mode 100644 index 0000000..3ec8a7e --- /dev/null +++ b/GLONASS/UNS.lua @@ -0,0 +1,63 @@ +--[[ +Unitary Navigational System v0.0 + +This basic script attempts to consolidate a GPS constellation into a single computer. Because using 4 is plain wasteful! +It was made out of project "GLONASS Tower" I made in 2022 after discovering CC + +TODO: Bring back cool logging! +]] + +-- Modems declaration. Edit this +local modems = { + { + id = "modem_id_here", + pos = { + x = 1, + y = 1, + z = 1 + }, + modem = nil, + primary = true -- Highest modem, to increase coverage ever so slightly + } +} + +-- Prepare all modems +local primary_modem = nil +for i = 1 .. #modems do + modems[i].modem = peripheral.wrap(modems[i].id) + if modems[i].primary then + primary_modem = modems[i].modem + end +end +if primary_modem == nil then + primary_modem = modems[0].modem +end +primary_modem.open(gps.CHANNEL_GPS) -- Only *listen* on 1 modem to avoid repeats + +-- Simple logging. It's not ideal but will do as a "temporary" solution +local function log(message) + term.write(message) + term.setCursorPos(1, select(2, term.getCursorPos()) + 1) + if select(2, term.getCursorPos()) >= select(2, term.getSize()) then + term.scroll(1) + term.setCursorPos(1, select(2, term.getCursorPos()) - 1) + end +end +term.clear() +term.setCursorPos(1, 1) +log("UNS v0.0 starting...") + +while true do + -- Wait for a GPS query + local event, side, channel, replyChannel, message, distance + repeat + event, side, channel, replyChannel, message, distance = os.pullEvent("modem_message") + until channel == gps.CHANNEL_GPS and message == "PING" + log("Recieved request, distance: " .. distance) + + -- Send data from all modems + for _, modem in ipairs(modems) do + modem.transmit(channel, replyChannel, modem.pos) + log("Modem ID <" .. modem.id .. "> transmitted location") + end +end \ No newline at end of file diff --git a/MusicPlayer/Client/client.lua b/MusicPlayer/Client/client.lua new file mode 100644 index 0000000..6954eb9 --- /dev/null +++ b/MusicPlayer/Client/client.lua @@ -0,0 +1,95 @@ +local graphics = require("graphics") + +local modem = peripheral.find('modem') +if not modem then error('No modem found') end +modem.open(7101) + +local dfpwm = require("cc.audio.dfpwm") +local speaker = peripheral.find("speaker") +if not speaker then error('No speaker found') end +local decoder = dfpwm.make_decoder() + +local status_vars = { + is_playing = true, + is_paused = false, + current_second = 0, + track_index = 1, + start_index = 1, +} + +local cfg_vars = { + forward_skip = 5, + backward_skip = 5, + port = 7101, + chunk_size = 0.5 +} + +local function get_catalogue() + modem.transmit(7101, 7101, {type = 'query'}) + local event, sides, channel, replyChannel, message, distance = os.pullEvent('modem_message') + return message.audio_catalogue +end +local audio_catalogue = get_catalogue() + +local function music_loop() + local play_music = require("playback") + while true do + status_vars.current_second = play_music(status_vars, cfg_vars, audio_catalogue, modem) + sleep() + end +end + +local function draw_ui_loop() + while true do + if not status_vars.is_playing then + graphics.draw_track_list(1, 1, audio_catalogue, status_vars.start_index, select(2, term.getSize()) - 1, term) + else + graphics.draw_track_list(1, 1, audio_catalogue, status_vars.start_index, select(2, term.getSize()) - 4, term) + end + sleep(1) + end +end + +local function control_loop() + while true do + local event, button, x, y = os.pullEvent("mouse_click") + + local btn_actions = { + pause = { + x = x + math.floor((select(1, term.getSize()) - 11) / 2) + 5, + y = select(2, term.getSize()) - 1, + func = function () + status_vars.is_paused = not status_vars.is_paused + end + }, + forward = { + x = math.floor((select(1, term.getSize()) - 11) / 2) + 9, + y = select(2, term.getSize()) - 1, + func = function () + status_vars.current_second = status_vars.current_second + cfg_vars.forward_skip + end + }, + backward = { + x = math.floor((select(1, term.getSize()) - 11) / 2) + 1, + y = select(2, term.getSize()) - 1, + func = function () + status_vars.current_second = status_vars.current_second - cfg_vars.backward_skip + end + } + } + if x == 3 and y == 1 then return end + + term.setCursorPos(btn_actions.pause.x, btn_actions.pause.y) + term.write('%') + + for i, v in pairs(btn_actions) do + if x == v.x and y == v.y then + v.func() + break + end + end + end +end + +term.clear() -- Clear terminal +parallel.waitForAny(music_loop, draw_ui_loop, control_loop) -- Start loops \ No newline at end of file diff --git a/MusicPlayer/Client/graphics.lua b/MusicPlayer/Client/graphics.lua new file mode 100644 index 0000000..66021a8 --- /dev/null +++ b/MusicPlayer/Client/graphics.lua @@ -0,0 +1,167 @@ +local api = {} + +api.symbols = { + audio_controls = { + play = "\16", + pause = "\19", + forward = "\16", + backward = "\17", + full_back = "\171" + }, + app_controls = { + up = "\30", + down = "\31", + download = "\25", + play = "\16" + }, + misc = { + music = "\15", + } +} + +-- Draw a spinner loop at a specified position. Useful for waitForAny. +function api.spinner_loop(x, y, spin_monitor) + local spin_chars = { + "\139", + "\138", + "\142", + "\140", + "\141", + "\133", + "\135", + "\131" + } + local index = 1 + while true do + spin_monitor.setCursorPos(x, y) + spin_monitor.write(spin_chars[index]) + index = index + 1 + if index > #spin_chars then index = index - #spin_chars end + sleep(0.1) + end +end + +--[[ + Function to create simple progress bars of any length. + size - length of the bar in pixels, taken, max - ratio of the bar that should be full. + + There is an ability to set custom symbols for full and empty pixels, + however it is not necessary and by default the program uses '#' and '.' for these +]] +function api.make_progressbar(size, taken, max, char_full, char_empty) + --[[ + Maths behind the function are quite simple: + taken/max = x/size + taken * size = x * max + x = taken * size / max + ]] + local full_symbol, empty_symbol = char_full or '#', char_empty or '.' + size = size - 2 -- make space for "[" and "]" + local progress = math.floor(size * taken / max) + local hash = (full_symbol):rep(progress) + local dots = (empty_symbol):rep(size - progress) + return ("[" .. hash .. dots .. "]") +end + +local function seconds_to_string(seconds) + -- int to mm:ss + local minutes = math.floor(seconds / 60) + local seconds = seconds - minutes * 60 + return string.format("%02d:%02d", minutes, seconds) +end + +function api.draw_audio_bar(x, y, progress_seconds, track_info, is_paused, monitor) + --[[ + Example: + | Among us soundtrack lol | + | [<] [####........[<]............] [>] | + | 12:43/14:31 | + ]] + local x_max, y_max = monitor.getSize() + + -- Title + monitor.setCursorPos(x, y) + local title = track_info.title + if #title > x_max - 2 then + title = title:sub(1, x_max - 4) .. ".." + end + monitor.write((' '):rep(math.floor((x_max - #title) / 2)) .. title .. (' '):rep(math.ceil((x_max - #title) / 2))) + + -- Progress bar + monitor.setCursorPos(x, y + 1) + local progress_bar = api.make_progressbar(x_max - 16, progress_seconds, track_info.length) + --monitor.blit(' ' .. seconds_to_string(progress_seconds) .. ' ' .. progress_bar .. ' ' .. seconds_to_string(track_info.length), 'f00000f0' .. ('3'):rep(x_max - 16) .. '0f00000f', ('f'):rep(x_max)) + monitor.write(' ' .. seconds_to_string(progress_seconds) .. ' ' .. progress_bar .. ' ' .. seconds_to_string(track_info.length)) + + -- Controls + local controls = { + api.symbols.audio_controls.backward, + is_paused and api.symbols.audio_controls.play or api.symbols.audio_controls.pause, + api.symbols.audio_controls.forward + } + for i, control in ipairs(controls) do + monitor.setCursorPos(x + math.floor((x_max - 11) / 2) + (i - 1) * 4, y + 1) + monitor.write('[' .. control .. ']') + end +end + +-- Copy of draw_audio_bar, but for when no track is played - just a blank bar. +function api.draw_track_list(x, y, audio_catalogue, start_index, height, monitor) + height = height or select(2, monitor.getSize()) + local x_max, y_max = monitor.getSize() + + --[[ + top bar: + "[X] 21:00:01 Tue 12" + + -button to close the app + -time and date + + bottom bar: + "[up_btn] [down_btn] Showing [current_max_index - list_size]-[current_max_index] of [#audio_catalogue] | [REFRESH]" + -buttons to go up and down the list + -current index and total number of tracks + -button to refresh the list + + list items: + "[index] [title] [length] [play_btn] [download_btn]" + -index - number of the track in the list + -title - title of the track + -length - length of the track + -play_btn - button to play the track + -download_btn - button to download the track (not implemented yet) + ]] + + -- top bar + monitor.setCursorPos(x, y) + local current_time = os.date("%H:%M:%S %b %d") + local exit_btn = "[X]" + + monitor.blit(' ' .. exit_btn .. ' ' ..current_time, 'f0e0f00000000f000f00', 'ffffffffffffffffffff') + + -- bottom bar + monitor.setCursorPos(x, y + height - 1) + local bottom_btns = '[' .. api.symbols.app_controls.up .. '] [' .. api.symbols.app_controls.down .. ']' + local showing = 'Showing ' .. tostring(start_index) .. '-' .. tostring(start_index + height - 2) .. ' of ' .. tostring(#audio_catalogue) + local refresh_btn = '[REFRESH]' + monitor.blit(' ' .. bottom_btns .. ' ' .. showing .. ' | ' .. refresh_btn, 'f0e0f0b0f' .. ('0'):rep(#showing) .. "f0f033333330", ('f'):rep(#bottom_btns + #showing + #refresh_btn + 5)) + -- monitor.write(' ' .. bottom_btns .. ' ' .. showing .. ' | ' .. refresh_btn) + + -- list items + -- i should be current_max_index - height - 2 or 1 if current_max_index - height - 2 < 1 + for i = start_index, math.min(start_index + height - 2, #audio_catalogue) do + if (y + 1 + i >= y + height - 1) or i > #audio_catalogue then break end + + local track = audio_catalogue[i] + local index = tostring(i) + local title = track.title + local length = seconds_to_string(track.length) + local play_btn = api.symbols.audio_controls.play + local download_btn = api.symbols.app_controls.download + local list_item = ' ' .. index .. ' ' .. title .. ' ' .. length .. ' ' .. play_btn .. ' ' .. download_btn + monitor.setCursorPos(x, y + 1 + i) + monitor.write(list_item) + end +end + +return api \ No newline at end of file diff --git a/MusicPlayer/Client/playback.lua b/MusicPlayer/Client/playback.lua new file mode 100644 index 0000000..0b187a8 --- /dev/null +++ b/MusicPlayer/Client/playback.lua @@ -0,0 +1,27 @@ +local dfpwm = require("cc.audio.dfpwm") +local speaker = peripheral.find("speaker") +local decoder = dfpwm.make_decoder() + +local graphics = require("graphics") + + +local function play_music(status_vars, cfg_vars, audio_catalogue, modem) + if (not status_vars.is_playing) or status_vars.is_paused then return 0 end + + modem.transmit(7101, 7101, {type = 'track_chunk', + index = status_vars.track_index, + starting_second = status_vars.current_second, + length = cfg_vars.chunk_size}) + local event, sides, channel, replyChannel, message, distance = os.pullEvent('modem_message') + + local buffer = decoder(message.track) + + while not speaker.playAudio(buffer) do + os.pullEvent("speaker_audio_empty") + graphics.draw_audio_bar(1, select(2, term.getSize()) - 2, status_vars.current_second + cfg_vars.chunk_size, audio_catalogue[status_vars.track_index], status_vars.is_paused, term) + end + + return status_vars.current_second + cfg_vars.chunk_size +end + +return play_music \ No newline at end of file diff --git a/MusicPlayer/Client/touch_processing.lua b/MusicPlayer/Client/touch_processing.lua new file mode 100644 index 0000000..0de19c0 --- /dev/null +++ b/MusicPlayer/Client/touch_processing.lua @@ -0,0 +1,59 @@ +local touch_processer = {} + +touch_processer.init = function () + local self = {} + + + + function self.process_minimised_controls() + local x, y = e[3], e[4] + local btn_actions = { + pause = { + x = pause_btn_coords.x, + y = pause_btn_coords.y, + func = function() + status_vars.is_paused = not status_vars.is_paused + end + }, + forward = { + x = forward_btn_coords.x, + y = forward_btn_coords.y, + func = function() + status_vars.current_second = math.min(status_vars.current_second + cfg_vars.forward_skip, status_vars.max_seconds) + end + }, + backward = { + x = backward_btn_coords.x, + y = backward_btn_coords.y, + func = function() + status_vars.current_second = math.max(status_vars.current_second - cfg_vars.backward_skip, 0) + end + }, + exit = { + x = exit_btn_coords.x, + y = exit_btn_coords.y, + func = function() + status_vars.is_playing = false + return + end + }, + minimise = { + x = minimise_btn_coords.x, + y = minimise_btn_coords.y, + func = function() + status_vars.is_minimised = not status_vars.is_minimised + end + }, + } + for k, v in pairs(btn_actions) do + if x == v.x and y == v.y then + v.func() + end + end + end + + return self +end + +local function key_to_func() +end \ No newline at end of file diff --git a/MusicPlayer/Server/audio_manager.lua b/MusicPlayer/Server/audio_manager.lua new file mode 100644 index 0000000..d23930b --- /dev/null +++ b/MusicPlayer/Server/audio_manager.lua @@ -0,0 +1,98 @@ +--[[ + Class to manage ComputerCraft (CC) audio tracks on different disks + + Written by Andrew_7_1 +]] + +local audio_manager = {} +audio_manager.init = function (dirs_file) + local self = {} + + -- Load audio directories from file where directories are seperated by newlines" + local function load_audio_dirs(file_location) + local audio_dirs = {} + local file = io.open(file_location, 'r') + if file then + for line in file:lines() do + table.insert(audio_dirs, line) + end + file:close() + end + return audio_dirs + end + local audio_dirs = load_audio_dirs(dirs_file or 'audio_dirs.txt') + + --[[ + Iterate over all audio directories and load all audio files into a catalogue. + Audio files have extensions of .dfpwm and rarely .wav + Save them to a table of tables like this: + { + ["filepath"] = absolute file path + ["length"] = file size / 6000 + ["title"] = file name without extension and path, e.g. "title.dfpwm" -> "title" + ["extension"] = file extension, e.g. "dfpwm" + } + ]] + local function load_audio_catalogue() + local audio_catalogue = {} + for _, dir in pairs(audio_dirs) do + for _, file in pairs(fs.list(dir)) do + if file:find('.dfpwm') or file:find('.wav') then + local file_path = dir .. '/' .. file + local file_size = fs.getSize(file_path) + local file_title = file:sub(1, #file - #file:match('.*%.(.*)$')) + local file_extension = file:match('.*%.(.*)$') + table.insert(audio_catalogue, { + ["filepath"] = file_path, + ["length"] = file_size / 6000, + ["title"] = file_title, + ["extension"] = file_extension + }) + end + end + end + return audio_catalogue + end + self.audio_catalogue = load_audio_catalogue() + + -- Update audio catalogue + function self.update_catalogue() + self.audio_catalogue = load_audio_catalogue() + end + + function self.get_catalogue() + return self.audio_catalogue + end + + + -- Get part of an audio file in the catalogue + function self.get_track_chunk(index, starting_second, length) + if index > #self.audio_catalogue then + return false + end + local track = self.audio_catalogue[index] + + local file = io.open(track.filepath, 'rb') + if not file then + return false + end + + file:seek('set', starting_second * 6000) + local chunk = file:read(length * 6000) + file:close() + + return chunk + end + + -- More convenient way to get track info than using entire catalogue + function self.get_track_details(index) + if index > #self.audio_catalogue then + return false + end + return self.audio_catalogue[index] + end + + return self +end + +return audio_manager \ No newline at end of file diff --git a/MusicPlayer/Server/logger.lua b/MusicPlayer/Server/logger.lua new file mode 100644 index 0000000..fec109c --- /dev/null +++ b/MusicPlayer/Server/logger.lua @@ -0,0 +1,60 @@ + + +local logger = {} +logger.init = function(monitor_wrap, scale) + local self = {} + + local monitor = monitor_wrap or peripheral.find("monitor") + if not monitor then + monitor = term + else monitor.setTextScale(scale or 0.5) + end + local log_colours = { + ['log'] = colours.white, + ['info'] = colours.lightBlue, + ['warn'] = colours.yellow, + ['err'] = colours.red, + ['success'] = colours.lime + } + + local function move_line() + monitor.setCursorPos(1, select(2, monitor.getCursorPos()) + 1) + if select(2, monitor.getCursorPos()) >= select(2, monitor.getSize()) then + monitor.scroll(1) + monitor.setCursorPos(1, select(2, monitor.getCursorPos()) - 1) + end + end + + local function write_msg(message, msg_colour) + local time_str = os.date('%Y-%b-%d %H:%M:%S') + local msg_formatted = "[" .. time_str .. "] " .. message + + monitor.setTextColour(msg_colour) + monitor.write(msg_formatted) + move_line() + end + + function self.log(msg) + write_msg(msg, log_colours['log']) + end + + function self.info(msg) + write_msg('INFO: ' .. msg, log_colours['info']) + end + + function self.warning(msg) + write_msg('WARNING: ' .. msg, log_colours['warn']) + end + + function self.error(msg) + write_msg('ERROR: ' .. msg, log_colours['err']) + end + + function self.success(msg) + write_msg('SUCCESS: ' .. msg, log_colours['success']) + end + + return self +end + +return logger \ No newline at end of file diff --git a/MusicPlayer/Server/server.lua b/MusicPlayer/Server/server.lua new file mode 100644 index 0000000..9e47d90 --- /dev/null +++ b/MusicPlayer/Server/server.lua @@ -0,0 +1,60 @@ +--[[ + Audio server for ComputerCraft (CC) + + Written by Andrew_7_1 +]] + +local server = {} +server.init = function (port, audio_dir) + local self = {} + + local logger = require('logger').init() + local audio_manager = require('audio_manager').init(audio_dir or 'audio_dirs.txt') + + local port = port or 7101 + local modem = peripheral.find('modem') + if not modem then error('No modem found') end + modem.open(port) + logger.info('Audio server started on port ' .. port .. ' with audio directories from ' .. audio_dir) + + local message_types = { + query = function (replyChannel, msg) + modem.transmit(replyChannel, port, {code = 200, audio_catalogue = audio_manager.get_catalogue()}) + logger.success('Query sent') + end, + refresh = function (replyChannel, msg) + audio_manager.update_catalogue() + modem.transmit(replyChannel, port, {code = 200}) + logger.success('Catalogue updated') + end, + + track_info = function (replyChannel, msg) + local track = audio_manager.get_track_details(msg.index) + if not track then + modem.transmit(replyChannel, port, {code = 404}) + logger.error('Track not found (id: ' .. msg.index .. ')') + else + modem.transmit(replyChannel, port, {code = 200, track = track}) + logger.success('Track details sent (id: ' .. msg.index .. ')') + end + end, + track_chunk = function (replyChannel, msg) + local track = audio_manager.get_track_chunk(msg.index, msg.starting_second, msg.length) + if not track then + modem.transmit(replyChannel, port, {code = 404}) + logger.error('Track not found (id: ' .. msg.index .. ')') + else + modem.transmit(replyChannel, port, {code = 200, track = track}) + logger.success('Part of a track sent (id: ' .. msg.index .. ', part:' .. msg.starting_second .. '-' .. msg.starting_second + msg.length .. ')') + end + end + } + + function self.process_transmission(event, side, channel, replyChannel, message, distance) + message_types[message.type](replyChannel, message) + end + + return self +end + +return server \ No newline at end of file diff --git a/MusicPlayer/Server/startup.lua b/MusicPlayer/Server/startup.lua new file mode 100644 index 0000000..d452422 --- /dev/null +++ b/MusicPlayer/Server/startup.lua @@ -0,0 +1,14 @@ +local config = { + port = 7101, + audio_dir = 'audio_dirs.txt' +} + +local server = require("server").init(config.port, config.audio_dir) +local modem = peripheral.find("modem") +if not modem then error("No modem found") end +modem.open(config.port) + +while true do + local event, side, channel, replyChannel, message, distance = os.pullEvent("modem_message") + server.process_transmission(event, side, channel, replyChannel, message, distance) +end \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..cf1e1af --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# CC Projects +Collection of all my ComputerCraft projects, as none of them are big or finished enough to warrant separate repositories. + +If you think that this is a disorganized mess then you are 100% correct. \ No newline at end of file diff --git a/RSS/feeds.lua b/RSS/feeds.lua new file mode 100644 index 0000000..3cdc405 --- /dev/null +++ b/RSS/feeds.lua @@ -0,0 +1,128 @@ +local FEEDS = { + feeds = {} +} + +local FEEDS_PATH = "./feeds" +local SLAXML = require('slaxml') +local LOG = require('log') + +-- Retrieve feeds from config files and prepare them for use +function FEEDS:Load() + self.feeds = {} + + local files = fs.find(FEEDS_PATH .. "/*.json") + for _, v in ipairs(files) do + local file = fs.open(v, "r") + local contents = file.readAll() + local feed = textutils.unserialiseJSON(contents) + + local response, err, _ = http.get(feed.link) + if response == nil then + LOG:Error("HTTP Error loading feed (" .. v .. "): " .. err) + else + local xml = response.readAll() + response.close() + local element + local in_item = false + local function startElement(name, nsURI, nsPrefix) + -- Track the current element name + element = name + if element == "item" then + in_item = true + end + end + local function text(text, cdata) + -- Store the text content based on the current element name + if element == 'title' and not feed.title then + feed.title = text + elseif in_item and not feed.last and element == 'guid' then + feed.last = text + end + end + local parser = SLAXML:parser{ + startElement = startElement, + text = text + } + parser:parse(xml) + + if feed.title_override then + feed.title = feed.title_override + end + + table.insert(self.feeds, feed) + LOG:Info("Loaded feed " .. feed.title) + end + end + if #self.feeds == 0 then + LOG:Info("No feeds loaded, nothing to do") + return true + end + return nil +end + +function FEEDS:ParseLatest() + local output = {} + for _, feed in ipairs(self.feeds) do + local response, err, _ = http.get(feed.link) + if response == nil then + LOG:Error("HTTP Error fetching feed: " .. err) + else + local xml = response.readAll() + response.close() + + local element + local new_last + local done = false + local current_item = { + colour = feed.colour, + source = feed.title + } + local in_item = false + local function startElement(name, nsURI, nsPrefix) + if done then return end + + -- Track the current element name + element = name + if element == "item" then + in_item = true + current_item = { + colour = feed.colour, + source = feed.title + } + end + end + local function closeElement(name, nsURI, nsPrefix) + if done then return end + + if name == 'item' and not done then + table.insert(output, current_item) + end + end + local function text(text, cdata) + if done or not in_item then return end + + -- Store the text content based on the current element name + if element == 'title' then + current_item.title = text + elseif in_item and element == 'guid' then + if not new_last then + new_last = text + end + if feed.last == text then + done = true + end + end + end + local parser = SLAXML:parser{ + startElement = startElement, + closeElement = closeElement, + text = text + } + parser:parse(xml) + feed.last = new_last + end + end + return output +end + +return FEEDS \ No newline at end of file diff --git a/RSS/feeds/nytimes.json b/RSS/feeds/nytimes.json new file mode 100644 index 0000000..b45184c --- /dev/null +++ b/RSS/feeds/nytimes.json @@ -0,0 +1,5 @@ +{ + "link": "https://rss.nytimes.com/services/xml/rss/nyt/Technology.xml", + "title_override": "NYT", + "colour": "9" +} \ No newline at end of file diff --git a/RSS/feeds/tass.json b/RSS/feeds/tass.json new file mode 100644 index 0000000..f0ef522 --- /dev/null +++ b/RSS/feeds/tass.json @@ -0,0 +1,5 @@ +{ + "link": "https://tass.ru/rss/v2.xml", + "title_override": "TACC", + "colour": "b" +} \ No newline at end of file diff --git a/RSS/feeds/youtube_generic.json b/RSS/feeds/youtube_generic.json new file mode 100644 index 0000000..1a2f4b7 --- /dev/null +++ b/RSS/feeds/youtube_generic.json @@ -0,0 +1,5 @@ +{ + "link": "https://www.youtube.com/@tag", + "title_override": "Youtuber name", + "colour": "e" +} \ No newline at end of file diff --git a/RSS/graphics.lua b/RSS/graphics.lua new file mode 100644 index 0000000..1f4279d --- /dev/null +++ b/RSS/graphics.lua @@ -0,0 +1,71 @@ +local GRAPHICS = { + target = nil, + contents = {} +} + +local LOG = require('log') + +-- Set target's colorscheme to gruvbox for better visuals +function GRAPHICS:SetColours() + if self.target == nil then + return + end + self.target.setPaletteColour(colours.red, 0xfb4934) + self.target.setPaletteColour(colours.blue, 0x83a598) + self.target.setPaletteColour(colours.green, 0xb8bb26) + self.target.setPaletteColour(colours.purple, 0xd3869b) + self.target.setPaletteColour(colours.cyan, 0x8ec07c) + self.target.setPaletteColour(colours.white, 0xf9f5d7) + self.target.setPaletteColour(colours.black, 0x1d2021) +end + +-- Set target output for our graphics +function GRAPHICS:SetTarget(target) + self.target = target + if self.target == nil then + LOG:Error("Nil display target, items will not display") + end + target.clear() + target.setTextScale(0.5) + self:Refresh(true) +end + +function GRAPHICS:Refresh(full) + if self.target == nil then + return + end + local _, y = self.target.getSize() + while #self.contents > y do + table.remove(self.contents, 1) + end + + if full then + self.target.scroll(#self.contents) + for k, entry in ipairs(self.contents) do + self.target.setCursorPos(1, y - k + 1) + local output = "[" .. entry.source .. "] " .. entry.title + local fg_blit = "0" .. (entry.colour):rep(#entry.source) .. ("0"):rep(#entry.title + 2) + self.target.blit(output, fg_blit, ("f"):rep(#output)) + end + else + self.target.scroll(1) + self.target.setCursorPos(1, y) + local entry = self.contents[#self.contents] + local output = "[" .. entry.source .. "] " .. entry.title + local fg_blit = "0" .. (entry.colour):rep(#entry.source) .. ("0"):rep(#entry.title + 2) + self.target.blit(output, fg_blit, ("f"):rep(#output)) + end +end + +function GRAPHICS:AddEntry(entry) + table.insert(self.contents, entry) + self:Refresh() +end + +function GRAPHICS:Add(entries) + for _, entry in ipairs(entries) do + self:AddEntry(entry) + end +end + +return GRAPHICS \ No newline at end of file diff --git a/RSS/log.lua b/RSS/log.lua new file mode 100644 index 0000000..981e24a --- /dev/null +++ b/RSS/log.lua @@ -0,0 +1,98 @@ +local LOG = { + target = term, + history = {}, + history_cutoff = 50, + log_path = "./logs/", + debug = false +} + +-- Set target's colorscheme to gruvbox for better visuals +function LOG:SetColours() + self.target.setPaletteColour(colours.red, 0xfb4934) + self.target.setPaletteColour(colours.blue, 0x83a598) + self.target.setPaletteColour(colours.green, 0xb8bb26) + self.target.setPaletteColour(colours.purple, 0xd3869b) + self.target.setPaletteColour(colours.cyan, 0x8ec07c) + self.target.setPaletteColour(colours.white, 0xf9f5d7) + self.target.setPaletteColour(colours.black, 0x1d2021) +end + +-- Set target output for our log +function LOG:SetTarget(target) + self.target = target + target.clear() + target.setTextScale(0.5) +end + +function LOG:SetDebug(value) + self.debug = value +end + +-- Utility function to output some kind of log message +local function genericLog(log, level, message, col) + if #level ~= 4 or #col ~= 1 then + LOG:Error("Incorrect generic log format") + return + end + + local target = log.target + target.scroll(1) + local _, y = target.getSize() + target.setCursorPos(1, y) + + local time = os.date("%T", os.epoch("local") / 1000) + local output = "[" .. time .. "|" .. level .. "] " .. message + local fg_blit = ("0"):rep(#time + 2) .. (col):rep(4) .. ("0"):rep(#message + 2) + target.blit(output, fg_blit, ("f"):rep(#output)) + + table.insert(log.history, output) + if #log.history > log.history_cutoff then + table.remove(log.history, 1) + end +end + +function LOG:Info(message) + genericLog(self, "INFO", message, "b") +end + +function LOG:Success(message) + genericLog(self, "SCCS", message, "d") +end + +function LOG:Debug(message) + if not self.debug then return end + genericLog(self, "DBUG", message, "8") +end + +function LOG:Warning(message) + genericLog(self, "WARN", message, "4") +end + +function LOG:Error(message) + genericLog(self, "ERRO", message, "e") +end + +function LOG:Critical(message) + genericLog(self, "CRIT", message, "e") + self:Dump() + error("critical exception occured, read above") +end + +function LOG:Clear() + self.history = {} +end + +-- Put all recent log messages into a file for later study +function LOG:Dump() + local out = "" + for _, v in ipairs(self.history) do + out = out + v .. "\n" + end + local time = os.date("%F-%T", os.epoch("local") / 1000) + local file = fs.open(string.format("%s/dump_%s.log", self.log_path, time), "w") + file.write(out) + file.close() + return out +end + +return LOG \ No newline at end of file diff --git a/RSS/main.lua b/RSS/main.lua new file mode 100644 index 0000000..650641d --- /dev/null +++ b/RSS/main.lua @@ -0,0 +1,28 @@ +local LOG = require('log') +local GRAPHICS = require('graphics') +local FEEDS = require('feeds') + +local REFRESH_INTERVAL = 8 +local DEBUG = true +local MONITOR = assert(peripheral.find('monitor'), "No monitor detected") + +local function main() + LOG:Info("RSS System init") + LOG:SetDebug(DEBUG) + LOG:SetTarget(term) + LOG:SetColours() + GRAPHICS:SetTarget(MONITOR) + GRAPHICS:SetColours() + local err = FEEDS:Load() + if err ~= nil then + return + end + LOG:Success("System fully loaded, beginning RSS processing") + + while true do + GRAPHICS:Add(FEEDS:ParseLatest()) + sleep(REFRESH_INTERVAL) + end +end + +main() \ No newline at end of file diff --git a/RSS/slaxml.lua b/RSS/slaxml.lua new file mode 100644 index 0000000..98e9819 --- /dev/null +++ b/RSS/slaxml.lua @@ -0,0 +1,259 @@ +--[=====================================================================[ +v0.8 Copyright © 2013-2018 Gavin Kistner ; MIT Licensed +See http://github.com/Phrogz/SLAXML for details. +--]=====================================================================] +local SLAXML = { + VERSION = "0.8", + _call = { + pi = function(target,content) + print(string.format("",target,content)) + end, + comment = function(content) + print(string.format("",content)) + end, + startElement = function(name,nsURI,nsPrefix) + io.write("<") + if nsPrefix then io.write(nsPrefix,":") end + io.write(name) + if nsURI then io.write(" (ns='",nsURI,"')") end + print(">") + end, + attribute = function(name,value,nsURI,nsPrefix) + io.write(' ') + if nsPrefix then io.write(nsPrefix,":") end + io.write(name,'=',string.format('%q',value)) + if nsURI then io.write(" (ns='",nsURI,"')") end + io.write("\n") + end, + text = function(text,cdata) + print(string.format(" %s: %q",cdata and 'cdata' or 'text',text)) + end, + closeElement = function(name,nsURI,nsPrefix) + io.write("") + end, + } +} + +function SLAXML:parser(callbacks) + return { _call=callbacks or self._call, parse=SLAXML.parse } +end + +function SLAXML:parse(xml,options) + if not options then options = { stripWhitespace=false } end + + -- Cache references for maximum speed + local find, sub, gsub, char, push, pop, concat = string.find, string.sub, string.gsub, string.char, table.insert, table.remove, table.concat + local first, last, match1, match2, match3, pos2, nsURI + local unpack = unpack or table.unpack + local pos = 1 + local state = "text" + local textStart = 1 + local currentElement={} + local currentAttributes={} + local currentAttributeCt -- manually track length since the table is re-used + local nsStack = {} + local anyElement = false + + local utf8markers = { {0x7FF,192}, {0xFFFF,224}, {0x1FFFFF,240} } + local function utf8(decimal) -- convert unicode code point to utf-8 encoded character string + if decimal<128 then return char(decimal) end + local charbytes = {} + for bytes,vals in ipairs(utf8markers) do + if decimal<=vals[1] then + for b=bytes+1,2,-1 do + local mod = decimal%64 + decimal = (decimal-mod)/64 + charbytes[b] = char(128+mod) + end + charbytes[1] = char(vals[2]+decimal) + return concat(charbytes) + end + end + end + local entityMap = { ["lt"]="<", ["gt"]=">", ["amp"]="&", ["quot"]='"', ["apos"]="'" } + local entitySwap = function(orig,n,s) return entityMap[s] or n=="#" and utf8(tonumber('0'..s)) or orig end + local function unescape(str) return gsub( str, '(&(#?)([%d%a]+);)', entitySwap ) end + + local function finishText() + if first>textStart and self._call.text then + local text = sub(xml,textStart,first-1) + if options.stripWhitespace then + text = gsub(text,'^%s+','') + text = gsub(text,'%s+$','') + if #text==0 then text=nil end + end + if text then self._call.text(unescape(text),false) end + end + end + + local function findPI() + first, last, match1, match2 = find( xml, '^<%?([:%a_][:%w_.-]*) ?(.-)%?>', pos ) + if first then + finishText() + if self._call.pi then self._call.pi(match1,match2) end + pos = last+1 + textStart = pos + return true + end + end + + local function findComment() + first, last, match1 = find( xml, '^', pos ) + if first then + finishText() + if self._call.comment then self._call.comment(match1) end + pos = last+1 + textStart = pos + return true + end + end + + local function nsForPrefix(prefix) + if prefix=='xml' then return 'http://www.w3.org/XML/1998/namespace' end -- http://www.w3.org/TR/xml-names/#ns-decl + for i=#nsStack,1,-1 do if nsStack[i][prefix] then return nsStack[i][prefix] end end + error(("Cannot find namespace for prefix %s"):format(prefix)) + end + + local function startElement() + anyElement = true + first, last, match1 = find( xml, '^<([%a_][%w_.-]*)', pos ) + if first then + currentElement[2] = nil -- reset the nsURI, since this table is re-used + currentElement[3] = nil -- reset the nsPrefix, since this table is re-used + finishText() + pos = last+1 + first,last,match2 = find(xml, '^:([%a_][%w_.-]*)', pos ) + if first then + currentElement[1] = match2 + currentElement[3] = match1 -- Save the prefix for later resolution + match1 = match2 + pos = last+1 + else + currentElement[1] = match1 + for i=#nsStack,1,-1 do if nsStack[i]['!'] then currentElement[2] = nsStack[i]['!']; break end end + end + currentAttributeCt = 0 + push(nsStack,{}) + return true + end + end + + local function findAttribute() + first, last, match1 = find( xml, '^%s+([:%a_][:%w_.-]*)%s*=%s*', pos ) + if first then + pos2 = last+1 + first, last, match2 = find( xml, '^"([^<"]*)"', pos2 ) -- FIXME: disallow non-entity ampersands + if first then + pos = last+1 + match2 = unescape(match2) + else + first, last, match2 = find( xml, "^'([^<']*)'", pos2 ) -- FIXME: disallow non-entity ampersands + if first then + pos = last+1 + match2 = unescape(match2) + end + end + end + if match1 and match2 then + local currentAttribute = {match1,match2} + local prefix,name = string.match(match1,'^([^:]+):([^:]+)$') + if prefix then + if prefix=='xmlns' then + nsStack[#nsStack][name] = match2 + else + currentAttribute[1] = name + currentAttribute[4] = prefix + end + else + if match1=='xmlns' then + nsStack[#nsStack]['!'] = match2 + currentElement[2] = match2 + end + end + currentAttributeCt = currentAttributeCt + 1 + currentAttributes[currentAttributeCt] = currentAttribute + return true + end + end + + local function findCDATA() + first, last, match1 = find( xml, '^', pos ) + if first then + finishText() + if self._call.text then self._call.text(match1,true) end + pos = last+1 + textStart = pos + return true + end + end + + local function closeElement() + first, last, match1 = find( xml, '^%s*(/?)>', pos ) + if first then + state = "text" + pos = last+1 + textStart = pos + + -- Resolve namespace prefixes AFTER all new/redefined prefixes have been parsed + if currentElement[3] then currentElement[2] = nsForPrefix(currentElement[3]) end + if self._call.startElement then self._call.startElement(unpack(currentElement)) end + if self._call.attribute then + for i=1,currentAttributeCt do + if currentAttributes[i][4] then currentAttributes[i][3] = nsForPrefix(currentAttributes[i][4]) end + self._call.attribute(unpack(currentAttributes[i])) + end + end + + if match1=="/" then + pop(nsStack) + if self._call.closeElement then self._call.closeElement(unpack(currentElement)) end + end + return true + end + end + + local function findElementClose() + first, last, match1, match2 = find( xml, '^', pos ) + if first then + nsURI = nil + for i=#nsStack,1,-1 do if nsStack[i]['!'] then nsURI = nsStack[i]['!']; break end end + else + first, last, match2, match1 = find( xml, '^', pos ) + if first then nsURI = nsForPrefix(match2) end + end + if first then + finishText() + if self._call.closeElement then self._call.closeElement(match1,nsURI) end + pos = last+1 + textStart = pos + pop(nsStack) + return true + end + end + + while pos<#xml do + if state=="text" then + if not (findPI() or findComment() or findCDATA() or findElementClose()) then + if startElement() then + state = "attributes" + else + first, last = find( xml, '^[^<]+', pos ) + pos = (first and last or pos) + 1 + end + end + elseif state=="attributes" then + if not findAttribute() then + if not closeElement() then + error("Was in an element and couldn't find attributes or the close.") + end + end + end + end + + if not anyElement then error("Parsing did not discover any elements") end + if #nsStack > 0 then error("Parsing ended with unclosed elements") end +end + +return SLAXML diff --git a/RSS/todo.txt b/RSS/todo.txt new file mode 100644 index 0000000..eabac24 --- /dev/null +++ b/RSS/todo.txt @@ -0,0 +1,3 @@ +* Add test file that checks entire system/functions before startup? or at least improve error checking +* Enhance customisation per-feed e.g. define 14 colours and set which color each char in feed title is +* Pre-Processing for russian language \ No newline at end of file diff --git a/TARDIM/NavDash.lua b/TARDIM/NavDash.lua new file mode 100644 index 0000000..dd0dabd --- /dev/null +++ b/TARDIM/NavDash.lua @@ -0,0 +1,96 @@ +local tardim = peripheral.find("digital_tardim_interface") +local screen = peripheral.find("monitor") + +screen.clear() +screen.setCursorBlink(false) +screen.setTextScale(0.5) + +-- 15x24 +--[[ +~ Current pos + X + Y + Z + Dimension + Facing +~ Destination + X + Y + Z + Dimension + Facing +~ Fuel + Remaining + Required +]] + +-- This changes the colors to be like the gruvbox theme +local function set_colorscheme(screen) + screen.setPaletteColour(colours.red, 0xfb4934) + screen.setPaletteColour(colours.blue, 0x83a598) + screen.setPaletteColour(colours.green, 0xb8bb26) + screen.setPaletteColour(colours.purple, 0xd3869b) + screen.setPaletteColour(colours.cyan, 0x8ec07c) + + screen.setPaletteColour(colours.white, 0xf9f5d7) + screen.setPaletteColour(colours.black, 0x1d2021) +end + +local function dim_char(dimension_str) + + if dimension_str == "minecraft:overworld" then + return "OWR" + elseif dimension_str == "minecraft:the_nether" then + return "NETH" + elseif dimension_str == "minecraft:the_end" then + return "END" + else + return "???" + end + +end + +local function drawPos(screen, pos, screen_y) + screen.setCursorPos(1, screen_y) + screen.blit("X: " .. pos.pos.x, "e" .. string.rep("0", #tostring(pos.pos.x) + 2), string.rep("f", #tostring(pos.pos.x) + 3)) + screen.setCursorPos(1, screen_y + 1) + screen.blit("Y: " .. pos.pos.y, "d" .. string.rep("0", #tostring(pos.pos.y) + 2), string.rep("f", #tostring(pos.pos.y) + 3)) + screen.setCursorPos(1, screen_y + 2) + screen.blit("Z: " .. pos.pos.z, "b" .. string.rep("0", #tostring(pos.pos.z) + 2), string.rep("f", #tostring(pos.pos.z) + 3)) + screen.setCursorPos(1, screen_y + 3) + screen.write("Dimension: " .. dim_char(pos.dimension), "00000000000111", "ffffffffffffff") + screen.setCursorPos(1, screen_y + 4) + screen.write("Facing: " .. pos.facing) +end + +set_colorscheme(screen) +screen.setCursorPos(1, 1) +screen.blit("> TARDIM NAV", "009999990999", "ffffffffffff") + +while true do + screen.setCursorPos(1, 3) + + local pos = tardim.getCurrentLocation() + screen.write("> Current pos") + drawPos(screen, pos, 4) + + local dest = tardim.getTravelLocation() + screen.setCursorPos(1, 10) + screen.write("> Destination") + drawPos(screen, dest, 11) + + local fuel = tardim.getFuel() + screen.setCursorPos(1, 17) + screen.write("> Fuel") + screen.setCursorPos(1, 18) + screen.write("REM.: " .. fuel .. "/100") + screen.setCursorPos(1, 19) + local Required = tardim.calculateFuelForJourney() + screen.write("REQ.: " .. Required) + screen.setCursorPos(1, 20) + screen.blit("ENOUGH: " .. (fuel >= Required and "YES" or "NO "), "00000000" .. (fuel >= Required and "ddd" or "eee"), "ffffffff" .. (fuel >= Required and "fff" or "fff")) + + local inFlight = tardim.isInFlight() + screen.setCursorPos(1, 22) + screen.blit("IN FLIGHT: " .. (inFlight and "YES" or "NO "), "00000000000" .. (inFlight and "ddd" or "eef"), "fffffffffff" .. (inFlight and "fff" or "fff")) +end \ No newline at end of file diff --git a/TARDIM/NavDashTwo.lua b/TARDIM/NavDashTwo.lua new file mode 100644 index 0000000..420da18 --- /dev/null +++ b/TARDIM/NavDashTwo.lua @@ -0,0 +1,85 @@ +local tardim = peripheral.find("digital_tardim_interface") +local screen = peripheral.find("monitor") + + +-- This changes the colors to be like the gruvbox theme +local function SetColourscheme(screen, scheme) + local schemes = { + gruvbox = { + red = 0xfb4934, + blue = 0x83a598, + green = 0xb8bb26, + purple = 0xd3869b, + cyan = 0x8ec07c, + white = 0xf9f5d7, + black = 0x1d2021 + }, + starfield = { + red = 0xc72138, + blue = 0x304c7a, + yellow = 0xd7a64b, + white = 0xf4f5f7, + orange = 0xe06236, + black = 0x121212 + } + } + + for i, _ in pairs(schemes[scheme]) do + screen.setPaletteColour(colours[i], schemes[scheme][i]) + end +end + +local function DrawStripes(screen) + local stripes = { + [1] = 'b', + [2] = '4', + [3] = '1', + [4] = 'e' + } + local _, y = screen.getSize() + for h=1,y do + for w=1,4 do + screen.setCursorPos(w, h) + screen.blit(' ', '0', stripes[w]) + end + end +end + +local function DrawFuel(screen, fuel) + local bar_colours = { + [75] = 'd', -- green + [60] = '4', -- orange + [30] = '1', -- yellow + [1] = 'e' -- red + } + fuel = math.floor(fuel) + local col = bar_colours[1] + for i, _ in pairs(bar_colours) do + if fuel > i then + col = bar_colours[i] + break + end + end + + local x, y = screen.getSize() + + screen.setCursorPos(8, y - 2) + screen.write('FUEL - ' .. tostring(fuel)) + screen.setCursorPos(8, y - 1) + screen.blit(string.rep(' ', x - 16), string.rep('8', x - 16), string.rep('8', x - 16)) + screen.setCursorPos(8, y - 1) + screen.blit(string.rep(' ', x - 25), string.rep('8', x - 25), string.rep(col, x - 25)) +end + +SetColourscheme(screen, 'starfield') +screen.setCursorBlink(false) +screen.setTextScale(0.5) +screen.setTextColour(colours.black) +screen.setBackgroundColour(colours.white) +screen.clear() +DrawStripes(screen) + +screen.setCursorPos(10, 5) +screen.write("Hello Universe!") + +DrawFuel(screen, tardim.getFuel()) \ No newline at end of file diff --git a/TUI71/TUI71-time.lua b/TUI71/TUI71-time.lua new file mode 100644 index 0000000..3ac6519 --- /dev/null +++ b/TUI71/TUI71-time.lua @@ -0,0 +1,148 @@ +--[[ + Time module for TUI71 + + by Andrew-7-1 + MIT License +]] + +local time_api = {} + +-- ASCII-art digits for bigger numbers +local ascii_digits = { + { + " 0000 ", + "00 00", + "00 00", + "00 00", + " 0000 " + }, + { + "1111 ", + " 11 ", + " 11 ", + " 11 ", + "111111" + }, + { + " 2222 ", + "22 22", + " 22 ", + " 22 ", + "222222", + }, + { + " 3333 ", + "33 33", + " 333", + "33 33", + " 3333 ", + }, + { + "44 44", + "44 44", + "444444", + " 44", + " 44" + }, + { + "555555", + "55 ", + "55555 ", + " 55", + "55555 " + }, + { + " 6666 ", + "66 ", + "66666 ", + "66 66", + " 6666 " + }, + { + "777777", + " 77 ", + " 77 ", + " 77 ", + "77 " + }, + { + " 8888 ", + "88 88", + " 8888 ", + "88 88", + " 8888 " + }, + { + " 9999 ", + "99 99", + " 99999", + " 99", + " 9999 " + } +} +-- Seperator for time e.g. "22:01" +local seperator = { + " ", + " # ", + " ", + " # ", + " ", +} + + +-- Draw a big digit +function time_api.draw_digit(number, x, y, monitor, colour) + local digit = ascii_digits[number] + monitor.setCursorPos(x, y) + monitor.setTextColor(colour) + for i = 1, 5 do + monitor.write(digit[i]) + monitor.setCursorPos(x, y + i) + end +end + + +-- Draw a big ascii-art clock type HH:MM. +function time_api.draw_time(x, y, monitor) + -- Get the current time + local h, m = tostring(os.date("%H")), tostring(os.date("%M")) + local h1, h2 = tonumber(string.sub(h, 1, 1)), tonumber(string.sub(h, 2, 2)) + local m1, m2 = tonumber(string.sub(m, 1, 1)), tonumber(string.sub(m, 2, 2)) + + local s = os.date("%S") + + monitor.setCursorPos(x, y) -- Set cursor position + + -- Draw digits layer by layer + for i = 1, 5 do + monitor.setCursorPos(x, select(2, monitor.getCursorPos()) + 1) + monitor.write(ascii_digits[h1 + 1][i] .. " " .. ascii_digits[h2 + 1][i] .. seperator[i] .. ascii_digits[m1 + 1][i] .. " " .. ascii_digits[m2 + 1][i]) + end + end + +local function draw_timezone(x, y, tz_name, utc_offset, tz_monitor) + --[[ + /SYD\ + |22:34| + \_ _/ + ]] + if #tz_name ~= 3 then error("Invalid timezone name (not 3 letters)") end + local utc = os.date("!*t") + local tz_hour = utc.hour + utc_offset + if tz_hour > 23 then + tz_hour = -24 + tz_hour end + + local day_part = { + ["day"] = "☼", + ["night"] = "☾" + } + local tz_symbol + if (tz_hour > 20 or tz_hour < 7) then tz_symbol = day_part["night"] else tz_symbol = day_part["day"] end + + tz_monitor.setCursorPos(x, y) + tz_monitor.blit(" /" .. tz_name .. "\\", "f04440", "ffffff") + tz_monitor.setCursorPos(x, y + 1) + tz_monitor.write("|" .. tostring(utc.hour + utc_offset) .. ":" .. tostring(utc.min) .. "|") + tz_monitor.setCursorPos(x, y + 2) + tz_monitor.blit(" \\_" .. tz_symbol .. "_/ ", "f00400f", "fffffff") +end \ No newline at end of file diff --git a/TUI71/TUI71.lua b/TUI71/TUI71.lua new file mode 100644 index 0000000..6114df9 --- /dev/null +++ b/TUI71/TUI71.lua @@ -0,0 +1,9 @@ +--[[ + TUI-71 - An overly simple graphics library for CC computers. + + by Andrew-7-1 + MIT License +]] + +local api = {} + diff --git a/apricot/README.md b/apricot/README.md new file mode 100644 index 0000000..b827ea1 --- /dev/null +++ b/apricot/README.md @@ -0,0 +1,3 @@ +If this ever gets worked on again, this was intended to log **all** messages on **all** possible channels, reverse tria- wait no there's a different word for this. Basically global spy monitoring station + +If you're wondering why it's named apricot, I literally had no idea and randomly thought about throwing apricots at people in Hitman 3. **Yes.** \ No newline at end of file diff --git a/apricot/node/logger.lua b/apricot/node/logger.lua new file mode 100644 index 0000000..599a615 --- /dev/null +++ b/apricot/node/logger.lua @@ -0,0 +1,58 @@ +local logger = {} +logger.init = function(monitor_wrap, scale) + local self = {} + + local monitor = monitor_wrap or peripheral.find("monitor") + if not monitor then + monitor = term + else monitor.setTextScale(scale or 0.5) + end + local log_colours = { + ['log'] = colours.white, + ['info'] = colours.lightBlue, + ['warn'] = colours.yellow, + ['err'] = colours.red, + ['success'] = colours.lime + } + + local function move_line() + monitor.setCursorPos(1, select(2, monitor.getCursorPos()) + 1) + if select(2, monitor.getCursorPos()) >= select(2, monitor.getSize()) then + monitor.scroll(1) + monitor.setCursorPos(1, select(2, monitor.getCursorPos()) - 1) + end + end + + local function write_msg(message, msg_colour) + local time_str = os.date('%Y-%b-%d %H:%M:%S') + local msg_formatted = "[" .. time_str .. "] " .. message + + monitor.setTextColour(msg_colour) + monitor.write(msg_formatted) + move_line() + end + + function self.log(msg) + write_msg(msg, log_colours['log']) + end + + function self.info(msg) + write_msg('INFO: ' .. msg, log_colours['info']) + end + + function self.warning(msg) + write_msg('WARNING: ' .. msg, log_colours['warn']) + end + + function self.error(msg) + write_msg('ERROR: ' .. msg, log_colours['err']) + end + + function self.success(msg) + write_msg('SUCCESS: ' .. msg, log_colours['success']) + end + + return self +end + +return logger \ No newline at end of file diff --git a/apricot/node/modems.lua b/apricot/node/modems.lua new file mode 100644 index 0000000..410d376 --- /dev/null +++ b/apricot/node/modems.lua @@ -0,0 +1,19 @@ + +local modems = {peripheral.find("modem")} +local logger = require('logger').init() + +logger.info("Powering up!") +for modem_i, modem in pairs(modems) do + modem.closeAll() + modem.open(1) + -- for i = (128 * (modem_i - 1)),((128 * modem_i) - 1) do + -- modem.open(i) + -- end + logger.success("Modem " .. modem_i .. " opened ports " .. (128 * (modem_i - 1)) .. " - " .. ((128 * modem_i) - 1)) +end + +local event, side, channel, replyChannel, message, distance +while true do + event, side, channel, replyChannel, message, distance = os.pullEvent("modem_message") + logger.info(channel .. " " .. replyChannel .. " " .. tostring(message) .. " " .. distance ) +end \ No newline at end of file diff --git a/apricot/scripts/receiver.lua b/apricot/scripts/receiver.lua new file mode 100644 index 0000000..5d04258 --- /dev/null +++ b/apricot/scripts/receiver.lua @@ -0,0 +1,12 @@ +local modem = peripheral.find("modem") or error("No modem attached", 0) +local logger = require('logger').init() + +for i = 1,125 do + modem.open(i) +end + +local event, side, channel, replyChannel, message, distance +while true do + event, side, channel, replyChannel, message, distance = os.pullEvent("modem_message") + logger.info(channel .. " " .. replyChannel .. " " .. tostring(message) .. " " .. distance ) +end \ No newline at end of file diff --git a/apricot/scripts/sender.lua b/apricot/scripts/sender.lua new file mode 100644 index 0000000..51dde7e --- /dev/null +++ b/apricot/scripts/sender.lua @@ -0,0 +1,6 @@ + +local modem = peripheral.find("modem") or error("No modem attached", 0) + +modem.transmit(15, 43, "Hello, world!") +modem.transmit(25, 2, {message=1}) +modem.transmit(1, 1, "What if I put you in an infinite loop?") diff --git a/char_reference.png b/char_reference.png new file mode 100644 index 0000000000000000000000000000000000000000..391908ed2444e86e7e47a76f3f30713d3e2395aa GIT binary patch literal 176216 zcmV(tLF~SXP)SbLe&(L8ByPI*S(cT1|Lvrl8$!LVnThx0=A-D(#Q;+Z?=Go^uSv!(2eZh~{81e8V#Ld_Js+F9sp=dq7r0a|e$8!6Pbi^)i{Y>cDE z(uij*Qdn%3xko6o4j)3cpQNp%hl*Gy!nnqgppn8?qlDU4vT1HM?b=1aU6=*gW(y6? z?msKqb=+fUFSN6nO317BwEb!66PojmRQ>}Nldp`oF=&)@(4_se$MZCBUM{rBH5*IaXr zv#ovh*+-UIYN=e~2~{st{UX}G`R1GD_S6J@im#oxAS3OK!N~2IqGN9(bTEvdAJCN8X;$^Lp4} zhe>B=Z`BHnP;9k>a+FNUtf0EVF%}0r0grNyi)i1vdbZo!91W62$b!-wJFVfF8vIdkOYmtU^?e%7p6sto@hv3@R*EjNa ze}8}KF@&HE{j%Xl!Cn)M5;A*xd%a_GZH6}9c;k&x^_ept8m(b|?X}m`*p^#vxkCGa zuhNf?FPeDkt+$-??(XjP)|owfws($PJZWKvp4X(CH}95BzZF+p(OVvY+ePmr!g?c- z^?gbs^yv3{vBegP9SeJ;DU4|>z4X#vVT-wR?UOELm9O6@WD)RqN6j&s-EH?UuMd3K%gcH<>8tu?8 ze({UCI%uW8{q1kdxN+lDSr`8P_rJ?kS6w9&CQOiHk3BY3|9Q&hsh4-dhLJw@*kh`l zk9_1K&PjwGx7>1zddZeqW*PM|+;`u7iji!#*=EkMJpTCOGGoRJRo-_}M5{$xoWxu& za4QSWdE0&c_1EQ*M;?)mjt;eEHIitLVaWge?|;?rAO7%%)j{Up|NeJm9m?E&_ucAN zV6C;*3Pu;!4h#y0U_OTn|NGznlqMHpFG_n53XBQuJ`B?yn|^+H#y|e?4_S24MU@s; zg9CxS8DI_by~fHbuN+H1v?tF!_nc~T`t<36pR94X=bn4iJ8Ej+T|hYjj{sSHMs8dmMF0v+>V= z{!^`2n|?M=MTmgs0(iixtFBtt7Bpmz;K^&Ov4*oh#t1)gy~nL$E|Ns(Va>31-hA`T z*!Eb1GiT0}4}IuEBg#4xOWVj{Mc3iBz@>%d-QyiZK=<90 zWfAab%RJCBk68q|IK2J#+lqGZ;>|bT+*yY2p%;4}v|?Z6PyFCKm6ej>goewf|r7;6*j9q_uSJtCJrDl53ag> z!qRouU8hcFyd-%9s#eu5M}dLk)Ro$t!AN`pv>rbnBu=xaN4wIK(ez{DVG^woxXoO~;sZkVouMx2R@BjWUvK+#M zZvTiQj&L5<5i;Q22;)8h8dDx_zCQl(kJr7&K7QFO!8&R@2w1GYB*6Rt1pvx96iPNw zPMmetS?YI$Z1&Or{O3P%bxkN$7_&@Q9PsnFK`&nlh)*^?PZMNA)3D77m;K}f9%sX5-{q)n-{K2>R zagB`wJ;FFts z_17z513>{>XQ^q7>^>S{M&Rm$&mMjBQDx6+0>P)qE5gv=K#8#Tr7wL+{mtgqs@Qhh zZIxz`0}^(#QnQ0k`Yy-eQ=j^j5?)>NY61F~{d2>}}I(N%`BQQJ32I zeSAJ?`%>c#N%@gEFIjjP^|h&li~ezSL%=tWX=&|Ri-`@aLOl!{3)h5VEYi^Zw3Fa$ zw}m4EKWPB7=9Jy;!gDj63elGF!gOqw1kDigFato-2oR2=1ZWgP`aNU55ft(Of!uy?i$az;Dq=o39P;zaU;a`ae)!>0 z--QsQ;qOsAK1w)kRFV{K9DF9N9Ol^P^R$oF{M1uVP1VMJ`|UTXjWj@GfB4~ttKYx& zwXexnzxvhGZG?bp9#P`{^rt^{mdBahG>5g@icRHhcbxTm4Qxy~O>@1?wE%)NS6ET) zaD_ry?Cp}EQ4GD20wbC?+i)M-AT-t5ZpYOQHlHRC%F&LRjv016Z0LG=dYsN1?P!*f zrhT+}HqE4VIN|!p1lLM?SQA~o$kYhK%ox`5eO zlp~>jFI-paS<$SupQV5Jh)Y`szm8LmXqvOA8eUJ_sjms-Wwu%kqK;!>7TvD7m)%pHr5vVbd&?I3qCC@ z8rWx^d1lmSm>(f~*`{vhoMX0VI$g518Mlt~g`CF^W7f|DUvUYtzO{tBqU*B0L){4I zHlQK$r3)x1ILuJSWiPMCoH+_dT873I7!DI`pg0d=!}OQG{3Wt2G<*CcLDYC!O+%Wd z9bPO#^_ak(5j(D^cI-OX!^T~GW5SSUtWjtMAvp?Mm%2{=ANarr)Ct^dA15KqH@@?o z@5I`{`M@FNkV6iMEYt1+vkjQw_rL%B5j(gvV6*ep!DgNCU{OGu;L|9$ke3FwEnq8v zgSbgUHiy$rJ8e`MLK{lWJn6XOj&rty)+S02gg?1#t``O*ISdhg)CEkZw5gX1Z0ve| zD2EnI+dxMF`}J0VO`DGMF{cV{qA?2&k!PxGdv7A$_2~@@#EmI;tTaDS)*{I*<3h1V?54;uz{sD zPslTtRulfRw1Z~I_U1+qL5Ra)#5^5wC4otS)MDe>?G!!MBHL+J`$hNBY|Wa9RvJqh zw9>887{=g3GkhbOjSyPH5MyYB&38!QF70NjsK>#U7Yb7@7zZ*jEw^9xqx`fJR&K=Rf~h{Z2H4JpJZHy9my@9U@`a zbe7t6toF=CGhklr{r>mAS66yAlElev=H|)G4;n_ysw4ozOABtHe3~9S#Bq?bfk}j| zEzo1eMw<3`SGW}z!|3&eEjC{CT(AE4$3Grb#-4ZVPr3EN*4iv<0^Y;*xf$gpG@31R zX1O6q53mEYF2@(B%k*4fQ3LT;i;Q zb1xCGx#@XnaHQYBa=z31@qQPDwCg?X?FaiG@0|;n(NFNS_Ou!l+7XWB7_KuBj9 zZCe!e%qC-{4niCM`s(QKnFk-EFw10hf(a>zHB$47Rv)`M8))^3(jmqR32mUW?)&bHwwL3|lOMk4yO8}S0ZiMbHEW)C9lKd*Yp+r0 z_*cIVK0c9^ZzmP*=wB-~bYDr@bB!|!yuYkP_-)jhGut5!wB8FbK}?d36q-jxTuXwe zXN}uyqrQjMNyZk{PGlIn5NdeLHhig&Oa?n6yzYrZ>;iU9#DQi$KKHrLIm=-4NL!eHXdAP%;}3yWH<|eKr$4QJd_Vxv znhl@EfEO2S6kh&1R8}7Nu7}gw{x%E5AV)Kfr}kIA@)h-2$aO%>QEc+?zaTw(t0DB7 zXXDi#@1%l8V`Kv@GV}&t{_>Yod-(gnT%z^HZ0zKdPY%*%9<+nz7Hxi#q)jdybIdV{ zZxaVv$M$XIXN`ktADedW5I%`xjPI0f-_M#Pgf4cqW=w6}hvvyryKQti^C3W@A!e_Q zvS&~7jIQTGsMo$R98}Q~YY;8UmF_)F`y3vKhYf!q{=dr^5nF7O5#$np2E=#fV2!{@ z9dS5WKKS5+>gEc;ni%~&hc4>_x4Sqn`gk7>h&s~Hdh4y{6xid|hwpn#V0oS`x7^ZM z51%O0dDqvDQx(}P4NW7=E?QM^F0!xCSM)`#k9KLds2iJ5ZMK?*HSO42ZTxA`?&Dur zk!4=8ULQ9bMLugYkmPwnkG~Of8r27WW2RXlrYA`SXtRBjE<_!{LGF{E{G`)l5s=IV z;hmWF2+(FCm2Z6G8zbe+b}54ptrK8TmY*n~)X)(?Tv}dkYP3lzTJk83cbvA_7JxZS z;SfqvC>La^$!=GJ3}vCi0k#szQ-IdZgce-59W>Vu z`xx}*okNSS%eeS9?;2%v>Up$vI)cWnx8CYBL4wXYOJvdTy%$9b*4Wj;uQYVnR_v5b z9>$G^E%cF*mzxwbG#T_l`1ENFxrx$AZ%m|(<`ME{Bg!NzR5BN{9o9E7nqBajXTi6L z1mXg>+j)_fo=NKKGRU5+Iepu2!w&7|YbR4G?<5WDeCXtsC#|Lp)cZO_UD4(j?WA>v zsp?227hG_G(*}wVQ5$WvQQhZUUupZPP-rLGWx-l&t)>3G@4ow-PA7!1+ikbqg7#@6 zlkc9EeT9mvw0; zF0%QP>oA!IMVkn@%=5C$iCGU*6m8F(6!2|({l|?p3qstuOAK9*J$Zhd*7G2BDsLZr z?I7q8;lPF&RNL1c_Muz{WWCmHRGpCRnDw|`a4iB``-65ud(y`B8Erv%5%cSs%Q)IZ(Sf<6-6)4X940Aa-?XI>;Ms3{G_dPyzRDU*GCxu?wMaT1+UI$E zdmzur_u`Owk|1szv>%s|H!kdQ>5)es$#rZBtqpG038vYCUaQ!+Hk%Gbx7EnD8_|9U zw89u$VGKoJVSTQJ6|HOsoCmG&T&*yMI21j`c4@!W+6mEq*0Ds@OBDF95kgh71h;l` z1`L5#YiF$e=Al_*YzNx-(9UBYLp0LNZ952r8m{MR^!ST5bqIk*nPaqi`+2nKMYI#w zev)>g#*#H0UZeos2yO6~;2frpc5J8Uw#NkI1!$GAw#qotpdH6NhT;+0*{jiLmO$GI z!h9UE3R|t#evyKDsByMJJ8|^#eeV^ZLkrKu+`}%cR7>7aL?5ZkR|Z9f2iyfauz|`a z{O5f>0+&07R!ihz1IHB|2;Lq?hzJtF1c}O^l%RdNTci{|@PD3hVgqhEZfaVaZQ5m` z0Nn|?UlhF0S{W7@cCVihbk9R$_yC^sF1YB$dyrJaVA_!`%!04^uE*KwQ_kho7F9QD zjcXh0hNChhGVESAMe!01)+_5aiq^Jcm(9O@eA@)}ygDIPqmrT|o=f)18sDx+Se|B% zLDSkrFPjhectaGeb^A8pJ4qt>_~;c%SgjM*hUSkhkU%!E+p+;qNc(zz3^ve+2IeI zEz&i``CZY1v#$TW?|sj?2yw2oJ&ge#%Y^lD;qb!`&m5>fv{tzE(qE7-@;51W4>;g}QDt;0>?B|gwIf7mL_X`>C#C$r!OpKLtA9%> zOKeq4zX?D}<6r#Z7tZg#{`IfR`s=Sh>NA{aeIb`j;Jik{pmzfZd&axY#&hPGXGWGK zj3~(wY_M_t`q#g9*174Xn^e457f9OFj3^wXnRiR+e@8pNtGxHeQkk|vVSTe+pLpU4 zIsNq06J=K<6q}u{o`gnw@4dIT4x2LT9}uRLs2%2a%|_{^zf}45T8E1)`r*RH1&v9? zP4pd|3}|EwmZp(}C$8{wL|NExzx|x;lc0={uQqUiv*#=g>;qI@sP={jr1Y=RiO+`D z`<2Lq<#V;o`%Nrl7f8(Ga_S~}$*HHF>a4>&5%58SJ(PITN$|~Yep4m43T=LprJd62 z|CG{Gr^!goi7UzQ`%d)sQCJu|4K_YPtHtF#cY&-q#3SW2iMMU2G0E)5q*NJD=Z(sg zbw-!f|IU3vojfW%ON#U??rtZppA3LbI_4-IqOOxN9;q+@HZfvCa|$N}5^)Xjuyu`t zxUqasd7n2p;hSg+PiER~MRSUxG+)r2ur>%JYp%KGNMFA6(O~)ImyeC2;qxAb&d?jr zayuPu93p8j{{<=a&lKr@Qz}#6=ctT&V6K$jc}OagRel4_X#JQ5Nu54$4?X)m?@Rz_K?cjM~*7530AsiACZAsA}j1Evg|II`${`j zPI)@s?XQ0ItC3XRCeS9K5g~2s=9_P>(rofKNi@Fmo$ol?M{D%lbI&O)h%2rr{iD%B zb3%Gcof0-LT3v9~Z6nzI<~P4lFlgMAkc1ov<4P1iuqcJW+)V^wF5~yR1XB8RktDLND5U7q}7l z>tFvG**6+noyt2dLsl!}yz|ae?{OSBtUzn2rSi7lXAX>yJo3nh_L{i-98k!>#UX|R z^#1$r?`#`7N=-}Z0z9AC|Cl@ENq5|Ap#0HV_%w$N63}oBZqqL+Bo=!lhrBd=PM0NH z8;4SIFOXuoD50t{{X-(-mXyk*`Y>o&__IAuZm5aJpCl;C=SwfWRPlZG(m3R{lgBJ+jqi>YKgvJTb;pd(kJDwvgI6Sb~yUgr-;4tG#q>=>88Cl{G za1fxAya$>;WH?)C3o;q>YHOP zB#fO|o=i*RN9TlXr$^1&e$u{U%f9kADZTMek*-Cgvd+;`dgnnYJzcXW9GqJ<@$fL_ zq6BA7ecD{bb|P^J3j9u>bCPBx4L05mTH%oGN40~tAMG>3!_h|{tv3CnAhop1>4c;m z2OV@!>ahfYmX7Dmkn(-?8bsCmz&pi`!R*gkt66a9p@#+>Q86ezf02}4yV3dG@CK)g zlt#1KthD&XH@>0#BG9IBJLhW)-f`@)$Ex2EtXySW2k10oO!9qD-X13=r|c_k6GwpH z<_@5#k4o>$Z7G^baMV#pB~B}^f$cMnUD*4lMHV_I5+>|AuUw;UxGJlDC8)i*Hg(x* ztF4s008e(=DCfm?+ijZtv%ISBA-G+Ka`i!eON0UWsoS~CVtGIT!!bg}^9NVy?ZiY6rs$H%fvhbMieYv517X>?GVoPH19WT8V zWdhMhXSPIx90lfMVNSOl0&&_vldmR;o&g_`n&6!_f(G;2Y++8r`!2Irvc`vc-QVZz z6XgXz=HVlxpsU-r`*r;;mY~!yR3iAczhDem001BWNkly|95czp3`l!-I;}CZ$Gd57j%Sy7~(m2Re<$B1zjTt+bMCz4g|S%q!EzU8_=> z{2r-HUQ492dK#;YUs`0DPglQw<(j%MU`hK5c_`qj)b^l9Q^7R}4pBbXQ6jMWB&9kh zP#-w`WB=%L*bF8ll_Y^WDMPb4#)nhZb=O^2_c;!JTyLAe{w+#dhX8%;wb!cOH{N(- zXL?x#pl!C)69T(XG}k7W52-~UkXob& z?4y}0Ga8KvSJVR&@DJKetA&k2W&E-t%kAp^Zk#_&c2c<3U6zd^p$swI<@X+9T z8@?TvmN+jIeM;5Cpzj?mIzfmAW&zmS-g3(=&hpqt#{rWK%nmf*5AYE&Qi9up8GIY_ z2V|3wD9yaL%99Dzxa`jELVd4E>BY;ce55n_03F$v@l41PMC335ZTT)LdelGv`Oi@) z)LGl?l{)o2Ytc02Z~;FJa@=RdVBxV)x_5Ul=)|JX~yDj*B!U`fQeo>u5%CFy46`)JWwMRvm zqQDq!CrljAY}-P+Z|s=#LgKq5VeCHs@sBseEW?zYv$EUJU%{Hd2FwRgK@L8fQzUQ8-0d7Kjm-jPxQ0Xj5|5vX?EbysEY=?i0* z1~?A#e(bcH$EQWcFWYnhnn)#=Tyn|C-^>Rg!%QF? zNKFXzg|U-bWDg&R_~DDPk_!`7@UQ8Dkkn7a{LJSx&*8-88xlb1M9I`B#PRJ$nMUXk ze}q7bJJ9)nO|;4LIYeT9fq`gu}3DEX>#cU}~VC8Vlfm{Om9j^B5 zc$OIW<1LKCh%cgmU56+HFdDSbE`$7cn_aYxl~-Qbd1A)v`iwKqP`?u`!%Wl>8eyL; zsx7zrzfoo<+?;&nD_?Pbhu}72#*E1NFmD{L5Sr1HMtNs9>Y3E$H`C()g;uHY7Cj?C z!-Ufn+A}k*Zd8IF4voG|^nwd6NSq|$-3a2wyJ$<44Gt_sfIzs=Xok60(J-H>NMV|T zoQr;}PhTQ34NP>*gCM+J3*(qk+H)8;Php;OxN0in{A$5FmzTZ>&itT7whzOm38L9H z8e>gU=wsINnJhKaL?gBi$;N!98pPjLj`q>*WDa9jl-46y6CZTjX~HQ6PR@1v=S9U&8~xB!in3Cf!hv(b0anww8S>eq~;uCdvk|GG0&Fb z#-s_GH`;eJ`!4+JU;m1&kJBetuY^Z3?em%{h|GOjN^jiOy#6D=fkY>_aJFT-|0Pt+_{fv$2mVIDufQv=%Xb( z$mBzqbm-8TBxp%%5);H`dd?G4{&#(tSp`qiS%hg0)x5{Z11Fz+vbUT`HxghGT32dx zcipTeX(tb|3ewK<^Iwqi18!&kk-7%iUG1cDA`ER49akPrE2nl&MA$F}>sQ-AOD*nm zsY@zT*A)^`_r`~Fem4$^OoKM9PUFke!; z3WcV2yj5&I*%YN_!{~Ar(wIAU?no30Xy{7~F15Mj9YMpFG){Uey!)*xsK(I-KEfWr zje*U#TlJZwpgAXu8e!M4bgR*$pe=RM~3j`tV(xNcNYP@tX0tOAEa?8%9yfyst8%dq{@h~3Sh8eYQFPYiuBhf=d$}PB$aoTHe7WG zs!q&N7JJeZy>WeO8(c9DbQqJbT_0*COZ$22u%VrM?z!rB(q@`L;(hI~SWh|S6lI!0 zT+FQF;c7NbB9*LbrLx#ZMHX9NM$!tKr=%DM<}hgVNd^)pAo$vZx%~X+KUenbB)SNJ z1&6EZ->tiK)&tEmcKZh&cwnM6oEEp;cAH8NK%${MiB#me6Yy=Fv@9wu zdz>Ka#f0Ugvi6VN-(ds&`pv1vE7lr7&_&~nuY)ht>e*+XtqvN5{rmK%KP^{Xb(Knv zgbxXIT+eakl~<};LF}NhhsIeM9~G2wu3Lg6?;6TP%|GbZz1(9&}u?|8e|qmbM_g;B*SXcM5E^*tto9(I}*?wBLq^9 z$#V;vc1%H{aJcFcV#<~Nl#>mo6%CBh^9ayMG|o0EwJ+7=P#%gw90IFjtXJo z_$v39qQLcs4o`(JJW-tBfwNiTFQWcP27IE9c z76I4z(f)E(MBsi`!VWad`UI^L)o?N=Q`MjT^d~vzoO9~xaFu%e@zr4X9Bx94v(=Di zjL@1SG$sh42+gw4D-^Ok)9?q*s2;>$x=PA-dm=^?`dow+YxBoxMebdHVhEW$Xq9wOrYr`^q1C< z!E2cp8))aCp}vYnYy8V!{&M7db3T}Flm5IP@c2;3c9R;c`%xf)6($!N{Lc7@)`Kmw z2J24qXg&TTk34cz6b{P3M_i@}+i$8@WML&Bei(*nr~}!rXmkV&Ac7Z_V_NC z(KSrqh)@Sn0WCfeKXjs}5Ohe|&hUDtNvZc0Dc^U%=r43G zmBHDbnxm1~iBQ8=AG3=jwuVtr4Y0GJ4OfP}G#Y0w%00?_V^p2mzm<~TLp^hUDcj)+ z)aC8&N=ic=O)nRsJnl90oS7MiLPMQ`D??Hm?p4tV8o@fEo<$36Y-%pAZRn<>5$JX( zt2aSc9S%KlVSs2CTAOnjgytRNswPRD5w_VKwP3x$-(A{3AdW@QH^LGfo9a0lp(mc7NIKC~lXc??S($w>l z1}K_PfX0F6(X^(&s5&OSL(5N*^U|}pREFkDsjoiCOG#%VOw!k*k3O1t_8Vc+kfoh8 z{WNM!MYYrJ;}3}<`!4#qT3PGdYGZ4)@r+>%%|NS}VYJ$KY!p4dBHIty_T6{iohZ=^ zx37e~#iv1=;KqR)8Pk^nAzddZv!4Nn#3);IOn`5=;Rf|PA$#?$T3T9o%MZLQrI-H} zUAcP^W%BEd7?W0jF4~DMYaeOrwVJ@#EWtTsTg?z`T9FQoZaXAeZJez(o-vG})zNB# zY^#mOg?16Hn?=i38-JE|is-wg!q_#UPBVqYRufcPt(|7{`)<=LxAR;rj2NR!Pot4T`o$4()i?3=eG6^VoQKqvjMvE-6VM#d#B5<}1Rs|ft%>0MHu z5@y{d0ggFDae&V6d*Aya%M$z5l8TLIeqGT%fGW(Gv&yv>Ea8q8S3MDZs!R;1NW^ zh>ILWvLKhkCW%gTG^->a;)fYIWz|(zbtYSpfWn%y?Y?0ddU?S0jg%MblF~%?+HbwwpqDNpZ^(xiBP z?iHXz35zfV7xTuryxHa&mHvuU<~W$HR9!F|VT&CF=;jij&9FUjz!2Z0f6}@|YRE?D zUVF64;DUK51>)OT$IrSXR=I}x!u#6CJKUskQQq)Lo~hDTk;+{6n(n>oZS`-@$EQf= zd+H%etkwi=D}Bo@LoIaxMR>UCINKmyZUXlj=MLVEammw z8*ULGX~B8tou`C3S4b`sIPnmd-v*oH8E2f~tV0TW!r!?-sIO)nSbXTeYfkkrW1%#) zLniE%EP6;3{`}`ZtMH4^i^u|Tn>7N8yUkqXIylH#<}P8${FgK&AigG-T``pV29 z>HF*3&hNUnnj)QR)<@v-A!?i?sUz8u3&$RNtTP%3>(dOoXo7iKcinX(`z3tw!w)|^ z@;7{&kg(0tA`j0VlD@x#c*CYYaX(Pbvcy8GdmCHYBG^lCAhO zQz0<$pLsHH=N#$zbq%{4E}e%(o}S=?Fj!U3pCQ5>x`Gu zc)vC+wBXDJr4#+Q;^c}EZV~Oo#v5;}e#aA=gN?6_<|SzB;1e#Oy++GNY*I5ua$d|m z{WX!niek834G^Horp9|bW5x`*|Ni@xFn88jXVsO1RyvL_zxy^7>H~xow4*oObd!^B z+jZc{+#tFDouM}eNiv=_0=-wv3@$)J2k0R+-iX%!%rnodOJi(;JF9xngqt$%PzZ2#Z&YN z&|I6b2@p@vS0>GvGzRXUCzW~TWR~iZr6A-flqHb>9g2Ru)H=}&r()NOk2VSI6M~vA zvmkA-P`>!ZFUqEyZmKj^IvId(Jj@yWGiRY0vH85Ey3ZT$1Zv}@mtInukDYhkSq0or z0_FjxkD#~Te*2~B4@OLX2y{^bbk^rBPwJ5Fjoq<_`~N;m2LCr-I#%f!VZ@EF$wh$v z%U}MY)|Q=SSL0W|`jy($FrCo?G(tCPnH0S)&?dB;K7D$f0Ii=3fev26rWjIyE;Tqs zH|9m8)s~n!W3z%TQcLBH$(#-5<11hJiuxUmG6FPw8NQ9+yT=}TINL_JK)Cb?&}eGu zn=9Q$3D7<+l4n&TP-z-Uig$#y$ie%^KlY?#t^olW6FaFT1kuV6Q?NmaM4}ORvQL2i z```aQlFGYC0ebkwe(C?$9O+rKGgg4kVxtQ$zLr?c9o?Kq4OUCUo-C3sZ#&=}!(O&6XZJd-Q zWOJh98IcXhT&(3XyB(6H=v3Ya(1g9ysl31W&2Ku}Mpi-b2j4aYXek|Q5 z*TtlU_}-z+JqGTXE9I#jGHwqyt^04CErSowm(pUL(zSMVeYyJ1lt?8>9fUh<8O?y> zzP5bdM}3!NOm%g-N>b`7SF_K|9~S8-NvUS{to}|gSD_CcXg72gq_l0YA?o1h+Kx0% zTQW+p4V3EB*S<;9(uA_ekW>#c0~PhRD(N{`7bW0f;)0nBKhWKkq{aqJfk6Cd*r?-5 z^pg~!X+9!I3|Fi}qJc8>?~qbQ`1x)&n(;iQ@TTl=EwZb%9ta4ftU2>t_d)ZK5cbNv zAG|9Pp@mx5fL2Y@Q1b~N%=w^>wg-&@nta{9z6lTqPi{6e-{#g

Md#Ti_$(lCA9| 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 literal 0 HcmV?d00001 diff --git a/chest_monitor.lua b/chest_monitor.lua new file mode 100644 index 0000000..cbd384a --- /dev/null +++ b/chest_monitor.lua @@ -0,0 +1,86 @@ +-- There are a lot of chest monitors beyond this one +-- Each branching into countless features of their own +-- But this monitor is being preserved because it's special +-- It's special, because despite being so basic... +-- it was the first practical CC program I ever wrote + +local chests = {peripheral.find("minecraft:chest")} +local data_monitor = peripheral.find("monitor") +local sleep_time = sleep(#(chests)/20) + +local function move_line() + data_monitor.setCursorPos(1, select(2, data_monitor.getCursorPos()) + 1) + if select(2, data_monitor.getCursorPos()) >= select(2, data_monitor.getSize()) then + data_monitor.scroll(1) + data_monitor.setCursorPos(1, select(2, data_monitor.getCursorPos()) - 1) + end +end + +local function get_chest_data(chest) + local count = 0 + local slots = 0 + local calls = {} + local max_storage = 0 + for i, item in pairs(chest.list()) do + table.insert(calls,function() + slots = slots + 1 + count = count + item.count + max_storage = chest.getItemDetail(i).maxCount + max_storage + end) + end + parallel.waitForAll(table.unpack(calls)) + return count, max_storage + (chest.size() - slots) * 64 +end + +local function make_progressbar(size, taken, max) + size = size - 2 -- make space for "[" and "]" + --[[ + taken/max = x/size + taken * size = x * max + x = taken * size / max + ]] + local progress = math.floor(size * taken / max) + local hash = ("#"):rep(progress) + local dots = ("."):rep(size - progress) + return ("[" .. hash .. dots .. "]") +end + +local function write_progressbar(taken, max) + -- Progressbar + local percent = 100 - math.floor(100 * taken/max) + local taken_space = #tostring(percent) + #tostring(taken) + #tostring(max) + 11 -- " taken/free [PROGRESSBAR] percent% free " + local size = select(1, data_monitor.getSize()) - taken_space + + data_monitor.write(" " .. tostring(taken) .. "/" .. tostring(max) .. " " .. make_progressbar(size, taken, max) .. " ".. percent .. "% free") + move_line() +end + +local function write_chest_data(index, taken, max) + local start = " Chest " .. index .. (" "):rep(8 - #tostring(index) - #tostring(taken)) .. tostring(taken) .. "/" .. tostring(max) .. (" "):rep(5 - #tostring(max)) + data_monitor.write(start .. make_progressbar(20, taken, max)) +end + +while true do + local max_storage = 0 + local taken_storage = 0 + local chests_list = {} + + for i, chest in pairs(chests) do + local taken, max = get_chest_data(chest) + + taken_storage = taken_storage + taken + max_storage = max_storage + max + + table.insert(chests_list, {["taken"] = taken, ["max"] = max}) + end + + data_monitor.clear() + data_monitor.setCursorPos(1, 1) + write_progressbar(taken_storage, max_storage) + for i, chest in pairs(chests_list) do + write_chest_data(i, chest["taken"], chest["max"]) + move_line() + end + + sleep(sleep_time) +end \ No newline at end of file diff --git a/dash_old/modules/clock.lua b/dash_old/modules/clock.lua new file mode 100644 index 0000000..ab3d7da --- /dev/null +++ b/dash_old/modules/clock.lua @@ -0,0 +1,140 @@ +local ascii_digits = { + { + " 0000 ", + "00 00", + "00 00", + "00 00", + " 0000 " + }, + { + "1111 ", + " 11 ", + " 11 ", + " 11 ", + "111111" + }, + { + " 2222 ", + "22 22", + " 22 ", + " 22 ", + "222222", + }, + { + " 3333 ", + "33 33", + " 333", + "33 33", + " 3333 ", + }, + { + "44 44", + "44 44", + "444444", + " 44", + " 44" + }, + { + "555555", + "55 ", + "55555 ", + " 55", + "55555" + }, + { + " 6666 ", + "66 ", + "66666 ", + "66 66", + " 6666 " + }, + { + "777777", + " 77 ", + " 77 ", + " 77 ", + "77 " + }, + { + " 8888 ", + "88 88", + " 8888 ", + "88 88", + " 8888 " + }, + { + " 9999 ", + "99 99", + " 99999", + " 99", + " 9999 " + } +} +local seperator = { + " ", + " # ", + " ", + " # ", + " ", +} + +local function draw_time(x, y, monitor) + local date = os.date("%b %d") + local h, m = tostring(os.date("%H")), tostring(os.date("%M")) + local h1, h2 = tonumber(string.sub(h, 1, 1)), tonumber(string.sub(h, 2, 2)) + local m1, m2 = tonumber(string.sub(m, 1, 1)), tonumber(string.sub(m, 2, 2)) + + local s = os.date("%S") + + monitor.setCursorPos(x, y) + monitor.blit(date, "eeef00", "ffffff") + monitor.setCursorPos(x, y + 1) + + for i = 1, 5 do + monitor.setCursorPos(x, select(2, monitor.getCursorPos()) + 1) + monitor.write(ascii_digits[h1 + 1][i] .. " " .. ascii_digits[h2 + 1][i] .. seperator[i] .. ascii_digits[m1 + 1][i] .. " " .. ascii_digits[m2 + 1][i]) + end + end + +local function draw_timezone(x, y, tz_name, utc_offset, tz_monitor) + --[[ + /SYD\ + |22:34| + \_ _/ + ]] + if #tz_name ~= 3 then error("Invalid timezone name (not 3 letters)") end + local utc = os.date("!*t") + local tz_hour = utc.hour + utc_offset + if tz_hour > 23 then + tz_hour = -24 + tz_hour end + + + local day_part = { + ["day"] = "☼", + ["night"] = "☾" + } + local tz_symbol + if (tz_hour > 20 or tz_hour < 7) then tz_symbol = day_part["night"] else tz_symbol = day_part["day"] end + + tz_monitor.setCursorPos(x, y) + tz_monitor.blit(" /" .. tz_name .. "\\", "f04440", "ffffff") + tz_monitor.setCursorPos(x, y + 1) + tz_monitor.write("|" .. tostring(utc.hour + utc_offset) .. ":" .. tostring(utc.min) .. "|") + tz_monitor.setCursorPos(x, y + 2) + tz_monitor.blit(" \\_" .. tz_symbol .. "_/ ", "f00400f", "fffffff") +end + +local clock = {} +clock.new = function (monitor_wrap) + local self = {} + local monitor = monitor_wrap or peripheral.find("monitor") + + function self.update() + draw_time(2, 2, monitor) + draw_timezone(2, 11, "SYD", 10, monitor) + end + + return self +end + +return clock \ No newline at end of file diff --git a/dash_old/modules/rss.lua b/dash_old/modules/rss.lua new file mode 100644 index 0000000..fe4ed50 --- /dev/null +++ b/dash_old/modules/rss.lua @@ -0,0 +1,25 @@ + + +local rss_feed = {} +rss_feed.new = function (monitor_wrap) + local self = {} + + local monitor = monitor_wrap or peripheral.find("monitor") + + local function move_line() + monitor.setCursorPos(1, select(2, monitor.getCursorPos()) + 1) + if select(2, monitor.getCursorPos()) >= select(2, monitor.getSize()) then + monitor.scroll(1) + monitor.setCursorPos(1, select(2, monitor.getCursorPos()) - 1) + end + end + + function self.update() + --monitor.write("[TASS] Joeee biden!") + --move_line() + end + + return self +end + +return rss_feed \ No newline at end of file diff --git a/dash_old/smart_monitor.lua b/dash_old/smart_monitor.lua new file mode 100644 index 0000000..1047a52 --- /dev/null +++ b/dash_old/smart_monitor.lua @@ -0,0 +1,36 @@ +--[[ + Programme for large smart screen in my base + + - RSS feed + - Modular functions + - Time + + Screen is 8 by 4 blocls + 8 + ############# + ############# 4 + ############# + ############# +]] +local monitor_main = peripheral.find("monitor") +local x_max, y_max = monitor_main.getSize() + +local monitor_clock = window.create(monitor_main, 1, 1, x_max / 8 * 3, y_max / 2) +local monitor_rss = window.create(monitor_main, x_max - x_max / 4, 1, x_max, y_max, true) + +local modules = { + require("modules.clock").new(monitor_clock), + require("modules.rss").new(monitor_rss) +} + +while true do + local calls = {} + for i, module in pairs(modules) do + --module.update() + table.insert(calls, module.update()) + end + parallel.waitForAll(table.unpack(calls)) + + sleep(0.05) +end + diff --git a/generator/README.md b/generator/README.md new file mode 100644 index 0000000..51a5516 --- /dev/null +++ b/generator/README.md @@ -0,0 +1,3 @@ +This holds code for the steam generator powering my base on my Minecraft SMP + +It is not designed for compatibility. \ No newline at end of file diff --git a/generator/data.lua b/generator/data.lua new file mode 100644 index 0000000..44a50a7 --- /dev/null +++ b/generator/data.lua @@ -0,0 +1,83 @@ +--[[ +== GENERATOR STATUS ============================= +SU 580000 / 598030 | 96% | 18030 avl +RPM 180 / 256 | 70% +GEN Online + +== ENG ========================================== +ENG1 lvl 9 | watr 100% | powr 80% | size 100% +ENG2 lvl 9 | watr 100% | powr 78% | size 100% +ENG2 lvl 9 | watr 80% | powr 79% | size 100% +LAVA [||||||||| ] 53% | 49mbu + +== BAT ========================================== +BAT1 [||||||||| ] 35% +BAT2 [||||||||||||||| ] 70% +BAT3 [|||||||||||| ] 42% +Total 140 MFE / 270 MFE + +== LOG ========================================== +Time 21:50:52 GMT+3 +21:50:50 energy -3992 FE +21:50:51 energy -539 FE +21:50:52 GEN off -> on +21:50:52 energy +44 FE + +]] + +local RPM_CONTROLLER = peripheral.find("create:speedcontroller") -- TODO: Type +local ENGINES = {peripheral.find("create:engine")} -- TODO: Type +local BATTERIES = {peripheral.find("createcraftsandadditions:accumulator")} -- TODO: Type +local LAVA = peripheral.find("create:fluid_tank") -- TODO: Type + +local GENERATOR_SWITCH = { + set = function (on) + redstone.setOutput("top", on) -- Change side with redstone here! + end +} -- TODO: Type? Redstone???? Side? + +local MONITOR_INFO +local MONITOR_CONTROLS +local monitors = {peripheral.find("monitor")} +for _, monitor in pairs(monitors) do + local x, y = monitor.getSize() + if x < 0 and y < 0 then + MONITOR_CONTROLS = monitor + else + MONITOR_INFO = monitor + end +end + +-- All data, to be updated by relevant functions +local DATA = { + su = { + used = 0, + total = 0 + }, + rpm = 0, + generation = false, + engines = { + + }, + batteries = { + + }, + events = { + + } +} +local function update_data() + +end + +local function change_rpm(rpm) + RPM_CONTROLLER.setTarget(rpm) -- TODO: Real method? +end + +local function set_generation() +end + +local function log(msg) + local current_time = textutils.formatTime(os.time("local"), true) + +end \ No newline at end of file diff --git a/generator/network.lua b/generator/network.lua new file mode 100644 index 0000000..e69de29 diff --git a/generator/startup.lua b/generator/startup.lua new file mode 100644 index 0000000..e69de29 diff --git a/logger.lua b/logger.lua new file mode 100644 index 0000000..401c38b --- /dev/null +++ b/logger.lua @@ -0,0 +1,56 @@ +-- Simple logger for use in any projects + +local logger = {} +logger.new = function(monitor_wrap) + local self = {} + + local monitor = monitor_wrap + local log_colours = { + ['log'] = colours.white, + ['info'] = colours.lightBlue, + ['warn'] = colours.yellow, + ['err'] = colours.red, + ['success'] = colours.lime + } + + local function move_line() + monitor.setCursorPos(1, select(2, monitor.getCursorPos()) + 1) + if select(2, monitor.getCursorPos()) >= select(2, monitor.getSize()) then + monitor.scroll(1) + monitor.setCursorPos(1, select(2, monitor.getCursorPos()) - 1) + end + end + + local function write_msg(message, msg_colour) + local time_str = os.date('%Y-%b-%d %H:%M:%S') + local msg_formatted = "[" .. time_str .. "] " .. message + + monitor.setTextColour(msg_colour) + monitor.write(msg_formatted) + move_line() + end + + function self.log(msg) + write_msg(msg, log_colours['log']) + end + + function self.info(msg) + write_msg('INFO: ' .. msg, log_colours['info']) + end + + function self.warning(msg) + write_msg('WARNING: ' .. msg, log_colours['warn']) + end + + function self.error(msg) + write_msg('ERROR: ' .. msg, log_colours['err']) + end + + function self.success(msg) + write_msg('SUCCESS: ' .. msg, log_colours['success']) + end + + return self +end + +return logger \ No newline at end of file