mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 13:11:29 +00:00 
			
		
		
		
	A new home for scripts/applets
EditPythonPrefs - Edit the preferences file (sys.path, python home) PackLibDir - Convert a sys.path directory to a resource file RunLibScript - import a module and run as __main__ mkapplet - Create a python applet The resource files belonging to these should also be stored here, somehow..
This commit is contained in:
		
							parent
							
								
									0db1ef96ac
								
							
						
					
					
						commit
						7571f30efe
					
				
					 4 changed files with 629 additions and 0 deletions
				
			
		
							
								
								
									
										260
									
								
								Mac/scripts/BuildApplet.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										260
									
								
								Mac/scripts/BuildApplet.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,260 @@ | |||
| """Create an applet from a Python script. | ||||
| 
 | ||||
| This puts up a dialog asking for a Python source file ('TEXT'). | ||||
| The output is a file with the same name but its ".py" suffix dropped. | ||||
| It is created by copying an applet template and then adding a 'PYC ' | ||||
| resource named __main__ containing the compiled, marshalled script. | ||||
| """ | ||||
| 
 | ||||
| import sys | ||||
| sys.stdout = sys.stderr | ||||
| 
 | ||||
| import string | ||||
| import os | ||||
| import marshal | ||||
| import imp | ||||
| import macfs | ||||
| import MacOS | ||||
| from Res import * | ||||
| 
 | ||||
| # .pyc file (and 'PYC ' resource magic number) | ||||
| MAGIC = imp.get_magic() | ||||
| 
 | ||||
| # Template file (searched on sys.path) | ||||
| TEMPLATE = "PythonApplet" | ||||
| 
 | ||||
| # Specification of our resource | ||||
| RESTYPE = 'PYC ' | ||||
| RESNAME = '__main__' | ||||
| 
 | ||||
| # A resource with this name sets the "owner" (creator) of the destination | ||||
| OWNERNAME = "owner resource" | ||||
| 
 | ||||
| # OpenResFile mode parameters | ||||
| READ = 1 | ||||
| WRITE = 2 | ||||
| 
 | ||||
| def main(): | ||||
| 	 | ||||
| 	# Find the template | ||||
| 	# (there's no point in proceeding if we can't find it) | ||||
| 	 | ||||
| 	for p in sys.path: | ||||
| 		template = os.path.join(p, TEMPLATE) | ||||
| 		try: | ||||
| 			tmpl = open(template, "rb") | ||||
| 			tmpl.close() | ||||
| 			break | ||||
| 		except IOError: | ||||
| 			continue | ||||
| 	else: | ||||
| 		die("Template %s not found" % `template`) | ||||
| 		return | ||||
| 		 | ||||
| 	# Convert to full pathname | ||||
| 	template = macfs.FSSpec(template).as_pathname() | ||||
| 	 | ||||
| 	# Ask for source text if not specified in sys.argv[1:] | ||||
| 	 | ||||
| 	if not sys.argv[1:]: | ||||
| 		srcfss, ok = macfs.StandardGetFile('TEXT') | ||||
| 		if not ok: | ||||
| 			return | ||||
| 		filename = srcfss.as_pathname() | ||||
| 		tp, tf = os.path.split(filename) | ||||
| 		if tf[-3:] == '.py': | ||||
| 			tf = tf[:-3] | ||||
| 		else: | ||||
| 			tf = tf + '.applet' | ||||
| 		dstfss, ok = macfs.StandardPutFile('Save application as:', tf) | ||||
| 		if not ok: return | ||||
| 		process(template, filename, dstfss.as_pathname()) | ||||
| 	else: | ||||
| 		 | ||||
| 		# Loop over all files to be processed | ||||
| 		for filename in sys.argv[1:]: | ||||
| 			process(template, filename, '') | ||||
| 
 | ||||
| undefs = ('Atmp', '????', '    ', '\0\0\0\0', 'BINA') | ||||
| 
 | ||||
