mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 18:07:37 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			111 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
	
		
			2.5 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 = 512
 | |
| 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, fp)
 | |
| 	elif type == imp.PY_COMPILED:
 | |
| 		imp.load_compiled('__main__', path, fp)
 | |
| 	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
 | |
| 	try:
 | |
| 		Res.FSpOpenResFile('RunLibScript.rsrc', 1)
 | |
| 	except:
 | |
| 		pass # Assume we're an applet already
 | |
| 	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()
 | |
| 			
 | 
