require improvements, remove global Util

This commit is contained in:
kepler155c@gmail.com 2017-09-05 02:09:31 -04:00
parent 2b1d96ab37
commit ae7508e89b
82 changed files with 506 additions and 455 deletions

View File

@ -1,6 +1,7 @@
local class = require('class')
local class = require('class')
local Util = require('util')
local TableDB = require('tableDB')
local JSON = require('json')
local JSON = require('json')
-- see https://github.com/Khroki/MCEdit-Unified/blob/master/pymclevel/minecraft.yaml
-- see https://github.com/Khroki/MCEdit-Unified/blob/master/Items/minecraft/blocks.json

View File

@ -1,5 +1,6 @@
local class = require('class')
local itemDB = require('itemDB')
local class = require('class')
local Util = require('util')
local itemDB = require('itemDB')
local Peripheral = require('peripheral')
local ChestProvider = class()

View File

@ -1,3 +1,5 @@
local Util = require('util')
local Event = {
uid = 1, -- unique id for handlers
routines = { }, -- coroutines

View File

@ -1,4 +1,5 @@
local UI = require('ui')
local Util = require('util')
local UI = require('ui')
return function(args)

View File

@ -1,3 +1,5 @@
local Util = require('util')
local ramfs = { }
function ramfs.mount(dir, nodeType)

View File

@ -1,4 +1,5 @@
local synchronized = require('sync')
local Util = require('util')
local urlfs = { }

View File

@ -11,36 +11,6 @@ local DEFAULT_UPATH = 'https://raw.githubusercontent.com/kepler155c/opus/' .. br
local PASTEBIN_URL = 'http://pastebin.com/raw'
local GIT_URL = 'https://raw.githubusercontent.com'
local function standardSearcher(modname, env, shell)
if _G.package.loaded[modname] then
return function()
return _G.package.loaded[modname]
end
end
end
local function shellSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua'
if shell and type(shell.dir) == 'function' then
local path = shell.resolve(fname)
if fs.exists(path) and not fs.isDir(path) then
return loadfile(path, env)
end
end
end
local function pathSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua'
for dir in string.gmatch(_G.package.path, "[^:]+") do
local path = fs.combine(dir, fname)
if fs.exists(path) and not fs.isDir(path) then
return loadfile(path, env)
end
end
end
-- fix broken http get
local syncLocks = { }
@ -81,83 +51,108 @@ local function loadUrl(url)
end
end
-- require('BniCQPVf')
local function pastebinSearcher(modname, env, shell)
if #modname == 8 and not modname:match('%W') then
local url = PASTEBIN_URL .. '/' .. modname
local c = loadUrl(url)
if c then
return load(c, modname, nil, env)
local function requireWrapper(env)
local function standardSearcher(modname, env, shell)
if package.loaded[modname] then
return function()
return package.loaded[modname]
end
end
end
end
-- require('kepler155c.opus.master.sys.apis.util')
local function gitSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua'
local _, count = fname:gsub("/", "")
if count >= 3 then
local url = GIT_URL .. '/' .. fname
local c = loadUrl(url)
if c then
return load(c, modname, nil, env)
local function shellSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua'
if shell and type(shell.dir) == 'function' then
local path = shell.resolve(fname)
if fs.exists(path) and not fs.isDir(path) then
return loadfile(path, env)
end
end
end
end
local function urlSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua'
local function pathSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua'
if fname:sub(1, 1) ~= '/' then
for entry in string.gmatch(_G.package.upath, "[^;]+") do
local url = entry .. '/' .. fname
for dir in string.gmatch(package.path, "[^:]+") do
local path = fs.combine(dir, fname)
if fs.exists(path) and not fs.isDir(path) then
return loadfile(path, env)
end
end
end
-- require('BniCQPVf')
local function pastebinSearcher(modname, env, shell)
if #modname == 8 and not modname:match('%W') then
local url = PASTEBIN_URL .. '/' .. modname
local c = loadUrl(url)
if c then
return load(c, modname, nil, env)
end
end
end
end
_G.package = {
path = LUA_PATH or 'sys/apis',
upath = LUA_UPATH or DEFAULT_UPATH,
config = '/\n:\n?\n!\n-',
loaded = {
math = math,
string = string,
table = table,
io = io,
os = os,
},
loaders = {
standardSearcher,
shellSearcher,
pathSearcher,
pastebinSearcher,
gitSearcher,
urlSearcher,
}
}
local function requireWrapper(env)
local loaded = { }
return function(modname)
if loaded[modname] then
return loaded[modname]
-- require('kepler155c.opus.master.sys.apis.util')
local function gitSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua'
local _, count = fname:gsub("/", "")
if count >= 3 then
local url = GIT_URL .. '/' .. fname
local c = loadUrl(url)
if c then
return load(c, modname, nil, env)
end
end
end
for _,searcher in ipairs(_G.package.loaders) do
local function urlSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua'
if fname:sub(1, 1) ~= '/' then
for entry in string.gmatch(package.upath, "[^;]+") do
local url = entry .. '/' .. fname
local c = loadUrl(url)
if c then
return load(c, modname, nil, env)
end
end
end
end
-- place package and require function into env
package = {
path = LUA_PATH or 'sys/apis',
upath = LUA_UPATH or DEFAULT_UPATH,
config = '/\n:\n?\n!\n-',
loaded = {
math = math,
string = string,
table = table,
io = io,
os = os,
},
loaders = {
standardSearcher,
shellSearcher,
pathSearcher,
pastebinSearcher,
gitSearcher,
urlSearcher,
}
}
function require(modname)
for _,searcher in ipairs(package.loaders) do
local fn, msg = searcher(modname, env, shell)
if fn then
local module, msg = fn(modname, env)
if not module then
error(msg)
end
loaded[modname] = module
package.loaded[modname] = module
return module
end
if msg then
@ -166,6 +161,8 @@ local function requireWrapper(env)
end
error('Unable to find module ' .. modname)
end
return require -- backwards compatible
end
return function(env)

View File

@ -1,3 +1,4 @@
local Util = require('util')
local TableDB = require('tableDB')
local itemDB = TableDB({ fileName = 'usr/etc/items.db' })

View File

@ -1,3 +1,5 @@
local Util = require('util')
local ME = {
jobList = { }
}

View File

@ -1,5 +1,6 @@
local class = require('class')
local Logger = require('logger')
local class = require('class')
local Util = require('util')
local Logger = require('logger')
local Peripheral = require('peripheral')
local MEProvider = class()

View File

@ -1,3 +1,5 @@
local Util = require('util')
local Peripheral = { }
local function getDeviceList()

View File

@ -1,3 +1,4 @@
local Util = require('util')
local Logger = require('logger')
local Profile = {

View File

@ -1,6 +1,7 @@
local class = require('class')
local class = require('class')
local Util = require('util')
local Peripheral = require('peripheral')
local itemDB = require('itemDB')
local itemDB = require('itemDB')
local RefinedProvider = class()

View File

@ -1,7 +1,8 @@
local class = require('class')
local class = require('class')
local Util = require('util')
local DEFLATE = require('deflatelua')
local UI = require('ui')
local Point = require('point')
local UI = require('ui')
local Point = require('point')
--[[
Loading and manipulating a schematic

56
sys/apis/security.lua Normal file
View File

@ -0,0 +1,56 @@
local Config = require('config')
local config = { }
local Security = { }
function Security.verifyPassword(password)
Config.load('os', config)
return config.password and password == config.password
end
function Security.getSecretKey()
Config.load('os', config)
if not config.secretKey then
config.secretKey = math.random(100000, 999999)
Config.update('os', config)
end
return config.secretKey
end
function Security.getPublicKey()
local exchange = {
base = 11,
primeMod = 625210769
}
local function modexp(base, exponent, modulo)
local remainder = base
for i = 1, exponent-1 do
remainder = remainder * remainder
if remainder >= modulo then
remainder = remainder % modulo
end
end
return remainder
end
local secretKey = Security.getSecretKey()
return modexp(exchange.base, secretKey, exchange.primeMod)
end
function Security.updatePassword(password)
Config.load('os', config)
config.password = password
Config.update('os', config)
end
function Security.getPassword()
Config.load('os', config)
return config.password
end
return Security

View File

@ -1,5 +1,7 @@
local Logger = require('logger')
local Crypto = require('crypto')
local Crypto = require('crypto')
local Logger = require('logger')
local Security = require('security')
local Util = require('util')
local socketClass = { }
@ -110,7 +112,7 @@ function Socket.connect(host, port)
type = 'OPEN',
shost = socket.shost,
dhost = socket.dhost,
t = Crypto.encrypt({ ts = os.time(), seq = socket.seq }, os.getPublicKey()),
t = Crypto.encrypt({ ts = os.time(), seq = socket.seq }, Security.getPublicKey()),
rseq = socket.wseq,
wseq = socket.rseq,
})

View File

@ -1,4 +1,5 @@
local class = require('class')
local Util = require('util')
local TableDB = class()
function TableDB:init(args)

View File

@ -1,3 +1,5 @@
local Util = require('util')
local Terminal = { }
function Terminal.scrollable(ct, size)

View File

@ -1,7 +1,7 @@
local Util = require('util')
local class = require('class')
local Event = require('event')
local Tween = require('tween')
local Util = require('util')
local class = require('class')
local Event = require('event')
local Tween = require('tween')
local Region = require('region')
local mapColorToGray = {
@ -3425,7 +3425,7 @@ function UI.NftImage:setImage(image)
end
UI:loadTheme('usr/config/ui.theme')
if os.getVersion and os.getVersion() >= 1.79 then
if Util.getVersion() >= 1.79 then
UI:loadTheme('sys/etc/ext.theme')
end

View File

@ -69,6 +69,19 @@ function Util.print(pattern, ...)
print(Util.tostring(pattern, ...))
end
function Util.getVersion()
local version
if _CC_VERSION then
version = tonumber(_CC_VERSION:gmatch('[%d]+%.?[%d][%d]', '%1')())
end
if not version and _HOST then
version = tonumber(_HOST:gmatch('[%d]+%.?[%d][%d]', '%1')())
end
return version or 1.7
end
function Util.runFunction(env, fn, ...)
setfenv(fn, env)
setmetatable(env, { __index = _G })

View File

@ -1,6 +1,32 @@
require = requireInjector(getfenv(1))
local Util = require('util')
local UI = require('ui')
requireInjector(getfenv(1))
local Config = require('config')
local SHA1 = require('sha1')
local UI = require('ui')
local Util = require('util')
-- scrap this entire file. don't muck with standard apis
local REGISTRY_DIR = 'usr/.registry'
-- FIX SOMEDAY
function os.registerApp(app, key)
app.key = SHA1.sha1(key)
Util.writeTable(fs.combine(REGISTRY_DIR, app.key), app)
os.queueEvent('os_register_app')
end
function os.unregisterApp(key)
local filename = fs.combine(REGISTRY_DIR, SHA1.sha1(key))
if fs.exists(filename) then
fs.delete(filename)
os.queueEvent('os_register_app')
end
end
local sandboxEnv = Util.shallowCopy(getfenv(1))
setmetatable(sandboxEnv, { __index = _G })
@ -149,7 +175,7 @@ end
local appPage = UI.Page({
backgroundColor = UI.ViewportWindow.defaults.backgroundColor,
menuBar = UI.MenuBar({
showBackButton = not os.isPocket(),
showBackButton = not pocket,
buttons = {
{ text = 'Install', event = 'install' },
{ text = 'Run', event = 'run' },

View File

@ -1,6 +1,8 @@
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Event = require('event')
local UI = require('ui')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Events')
UI:configure('Events', ...)

View File

@ -1,8 +1,9 @@
require = requireInjector(getfenv(1))
local Util = require('util')
local Event = require('event')
local UI = require('ui')
requireInjector(getfenv(1))
local Config = require('config')
local Event = require('event')
local UI = require('ui')
local Util = require('util')
local cleanEnv = Util.shallowCopy(getfenv(1))
cleanEnv.require = nil

View File

@ -1,6 +1,7 @@
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Event = require('event')
local UI = require('ui')
local UI = require('ui')
multishell.setTitle(multishell.getCurrent(), 'Help')
UI:configure('Help', ...)

View File

@ -1,14 +1,15 @@
local injector = requireInjector or load(http.get('http://pastebin.com/raw/c0TWsScv').readAll())()
require = injector(getfenv(1))
local Util = require('util')
local UI = require('ui')
local Event = require('event')
injector(getfenv(1))
local Event = require('event')
local History = require('history')
local UI = require('ui')
local Util = require('util')
local sandboxEnv = Util.shallowCopy(getfenv(1))
sandboxEnv.exit = function() Event.exitPullEvents() end
sandboxEnv.require = injector(sandboxEnv)
setmetatable(sandboxEnv, { __index = _G })
sandboxEnv.exit = function() Event.exitPullEvents() end
injector(sandboxEnv)
multishell.setTitle(multishell.getCurrent(), 'Lua')
UI:configure('Lua', ...)

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1))
local Event = require('event')
local UI = require('ui')
requireInjector(getfenv(1))
local Event = require('event')
local Socket = require('socket')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Network')
UI:configure('Network', ...)

View File

@ -1,13 +1,14 @@
require = requireInjector(getfenv(1))
local Util = require('util')
local Event = require('event')
local UI = require('ui')
local Config = require('config')
local NFT = require('nft')
requireInjector(getfenv(1))
local class = require('class')
local Config = require('config')
local Event = require('event')
local FileUI = require('fileui')
local Tween = require('tween')
local NFT = require('nft')
local SHA1 = require('sha1')
local Tween = require('tween')
local UI = require('ui')
local Util = require('util')
local REGISTRY_DIR = 'usr/.registry'

View File

@ -1,8 +1,8 @@
local injector = requireInjector or load(http.get('http://pastebin.com/raw/c0TWsScv').readAll())()
require = injector(getfenv(1))
local Util = require('util')
requireInjector(getfenv(1))
local Event = require('event')
local UI = require('ui')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Devices')

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1))
local Event = require('event')
local UI = require('ui')
requireInjector(getfenv(1))
local Config = require('config')
local Event = require('event')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'PIM')

View File

@ -1,8 +1,10 @@
require = requireInjector(getfenv(1))
local Event = require('event')
local UI = require('ui')
local Socket = require('socket')
requireInjector(getfenv(1))
local Config = require('config')
local Event = require('event')
local Socket = require('socket')
local UI = require('ui')
local Util = require('util')
local GROUPS_PATH = 'usr/groups'
local SCRIPTS_PATH = 'sys/etc/scripts'

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1))
local Event = require('event')
local UI = require('ui')
requireInjector(getfenv(1))
local Config = require('config')
local Event = require('event')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'System')
UI:configure('System', ...)
@ -86,7 +88,7 @@ local systemPage = UI.Page {
grid = UI.ScrollingGrid {
y = 4,
values = {
{ name = 'CC version', value = os.getVersion() },
{ name = 'CC version', value = Util.getVersion() },
{ name = 'Lua version', value = _VERSION },
{ name = 'MC version', value = _MC_VERSION or 'unknown' },
{ name = 'Disk free', value = Util.toBytes(fs.getFreeSpace('/')) },

View File

@ -1,6 +1,8 @@
require = requireInjector(getfenv(1))
local UI = require('ui')
requireInjector(getfenv(1))
local Event = require('event')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Tabs')
UI:configure('Tabs', ...)

View File

@ -1,9 +1,11 @@
require = requireInjector(getfenv(1))
local Event = require('event')
local UI = require('ui')
local Socket = require('socket')
requireInjector(getfenv(1))
local Event = require('event')
local itemDB = require('itemDB')
local Socket = require('socket')
local Terminal = require('terminal')
local itemDB = require('itemDB')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Turtles')
UI.Button.defaults.focusIndicator = ' '

View File

@ -1,4 +1,5 @@
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
Base64 = require('base64')
local args = { ... }

View File

@ -2,19 +2,21 @@ if not turtle and not commands then
error('Must be run on a turtle or a command computer')
end
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Blocks = require('blocks')
local class = require('class')
local Event = require('event')
local MEProvider = require('meProvider')
local Message = require('message')
local UI = require('ui')
local Point = require('point')
local Schematic = require('schematic')
local TableDB = require('tableDB')
local MEProvider = require('meProvider')
local Blocks = require('blocks')
local Point = require('point')
local UI = require('ui')
local Util = require('util')
local ChestProvider = require('chestProvider')
if os.getVersion() == 1.8 then
if Util.getVersion() == 1.8 then
ChestProvider = require('chestProvider18')
end
@ -685,7 +687,7 @@ end
-- figure out our orientation in the world
function Builder:getTurtleFacing()
if os.getVersion() == 1.8 then
if Util.getVersion() == 1.8 then
local directions = { -- reversed directions
[5] = 'west',
@ -935,7 +937,7 @@ function Builder:placeDirectionalBlock(b, slot, travelPlane)
local isSouth = (turtle.getHeadingInfo(Builder.facing).heading +
turtle.getHeadingInfo(stairUpDirections[d]).heading) % 4 == 1
if os.getVersion() == 1.8 then
if Util.getVersion() == 1.8 then
isSouth = false -- no stair bug in this version
end

View File

@ -1,12 +1,14 @@
require = requireInjector(getfenv(1))
local UI = require('ui')
local Event = require('event')
local Config = require('config')
local ChestProvider = require('chestProvider18')
requireInjector(getfenv(1))
local ChestProvider = require('chestProvider18')
local Config = require('config')
local Event = require('event')
local itemDB = require('itemDB')
local Peripheral = require('peripheral')
local RefinedProvider = require('refinedProvider')
local itemDB = require('itemDB')
local Terminal = require('terminal')
local Peripheral = require('peripheral')
local Terminal = require('terminal')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Resource Manager')

View File

@ -46,7 +46,7 @@ if not clipboard then
function clipboard.getText()
if clipboard.data then
return Util.tostring(clipboard.data)
return tostring(clipboard.data)
end
end

View File

@ -1,8 +1,7 @@
local injector = requireInjector or load(http.get('http://pastebin.com/raw/c0TWsScv').readAll())()
require = injector(getfenv(1))
requireInjector(getfenv(1))
local RefinedProvider = require('refinedProvider')
local TableDB = require('tableDB')
local TableDB = require('tableDB')
local controller = RefinedProvider()
if not controller:isValid() then

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1))
local Event = require('event')
requireInjector(getfenv(1))
local Event = require('event')
local Message = require('message')
local UI = require('ui')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Log Monitor')

View File

@ -1,4 +1,5 @@
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Terminal = require('terminal')
local args = { ... }

View File

@ -1,8 +1,10 @@
require = requireInjector(getfenv(1))
local Socket = require('socket')
requireInjector(getfenv(1))
local Event = require('event')
local Logger = require('logger')
local Socket = require('socket')
local Terminal = require('terminal')
local Logger = require('logger')
local Event = require('event')
local Util = require('util')
Logger.setScreenLogging()

View File

@ -1,7 +1,8 @@
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Event = require('event')
local Socket = require('socket')
local Logger = require('logger')
local Socket = require('socket')
Logger.setScreenLogging()

6
sys/apps/mount.lua Normal file
View File

@ -0,0 +1,6 @@
local args = { ... }
local target = table.remove(args, 1)
target = shell.resolve(target)
fs.mount(target, unpack(args))

View File

@ -14,10 +14,15 @@ end
multishell.term = term.current()
local defaultEnv = Util.shallowCopy(getfenv(1))
local defaultEnv = { }
for k,v in pairs(getfenv(1)) do
defaultEnv[k] = v
end
requireInjector(getfenv(1))
require = requireInjector(getfenv(1))
local Config = require('config')
local Util = require('util')
-- Begin multishell
local parentTerm = term.current()
@ -557,9 +562,7 @@ while true do
elseif sEvent == "mouse_click" then
local button, x, y = tEventData[1], tEventData[2], tEventData[3]
lastClicked = nil
if y == 1 and os.locked then
-- ignore
elseif y == 1 then
if y == 1 then
-- Switch process
local w, h = parentTerm.getSize()
if x == 1 then

View File

@ -1,10 +1,12 @@
require = requireInjector(getfenv(1))
local SHA1 = require('sha1')
requireInjector(getfenv(1))
local Security = require('security')
local SHA1 = require('sha1')
local Terminal = require('terminal')
local password = Terminal.readPassword('Enter new password: ')
if password then
os.updatePassword(SHA1.sha1(password))
Security.updatePassword(SHA1.sha1(password))
print('Password updated')
end

View File

@ -1,10 +1,12 @@
require = requireInjector(getfenv(1))
local GPS = require('gps')
local Socket = require('socket')
local MEProvider = require('meProvider')
local Logger = require('logger')
local Point = require('point')
requireInjector(getfenv(1))
local Event = require('event')
local GPS = require('gps')
local Logger = require('logger')
local MEProvider = require('meProvider')
local Point = require('point')
local Socket = require('socket')
local Util = require('util')
if not device.wireless_modem then
error('Modem is required')

View File

@ -2,11 +2,13 @@ if not device.wireless_modem then
error('Wireless modem is required')
end
require = requireInjector(getfenv(1))
local GPS = require('gps')
local Event = require('event')
local UI = require('ui')
requireInjector(getfenv(1))
local Event = require('event')
local GPS = require('gps')
local Socket = require('socket')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Pickup Remote')

View File

@ -14,6 +14,10 @@ local version = "Version 1.1.6"
-- Original code by Bomb Bloke
-- Modified to integrate with opus os
requireInjector(getfenv(1))
local Util = require('util')
local recTerm, oldTerm, arg, showInput, skipLast, lastDelay, curInput = {}, Util.shallowCopy(multishell.term), {...}, false, false, 2, ""
local curBlink, oldBlink, tTerm, buffer, colourNum, xPos, yPos, oldXPos, oldYPos, tCol, bCol, xSize, ySize = false, false, {}, {}, {}, 1, 1, 1, 1, colours.white, colours.black, oldTerm.getSize()
local greys, buttons = {["0"] = true, ["7"] = true, ["8"] = true, ["f"] = true}, {"l", "r", "m"}

View File

@ -1,10 +1,10 @@
local injector = requireInjector or load(http.get('http://pastebin.com/raw/c0TWsScv').readAll())()
require = injector(getfenv(1))
requireInjector(getfenv(1))
local UI = require('ui')
local Peripheral = require('peripheral')
local RefinedProvider = require('refinedProvider')
local Terminal = require('terminal')
local Peripheral = require('peripheral')
local Terminal = require('terminal')
local UI = require('ui')
local Util = require('util')
local controller = RefinedProvider()
if not controller:isValid() then

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1))
local UI = require('ui')
local GPS = require('gps')
requireInjector(getfenv(1))
local GPS = require('gps')
local Socket = require('socket')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Shapes')
@ -11,10 +13,12 @@ turtleId = tonumber(turtleId)
local script = [[
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local GPS = require('gps')
local ChestProvider = require('chestProvider18')
local Point = require('point')
local Util = require('util')
local itemProvider
@ -245,8 +249,10 @@ end)
local levelScript = [[
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Point = require('point')
local Util = require('util')
local checkedNodes = { }
local nodes = { }

View File

@ -1,9 +1,16 @@
local parentShell = shell
shell = { }
local sandboxEnv = Util.shallowCopy(getfenv(1))
local sandboxEnv = { }
for k,v in pairs(getfenv(1)) do
sandboxEnv[k] = v
end
setmetatable(sandboxEnv, { __index = _G })
requireInjector(getfenv(1))
local Util = require('util')
local DIR = (parentShell and parentShell.dir()) or ""
local PATH = (parentShell and parentShell.path()) or ".:/rom/programs"
local ALIASES = (parentShell and parentShell.aliases()) or {}
@ -223,8 +230,7 @@ if #tArgs > 0 then
return s, m
end
require = requireInjector(getfenv(1))
local Config = require('config')
local Config = require('config')
local History = require('history')
local config = {

View File

@ -1,6 +1,8 @@
require = requireInjector(getfenv(1))
local Point = require('point')
requireInjector(getfenv(1))
local Logger = require('logger')
local Point = require('point')
local Util = require('util')
if device and device.wireless_modem then
Logger.setWirelessLogging()

View File

@ -1,10 +1,11 @@
require = requireInjector(getfenv(1))
local Util = require('util')
local Event = require('event')
local UI = require('ui')
requireInjector(getfenv(1))
local ChestProvider = require('chestProvider18')
local Event = require('event')
local MEProvider = require('meProvider')
local RefinedProvider = require('refinedProvider')
local MEProvider = require('meProvider')
local ChestProvider = require('chestProvider18')
local UI = require('ui')
local Util = require('util')
local storage = RefinedProvider()
if not storage:isValid() then

View File

@ -1,9 +1,11 @@
require = requireInjector(getfenv(1))
local Event = require('event')
local UI = require('ui')
local ME = require('me')
requireInjector(getfenv(1))
local Config = require('config')
local Event = require('event')
local Logger = require('logger')
local ME = require('me')
local UI = require('ui')
local Util = require('util')
-- Must be a crafty turtle with duck antenna !
-- 3 wide monitor (any side of turtle)

View File

@ -1,10 +1,12 @@
require = requireInjector(getfenv(1))
local Logger = require('logger')
local Message = require('message')
local Event = require('event')
local Point = require('point')
local TableDB = require('tableDB')
requireInjector(getfenv(1))
local Event = require('event')
local Logger = require('logger')
local MEProvider = require('meProvider')
local Message = require('message')
local Point = require('point')
local TableDB = require('tableDB')
local Util = require('util')
--[[
A supplier turtle for the builder turtle. For larger builds, use
@ -19,7 +21,7 @@ local MEProvider = require('meProvider')
]]--
local ChestProvider = require('chestProvider')
if os.getVersion() == 1.8 then
if Util.getVersion() == 1.8 then
ChestProvider = require('chestProvider18')
end

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1))
local Event = require('event')
local Socket = require('socket')
requireInjector(getfenv(1))
local Event = require('event')
local Socket = require('socket')
local Terminal = require('terminal')
local Util = require('util')
local remoteId
local args = { ... }
@ -69,7 +71,7 @@ while true do
print()
print('Connection lost')
print('Press enter to exit')
read()
pcall(read)
break
end
end

View File

@ -1,8 +1,10 @@
require = requireInjector(getfenv(1))
local Socket = require('socket')
local SHA1 = require('sha1')
requireInjector(getfenv(1))
local Crypto = require('crypto')
local Security = require('security')
local SHA1 = require('sha1')
local Socket = require('socket')
local Terminal = require('terminal')
local Crypto = require('crypto')
local remoteId
local args = { ... }
@ -31,7 +33,7 @@ if not socket then
error('Unable to connect to ' .. remoteId .. ' on port 19')
end
local publicKey = os.getPublicKey()
local publicKey = Security.getPublicKey()
local password = SHA1.sha1(password)
socket:write(Crypto.encrypt({ pk = publicKey, dh = os.getComputerID() }, password))

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1))
local Event = require('event')
local Socket = require('socket')
requireInjector(getfenv(1))
local Event = require('event')
local Socket = require('socket')
local Terminal = require('terminal')
local Util = require('util')
local remoteId
local args = { ... }