| def process(template, filename, output): | ||||
| 	 | ||||
| 	print "Processing", `filename`, "..." | ||||
| 	 | ||||
| 	# Read the source and compile it | ||||
| 	# (there's no point overwriting the destination if it has a syntax error) | ||||
| 	 | ||||
| 	fp = open(filename) | ||||
| 	text = fp.read() | ||||
| 	fp.close() | ||||
| 	try: | ||||
| 		code = compile(text, filename, "exec") | ||||
| 	except (SyntaxError, EOFError): | ||||
| 		die("Syntax error in script %s" % `filename`) | ||||
| 		return | ||||
| 	 | ||||
| 	# Set the destination file name | ||||
| 	 | ||||
| 	if string.lower(filename[-3:]) == ".py": | ||||
| 		destname = filename[:-3] | ||||
| 		rsrcname = destname + '.rsrc' | ||||
| 	else: | ||||
| 		destname = filename + ".applet" | ||||
| 		rsrcname = filename + '.rsrc' | ||||
| 	 | ||||
| 	if output: | ||||
| 		destname = output | ||||
| 	# Copy the data from the template (creating the file as well) | ||||
| 	 | ||||
| 	tmpl = open(template, "rb") | ||||
| 	dest = open(destname, "wb") | ||||
| 	data = tmpl.read() | ||||
| 	if data: | ||||
| 		dest.write(data) | ||||
| 	dest.close() | ||||
| 	tmpl.close() | ||||
| 	 | ||||
| 	# Copy the creator of the template to the destination | ||||
| 	# unless it already got one.  Set type to APPL | ||||
| 	 | ||||
| 	tctor, ttype = MacOS.GetCreatorAndType(template) | ||||
| 	ctor, type = MacOS.GetCreatorAndType(destname) | ||||
| 	if type in undefs: type = 'APPL' | ||||
| 	if ctor in undefs: ctor = tctor | ||||
| 	 | ||||
| 	# Open the output resource fork | ||||
| 	 | ||||
| 	try: | ||||
| 		output = FSpOpenResFile(destname, WRITE) | ||||
| 	except MacOS.Error: | ||||
| 		print "Creating resource fork..." | ||||
| 		CreateResFile(destname) | ||||
| 		output = FSpOpenResFile(destname, WRITE) | ||||
| 	 | ||||
| 	# Copy the resources from the template | ||||
| 	 | ||||
| 	input = FSpOpenResFile(template, READ) | ||||
| 	newctor = copyres(input, output) | ||||
| 	CloseResFile(input) | ||||
| 	if newctor: ctor = newctor | ||||
| 	 | ||||
| 	# Copy the resources from the target specific resource template, if any | ||||
| 	 | ||||
| 	try: | ||||
| 		input = FSpOpenResFile(rsrcname, READ) | ||||
| 	except MacOS.Error: | ||||
| 		pass | ||||
| 	else: | ||||
| 		newctor = copyres(input, output) | ||||
| 		CloseResFile(input) | ||||
| 		if newctor: ctor = newctor | ||||
| 	 | ||||
| 	# Now set the creator and type of the destination | ||||
| 	 | ||||
| 	MacOS.SetCreatorAndType(destname, ctor, type) | ||||
| 	 | ||||
| 	# Make sure we're manipulating the output resource file now | ||||
| 	 | ||||
| 	UseResFile(output) | ||||
| 	 | ||||
| 	# Delete any existing 'PYC 'resource named __main__ | ||||
| 	 | ||||
| 	try: | ||||
| 		res = Get1NamedResource(RESTYPE, RESNAME) | ||||
| 		res.RemoveResource() | ||||
| 	except Error: | ||||
| 		pass | ||||
| 	 | ||||
| 	# Create the raw data for the resource from the code object | ||||
| 	 | ||||
| 	data = marshal.dumps(code) | ||||
| 	del code | ||||
| 	data = (MAGIC + '\0\0\0\0') + data | ||||
| 	 | ||||
| 	# Create the resource and write it | ||||
| 	 | ||||
| 	id = 0 | ||||
| 	while id < 128: | ||||
| 		id = Unique1ID(RESTYPE) | ||||
| 	res = Resource(data) | ||||
| 	res.AddResource(RESTYPE, id, RESNAME) | ||||
| 	res.WriteResource() | ||||
| 	res.ReleaseResource() | ||||
| 	 | ||||
| 	# Close the output file | ||||
| 	 | ||||
| 	CloseResFile(output) | ||||
| 	 | ||||
| 	# Give positive feedback | ||||
| 	 | ||||
| 	message("Applet %s created." % `destname`) | ||||
| 
 | ||||
