blob: 1f9fd988710617be15712f00598ab88aff939c07 [file] [log] [blame]
Jack Jansen8a99a8a1997-09-08 13:26:36 +00001from preferences import *
2
3# Names of Python resources
4PREFNAME_NAME="PythonPreferenceFileName"
5
6# Resource IDs in the preferences file
7PATH_ID = 128
8DIR_ID = 128
9POPT_ID = 128
10GUSI_ID = 10240
11
12# Override IDs (in the applet)
13OVERRIDE_PATH_ID = 129
14OVERRIDE_DIR_ID = 129
15OVERRIDE_POPT_ID = 129
16OVERRIDE_GUSI_ID = 10241
17
18# version
19CUR_VERSION=3
20
21preffilename = PstringLoader(AnyResLoader('STR ', resname=PREFNAME_NAME)).load()
22pref_fss = preferencefile(preffilename, 'Pyth', 'pref')
23
24class PoptLoader(VersionLoader):
25 def __init__(self, loader):
26 VersionLoader.__init__(self, "bbbbbbbbbb", loader)
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
34class 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
59popt_default_default = NullLoader(chr(CUR_VERSION) + 8*'\0')
60popt_default = AnyResLoader('Popt', POPT_ID, default=popt_default_default)
61popt_loader = ResLoader(pref_fss, 'Popt', POPT_ID, default=popt_default)
62popt = PoptLoader(popt_loader)
63
64dir_default = AnyResLoader('alis', DIR_ID)
65dir = ResLoader(pref_fss, 'alis', DIR_ID, default=dir_default)
66
67gusi_default = AnyResLoader('GU\267I', GUSI_ID)
68gusi_loader = ResLoader(pref_fss, 'GU\267I', GUSI_ID, default=gusi_default)
69gusi = GusiLoader(gusi_loader)
70
71path_default = AnyResLoader('STR#', PATH_ID)
72path_loader = ResLoader(pref_fss, 'STR#', PATH_ID, default=path_default)
73path = StrListLoader(path_loader)
74
75class 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'], \
92 dict['nointopt'], dict['noargs'] = flags
93 return dict
94
95 def save(self, dict):
96 self.path.save(dict['path'])
97 diralias = macfs.FSSpec(dict['dir']).NewAlias().data
98 self.dir.save(diralias)
99 self.gusi.save((dict['creator'], dict['type'], dict['delayconsole']))
100 flags = dict['version'], dict['inspect'], dict['verbose'], dict['optimize'], \
101 dict['unbuffered'], dict['debugging'], dict['keepopen'], dict['keeperror'], \
102 dict['nointopt'], dict['noargs']
103 self.popt.save(flags)
104
105def AppletOptions(file):
106 fss = macfs.FSSpec(file)
107 a_popt = PoptLoader(ResLoader(fss, 'Popt', OVERRIDE_POPT_ID, default=popt_loader))
108 a_dir = ResLoader(fss, 'alis', OVERRIDE_DIR_ID, default=dir)
109 a_gusi = ResLoader(fss, 'GU\267I', OVERRIDE_GUSI_ID, default=gusi_loader)
110 a_path = StrListLoader(fss, 'STR#', OVERRIDE_PATH_ID, default=path_loader)
111 return PythonOptions(a_popt, a_dir, a_gusi, a_path)
112
113def _test():
114 import preferences
115 preferences.debug = 1
116 dict = PythonOptions().load()
117 for k in dict.keys():
118 print k, '\t', dict[k]
119
120if __name__ == '__main__':
121 _test()
122