diff options
Diffstat (limited to 'Mac/Lib/pythonprefs.py')
-rw-r--r-- | Mac/Lib/pythonprefs.py | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/Mac/Lib/pythonprefs.py b/Mac/Lib/pythonprefs.py new file mode 100644 index 0000000..1f9fd98 --- /dev/null +++ b/Mac/Lib/pythonprefs.py @@ -0,0 +1,122 @@ +from preferences import * + +# Names of Python resources +PREFNAME_NAME="PythonPreferenceFileName" + +# Resource IDs in the preferences file +PATH_ID = 128 +DIR_ID = 128 +POPT_ID = 128 +GUSI_ID = 10240 + +# Override IDs (in the applet) +OVERRIDE_PATH_ID = 129 +OVERRIDE_DIR_ID = 129 +OVERRIDE_POPT_ID = 129 +OVERRIDE_GUSI_ID = 10241 + +# version +CUR_VERSION=3 + +preffilename = PstringLoader(AnyResLoader('STR ', resname=PREFNAME_NAME)).load() +pref_fss = preferencefile(preffilename, 'Pyth', 'pref') + +class PoptLoader(VersionLoader): + def __init__(self, loader): + VersionLoader.__init__(self, "bbbbbbbbbb", loader) + + def versioncheck(self, data): + if data[0] == CUR_VERSION: + return data + print 'old resource' + raise Error, "old resource" + +class GusiLoader: + def __init__(self, loader): + self.loader = loader + self.data = None + + def load(self): + self.data = self.loader.load() + while self.data[10:14] != '0181': + self.loader.delete(1) + self.loader.load() + tp = self.data[0:4] + cr = self.data[4:8] + flags = ord(self.data[9]) + delay = ((flags & 0x20) == 0x20) + return cr, tp, delay + + def save(self, (cr, tp, delay)): + flags = ord(self.data[9]) + if delay: + flags = flags | 0x20 + else: + flags = flags & ~0x20 + newdata = tp + cr + self.data[8] + chr(flags) + self.data[10:] + self.loader.save(newdata) + +popt_default_default = NullLoader(chr(CUR_VERSION) + 8*'\0') +popt_default = AnyResLoader('Popt', POPT_ID, default=popt_default_default) +popt_loader = ResLoader(pref_fss, 'Popt', POPT_ID, default=popt_default) +popt = PoptLoader(popt_loader) + +dir_default = AnyResLoader('alis', DIR_ID) +dir = ResLoader(pref_fss, 'alis', DIR_ID, default=dir_default) + +gusi_default = AnyResLoader('GU\267I', GUSI_ID) +gusi_loader = ResLoader(pref_fss, 'GU\267I', GUSI_ID, default=gusi_default) +gusi = GusiLoader(gusi_loader) + +path_default = AnyResLoader('STR#', PATH_ID) +path_loader = ResLoader(pref_fss, 'STR#', PATH_ID, default=path_default) +path = StrListLoader(path_loader) + +class PythonOptions: + def __init__(self, popt=popt, dir=dir, gusi=gusi, path=path): + self.popt = popt + self.dir = dir + self.gusi = gusi + self.path = path + + def load(self): + dict = {} + dict['path'] = self.path.load() + diralias = self.dir.load() + dirfss, dummy = macfs.RawAlias(diralias).Resolve() + dict['dir'] = dirfss + dict['creator'], dict['type'], dict['delayconsole'] = self.gusi.load() + flags = self.popt.load() + dict['version'], dict['inspect'], dict['verbose'], dict['optimize'], \ + dict['unbuffered'], dict['debugging'], dict['keepopen'], dict['keeperror'], \ + dict['nointopt'], dict['noargs'] = flags + return dict + + def save(self, dict): + self.path.save(dict['path']) + diralias = macfs.FSSpec(dict['dir']).NewAlias().data + self.dir.save(diralias) + self.gusi.save((dict['creator'], dict['type'], dict['delayconsole'])) + flags = dict['version'], dict['inspect'], dict['verbose'], dict['optimize'], \ + dict['unbuffered'], dict['debugging'], dict['keepopen'], dict['keeperror'], \ + dict['nointopt'], dict['noargs'] + self.popt.save(flags) + +def AppletOptions(file): + fss = macfs.FSSpec(file) + a_popt = PoptLoader(ResLoader(fss, 'Popt', OVERRIDE_POPT_ID, default=popt_loader)) + a_dir = ResLoader(fss, 'alis', OVERRIDE_DIR_ID, default=dir) + a_gusi = ResLoader(fss, 'GU\267I', OVERRIDE_GUSI_ID, default=gusi_loader) + a_path = StrListLoader(fss, 'STR#', OVERRIDE_PATH_ID, default=path_loader) + return PythonOptions(a_popt, a_dir, a_gusi, a_path) + +def _test(): + import preferences + preferences.debug = 1 + dict = PythonOptions().load() + for k in dict.keys(): + print k, '\t', dict[k] + +if __name__ == '__main__': + _test() + |