Guest User

Untitled

a guest
Oct 9th, 2017
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.24 KB | None | 0 0
  1. import sys
  2. import app
  3. import dbg
  4.  
  5. sys.path.append("lib")
  6.  
  7. class TraceFile:
  8.     def write(self, msg):
  9.         dbg.Trace(msg)
  10.  
  11. class TraceErrorFile:
  12.     def write(self, msg):
  13.         dbg.TraceError(msg)
  14.         dbg.RegisterExceptionString(msg)
  15.  
  16. class LogBoxFile:
  17.     def __init__(self):
  18.         self.stderrSave = sys.stderr
  19.         self.msg = ""
  20.  
  21.     def __del__(self):
  22.         self.restore()
  23.  
  24.     def restore(self):
  25.         sys.stderr = self.stderrSave
  26.  
  27.     def write(self, msg):
  28.         self.msg = self.msg + msg
  29.  
  30.     def show(self):
  31.         dbg.LogBox(self.msg,"Error")
  32.  
  33. sys.stdout = TraceFile()
  34. sys.stderr = TraceErrorFile()
  35.  
  36. #
  37. # pack file support (must move to system.py, systemrelease.pyc)
  38. #
  39.  
  40. import marshal
  41. import imp
  42. import pack
  43.  
  44. class pack_file_iterator(object):
  45.     def __init__(self, packfile):
  46.         self.pack_file = packfile
  47.        
  48.     def next(self):
  49.         tmp = self.pack_file.readline()
  50.         if tmp:
  51.             return tmp
  52.         raise StopIteration
  53.  
  54. _chr = __builtins__.chr
  55.  
  56. class pack_file(object):
  57.  
  58.     def __init__(self, filename, mode = 'rb'):
  59.         assert mode in ('r', 'rb')
  60.         if not pack.Exist(filename):
  61.             raise IOError, 'No file or directory'
  62.         self.data = pack.Get(filename)
  63.         if mode == 'r':
  64.             self.data=_chr(10).join(self.data.split(_chr(13)+_chr(10)))
  65.  
  66.     def __iter__(self):
  67.         return pack_file_iterator(self)
  68.  
  69.     def read(self, len = None):
  70.         if not self.data:
  71.             return ''
  72.         if len:
  73.             tmp = self.data[:len]
  74.             self.data = self.data[len:]
  75.             return tmp
  76.         else:
  77.             tmp = self.data
  78.             self.data = ''
  79.             return tmp
  80.  
  81.     def readline(self):
  82.         return self.read(self.data.find(_chr(10))+1)
  83.  
  84.     def readlines(self):
  85.         return [x for x in self]
  86.  
  87. __builtins__.pack_open = pack_open = pack_file
  88.  
  89. _ModuleType = type(sys)
  90.  
  91. old_import = __import__
  92. def _process_result(code, fqname):
  93.     # did get_code() return an actual module? (rather than a code object)
  94.     is_module = isinstance(code, _ModuleType)
  95.  
  96.     # use the returned module, or create a new one to exec code into
  97.     if is_module:
  98.         module = code
  99.     else:
  100.         module = imp.new_module(fqname)
  101.  
  102.     # insert additional values into the module (before executing the code)
  103.     #module.__dict__.update(values)
  104.  
  105.     # the module is almost ready... make it visible
  106.     sys.modules[fqname] = module
  107.  
  108.     # execute the code within the module's namespace
  109.     if not is_module:
  110.         exec code in module.__dict__
  111.  
  112.     # fetch from sys.modules instead of returning module directly.
  113.     # also make module's __name__ agree with fqname, in case
  114.     # the "exec code in module.__dict__" played games on us.
  115.     module = sys.modules[fqname]
  116.     module.__name__ = fqname
  117.     return module
  118.  
  119. module_do = lambda x:None
  120.  
  121. def __pack_import(name,globals=None,locals=None,fromlist=None):
  122.     if name in sys.modules:
  123.         return sys.modules[name]
  124.  
  125.     filename = name + '.py'
  126.  
  127.     if pack.Exist(filename):
  128.         dbg.Trace('importing from pack %s\\n' % name)
  129.  
  130.         newmodule = _process_result(compile(pack_file(filename,'r').read(),filename,'exec'),name)      
  131.  
  132.         module_do(newmodule)
  133.         return newmodule
  134.         #return imp.load_module(name, pack_file(filename,'r'),filename,('.py','r',imp.PY_SOURCE))
  135.     else:
  136.         dbg.Trace('importing from lib %s\\n' % name)
  137.         return old_import(name,globals,locals,fromlist)
  138.  
  139. def splitext(p):
  140.     root, ext = '', ''
  141.     for c in p:
  142.         if c in ['/']:
  143.             root, ext = root + ext + c, ''
  144.         elif c == '.':
  145.             if ext:
  146.                 root, ext = root + ext, c
  147.             else:
  148.                 ext = c
  149.         elif ext:
  150.             ext = ext + c
  151.         else:
  152.             root = root + c
  153.     return root, ext
  154.  
  155. class PythonExecutioner:
  156.  
  157.     def Run(kPESelf, sFileName, kDict):
  158.         if kPESelf.__IsCompiledFile__(sFileName):
  159.             kCode=kPESelf.__LoadCompiledFile__(sFileName)
  160.         else:
  161.             kCode=kPESelf.__LoadTextFile__(sFileName)
  162.  
  163.         exec(kCode, kDict)
  164.  
  165.     def __IsCompiledFile__(kPESelf, sFileName):
  166.  
  167.         sBase, sExt = splitext(sFileName)
  168.         sExt=sExt.lower()
  169.  
  170.         if sExt==".pyc" or sExt==".pyo":
  171.             return 1
  172.         else:
  173.             return 0
  174.  
  175.     def __LoadTextFile__(kPESelf, sFileName):
  176.         sText=pack_open(sFileName,'r').read()
  177.         return compile(sText, sFileName, "exec")
  178.  
  179.     def __LoadCompiledFile__(kPESelf, sFileName):
  180.         kFile=pack_open(sFileName)
  181.  
  182.         if kFile.read(4)!=imp.get_magic():
  183.             raise
  184.  
  185.         kFile.read(4)
  186.  
  187.         kData=kFile.read()
  188.         return marshal.loads(kData)
  189.  
  190. def execfile(fileName, dict):
  191.     kPE=PythonExecutioner()
  192.     kPE.Run(fileName, dict)
  193.  
  194. def exec_add_module_do(mod):
  195.     global execfile
  196.     mod.__dict__['execfile'] = execfile
  197.  
  198. import __builtin__
  199. __builtin__.__import__ = __pack_import
  200. module_do = exec_add_module_do
  201.  
  202. """
  203. #
  204. # PSYCO installation (must move to system.py, systemrelease.pyc)
  205. #
  206. try:
  207.     import psyco
  208.     #from psyco.classes import *
  209.  
  210.     def bind_me(bindable_list):
  211.         try:
  212.             for x in bindable_list:
  213.                 try:
  214.                     psyco.bind(x)
  215.                 except:
  216.                     pass
  217.         except:
  218.             pass       
  219.  
  220.     _prev_psyco_old_module_do = module_do
  221.     def module_bind(module):
  222.         _prev_psyco_old_module_do(module)
  223.         #print 'start binding' + str(module)
  224.         try:
  225.             psyco.bind(module)
  226.         except:
  227.             pass
  228.         for x in module.__dict__.itervalues():
  229.             try:
  230.                 psyco.bind(x)
  231.             except:
  232.                 pass       
  233.         #print 'end binding'
  234.  
  235.     dbg.Trace("PSYCO installed\\n")
  236.  
  237. except Exception, msg:
  238.     bind_me = lambda x:None
  239.     dbg.Trace("No PSYCO support : %s\\n" % msg)
  240. """
  241.  
  242. def GetExceptionString(excTitle):
  243.     (excType, excMsg, excTraceBack)=sys.exc_info()
  244.     excText=""
  245.     excText+=_chr(10)
  246.  
  247.     import traceback
  248.     traceLineList=traceback.extract_tb(excTraceBack)
  249.  
  250.     for traceLine in traceLineList:
  251.         if traceLine[3]:
  252.             excText+="%s(line:%d) %s - %s" % (traceLine[0], traceLine[1], traceLine[2], traceLine[3])
  253.         else:
  254.             excText+="%s(line:%d) %s"  % (traceLine[0], traceLine[1], traceLine[2])
  255.  
  256.         excText+=_chr(10)
  257.    
  258.     excText+=_chr(10)
  259.     excText+="%s - %s:%s" % (excTitle, excType, excMsg)    
  260.     excText+=_chr(10)
  261.  
  262.     return excText
  263.  
  264. def ShowException(excTitle):
  265.     excText=GetExceptionString(excTitle)
  266.     dbg.TraceError(excText)
  267.     app.Abort()
  268.  
  269.     return 0
  270.    
  271. def RunMainScript(name):
  272.     try:       
  273.         execfile(name, __main__.__dict__)
  274.     except RuntimeError, msg:
  275.         msg = str(msg)
  276.  
  277.         import locale
  278.         if locale.error:
  279.             msg = locale.error.get(msg, msg)
  280.  
  281.         dbg.LogBox(msg)
  282.         app.Abort()
  283.  
  284.     except:
  285.         msg = GetExceptionString("Run")
  286.         dbg.LogBox(msg)
  287.         app.Abort()
  288.    
  289. import debugInfo
  290. debugInfo.SetDebugMode(__DEBUG__)
  291.  
  292. loginMark = "-cs"
  293.  
  294. app.__COMMAND_LINE__ = __COMMAND_LINE__
  295. RunMainScript("prototype.py")
Advertisement
Add Comment
Please, Sign In to add comment