Jack Jansen | 8a99a8a | 1997-09-08 13:26:36 +0000 | [diff] [blame] | 1 | from preferences import * |
| 2 | |
| 3 | # Names of Python resources |
| 4 | PREFNAME_NAME="PythonPreferenceFileName" |
| 5 | |
| 6 | # Resource IDs in the preferences file |
Jack Jansen | 6b02ac2 | 1998-01-06 16:48:49 +0000 | [diff] [blame] | 7 | PATH_ID = 228 |
| 8 | DIR_ID = 228 |
| 9 | POPT_ID = 228 |
Jack Jansen | 8a99a8a | 1997-09-08 13:26:36 +0000 | [diff] [blame] | 10 | GUSI_ID = 10240 |
| 11 | |
| 12 | # Override IDs (in the applet) |
Jack Jansen | 6b02ac2 | 1998-01-06 16:48:49 +0000 | [diff] [blame] | 13 | OVERRIDE_PATH_ID = 229 |
| 14 | OVERRIDE_DIR_ID = 229 |
| 15 | OVERRIDE_POPT_ID = 229 |
Jack Jansen | 8a99a8a | 1997-09-08 13:26:36 +0000 | [diff] [blame] | 16 | OVERRIDE_GUSI_ID = 10241 |
| 17 | |
| 18 | # version |
Jack Jansen | 0c6d037 | 2000-05-05 23:11:14 +0000 | [diff] [blame] | 19 | CUR_VERSION=5 |
Jack Jansen | 8a99a8a | 1997-09-08 13:26:36 +0000 | [diff] [blame] | 20 | |
| 21 | preffilename = PstringLoader(AnyResLoader('STR ', resname=PREFNAME_NAME)).load() |
| 22 | pref_fss = preferencefile(preffilename, 'Pyth', 'pref') |
| 23 | |
| 24 | class PoptLoader(VersionLoader): |
| 25 | def __init__(self, loader): |
Jack Jansen | 0c6d037 | 2000-05-05 23:11:14 +0000 | [diff] [blame] | 26 | VersionLoader.__init__(self, "bbbbbbbbbbbbb", loader) |
Jack Jansen | 8a99a8a | 1997-09-08 13:26:36 +0000 | [diff] [blame] | 27 | |
| 28 | def versioncheck(self, data): |
| 29 | if data[0] == CUR_VERSION: |
| 30 | return data |
| 31 | print 'old resource' |
| 32 | raise Error, "old resource" |
| 33 | |
| 34 | class GusiLoader: |
| 35 | def __init__(self, loader): |
| 36 | self.loader = loader |
| 37 | self.data = None |
| 38 | |
| 39 | def load(self): |
| 40 | self.data = self.loader.load() |
| 41 | while self.data[10:14] != '0181': |
| 42 | self.loader.delete(1) |
| 43 | self.loader.load() |
| 44 | tp = self.data[0:4] |
| 45 | cr = self.data[4:8] |
| 46 | flags = ord(self.data[9]) |
| 47 | delay = ((flags & 0x20) == 0x20) |
| 48 | return cr, tp, delay |
| 49 | |
| 50 | def save(self, (cr, tp, delay)): |
| 51 | flags = ord(self.data[9]) |
| 52 | if delay: |
| 53 | flags = flags | 0x20 |
| 54 | else: |
| 55 | flags = flags & ~0x20 |
| 56 | newdata = tp + cr + self.data[8] + chr(flags) + self.data[10:] |
| 57 | self.loader.save(newdata) |
| 58 | |
| 59 | popt_default_default = NullLoader(chr(CUR_VERSION) + 8*'\0') |
| 60 | popt_default = AnyResLoader('Popt', POPT_ID, default=popt_default_default) |
| 61 | popt_loader = ResLoader(pref_fss, 'Popt', POPT_ID, default=popt_default) |
| 62 | popt = PoptLoader(popt_loader) |
| 63 | |
| 64 | dir_default = AnyResLoader('alis', DIR_ID) |
| 65 | dir = ResLoader(pref_fss, 'alis', DIR_ID, default=dir_default) |
| 66 | |
| 67 | gusi_default = AnyResLoader('GU\267I', GUSI_ID) |
| 68 | gusi_loader = ResLoader(pref_fss, 'GU\267I', GUSI_ID, default=gusi_default) |
| 69 | gusi = GusiLoader(gusi_loader) |
| 70 | |
| 71 | path_default = AnyResLoader('STR#', PATH_ID) |
| 72 | path_loader = ResLoader(pref_fss, 'STR#', PATH_ID, default=path_default) |
| 73 | path = StrListLoader(path_loader) |
| 74 | |
| 75 | class PythonOptions: |
| 76 | def __init__(self, popt=popt, dir=dir, gusi=gusi, path=path): |
| 77 | self.popt = popt |
| 78 | self.dir = dir |
| 79 | self.gusi = gusi |
| 80 | self.path = path |
| 81 | |
| 82 | def load(self): |
| 83 | dict = {} |
| 84 | dict['path'] = self.path.load() |
| 85 | diralias = self.dir.load() |
| 86 | dirfss, dummy = macfs.RawAlias(diralias).Resolve() |
| 87 | dict['dir'] = dirfss |
| 88 | dict['creator'], dict['type'], dict['delayconsole'] = self.gusi.load() |
| 89 | flags = self.popt.load() |
| 90 | dict['version'], dict['inspect'], dict['verbose'], dict['optimize'], \ |
| 91 | dict['unbuffered'], dict['debugging'], dict['keepopen'], dict['keeperror'], \ |
Jack Jansen | 0c6d037 | 2000-05-05 23:11:14 +0000 | [diff] [blame] | 92 | dict['nointopt'], dict['noargs'], dict['tabwarn'], \ |
| 93 | dict['nosite'], dict['nonavservice'] = flags |
Jack Jansen | 8a99a8a | 1997-09-08 13:26:36 +0000 | [diff] [blame] | 94 | return dict |
| 95 | |
| 96 | def save(self, dict): |
| 97 | self.path.save(dict['path']) |
| 98 | diralias = macfs.FSSpec(dict['dir']).NewAlias().data |
| 99 | self.dir.save(diralias) |
| 100 | self.gusi.save((dict['creator'], dict['type'], dict['delayconsole'])) |
| 101 | flags = dict['version'], dict['inspect'], dict['verbose'], dict['optimize'], \ |
| 102 | dict['unbuffered'], dict['debugging'], dict['keepopen'], dict['keeperror'], \ |
Jack Jansen | 0c6d037 | 2000-05-05 23:11:14 +0000 | [diff] [blame] | 103 | dict['nointopt'], dict['noargs'], dict['tabwarn'], \ |
| 104 | dict['nosite'], dict['nonavservice'] |
Jack Jansen | 8a99a8a | 1997-09-08 13:26:36 +0000 | [diff] [blame] | 105 | self.popt.save(flags) |
| 106 | |
| 107 | def AppletOptions(file): |
| 108 | fss = macfs.FSSpec(file) |
| 109 | a_popt = PoptLoader(ResLoader(fss, 'Popt', OVERRIDE_POPT_ID, default=popt_loader)) |
| 110 | a_dir = ResLoader(fss, 'alis', OVERRIDE_DIR_ID, default=dir) |
Jack Jansen | e86d287 | 1998-01-06 12:11:48 +0000 | [diff] [blame] | 111 | a_gusi = GusiLoader( |
| 112 | ResLoader(fss, 'GU\267I', OVERRIDE_GUSI_ID, default=gusi_loader)) |
| 113 | a_path = StrListLoader( |
| 114 | ResLoader(fss, 'STR#', OVERRIDE_PATH_ID, default=path_loader)) |
Jack Jansen | 8a99a8a | 1997-09-08 13:26:36 +0000 | [diff] [blame] | 115 | return PythonOptions(a_popt, a_dir, a_gusi, a_path) |
| 116 | |
| 117 | def _test(): |
| 118 | import preferences |
| 119 | preferences.debug = 1 |
| 120 | dict = PythonOptions().load() |
| 121 | for k in dict.keys(): |
| 122 | print k, '\t', dict[k] |
| 123 | |
| 124 | if __name__ == '__main__': |
| 125 | _test() |
| 126 | |