diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 1995-07-29 13:48:41 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 1995-07-29 13:48:41 (GMT) |
commit | 7571f30efe935bfddd2be3a8e716f2dda2e55f9e (patch) | |
tree | 9df641c104c73ec7a319e150ca2ae07613bd8f88 /Mac/scripts/EditPythonPrefs.py | |
parent | 0db1ef96aca3f8ba369080021974ccc1436d395a (diff) | |
download | cpython-7571f30efe935bfddd2be3a8e716f2dda2e55f9e.zip cpython-7571f30efe935bfddd2be3a8e716f2dda2e55f9e.tar.gz cpython-7571f30efe935bfddd2be3a8e716f2dda2e55f9e.tar.bz2 |
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..
Diffstat (limited to 'Mac/scripts/EditPythonPrefs.py')
-rw-r--r-- | Mac/scripts/EditPythonPrefs.py | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/Mac/scripts/EditPythonPrefs.py b/Mac/scripts/EditPythonPrefs.py new file mode 100644 index 0000000..3e14ff3 --- /dev/null +++ b/Mac/scripts/EditPythonPrefs.py @@ -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() |