| 
 | ||||
| # Copy resources between two resource file descriptors. | ||||
| # Exception: don't copy a __main__ resource. | ||||
| # If a resource's name is "owner resource", its type is returned | ||||
| # (so the caller can use it to set the destination's creator) | ||||
| 
 | ||||
| def copyres(input, output): | ||||
| 	ctor = None | ||||
| 	UseResFile(input) | ||||
| 	ntypes = Count1Types() | ||||
| 	for itype in range(1, 1+ntypes): | ||||
| 		type = Get1IndType(itype) | ||||
| 		nresources = Count1Resources(type) | ||||
| 		for ires in range(1, 1+nresources): | ||||
| 			res = Get1IndResource(type, ires) | ||||
| 			id, type, name = res.GetResInfo() | ||||
| 			lcname = string.lower(name) | ||||
| 			if (type, lcname) == (RESTYPE, RESNAME): | ||||
| 				continue # Don't copy __main__ from template | ||||
| 			if lcname == OWNERNAME: ctor = type | ||||
| 			size = res.size | ||||
| 			attrs = res.GetResAttrs() | ||||
| 			print id, type, name, size, hex(attrs) | ||||
| 			res.LoadResource() | ||||
| 			res.DetachResource() | ||||
| 			UseResFile(output) | ||||
| 			try: | ||||
| 				res2 = Get1Resource(type, id) | ||||
| 			except MacOS.Error: | ||||
| 				res2 = None | ||||
| 			if res2: | ||||
| 				print "Overwriting..." | ||||
| 				res2.RemoveResource() | ||||
| 			res.AddResource(type, id, name) | ||||
| 			res.WriteResource() | ||||
| 			attrs = attrs | res.GetResAttrs() | ||||
| 			print "New attrs =", hex(attrs) | ||||
| 			res.SetResAttrs(attrs) | ||||
| 			UseResFile(input) | ||||
| 	return ctor | ||||
| 
 | ||||
| 
 | ||||
| # Show a message and exit | ||||
| 
 | ||||
| def die(str): | ||||
| 	message(str) | ||||
| 	sys.exit(1) | ||||
| 
 | ||||
| 
 | ||||
| # Show a message | ||||
| 
 | ||||
| def message(str, id = 256): | ||||
| 	from Dlg import * | ||||
| 	d = GetNewDialog(id, -1) | ||||
| 	if not d: | ||||
| 		print "Error:", `str` | ||||
| 		print "DLOG id =", id, "not found." | ||||
| 		return | ||||
| 	tp, h, rect = d.GetDialogItem(2) | ||||
| 	SetDialogItemText(h, str) | ||||
| 	while 1: | ||||
| 		n = ModalDialog(None) | ||||
| 		if n == 1: break | ||||
| 	del d | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
| 	main() | ||||
| 
 | ||||
							
								
								
									
										168
									
								
								Mac/scripts/EditPythonPrefs.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								Mac/scripts/EditPythonPrefs.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,168 @@ | |||
| """Edit the Python Preferences file.""" | ||||
| import addpack | ||||
| addpack.addpack('Tools') | ||||
| addpack.addpack('bgen') | ||||
| addpack.addpack('evt') | ||||
| 
 | ||||
