Took newer version of ocarina2 and renamed to scion
This commit is contained in:
commit
bd2c285a1d
|
@ -0,0 +1,2 @@
|
||||||
|
|
||||||
|
#__all__ = ["bt"]
|
|
@ -0,0 +1,4 @@
|
||||||
|
# This is the base tools package
|
||||||
|
# It contains various tools needed by the base layer of ocarina2
|
||||||
|
|
||||||
|
__all__ = ["proc", "message"]
|
Binary file not shown.
|
@ -0,0 +1,44 @@
|
||||||
|
import os.path
|
||||||
|
__author__="bjschuma"
|
||||||
|
__date__ ="$Dec 6, 2009 11:35:56 PM$"
|
||||||
|
|
||||||
|
import os
|
||||||
|
from message import write
|
||||||
|
|
||||||
|
|
||||||
|
# Check if path is a directory
|
||||||
|
def checkDir(path):
|
||||||
|
path = os.path.expanduser(path)
|
||||||
|
if checkPath(path) == True:
|
||||||
|
return os.path.isdir(path)
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
# Check if path exists
|
||||||
|
def checkPath(path):
|
||||||
|
path = os.path.expanduser(path)
|
||||||
|
write("Checking if "+path+" exists", True)
|
||||||
|
return os.path.exists(path)
|
||||||
|
|
||||||
|
|
||||||
|
def expandPath(path):
|
||||||
|
return os.path.expanduser(path)
|
||||||
|
|
||||||
|
|
||||||
|
# Open a file
|
||||||
|
def fopen(path,flags='r'):
|
||||||
|
path = os.path.expanduser(path)
|
||||||
|
# If we are reading a file, check that it exists
|
||||||
|
if ('r' in flags) == True:
|
||||||
|
exists = checkPath(path)
|
||||||
|
if exists == False:
|
||||||
|
write(path+" does not exist", True)
|
||||||
|
return None
|
||||||
|
return open(path, flags)
|
||||||
|
|
||||||
|
|
||||||
|
# Return a listing of directory contents
|
||||||
|
def ls(path):
|
||||||
|
if checkDir(path) == False:
|
||||||
|
return []
|
||||||
|
return os.listdir(path)
|
Binary file not shown.
|
@ -0,0 +1,22 @@
|
||||||
|
|
||||||
|
|
||||||
|
__author__="bjschuma"
|
||||||
|
__date__ ="$Dec 5, 2009 6:46:13 PM$"
|
||||||
|
|
||||||
|
import os
|
||||||
|
import inspect
|
||||||
|
import settings
|
||||||
|
|
||||||
|
|
||||||
|
# Print an error message
|
||||||
|
def error(text):
|
||||||
|
lineno = str(inspect.currentframe().f_back.f_lineno)
|
||||||
|
filename = inspect.currentframe().f_back.f_code.co_filename
|
||||||
|
filename = filename.rsplit(os.sep,1)[1]
|
||||||
|
print filename,"("+lineno+"):",text
|
||||||
|
|
||||||
|
# Print general text to the screen
|
||||||
|
def write(text,verbose=False):
|
||||||
|
if (verbose==False) or (settings.get("verbose")==True):
|
||||||
|
print text
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,30 @@
|
||||||
|
# Manages process-related tasks
|
||||||
|
|
||||||
|
__author__="bjschuma"
|
||||||
|
__date__ ="$Dec 5, 2009 6:33:50 PM$"
|
||||||
|
|
||||||
|
import settings
|
||||||
|
from message import write
|
||||||
|
|
||||||
|
# Set our process name to name
|
||||||
|
def setname(name):
|
||||||
|
# Set the process name (thank you exaile.py)
|
||||||
|
# This only works on linux2 machines
|
||||||
|
message = "Attempting to set process name to ocarina2..."
|
||||||
|
if settings.settings["ARCH"] == 'linux2':
|
||||||
|
try:
|
||||||
|
import ctypes
|
||||||
|
libc = ctypes.CDLL('libc.so.6')
|
||||||
|
libc.prctl(15,name, 0, 0, 0)
|
||||||
|
message += "success!"
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
import dl
|
||||||
|
libc = dl.open('/lib/libc.so.6')
|
||||||
|
name+="\0"
|
||||||
|
libc.call('prctl',15, name, 0, 0, 0) # 15 is PR_SET_NAME
|
||||||
|
message += "success!"
|
||||||
|
except:
|
||||||
|
message += "failed."
|
||||||
|
|
||||||
|
write(message,True)
|
Binary file not shown.
|
@ -0,0 +1,54 @@
|
||||||
|
# This class is used to load plugins
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from bt.message import write
|
||||||
|
from bt.file import *
|
||||||
|
|
||||||
|
|
||||||
|
class PluginLoader:
|
||||||
|
def __init__(self):
|
||||||
|
# Plugins are added to this array upon loading
|
||||||
|
self.plugins = []
|
||||||
|
|
||||||
|
|
||||||
|
def clearPlugins(self):
|
||||||
|
self.plugins = []
|
||||||
|
|
||||||
|
|
||||||
|
# Load plugins from a directory
|
||||||
|
def loaddir(self, dir):
|
||||||
|
exists = checkDir(dir)
|
||||||
|
# Exit now if the directory doesn't exist
|
||||||
|
if exists == False:
|
||||||
|
return
|
||||||
|
write("Loading plugins from " + dir, True)
|
||||||
|
|
||||||
|
# Add the directory to our import path
|
||||||
|
sys.path.append(dir)
|
||||||
|
modlist = ls(dir)
|
||||||
|
for mod in modlist:
|
||||||
|
split = mod.rsplit('.',1)
|
||||||
|
# Check for things we should not import
|
||||||
|
if split[0]=="__init__":
|
||||||
|
continue
|
||||||
|
elif split[1]=="pyc":
|
||||||
|
continue
|
||||||
|
# Load the module into our module array
|
||||||
|
write("Attempting to load "+mod, True)
|
||||||
|
self.loadmod(split[0])
|
||||||
|
|
||||||
|
|
||||||
|
# Call with a module name to import
|
||||||
|
# Adds the imported module to a list
|
||||||
|
def loadmod(self,mod):
|
||||||
|
__import__(mod)
|
||||||
|
plugin = sys.modules[mod]
|
||||||
|
plugin.__name__ = mod
|
||||||
|
self.plugins += [plugin]
|
||||||
|
|
||||||
|
|
||||||
|
# Load specific plugin
|
||||||
|
def loadpath(self, path):
|
||||||
|
write("Loading " + path)
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,90 @@
|
||||||
|
|
||||||
|
|
||||||
|
__author__="bjschuma"
|
||||||
|
__date__ ="$Dec 8, 2009 8:40:36 AM$"
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from bt.message import write
|
||||||
|
|
||||||
|
class Manager:
|
||||||
|
def __init__(self):
|
||||||
|
write("Creating plugin manager", True)
|
||||||
|
self.enabled = []
|
||||||
|
# Map plugin name to dictionary
|
||||||
|
self.disabled = []
|
||||||
|
|
||||||
|
|
||||||
|
def addPlugins(self, plugins):
|
||||||
|
# Add each plugin to the disabled list
|
||||||
|
for plugin in plugins:
|
||||||
|
write("Adding plugin: " + str(plugin), True)
|
||||||
|
self.disabled += [plugin]
|
||||||
|
# If we are adding a core plugin, activate it right away
|
||||||
|
if(plugin.__type__=="core"):
|
||||||
|
self.enablePlugin(plugin.__name__)
|
||||||
|
|
||||||
|
|
||||||
|
# Move plugin from old[index] to new
|
||||||
|
# Return the plugin
|
||||||
|
def movePlugin(self, index, old, new):
|
||||||
|
plugin = old.pop(index)
|
||||||
|
index = len(new)
|
||||||
|
new += [plugin]
|
||||||
|
return plugin,index
|
||||||
|
|
||||||
|
|
||||||
|
# Disable a plugin, return index of disabled plugin
|
||||||
|
def disablePlugin(self,name):
|
||||||
|
index = self.findPlugin(name, self.enabled)
|
||||||
|
if index > -1:
|
||||||
|
write("Disabling plugin: "+name)
|
||||||
|
plugin,index = self.movePlugin(index, self.enabled, self.disabled)
|
||||||
|
plugin.close()
|
||||||
|
return index
|
||||||
|
|
||||||
|
|
||||||
|
# Move a plugin to the enabled list, return number of plugins enabled
|
||||||
|
def enablePlugin(self,name):
|
||||||
|
index = self.findPlugin(name, self.disabled)
|
||||||
|
if index > -1:
|
||||||
|
write("Enabling plugin: "+name,True)
|
||||||
|
plugin,index = self.movePlugin(index, self.disabled, self.enabled)
|
||||||
|
plugin.open()
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
# Return first location where plugin.__name__ == name
|
||||||
|
def findPlugin(self,name,array):
|
||||||
|
write("Finding plugin: "+name,True)
|
||||||
|
for i in range(len(array)):
|
||||||
|
if array[i].__name__ == name:
|
||||||
|
return i
|
||||||
|
return -1
|
||||||
|
|
||||||
|
|
||||||
|
# Disable the plugin, reload it, reenable it
|
||||||
|
def reloadPlugin(self,name):
|
||||||
|
# Check if plugin has been loaded
|
||||||
|
if (name in sys.modules) == False:
|
||||||
|
write("Plugin not loaded: "+name, True)
|
||||||
|
return
|
||||||
|
reenable = self.disablePlugin(name)
|
||||||
|
|
||||||
|
#import sys
|
||||||
|
#write(sys.modules["example"])
|
||||||
|
#return
|
||||||
|
#reenable = self.disablePlugin(name)
|
||||||
|
#index = self.findPlugin(name, self.disabled)
|
||||||
|
#write("Reloading plugin: "+name)
|
||||||
|
#plugin = self.disabled[index]
|
||||||
|
#print plugin
|
||||||
|
#reload(plugin)
|
||||||
|
# Only reenable if a plugin was disabled
|
||||||
|
#if reenable == True:
|
||||||
|
# self.enablePlugin(name)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
global manager
|
||||||
|
manager = Manager()
|
Binary file not shown.
|
@ -0,0 +1,44 @@
|
||||||
|
# To change this template, choose Tools | Templates
|
||||||
|
# and open the template in the editor.
|
||||||
|
|
||||||
|
__author__="bjschuma"
|
||||||
|
__date__ ="$Dec 4, 2009 3:37:21 PM$"
|
||||||
|
|
||||||
|
global name
|
||||||
|
name = "ocarina2"
|
||||||
|
|
||||||
|
# We need to import settings before we can use disp()
|
||||||
|
import settings
|
||||||
|
|
||||||
|
# The first thing we do is import write() so we can occasionally print messages
|
||||||
|
from bt.message import write
|
||||||
|
write("Welcome to Ocarina2")
|
||||||
|
|
||||||
|
# Next, we set the process name to ocarina2
|
||||||
|
from bt.proc import setname
|
||||||
|
setname(name)
|
||||||
|
|
||||||
|
# Import the plugin loader class!
|
||||||
|
import loader
|
||||||
|
import manager
|
||||||
|
|
||||||
|
|
||||||
|
def loadPluginPath(path):
|
||||||
|
# Load a plugin directory, add give to the plugin manager
|
||||||
|
load = loader.PluginLoader()
|
||||||
|
load.loaddir("../core")
|
||||||
|
manager.manager.addPlugins(load.plugins)
|
||||||
|
|
||||||
|
|
||||||
|
# Begin our main loop
|
||||||
|
def main():
|
||||||
|
load = loader.PluginLoader()
|
||||||
|
for path in settings.get("PLUGPATH"):
|
||||||
|
loadPluginPath(path)
|
||||||
|
|
||||||
|
raw_input("Input something:")
|
||||||
|
manager.manager.reloadPlugin("example")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":main()
|
|
@ -0,0 +1,65 @@
|
||||||
|
import os.path
|
||||||
|
__author__="bjschuma"
|
||||||
|
__date__ ="$Dec 4, 2009 4:04:24 PM$"
|
||||||
|
|
||||||
|
from bt.message import write
|
||||||
|
from bt.message import error
|
||||||
|
from bt.file import fopen
|
||||||
|
#import bt.message.disp
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import getopt
|
||||||
|
|
||||||
|
|
||||||
|
# Create a dictionary to hold the settings
|
||||||
|
global settings
|
||||||
|
settings = dict()
|
||||||
|
|
||||||
|
# Return the value at key
|
||||||
|
def get(key):
|
||||||
|
return settings[key.upper()]
|
||||||
|
|
||||||
|
|
||||||
|
# Read settings from file
|
||||||
|
def readfile(file):
|
||||||
|
write("Reading file: "+file,True)
|
||||||
|
file = fopen(file)
|
||||||
|
|
||||||
|
|
||||||
|
# Parse the user input
|
||||||
|
def parseInput():
|
||||||
|
write("Parsing user input",True)
|
||||||
|
input = sys.argv[1:]
|
||||||
|
write(input,True)
|
||||||
|
optc = "v"
|
||||||
|
long = ["verbose"]
|
||||||
|
|
||||||
|
# Attempt to parse user input
|
||||||
|
try:
|
||||||
|
opts, args = getopt.getopt(input, optc, long)
|
||||||
|
except getopt.GetoptError, e:
|
||||||
|
error(e.msg)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set default values
|
||||||
|
# Set verbose first so we can use write()
|
||||||
|
settings["VERBOSE"] = ('-v' in sys.argv) or ("--verbose" in sys.argv)
|
||||||
|
write("Setting default values...", True)
|
||||||
|
# Find who is running the program
|
||||||
|
user = os.path.expanduser("~")
|
||||||
|
user = os.path.join(user,".ocarina2")
|
||||||
|
settings["USER"] = user
|
||||||
|
settings["PLUGPATH"] = ["../core"]
|
||||||
|
|
||||||
|
# Find out what platform we are running on
|
||||||
|
settings["ARCH"] = sys.platform
|
||||||
|
|
||||||
|
if settings["ARCH"] == 'linux2':
|
||||||
|
readfile("/etc/ocarina.conf")
|
||||||
|
|
||||||
|
parseInput()
|
Binary file not shown.
|
@ -0,0 +1,24 @@
|
||||||
|
# This is a simple test plugin, to make sure everything is working
|
||||||
|
|
||||||
|
__author__="bjschuma"
|
||||||
|
__date__ ="$Dec 7, 2009 9:12:00 AM$"
|
||||||
|
|
||||||
|
__name__="test"
|
||||||
|
__type__="core"
|
||||||
|
__opt__=[]
|
||||||
|
|
||||||
|
from bt.message import write
|
||||||
|
|
||||||
|
|
||||||
|
# Called every time the plugin is enabled
|
||||||
|
def open():
|
||||||
|
write("Example plugin has been started",True)
|
||||||
|
|
||||||
|
|
||||||
|
def close():
|
||||||
|
write("Example plugin has been stopped")
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def run():
|
||||||
|
pass
|
Binary file not shown.
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This is a simple shell script for properly starting ocarina
|
||||||
|
cd base && `which python` ocarina.py $*
|
Loading…
Reference in New Issue