| 
									
										
										
										
											1995-07-29 13:48:41 +00:00
										 |  |  | """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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-08-14 12:21:12 +00:00
										 |  |  | DIALOG_ID = 512 | 
					
						
							| 
									
										
										
										
											1995-07-29 13:48:41 +00:00
										 |  |  | 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: | 
					
						
							| 
									
										
										
										
											1995-08-31 13:46:13 +00:00
										 |  |  | 		imp.load_source('__main__', path, fp) | 
					
						
							| 
									
										
										
										
											1995-07-29 13:48:41 +00:00
										 |  |  | 	elif type == imp.PY_COMPILED: | 
					
						
							| 
									
										
										
										
											1995-08-31 13:46:13 +00:00
										 |  |  | 		imp.load_compiled('__main__', path, fp) | 
					
						
							| 
									
										
										
										
											1995-07-29 13:48:41 +00:00
										 |  |  | 	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 | 
					
						
							| 
									
										
										
										
											1995-08-31 13:46:13 +00:00
										 |  |  | 	try: | 
					
						
							| 
									
										
										
										
											2000-06-20 21:59:25 +00:00
										 |  |  | 		Res.FSpOpenResFile('RunLibScript.rsrc', 1) | 
					
						
							| 
									
										
										
										
											1995-08-31 13:46:13 +00:00
										 |  |  | 	except: | 
					
						
							|  |  |  | 		pass # Assume we're an applet already | 
					
						
							| 
									
										
										
										
											1995-07-29 13:48:41 +00:00
										 |  |  | 	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() | 
					
						
							|  |  |  | 			 |