Move clear, shutdown, and reboot to OS
* Add `system.shutdown()` * Add `system.reboot()` * Add `clear` command * Add `shutdown [-r]` commandmaster
parent
12415cc700
commit
ca6beff464
|
@ -10,9 +10,6 @@ In earlier versions of digicompute, a RAM-like storage mechanism could be access
|
|||
Earlier versions of digicompute had an array of functions to get and set arbitrary customizable data regarding the system. This data includes the prefix, clear command, input buffer, and more. However, these APIs have been replaced with a single `system` table, available globally and saved with the help of metatables. There are a very limited amount of keys that can be written to in the system table, as documented below.
|
||||
|
||||
**Valid Keys:**
|
||||
* `clear` - `string`: command to clear the output and input.
|
||||
* `off` - `string`: command to turn the computer off.
|
||||
* `reboot` - `string`: command to reboot the computer.
|
||||
* `prefix` - `string`: prefix printed at the beginning of a new line.
|
||||
* `input` - `string`: contents of the input field.
|
||||
* `output` - `string`: contents of the output buffer.
|
||||
|
@ -20,9 +17,23 @@ Earlier versions of digicompute had an array of functions to get and set arbitra
|
|||
|
||||
**Example:**
|
||||
```lua
|
||||
system.reboot = "shutdown -r"
|
||||
system.prefix = get_attr("name")..":~$ "
|
||||
```
|
||||
|
||||
## System API
|
||||
|
||||
The system API is part of the `system` table and is used to control low-level aspects of a computer.
|
||||
|
||||
#### `shutdown()`
|
||||
**Usage:** `system.shutdown()`
|
||||
|
||||
Turns the computer off and closes the formspec.
|
||||
|
||||
#### `reboot()`
|
||||
**Usage:** `system.reboot()`
|
||||
|
||||
Reboots the computer and closes the formspec.
|
||||
|
||||
## Main
|
||||
This contains a set of functions mainly for the purpose of interacting with the computer's displays.
|
||||
|
||||
|
|
|
@ -16,6 +16,30 @@ local function create_env_table(meta, pos)
|
|||
system = {}, -- Limited system table
|
||||
}
|
||||
|
||||
--- System Functions ---
|
||||
|
||||
-- [function] Turn computer off
|
||||
function env.system.shutdown()
|
||||
local current_user = meta:get_string("current_user")
|
||||
if current_user ~= "" then
|
||||
local player = minetest.get_player_by_name(current_user)
|
||||
if player then
|
||||
return digicompute.c:off(pos, player)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- [function] Reboot computer
|
||||
function env.system.reboot()
|
||||
local current_user = meta:get_string("current_user")
|
||||
if current_user ~= "" then
|
||||
local player = minetest.get_player_by_name(current_user)
|
||||
if player then
|
||||
return digicompute.c:reboot(pos, player)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- General Functions ---
|
||||
|
||||
-- [function] Print to computer console
|
||||
|
@ -179,9 +203,6 @@ local function create_env_table(meta, pos)
|
|||
-- Ensure value is allowed and save to meta as well
|
||||
__newindex = function(table, key, value)
|
||||
local allowed_keys = {
|
||||
clear = "string",
|
||||
off = "string",
|
||||
reboot = "string",
|
||||
prefix = "string",
|
||||
input = "string",
|
||||
output = "string",
|
||||
|
|
|
@ -143,28 +143,19 @@ digicompute.c.forms = {
|
|||
if digicompute.c:handle_tabs(pos, player, fields) then return end
|
||||
|
||||
local meta = minetest.get_meta(pos) -- get meta
|
||||
local os = minetest.deserialize(meta:get_string("os")) or {}
|
||||
local prefix = os.prefix or ""
|
||||
|
||||
-- Hand values over to operating system
|
||||
if fields.input or fields.key_enter_field == "name" then
|
||||
if fields.input == os.clear then
|
||||
meta:set_string("output", prefix)
|
||||
meta:set_string("input", "")
|
||||
digicompute.c:open(pos, player)
|
||||
elseif fields.input == os.off then digicompute.c:off(pos, player)
|
||||
elseif fields.input == os.reboot then digicompute.c:reboot(pos, player)
|
||||
else -- else, turn over to os
|
||||
-- Set meta value(s)
|
||||
meta:set_string("input", fields.input)
|
||||
if fields.output then
|
||||
meta:set_string("output", fields.output)
|
||||
end
|
||||
|
||||
local run = meta:get_string("run")
|
||||
if run == "" then run = "os/main.lua" end
|
||||
-- Get and run current "run file" (default: os/main.lua)
|
||||
digicompute.c:run_file(pos, run)
|
||||
-- Set meta value(s)
|
||||
meta:set_string("input", fields.input)
|
||||
if fields.output then
|
||||
meta:set_string("output", fields.output)
|
||||
end
|
||||
|
||||
local run = meta:get_string("run")
|
||||
if run == "" then run = "os/main.lua" end
|
||||
-- Get and run current "run file" (default: os/main.lua)
|
||||
digicompute.c:run_file(pos, run)
|
||||
end
|
||||
end,
|
||||
},
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
name = clear
|
||||
description = Clear console output
|
||||
exec = os/exec/clear.lua
|
|
@ -0,0 +1,4 @@
|
|||
name = shutdown
|
||||
description = Turn off or reboot computer
|
||||
params = [-r]
|
||||
exec = os/exec/shutdown.lua
|
|
@ -0,0 +1,4 @@
|
|||
system.output = ""
|
||||
system.input = ""
|
||||
ram.newline_before_prefix = false
|
||||
-- No need to refresh because main.lua already does so after executing the command.
|
|
@ -0,0 +1,12 @@
|
|||
local option = ...
|
||||
option = option[1]
|
||||
|
||||
if option then
|
||||
if option == "-r" then
|
||||
system.reboot()
|
||||
else
|
||||
print("Invalid option (see help shutdown)")
|
||||
end
|
||||
else
|
||||
system.shutdown()
|
||||
end
|
|
@ -19,7 +19,12 @@ if input[1] ~= "" then
|
|||
print(input[1]..": command not found")
|
||||
end
|
||||
|
||||
print(system.prefix)
|
||||
if ram.newline_before_prefix ~= false then
|
||||
print(system.prefix)
|
||||
else
|
||||
ram.newline_before_prefix = nil
|
||||
print(system.prefix, false)
|
||||
end
|
||||
|
||||
-- Clear input
|
||||
system.input = ""
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
-- Set OS values
|
||||
system.clear = "clear"
|
||||
system.off = "shutdown"
|
||||
system.reboot = "shutdown -r"
|
||||
system.prefix = get_attr("name")..":~$ "
|
||||
|
||||
-- Initialize bin table
|
||||
|
@ -22,9 +19,9 @@ for _,f in ipairs(bin_contents.files) do
|
|||
end
|
||||
|
||||
-- Add additional commands to bin
|
||||
bin[system.clear] = { description = "Clear the shell output" } -- Clear shell output
|
||||
bin[system.off] = { description = "Turn off computer" } -- Turn off computer
|
||||
bin[system.reboot] = { description = "Reboot computer" } -- Reboot computer
|
||||
--bin[system.clear] = { description = "Clear the shell output" } -- Clear shell output
|
||||
--bin[system.off] = { description = "Turn off computer" } -- Turn off computer
|
||||
--bin[system.reboot] = { description = "Reboot computer" } -- Reboot computer
|
||||
|
||||
-- Save bin table
|
||||
ram.bin = bin
|
||||
|
|
Loading…
Reference in New Issue