blob: 36787d9476633d8a0b127af474f08fab63db69f2 [file] [log] [blame]
Jack Jansen7571f301995-07-29 13:48:41 +00001"""Import a module while pretending its name is __main__. This
2can be used to run scripts from the PackedLib resource file while pretending
3they have been double-clicked."""
4
5import imp
6import sys
7import os
8import string
9import Dlg
10import macfs
11
12DIALOG_ID = 140
13OK = 1
14CANCEL = 2
15SCRIPTNAME=3
16ARGV=4
17STDIN_CONS=5
18STDIN_FILE=6
19STDOUT_CONS=7
20STDOUT_FILE=8
21WORKING_DIR=9
22PAUSE=10
23
24def import_as_main(name):
25 fp, path, (suffix, mode, type) = imp.find_module(name)
26 if type == imp.PY_SOURCE:
27 imp.load_source('__main__', path)
28 elif type == imp.PY_COMPILED:
29 imp.load_compiled('__main__', path)
30 elif type == imp.PY_RESOURCE:
31 imp.load_resource('__main__', path)
32
33def interact():
34 d = Dlg.GetNewDialog(DIALOG_ID, -1)
35 wdir = stdin = stdout = None
36 pause = 0
37
38 tp, in_c_h, rect = d.GetDialogItem(STDIN_CONS)
39 tp, in_f_h, rect = d.GetDialogItem(STDIN_FILE)
40 tp, out_c_h, rect = d.GetDialogItem(STDOUT_CONS)
41 tp, out_f_h, rect = d.GetDialogItem(STDOUT_FILE)
42 tp, pause_h, rect = d.GetDialogItem(PAUSE)
43 in_c_h = in_c_h.as_Control()
44 in_f_h = in_f_h.as_Control()
45 out_c_h = out_c_h.as_Control()
46 out_f_h = out_f_h.as_Control()
47 pause_h = pause_h.as_Control()
48
49 while 1:
50 in_c_h.SetControlValue(not stdin)
51 in_f_h.SetControlValue(not not stdin)
52 out_c_h.SetControlValue(not stdout)
53 out_f_h.SetControlValue(not not stdout)
54 pause_h.SetControlValue(pause)
55
56 n = Dlg.ModalDialog(None)
57 if n == OK:
58 break
59 elif n == CANCEL:
60 sys.exit(0)
61 elif n == STDIN_CONS:
62 stdin = None
63 elif n == STDIN_FILE:
64 fss, ok = macfs.StandardGetFile('TEXT')
65 if ok:
66 stdin = fss
67 elif n == STDOUT_FILE:
68 fss, ok = macfs.StandardPutFile('stdout:')
69 if ok:
70 stdout = fss
71 elif n == WORKING_DIR:
72 fss, ok = macfs.GetDirectory()
73 if ok:
74 wdir = fss
75 elif n == PAUSE:
76 pause = (not pause)
77
78 tp, h, rect = d.GetDialogItem(SCRIPTNAME)
79 name = Dlg.GetDialogItemText(h)
80 tp, h, rect = d.GetDialogItem(ARGV)
81 argv = Dlg.GetDialogItemText(h)
82 return name, argv, stdin, stdout, wdir, pause
83
84def main():
85 curdir = os.getcwd()
86 import Res
87 Res.OpenResFile('RunLibScript.rsrc')
88 name, argv, stdin, stdout, wdir, pause = interact()
89 if not name:
90 sys.exit(0)
91 sys.argv = [name] + string.split(argv)
92 if stdin:
93 sys.stdin = open(stdin.as_pathname())
94 if stdout:
95 sys.stdout = open(stdout.as_pathname(), 'w')
96 if wdir:
97 os.chdir(wdir.as_pathname())
98 else:
99 os.chdir(curdir)
100
101 import_as_main(name)
102
103 if pause:
104 sys.exit(1)
105
106if __name__ == '__main__':
107 main()
108