summaryrefslogtreecommitdiffstats
path: root/Mac/scripts/RunLibScript.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/scripts/RunLibScript.py')
-rw-r--r--Mac/scripts/RunLibScript.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/Mac/scripts/RunLibScript.py b/Mac/scripts/RunLibScript.py
new file mode 100644
index 0000000..36787d9
--- /dev/null
+++ b/Mac/scripts/RunLibScript.py
@@ -0,0 +1,108 @@
+"""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
+import Dlg
+import macfs
+
+DIALOG_ID = 140
+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)
+ elif type == imp.PY_COMPILED:
+ imp.load_compiled('__main__', path)
+ 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()
+ import Res
+ Res.OpenResFile('RunLibScript.rsrc')
+ 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()
+