| from Dlg import * | ||||
| from Events import * | ||||
| from Res import * | ||||
| import string | ||||
| import struct | ||||
| import macfs | ||||
| import MacOS | ||||
| import os | ||||
| import sys | ||||
| import Res # For Res.Error | ||||
| 
 | ||||
| # resource IDs in our own resources (dialogs, etc) | ||||
| MESSAGE_ID = 256 | ||||
| 
 | ||||
| DIALOG_ID = 131 | ||||
| TEXT_ITEM = 1 | ||||
| OK_ITEM = 2 | ||||
| CANCEL_ITEM = 3 | ||||
| REVERT_ITEM = 4 | ||||
| DIR_ITEM = 5 | ||||
| 
 | ||||
| # Resource IDs in the preferences file | ||||
| PATH_STRINGS_ID = 128 | ||||
| DIRECTORY_ID = 128 | ||||
| 
 | ||||
| WRITE = 2 | ||||
| smAllScripts = -3 | ||||
| kOnSystemDisk = 0x8000 | ||||
| 
 | ||||
| def restolist(data): | ||||
| 	"""Convert STR# resource data to a list of strings""" | ||||
| 	if not data: | ||||
| 		return [] | ||||
| 	num, = struct.unpack('h', data[:2]) | ||||
| 	data = data[2:] | ||||
| 	rv = [] | ||||
| 	for i in range(num): | ||||
| 		strlen = ord(data[0]) | ||||
| 		if strlen < 0: strlen = strlen + 256 | ||||
| 		str = data[1:strlen+1] | ||||
| 		data = data[strlen+1:] | ||||
| 		rv.append(str) | ||||
| 	return rv | ||||
| 	 | ||||
| def listtores(list): | ||||
| 	"""Convert a list of strings to STR# resource data""" | ||||
| 	rv = struct.pack('h', len(list)) | ||||
| 	for str in list: | ||||
| 		rv = rv + chr(len(str)) + str | ||||
| 	return rv | ||||
| 
 | ||||
