IonutParau 687cfebd00 testing version of LuaBIOS and OpenOS
people were having issues getting them to work so now we promote consistency
2025-06-28 20:41:49 +02:00

61 lines
1.5 KiB
Lua

local shell = require("shell")
local args, options = shell.parse(...)
if options.help then
print([[Usage: sleep NUMBER[SUFFIX]...
Pause for NUMBER seconds. SUFFIX may be 's' for seconds (the default),
'm' for minutes, 'h' for hours or 'd' for days. Unlike most implementations
that require NUMBER be an integer, here NUMBER may be an arbitrary floating
point number. Given two or more arguments, pause for the amount of time
specified by the sum of their values.]])
end
local function help(bad_arg)
print("sleep: invalid option -- '"..tostring(bad_arg).."'")
print("Try 'sleep --help' for more information.")
end
local function time_type_multiplier(time_type)
if not time_type or #time_type == 0 or time_type == 's' then
return 1
elseif time_type == 'm' then
return 60
elseif time_type == 'h' then
return 60 * 60
elseif time_type == 'd' then
return 60 * 60 * 24
end
-- weird error, my bad
assert(false,'bug parsing parameter:'..tostring(time_type))
end
options.help = nil
if next(options) then
help(next(options))
return 1
end
local total_time = 0
for _,v in ipairs(args) do
local interval, time_type = v:match('^([%d%.]+)([smhd]?)$')
interval = tonumber(interval)
if not interval or interval < 0 then
help(v)
return 1
end
total_time = total_time + time_type_multiplier(time_type) * interval
end
local ins = io.stdin.stream
local pull = ins.pull
local start = 1
if not pull then
pull = require("event").pull
start = 2
end
pull(select(start, ins, total_time, "interrupted"))