mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +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.OpenResFile('RunLibScript.rsrc')
 | 
						|
	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()
 | 
						|
			
 |