| def message(str = "Hello, world!", id = MESSAGE_ID): | ||||
| 	"""Show a simple alert with a text message""" | ||||
| 	d = GetNewDialog(id, -1) | ||||
| 	print 'd=', d | ||||
| 	tp, h, rect = d.GetDialogItem(2) | ||||
| 	SetDialogItemText(h, str) | ||||
| 	while 1: | ||||
| 		n = ModalDialog(None) | ||||
| 		if n == 1: break | ||||
| 		 | ||||
| def interact(list, pythondir): | ||||
| 	"""Let the user interact with the dialog""" | ||||
| 	opythondir = pythondir | ||||
| 	try: | ||||
| 		# Try to go to the "correct" dir for GetDirectory | ||||
| 		os.chdir(pythondir.as_pathname()) | ||||
| 	except os.error: | ||||
| 		pass | ||||
| 	d = GetNewDialog(DIALOG_ID, -1) | ||||
| 	tp, h, rect = d.GetDialogItem(1) | ||||
| 	SetDialogItemText(h, string.joinfields(list, '\r')) | ||||
| 	while 1: | ||||
| 		n = ModalDialog(None) | ||||
| 		if n == OK_ITEM: | ||||
| 			break | ||||
| 		if n == CANCEL_ITEM: | ||||
| 			return None | ||||
| 		if n == REVERT_ITEM: | ||||
| 			return [], pythondir | ||||
| 		if n == DIR_ITEM: | ||||
| 			fss, ok = macfs.GetDirectory() | ||||
| 			if ok: | ||||
| 				pythondir = fss | ||||
| 	tmp = string.splitfields(GetDialogItemText(h), '\r') | ||||
| 	rv = [] | ||||
| 	for i in tmp: | ||||
| 		if i: | ||||
| 			rv.append(i) | ||||
| 	return rv, pythondir | ||||
| 	 | ||||
| def main(): | ||||
| 	try: | ||||
| 		h = OpenResFile('EditPythonPrefs.rsrc') | ||||
| 	except Res.Error: | ||||
| 		pass	# Assume we already have acces to our own resource | ||||
| 	 | ||||
| 	# Find the preferences folder and our prefs file, create if needed.	 | ||||
| 	vrefnum, dirid = macfs.FindFolder(kOnSystemDisk, 'pref', 0) | ||||
| 	preff_fss = macfs.FSSpec((vrefnum, dirid, 'Python Preferences')) | ||||
| 	try: | ||||
| 		preff_handle = FSpOpenResFile(preff_fss, WRITE) | ||||
| 	except Res.Error: | ||||
| 		# Create it | ||||
| 		message('No preferences file, creating one...') | ||||
| 		FSpCreateResFile(preff_fss, 'PYTH', 'pref', smAllScripts) | ||||
| 		preff_handle = FSpOpenResFile(preff_fss, WRITE) | ||||
| 		 | ||||
| 	# Load the path and directory resources | ||||
| 	try: | ||||
| 		sr = GetResource('STR#', PATH_STRINGS_ID) | ||||
| 	except (MacOS.Error, Res.Error): | ||||
| 		message('Cannot find any sys.path resource! (Old python?)') | ||||
| 		sys.exit(0) | ||||
| 	d = sr.data | ||||
| 	l = restolist(d) | ||||
| 	 | ||||
| 	try: | ||||
| 		dr = GetResource('alis', DIRECTORY_ID) | ||||
| 		fss, fss_changed = macfs.RawAlias(dr.data).Resolve() | ||||
| 	except (MacOS.Error, Res.Error): | ||||
| 		dr = None | ||||
| 		fss = macfs.FSSpec(os.getcwd()) | ||||
| 		fss_changed = 1 | ||||
| 	 | ||||
| 	# Let the user play away | ||||
| 	result = interact(l, fss) | ||||
| 	 | ||||
| 	# See what we have to update, and how | ||||
| 	if result == None: | ||||
| 		sys.exit(0) | ||||
| 		 | ||||
| 	pathlist, nfss = result | ||||
| 	if nfss != fss: | ||||
| 		fss_changed = 1 | ||||
| 		 | ||||
| 	if fss_changed or pathlist != l: | ||||
| 		if fss_changed: | ||||
| 			alias = nfss.NewAlias() | ||||
| 			if dr: | ||||
| 				dr.data = alias.data | ||||
| 				dr.ChangedResource() | ||||
| 			else: | ||||
| 				dr = Resource(alias.data) | ||||
| 				dr.AddResource('alis', DIRECTORY_ID, '') | ||||
| 				 | ||||
| 		if pathlist != l: | ||||
| 			if pathlist == []: | ||||
| 				if sr.HomeResFile() == preff_handle: | ||||
| 					sr.RemoveResource() | ||||
| 			elif sr.HomeResFile() == preff_handle: | ||||
| 				sr.data = listtores(pathlist) | ||||
| 				sr.ChangedResource() | ||||
| 			else: | ||||
| 				sr = Resource(listtores(pathlist)) | ||||
| 				sr.AddResource('STR#', PATH_STRINGS_ID, '') | ||||
| 				 | ||||
| 	CloseResFile(preff_handle) | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
| 	print # Stupid, to init toolboxes... | ||||
| 	main() | ||||
							
								
								
									
										93
									
								
								Mac/scripts/PackLibDir.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								Mac/scripts/PackLibDir.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,93 @@ | |||
| # | ||||
| # Turn a pyc file into a resource file containing it in 'PYC ' resource form | ||||
| import addpack | ||||
| addpack.addpack('Tools') | ||||
| addpack.addpack('bgen') | ||||
| addpack.addpack('res') | ||||
| from Res import * | ||||
| import Res | ||||
| from Resources import * | ||||
| import os | ||||
| import macfs | ||||
| import sys | ||||
| 
 | ||||
| READ = 1 | ||||
| WRITE = 2 | ||||
| smAllScripts = -3 | ||||
| 
 | ||||
