Mercurial > cpython-lru_cache-weakref
annotate Mac/scripts/RunLibScript.py @ 3043:4581a0f0353e legacy-trunk
- imp seems to always want a file object arg
- continue if resource file not found (may be an applet)
| author | Jack Jansen <jack.jansen@cwi.nl> |
|---|---|
| date | Thu, 31 Aug 1995 13:46:13 +0000 |
| parents | 7eea9b426802 |
| children | fc77e34ef274 |
| rev | line source |
|---|---|
|
2873
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
1 """Import a module while pretending its name is __main__. This |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
2 can be used to run scripts from the PackedLib resource file while pretending |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
3 they have been double-clicked.""" |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
4 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
5 import imp |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
6 import sys |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
7 import os |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
8 import string |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
9 import Dlg |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
10 import macfs |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
11 |
|
2979
7eea9b426802
Added prompts to various file-select dialogs
Jack Jansen <jack.jansen@cwi.nl>
parents:
2873
diff
changeset
|
12 DIALOG_ID = 512 |
|
2873
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
13 OK = 1 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
14 CANCEL = 2 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
15 SCRIPTNAME=3 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
16 ARGV=4 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
17 STDIN_CONS=5 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
18 STDIN_FILE=6 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
19 STDOUT_CONS=7 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
20 STDOUT_FILE=8 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
21 WORKING_DIR=9 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
22 PAUSE=10 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
23 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
24 def import_as_main(name): |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
25 fp, path, (suffix, mode, type) = imp.find_module(name) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
26 if type == imp.PY_SOURCE: |
|
3043
4581a0f0353e
- imp seems to always want a file object arg
Jack Jansen <jack.jansen@cwi.nl>
parents:
2979
diff
changeset
|
27 imp.load_source('__main__', path, fp) |
|
2873
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
28 elif type == imp.PY_COMPILED: |
|
3043
4581a0f0353e
- imp seems to always want a file object arg
Jack Jansen <jack.jansen@cwi.nl>
parents:
2979
diff
changeset
|
29 imp.load_compiled('__main__', path, fp) |
|
2873
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
30 elif type == imp.PY_RESOURCE: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
31 imp.load_resource('__main__', path) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
32 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
33 def interact(): |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
34 d = Dlg.GetNewDialog(DIALOG_ID, -1) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
35 wdir = stdin = stdout = None |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
36 pause = 0 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
37 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
38 tp, in_c_h, rect = d.GetDialogItem(STDIN_CONS) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
39 tp, in_f_h, rect = d.GetDialogItem(STDIN_FILE) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
40 tp, out_c_h, rect = d.GetDialogItem(STDOUT_CONS) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
41 tp, out_f_h, rect = d.GetDialogItem(STDOUT_FILE) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
42 tp, pause_h, rect = d.GetDialogItem(PAUSE) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
43 in_c_h = in_c_h.as_Control() |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
44 in_f_h = in_f_h.as_Control() |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
45 out_c_h = out_c_h.as_Control() |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
46 out_f_h = out_f_h.as_Control() |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
47 pause_h = pause_h.as_Control() |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
48 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
49 while 1: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
50 in_c_h.SetControlValue(not stdin) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
51 in_f_h.SetControlValue(not not stdin) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
52 out_c_h.SetControlValue(not stdout) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
53 out_f_h.SetControlValue(not not stdout) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
54 pause_h.SetControlValue(pause) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
55 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
56 n = Dlg.ModalDialog(None) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
57 if n == OK: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
58 break |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
59 elif n == CANCEL: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
60 sys.exit(0) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
61 elif n == STDIN_CONS: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
62 stdin = None |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
63 elif n == STDIN_FILE: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
64 fss, ok = macfs.StandardGetFile('TEXT') |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
65 if ok: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
66 stdin = fss |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
67 elif n == STDOUT_FILE: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
68 fss, ok = macfs.StandardPutFile('stdout:') |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
69 if ok: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
70 stdout = fss |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
71 elif n == WORKING_DIR: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
72 fss, ok = macfs.GetDirectory() |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
73 if ok: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
74 wdir = fss |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
75 elif n == PAUSE: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
76 pause = (not pause) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
77 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
78 tp, h, rect = d.GetDialogItem(SCRIPTNAME) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
79 name = Dlg.GetDialogItemText(h) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
80 tp, h, rect = d.GetDialogItem(ARGV) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
81 argv = Dlg.GetDialogItemText(h) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
82 return name, argv, stdin, stdout, wdir, pause |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
83 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
84 def main(): |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
85 curdir = os.getcwd() |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
86 import Res |
|
3043
4581a0f0353e
- imp seems to always want a file object arg
Jack Jansen <jack.jansen@cwi.nl>
parents:
2979
diff
changeset
|
87 try: |
|
4581a0f0353e
- imp seems to always want a file object arg
Jack Jansen <jack.jansen@cwi.nl>
parents:
2979
diff
changeset
|
88 Res.OpenResFile('RunLibScript.rsrc') |
|
4581a0f0353e
- imp seems to always want a file object arg
Jack Jansen <jack.jansen@cwi.nl>
parents:
2979
diff
changeset
|
89 except: |
|
4581a0f0353e
- imp seems to always want a file object arg
Jack Jansen <jack.jansen@cwi.nl>
parents:
2979
diff
changeset
|
90 pass # Assume we're an applet already |
|
2873
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
91 name, argv, stdin, stdout, wdir, pause = interact() |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
92 if not name: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
93 sys.exit(0) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
94 sys.argv = [name] + string.split(argv) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
95 if stdin: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
96 sys.stdin = open(stdin.as_pathname()) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
97 if stdout: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
98 sys.stdout = open(stdout.as_pathname(), 'w') |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
99 if wdir: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
100 os.chdir(wdir.as_pathname()) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
101 else: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
102 os.chdir(curdir) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
103 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
104 import_as_main(name) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
105 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
106 if pause: |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
107 sys.exit(1) |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
108 |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
109 if __name__ == '__main__': |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
110 main() |
|
315760ba0041
A new home for scripts/applets
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
111 |
