summaryrefslogtreecommitdiff
path: root/build
diff options
context:
space:
mode:
authorLieuwe <lieuwemo@gmail.com>2011-02-26 10:49:23 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2011-03-02 20:54:19 (GMT)
commit364759ff0812a8049b2f3ca249a34a57fa2e4325 (patch)
tree0c83dc67f47ff9a6b8d4177e282744f8572af14a /build
parent647ff2bff073d525f1c02eea5c4e01e8dcd3f279 (diff)
downloadpowder-364759ff0812a8049b2f3ca249a34a57fa2e4325.zip
powder-364759ff0812a8049b2f3ca249a34a57fa2e4325.tar.gz
python console
Diffstat (limited to 'build')
-rw-r--r--build/example.py11
-rw-r--r--build/tpt_console.py130
2 files changed, 141 insertions, 0 deletions
diff --git a/build/example.py b/build/example.py
new file mode 100644
index 0000000..b1ac778
--- /dev/null
+++ b/build/example.py
@@ -0,0 +1,11 @@
+import tpt
+import random
+# example script
+
+def noise(typ,amount=50):
+ for xx in range(284,316):
+ for yy in range(184,216):
+ if(random.randrange(0,100)<amount):
+ tpt.create(xx,yy,typ)
+
+
diff --git a/build/tpt_console.py b/build/tpt_console.py
new file mode 100644
index 0000000..c11d3e7
--- /dev/null
+++ b/build/tpt_console.py
@@ -0,0 +1,130 @@
+import tpt
+import sys
+import code
+import ctypes
+import traceback
+from threading import Thread
+print "console module loaded."
+"""#redirect stdout like this:
+class logger:
+ def write(self,txt):
+ txt=txt[:254]
+ tpt.log(txt)
+sys.stdout=logger()"""
+
+element={"none":0,"dust":1,"watr":2,"oil":3,"fire":4,"stne":5,"lava":6,"gunp":7,
+ "nitr":8,"clne":9,"gas":10,"plex":11,"goo":12,"icei":13,"metl":14,"sprk":15,
+ "snow":16,"wood":17,"neut":18,"plut":19,"plnt":20,"acid":21,"void":22,
+ "wtrv":23,"cnct":24,"dstw":25,"salt":26,"sltw":27,"dmnd":28,"bmtl":29,
+ "brmt":30,"phot":31,"uran":32,"wax":33,"mwax":34,"pscn":35,"nscn":36,
+ "lntg":37,"insl":38,"bhol":39,"whol":40,"rbdm":41,"lrbd":42,"ntct":43,
+ "sand":44,"glas":45,"ptct":46,"bgla":47,"thdr":48,"plsm":49,"etrd":50,
+ "nice":51,"nble":52,"btry":53,"lcry":54,"stkm":55,"swch":56,"smke":57,
+ "desl":58,"coal":59,"lo2":60,"o2":61,"inwr":62,"yest":63,"dyst":64,
+ "thrm":65,"glow":66,"brck":67,"hflm":68,"firw":69,"fuse":70,"fsep":71,
+ "amtr":72,"bcol":73,"pcln":74,"hswc":75,"iron":76,"mort":77,"gol":78,
+ "hlif":79,"asim":80,"2x2":81,"dani":82,"amoe":83,"move":84,"pgol":85,
+ "dmoe":86,"34":87,"llif":88,"stan":89,"spng":90,"rime":91,"fog":92,
+ "bcln":93,"love":94,"deut":95,"warp":96,"pump":97,"fwrk":98,"pipe":99,
+ "frzz":100,"frzw":101,"grav":102,"bizr":103,"bizrg":104,"bizrs":105,
+ "inst":106,"isoz":107,"iszs":108,"prti":109,"prto":110,"pste":111,
+ "psts":112,"anar":113,"vine":114,"invis":115,"equalvel":116,"spawn2":117,
+ "spawn":118,"shld1":119,"shld2":120,"shld3":121,"shld4":122,"lolz":123,
+ "wifi":124,"filt":125,"aray":126,"bray":127,"stkm2":128,"bomb":129,
+ "c5":130,"sing":131,"qrtz":132,"pqrt":133,"seed":134,"maze":135,
+ "coag":136,"wall":137,"gnar":138,"repl":139,"myst":140,"boyl":141,
+ "lote":142,"frg2":143,"star":144,"frog":145,"bran":146,"wind":147,
+ "num":148}
+
+def _async_raise(tid, exctype):
+ '''Raises an exception in the threads with id tid'''
+ if not inspect.isclass(exctype):
+ raise TypeError("Only types can be raised (not instances)")
+ res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
+ if res == 0:
+ raise ValueError("invalid thread id")
+ elif res != 1:
+ # """if it returns a number greater than one, you're in trouble,
+ # and you should call it again with exc=NULL to revert the effect"""
+ ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, 0)
+ raise SystemError("PyThreadState_SetAsyncExc failed")
+
+class _fork(Thread):
+ def __init__ (self,func):
+ Thread.__init__(self)
+ self.func=func
+ def run(self):
+ self.func(self)
+def fork(func):
+ try:
+ a=fork.threads
+ except:
+ fork.threads={}
+ fork.i=0
+ tmp=_fork(func)
+ fork.threads[fork.i]=tmp
+ fork.i+=1
+ tmp.start()
+ tpt.log("Thread #%d started"%(fork.i-1))
+def fork_status():
+ count=0
+ remove=[]
+ for key in fork.threads:
+ if(fork.threads[key].is_alive()):
+ count+=1
+ else:
+ remove.append[key]
+ for item in remove:
+ del fork.threads[item]
+ tpt.log("%d threads alive. %d threads stopped since last status."%(count,len(remove)))
+def fork_unblock():
+ pass#i need to implement this some day.
+def error(ex):
+ name,_,_=repr(ex).partition("(")
+ tpt.log("%s: %s"%(name,str(ex)))
+
+def clean():
+ #add any functions that must be reachable here.
+ copy=["__builtins__","__name__","__doc__","__package__",'tpt','clean',
+ 'element','fork','_fork','fork_status','fork_unblock']
+ handle.glob={}
+ for item in copy:
+ handle.glob[item]=globals()[item]
+
+def handle(txt):
+ try:
+ a=handle.glob
+ except:
+ clean()
+ try:
+ _handle(txt)
+ except Exception as ex:
+ error(ex)
+ print "### -------------------- trace"
+ traceback.print_exc()
+
+def _handle(txt):
+ print "handling '%s'"%txt
+ tpt.console_less()
+ try:
+ #tmp=code.compile_command('\n'.join(handle.txt))
+ tmp=code.compile_command(txt)
+ except Exception as ex:
+ #tpt.log("Invalid code. see stdout for more info.")
+ error(ex)
+ print "### -------------------- trace"
+ traceback.print_exc()
+ return
+ if(tmp==None):
+ tpt.console_more()
+ else:
+ try:
+ #print "executing"
+ exec tmp in handle.glob
+ except Exception as ex:
+ #tpt.log("Invalid code. see stdout for more info.")
+ error(ex)
+ print "### -------------------- trace"
+ traceback.print_exc()
+
+ \ No newline at end of file