summaryrefslogtreecommitdiffstats
path: root/Mac/scripts/EditPythonPrefs.py
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>1995-07-29 13:48:41 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>1995-07-29 13:48:41 (GMT)
commit7571f30efe935bfddd2be3a8e716f2dda2e55f9e (patch)
tree9df641c104c73ec7a319e150ca2ae07613bd8f88 /Mac/scripts/EditPythonPrefs.py
parent0db1ef96aca3f8ba369080021974ccc1436d395a (diff)
downloadcpython-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.py168
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()