-- CLI бортового компьютера AtlasOS v1.1 -- Вход: пин 1 - команда; остальные пины не используются -- Выходы: 1 - текст, 2 - очистка (1), 3 - цвет (R,G,B) -- Глобальный цвет по умолчанию (зелёный) local defaultColor = "0,255,0" local currentColor = defaultColor -- Устанавливаем начальный цвет out[3] = currentColor -- Таблица команд local commands = {} -- Регистрация команды local function register_command(name, func, description) commands[name] = { func = func, desc = description } end -- Вывод обычного текста с текущим цветом local function print(text) out[3] = currentColor out[1] = text end -- Вывод текста ошибки (красный) с последующим возвратом цвета local function printerror(text) out[3] = "255,40,40" out[1] = text out[3] = currentColor end -- Обработчик команд local function process_command(cmd_str) local parts = {} for token in tostring(cmd_str):gmatch("%S+") do table.insert(parts, token) end local cmd = parts[1] local args = {} for i = 2, #parts do table.insert(args, parts[i]) end local cmd_entry = commands[cmd] if cmd_entry then local success, result = pcall(cmd_entry.func, args) if success then if result ~= nil then -- Команда вернула строку для вывода print(result) end -- если result == nil, команда сама обработала вывод else printerror(tostring(result)) end else printerror("Error: Unknown command. Type 'help' for list.") end end -- ---- Команды ---- -- help register_command("help", function(args) local help_text = "Available commands:\n" for name, entry in pairs(commands) do help_text = help_text .. " " .. name .. " - " .. entry.desc .. "\n" end return help_text end, "Show this help") -- echo register_command("echo", function(args) if #args == 0 then error("echo requires text.") -- будет перехвачено pcall end return table.concat(args, " ") end, "Echo the input text") -- clear register_command("clear", function(args) out[2] = 1 return nil end, "Clear the screen") -- color (устанавливает цвет для последующих обычных выводов) register_command("color", function(args) if #args < 3 then error("color requires 3 numbers (R G B)") end local r, g, b = tonumber(args[1]), tonumber(args[2]), tonumber(args[3]) if not (r and g and b) then error("invalid color values") end r = math.max(0, math.min(255, math.floor(r))) g = math.max(0, math.min(255, math.floor(g))) b = math.max(0, math.min(255, math.floor(b))) currentColor = r .. "," .. g .. "," .. b print("Color set to " .. currentColor) return nil -- print уже вывел сообщение end, "Set text color (R G B)") -- status register_command("status", function(args) return "AtlasOS v1.1 - All systems nominal." end, "Show system status") -- Входной сигнал function inp(pin, val) if pin == 1 then process_command(val) end end