127 lines
3.6 KiB
Python
127 lines
3.6 KiB
Python
from preferences import *
|
|
|
|
# Names of Python resources
|
|
PREFNAME_NAME="PythonPreferenceFileName"
|
|
|
|
# Resource IDs in the preferences file
|
|
PATH_ID = 228
|
|
DIR_ID = 228
|
|
POPT_ID = 228
|
|
GUSI_ID = 10240
|
|
|
|
# Override IDs (in the applet)
|
|
OVERRIDE_PATH_ID = 229
|
|
OVERRIDE_DIR_ID = 229
|
|
OVERRIDE_POPT_ID = 229
|
|
OVERRIDE_GUSI_ID = 10241
|
|
|
|
# version
|
|
CUR_VERSION=4
|
|
|
|
preffilename = PstringLoader(AnyResLoader('STR ', resname=PREFNAME_NAME)).load()
|
|
pref_fss = preferencefile(preffilename, 'Pyth', 'pref')
|
|
|
|
class PoptLoader(VersionLoader):
|
|
def __init__(self, loader):
|
|
VersionLoader.__init__(self, "bbbbbbbbbbbb", 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'], dict['oldexc'], \
|
|
dict['nosite'] = 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'], dict['oldexc'], \
|
|
dict['nosite']
|
|
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 = GusiLoader(
|
|
ResLoader(fss, 'GU\267I', OVERRIDE_GUSI_ID, default=gusi_loader))
|
|
a_path = StrListLoader(
|
|
ResLoader(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()
|
|
|