View File

@ -5,7 +5,8 @@ if turtle and device.wireless_modem then
if homePt then
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Config = require('config')
local config = {
destructive = false,

View File

@ -2,7 +2,7 @@ print('\nStarting Opus..')
LUA_PATH = '/sys/apis'
_G.Util = dofile('sys/apis/util.lua')
local Util = dofile('sys/apis/util.lua')
_G.debug = function(...) Util.print(...) end
_G.requireInjector = dofile('sys/apis/injector.lua')

View File

@ -1,9 +1,10 @@
local function follow(id)
require = requireInjector(getfenv(1))
local Socket = require('socket')
local Point = require('point')
requireInjector(getfenv(1))
local Event = require('event')
local Point = require('point')
local Socket = require('socket')
turtle.status = 'follow ' .. id

View File

@ -1,5 +1,7 @@
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Point = require('point')
local Util = require('util')
local checkedNodes = { }
local nodes = { }

View File

@ -1,6 +1,8 @@
turtle.run(function()
require = requireInjector(getfenv(1))
local GPS = require('gps')
requireInjector(getfenv(1))
local GPS = require('gps')
local Socket = require('socket')
local id = {COMPUTER_ID}

View File

@ -1,5 +1,7 @@
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Point = require('point')
local Util = require('util')
local checkedNodes, nodes

View File

@ -1,9 +1,10 @@
local function summon(id)
require = requireInjector(getfenv(1))
local GPS = require('gps')
requireInjector(getfenv(1))
local GPS = require('gps')
local Point = require('point')
local Socket = require('socket')
local Point = require('point')
turtle.status = 'GPSing'
turtle.setPoint({ x = 0, y = 0, z = 0, heading = 0 })

View File

@ -1,3 +1,7 @@
requireInjector(getfenv(1))
local Util = require('util')
_G.clipboard = { internal, data }
function clipboard.getData()

View File

@ -1,8 +1,9 @@
_G.device = { }
requireInjector(getfenv(1))
require = requireInjector(getfenv(1))
local Peripheral = require('peripheral')
_G.device = { }
for _,side in pairs(peripheral.getNames()) do
Peripheral.addDevice(device, side)
end

View File

@ -1,172 +0,0 @@
require = requireInjector(getfenv(1))
local Config = require('config')
local SHA1 = require('sha1')
local REGISTRY_DIR = 'usr/.registry'
local config = {
enable = false,
pocketId = 10,
distance = 8,
}
local lockId
function lockScreen()
require = requireInjector(getfenv(1))
local UI = require('ui')
local Event = require('event')
local center = math.floor(UI.term.width / 2)
local page = UI.Page({
backgroundColor = colors.blue,
prompt = UI.Text({
x = center - 9,
y = math.floor(UI.term.height / 2),
value = 'Password',
}),
password = UI.TextEntry({
x = center,
y = math.floor(UI.term.height / 2),
width = 8,
limit = 8
}),
statusBar = UI.StatusBar(),
accelerators = {
q = 'back',
},
})
function page:eventHandler(event)
if event.type == 'key' and event.key == 'enter' then
Config.load('os', config)
if SHA1.sha1(self.password.value) == config.password then
os.locked = false
Event.exitPullEvents()
lockId = false
return true
else
self.statusBar:timedStatus('Invalid Password', 3)
end
end
UI.Page.eventHandler(self, event)
end
UI:setPage(page)
Event.pullEvents()
end
function os.verifyPassword(password)
Config.load('os', config)
return config.password and password == config.password
end
function os.getSecretKey()
Config.load('os', config)
if not config.secretKey then
config.secretKey = math.random(100000, 999999)
Config.update('os', config)
end
return config.secretKey
end
function os.getPublicKey()
local exchange = {
base = 11,
primeMod = 625210769
}
local function modexp(base, exponent, modulo)
local remainder = base
for i = 1, exponent-1 do
remainder = remainder * remainder
if remainder >= modulo then
remainder = remainder % modulo
end
end
return remainder
end
local secretKey = os.getSecretKey()
return modexp(exchange.base, secretKey, exchange.primeMod)
end
function os.updatePassword(password)
Config.load('os', config)
config.password = password
Config.update('os', config)
end
function os.getPassword()
Config.load('os', config)
return config.password
end
os.lock = function()
--os.locked = true
if not lockId then
lockId = multishell.openTab({
title = 'Lock',
env = getfenv(1),
fn = lockScreen,
focused = true,
})
end
end
os.unlock = function()
os.locked = false
if lockId then
multishell.terminate(lockId)
lockId = nil
end
end
function os.isTurtle()
return not not turtle
end
function os.isAdvanced()
return term.native().isColor()
end
function os.isPocket()
return not not pocket
end
function os.getVersion()
local version
if _CC_VERSION then
version = tonumber(_CC_VERSION:gmatch('[%d]+%.?[%d][%d]', '%1')())
end
if not version and _HOST then
version = tonumber(_HOST:gmatch('[%d]+%.?[%d][%d]', '%1')())
end
return version or 1.7
end
-- move completely into overview
-- just post event from appstore
function os.registerApp(app, key)
app.key = SHA1.sha1(key)
Util.writeTable(fs.combine(REGISTRY_DIR, app.key), app)
os.queueEvent('os_register_app')
end
function os.unregisterApp(key)
local filename = fs.combine(REGISTRY_DIR, SHA1.sha1(key))
if fs.exists(filename) then
fs.delete(filename)
os.queueEvent('os_register_app')
end
end

View File

@ -2,10 +2,11 @@ if not turtle then
return
end
require = requireInjector(getfenv(1))
local Grid = require ("jumper.grid")
requireInjector(getfenv(1))
local Grid = require ("jumper.grid")
local Pathfinder = require ("jumper.pathfinder")
local Point = require('point')
local Point = require('point')
local WALKABLE = 0

View File

@ -2,6 +2,10 @@ if not turtle then
return
end
requireInjector(getfenv(1))
local Util = require('util')
local Scheduler = {
uid = 0,
queue = { },

View File

@ -2,7 +2,7 @@ if not turtle then
return
end
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local GPS = require('gps')
function turtle.enableGPS(timeout)

View File

@ -2,6 +2,10 @@ if not turtle then
return
end
requireInjector(getfenv(1))
local Util = require('util')
local function noop() end
turtle.point = { x = 0, y = 0, z = 0, heading = 0 }

View File

@ -2,7 +2,9 @@ if fs.native then
return
end
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Util = require('util')
fs.native = Util.shallowCopy(fs)
local fstypes = { }

View File

@ -1,5 +1,5 @@
local Event = require('event')
local Socket = require('socket')
local Event = require('event')
local fileUid = 0
local fileHandles = { }

View File

@ -1,6 +1,7 @@
local Event = require('event')
local GPS = require('gps')
local Socket = require('socket')
local GPS = require('gps')
local Event = require('event')
local Util = require('util')
-- move this into gps api
local gpsRequested

View File

@ -1,10 +1,13 @@
local Event = require('event')
local Socket = require('socket')
local Event = require('event')
local Util = require('util')
local function telnetHost(socket)
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Event = require('event')
local methods = { 'clear', 'clearLine', 'setCursorPos', 'write', 'blit',
'setTextColor', 'setTextColour', 'setBackgroundColor',
'setBackgroundColour', 'scroll', 'setCursorBlink', }

View File

@ -1,6 +1,8 @@
local Socket = require('socket')
local Event = require('event')
local Crypto = require('crypto')
local Crypto = require('crypto')
local Event = require('event')
local Security = require('security')
local Socket = require('socket')
local Util = require('util')
Event.addRoutine(function()
@ -12,7 +14,7 @@ Event.addRoutine(function()
local data = socket:read(2)
if data then
local password = os.getPassword()
local password = Security.getPassword()
if not password then
socket:write({ msg = 'No password has been set' })
else

View File

@ -1,5 +1,6 @@
local Socket = require('socket')
local Event = require('event')
local Socket = require('socket')
local Util = require('util')
local function wrapTerm(socket, termInfo)
local methods = { 'blit', 'clear', 'clearLine', 'setCursorPos', 'write',

View File

@ -1,6 +1,8 @@
require = requireInjector(getfenv(1))
local Event = require('event')
requireInjector(getfenv(1))
local Event = require('event')
local Peripheral = require('peripheral')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Devices')

View File

@ -1,6 +1,6 @@
if device.wireless_modem then
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Config = require('config')
local config = {
host = false,

View File

@ -1,5 +1,7 @@
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Terminal = require('terminal')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Debug')

View File

@ -1,4 +1,5 @@
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Net Daemon')
@ -6,7 +7,7 @@ multishell.setTitle(multishell.getCurrent(), 'Net Daemon')
_G.network = { }
local function netUp()
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local Event = require('event')
local files = fs.list('/sys/network')