| error = 'mkpycresourcefile.error' | ||||
| 
 | ||||
| def Pstring(str): | ||||
| 	if len(str) > 255: | ||||
| 		raise ValueError, 'String too large' | ||||
| 	return chr(len(str))+str | ||||
| 	 | ||||
| def createoutput(dst): | ||||
| 	"""Create output file. Return handle and first id to use.""" | ||||
| 	 | ||||
| 
 | ||||
| 	FSpCreateResFile(dst, 'PYTH', 'rsrc', smAllScripts) | ||||
| 	output = FSpOpenResFile(dst, WRITE) | ||||
| 	UseResFile(output) | ||||
| 	num = 128 | ||||
| 	return output, num | ||||
| 	 | ||||
| def writemodule(name, id, data): | ||||
| 	"""Write pyc code to a PYC resource with given name and id.""" | ||||
| 	# XXXX Check that it doesn't exist | ||||
| 	res = Resource(data) | ||||
| 	res.AddResource('PYC ', id, name) | ||||
| 	res.WriteResource() | ||||
| 	res.ReleaseResource() | ||||
| 		 | ||||
| def mkpycresourcefile(src, dst): | ||||
| 	"""Copy pyc file/dir src to resource file dst.""" | ||||
| 	 | ||||
| 	if not os.path.isdir(src) and src[-4:] <> '.pyc': | ||||
| 			raise error, 'I can only handle .pyc files or directories' | ||||
| 	handle, oid = createoutput(dst) | ||||
| 	if os.path.isdir(src): | ||||
| 		id = handlesubdir(handle, oid, src) | ||||
| 	else: | ||||
| 		id = handleonepycfile(handle, oid, src) | ||||
| 	print 'Wrote',id-oid,'PYC resources to', dst | ||||
| 	CloseResFile(handle) | ||||
| 			 | ||||
| def handleonepycfile(handle, id, file): | ||||
| 	"""Copy one pyc file to the open resource file""" | ||||
| 	d, name = os.path.split(file) | ||||
| 	name = name[:-4] | ||||
| 	print '  module', name | ||||
| 	writemodule(name, id, open(file, 'rb').read()) | ||||
| 	return id+1 | ||||
| 	 | ||||
| def handlesubdir(handle, id, srcdir): | ||||
| 	"""Recursively scan a directory for pyc files and copy to resources""" | ||||
| 	print 'Directory', srcdir | ||||
| 	src = os.listdir(srcdir) | ||||
| 	for file in src: | ||||
| 		file = os.path.join(srcdir, file) | ||||
| 		if os.path.isdir(file): | ||||
| 			id = handlesubdir(handle, id, file) | ||||
| 		elif file[-4:] == '.pyc': | ||||
| 			id = handleonepycfile(handle, id, file) | ||||
| 	return id | ||||
| 				 | ||||
| 	 | ||||
| if __name__ == '__main__': | ||||
| 	args = sys.argv[1:] | ||||
| 	if not args: | ||||
| 		ifss, ok = macfs.StandardGetFile('PYC ') | ||||
| 		if ok: | ||||
| 			args = [ifss.as_pathname()] | ||||
| 		else: | ||||
| 			ifss, ok = macfs.GetDirectory() | ||||
| 			if not ok: | ||||
| 				sys.exit(0) | ||||
| 			args = [ifss.as_pathname()] | ||||
| 	for ifn in args: | ||||
| 		ofss, ok = macfs.StandardPutFile('Output for '+os.path.split(ifn)[1]) | ||||
| 		if not ok: | ||||
| 			sys.exit(0) | ||||
| 		mkpycresourcefile(ifn, ofss.as_pathname()) | ||||
| 	sys.exit(1)			# So we can see something... | ||||
							
								
								
									
										108
									
								
								Mac/scripts/RunLibScript.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								Mac/scripts/RunLibScript.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,108 @@ | |||
| """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() | ||||
| 			 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jack Jansen
						Jack Jansen