summaryrefslogtreecommitdiff
path: root/build/tpt_console.py
blob: c11d3e754e1fe10cf46c456af1087dacfc823fac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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()