diff options
Diffstat (limited to 'Mac/Unsupported')
-rw-r--r-- | Mac/Unsupported/PackLibDir.py | 49 | ||||
-rw-r--r-- | Mac/Unsupported/PackLibDir.rsrc | bin | 0 -> 3038 bytes | |||
-rw-r--r-- | Mac/Unsupported/RunLibScript.py | 111 | ||||
-rw-r--r-- | Mac/Unsupported/RunLibScript.rsrc | bin | 0 -> 3514 bytes | |||
-rw-r--r-- | Mac/Unsupported/run.py | 41 |
5 files changed, 201 insertions, 0 deletions
diff --git a/Mac/Unsupported/PackLibDir.py b/Mac/Unsupported/PackLibDir.py new file mode 100644 index 0000000..ba689e6 --- /dev/null +++ b/Mac/Unsupported/PackLibDir.py @@ -0,0 +1,49 @@ +# +# Turn a pyc file into a resource file containing it in 'PYC ' resource form +from Carbon.Res import * +from Carbon import Res +from Carbon.Resources import * +import os +import macfs +import sys +import py_resource + +error = 'mkpycresourcefile.error' + +def mkpycresourcefile(src, dst): + """Copy pyc file/dir src to resource file dst.""" + + if not os.path.isdir(src) and src[-4:] <> '.pyc': + raise error, 'I can only handle .pyc files or directories' + fsid = py_resource.create(dst) + if os.path.isdir(src): + handlesubdir(src) + else: + id, name = py_resource.frompycfile(src) + print 'Wrote %d: %s %s'%(id, name, src) + CloseResFile(fsid) + +def handlesubdir(srcdir): + """Recursively scan a directory for pyc files and copy to resources""" + src = os.listdir(srcdir) + for file in src: + file = os.path.join(srcdir, file) + if os.path.isdir(file): + handlesubdir(file) + elif file[-4:] == '.pyc': + id, name = py_resource.frompycfile(file) + print 'Wrote %d: %s %s'%(id, name, file) + +if __name__ == '__main__': + args = sys.argv[1:] + if not args: + ifss, ok = macfs.GetDirectory('Select root of tree to pack:') + if not ok: + sys.exit(0) + args = [ifss.as_pathname()] + for ifn in args: + ofss, ok = macfs.StandardPutFile('Output for '+os.path.split(ifn)[1]) + if not ok: + sys.exit(0) + mkpycresourcefile(ifn, ofss.as_pathname()) + sys.exit(1) # So we can see something... diff --git a/Mac/Unsupported/PackLibDir.rsrc b/Mac/Unsupported/PackLibDir.rsrc Binary files differnew file mode 100644 index 0000000..bcdbf0b --- /dev/null +++ b/Mac/Unsupported/PackLibDir.rsrc diff --git a/Mac/Unsupported/RunLibScript.py b/Mac/Unsupported/RunLibScript.py new file mode 100644 index 0000000..6ecf643 --- /dev/null +++ b/Mac/Unsupported/RunLibScript.py @@ -0,0 +1,111 @@ +"""Import a module while pretending its name is __main__. This +can be used to run scripts from the PackedLib resource file while pretending +they have been double-clicked.""" + +import imp +import sys +import os +import string +from Carbon import Dlg +import macfs + +DIALOG_ID = 512 +OK = 1 +CANCEL = 2 +SCRIPTNAME=3 +ARGV=4 +STDIN_CONS=5 +STDIN_FILE=6 +STDOUT_CONS=7 +STDOUT_FILE=8 +WORKING_DIR=9 +PAUSE=10 + +def import_as_main(name): + fp, path, (suffix, mode, type) = imp.find_module(name) + if type == imp.PY_SOURCE: + imp.load_source('__main__', path, fp) + elif type == imp.PY_COMPILED: + imp.load_compiled('__main__', path, fp) + elif type == imp.PY_RESOURCE: + imp.load_resource('__main__', path) + +def interact(): + d = Dlg.GetNewDialog(DIALOG_ID, -1) + wdir = stdin = stdout = None + pause = 0 + + tp, in_c_h, rect = d.GetDialogItem(STDIN_CONS) + tp, in_f_h, rect = d.GetDialogItem(STDIN_FILE) + tp, out_c_h, rect = d.GetDialogItem(STDOUT_CONS) + tp, out_f_h, rect = d.GetDialogItem(STDOUT_FILE) + tp, pause_h, rect = d.GetDialogItem(PAUSE) + in_c_h = in_c_h.as_Control() + in_f_h = in_f_h.as_Control() + out_c_h = out_c_h.as_Control() + out_f_h = out_f_h.as_Control() + pause_h = pause_h.as_Control() + + while 1: + in_c_h.SetControlValue(not stdin) + in_f_h.SetControlValue(not not stdin) + out_c_h.SetControlValue(not stdout) + out_f_h.SetControlValue(not not stdout) + pause_h.SetControlValue(pause) + + n = Dlg.ModalDialog(None) + if n == OK: + break + elif n == CANCEL: + sys.exit(0) + elif n == STDIN_CONS: + stdin = None + elif n == STDIN_FILE: + fss, ok = macfs.StandardGetFile('TEXT') + if ok: + stdin = fss + elif n == STDOUT_FILE: + fss, ok = macfs.StandardPutFile('stdout:') + if ok: + stdout = fss + elif n == WORKING_DIR: + fss, ok = macfs.GetDirectory() + if ok: + wdir = fss + elif n == PAUSE: + pause = (not pause) + + tp, h, rect = d.GetDialogItem(SCRIPTNAME) + name = Dlg.GetDialogItemText(h) + tp, h, rect = d.GetDialogItem(ARGV) + argv = Dlg.GetDialogItemText(h) + return name, argv, stdin, stdout, wdir, pause + +def main(): + curdir = os.getcwd() + from Carbon import Res + try: + Res.FSpOpenResFile('RunLibScript.rsrc', 1) + except: + pass # Assume we're an applet already + name, argv, stdin, stdout, wdir, pause = interact() + if not name: + sys.exit(0) + sys.argv = [name] + string.split(argv) + if stdin: + sys.stdin = open(stdin.as_pathname()) + if stdout: + sys.stdout = open(stdout.as_pathname(), 'w') + if wdir: + os.chdir(wdir.as_pathname()) + else: + os.chdir(curdir) + + import_as_main(name) + + if pause: + sys.exit(1) + +if __name__ == '__main__': + main() + diff --git a/Mac/Unsupported/RunLibScript.rsrc b/Mac/Unsupported/RunLibScript.rsrc Binary files differnew file mode 100644 index 0000000..fea753c --- /dev/null +++ b/Mac/Unsupported/RunLibScript.rsrc diff --git a/Mac/Unsupported/run.py b/Mac/Unsupported/run.py new file mode 100644 index 0000000..75c6129 --- /dev/null +++ b/Mac/Unsupported/run.py @@ -0,0 +1,41 @@ +# Script (applet) to run any Python command + +def main(): + import sys + sys.stdout = sys.stderr + del sys.argv[:1] + if not sys.argv: + import macfs + srcfss, ok = macfs.StandardGetFile('TEXT') + if not ok: + return + filename = srcfss.as_pathname() + sys.argv.append(filename) + import __main__ + try: + execfile(sys.argv[0], __main__.__dict__) + except SystemExit, msg: + if msg: + message("Exit status: %s" % str(msg)) + print "exit", `msg` + #sys.exit(msg) + except: + etype = sys.exc_type + if hasattr(etype, "__name__"): etype = etype.__name__ + message("%s: %s" % (etype, sys.exc_value)) + print "exit 1" + #sys.exit(1) + +def message(str = "Hello, world!", id = 256): + from Carbon import Dlg + d = Dlg.GetNewDialog(id, -1) + if not d: + print str + return + tp, h, rect = d.GetDItem(2) + Dlg.SetIText(h, str) + while 1: + n = Dlg.ModalDialog(None) + if n == 1: break + +main() |