mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
	
	
		
			109 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			109 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | """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() | ||
|  | 			 |