14b76ba3280634886356782c0ecc66ac08895826aJack Jansen"""IC wrapper module, based on Internet Config 1.3""" 24b76ba3280634886356782c0ecc66ac08895826aJack Jansen 3236819310db3fe6f2fb22d48b780fa6ec253b6c7Benjamin Petersonfrom warnings import warnpy3k 4a6864e0d9f1fc06c50db36ed913ac48a3d2ddde5Benjamin Petersonwarnpy3k("In 3.x, the ic module is removed.", stacklevel=2) 5236819310db3fe6f2fb22d48b780fa6ec253b6c7Benjamin Peterson 64b76ba3280634886356782c0ecc66ac08895826aJack Jansenimport icglue 74b76ba3280634886356782c0ecc66ac08895826aJack Jansenimport string 84b76ba3280634886356782c0ecc66ac08895826aJack Jansenimport sys 9cf0b2e8e28680dcf35d73ff9e4ba6719ca8e7cd8Jack Jansenimport os 105a6fdcd3718927109592c6df692fe24a8fdaee31Jack Jansenfrom Carbon import Res 11cf0b2e8e28680dcf35d73ff9e4ba6719ca8e7cd8Jack Jansenimport Carbon.File 124b76ba3280634886356782c0ecc66ac08895826aJack Jansenimport macostools 134b76ba3280634886356782c0ecc66ac08895826aJack Jansen 144b76ba3280634886356782c0ecc66ac08895826aJack Jansenerror=icglue.error 154b76ba3280634886356782c0ecc66ac08895826aJack Jansen 164b76ba3280634886356782c0ecc66ac08895826aJack Jansen# From ictypes.h: 170ae3220736f9b71820b01aee1f540d0afcceb9a6Jack JansenicPrefNotFoundErr = -666 # preference not found (duh!) 180ae3220736f9b71820b01aee1f540d0afcceb9a6Jack JansenicPermErr = -667 # cannot set preference 190ae3220736f9b71820b01aee1f540d0afcceb9a6Jack JansenicPrefDataErr = -668 # problem with preference data 200ae3220736f9b71820b01aee1f540d0afcceb9a6Jack JansenicInternalErr = -669 # hmm, this is not good 210ae3220736f9b71820b01aee1f540d0afcceb9a6Jack JansenicTruncatedErr = -670 # more data was present than was returned 220ae3220736f9b71820b01aee1f540d0afcceb9a6Jack JansenicNoMoreWritersErr = -671 # you cannot begin a write session because someone else is already doing it */ 230ae3220736f9b71820b01aee1f540d0afcceb9a6Jack JansenicNothingToOverrideErr = -672 # no component for the override component to capture 240ae3220736f9b71820b01aee1f540d0afcceb9a6Jack JansenicNoURLErr = -673 # no URL found 250ae3220736f9b71820b01aee1f540d0afcceb9a6Jack JansenicConfigNotFoundErr = -674 # no configuration was found 260ae3220736f9b71820b01aee1f540d0afcceb9a6Jack JansenicConfigInappropriateErr = -675 # incorrect manufacturer code 274b76ba3280634886356782c0ecc66ac08895826aJack Jansen 284b76ba3280634886356782c0ecc66ac08895826aJack JansenICattr_no_change = -1 294b76ba3280634886356782c0ecc66ac08895826aJack Jansen 304b76ba3280634886356782c0ecc66ac08895826aJack JansenicNoPerm = 0 314b76ba3280634886356782c0ecc66ac08895826aJack JansenicReadOnlyPerm = 1 324b76ba3280634886356782c0ecc66ac08895826aJack JansenicReadWritePerm = 2 334b76ba3280634886356782c0ecc66ac08895826aJack Jansen# End of ictypes.h 344b76ba3280634886356782c0ecc66ac08895826aJack Jansen 358dc797d1f888b3ebfb1af5fdb97c1a4fc11026cbJack Jansenclass ICOpaqueData: 360ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen """An unparseable IC entry""" 370ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen def __init__(self, data): 380ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen self.data = data 398dc797d1f888b3ebfb1af5fdb97c1a4fc11026cbJack Jansen 400ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen def __repr__(self): 4170a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald return "ICOpaqueData(%r)"%(self.data,) 428dc797d1f888b3ebfb1af5fdb97c1a4fc11026cbJack Jansen 438dc797d1f888b3ebfb1af5fdb97c1a4fc11026cbJack Jansen_ICOpaqueDataType=type(ICOpaqueData('')) 44182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 454b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _decode_default(data, key): 460ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen if len(data) == 0: 470ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return data 480ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen if ord(data[0]) == len(data)-1: 490ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen # Assume Pstring 500ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return data[1:] 510ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return ICOpaqueData(data) 52182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 53182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 544b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _decode_multistr(data, key): 550ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen numstr = ord(data[0]) << 8 | ord(data[1]) 560ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen rv = [] 570ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen ptr = 2 580ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen for i in range(numstr): 590ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen strlen = ord(data[ptr]) 600ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen str = data[ptr+1:ptr+strlen+1] 610ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen rv.append(str) 620ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen ptr = ptr + strlen + 1 630ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return rv 64182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 654b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _decode_fontrecord(data, key): 660ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen size = ord(data[0]) << 8 | ord(data[1]) 670ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen face = ord(data[2]) 680ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen namelen = ord(data[4]) 690ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return size, face, data[5:5+namelen] 70182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 714b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _decode_boolean(data, key): 720ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return ord(data[0]) 73182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 744b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _decode_text(data, key): 750ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return data 76182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 774b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _decode_charset(data, key): 780ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return data[:256], data[256:] 79182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 804b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _decode_appspec(data, key): 810ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen namelen = ord(data[4]) 820ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return data[0:4], data[5:5+namelen] 834b76ba3280634886356782c0ecc66ac08895826aJack Jansen 844b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _code_default(data, key): 850ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return chr(len(data)) + data 86182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 874b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _code_multistr(data, key): 880ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen numstr = len(data) 890ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen rv = chr((numstr>>8) & 0xff) + chr(numstr & 0xff) 900ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen for i in data: 910ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen rv = rv + _code_default(i) 920ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return rv 93182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 944b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _code_fontrecord(data, key): 950ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen size, face, name = data 960ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return chr((size>>8) & 0xff) + chr(size & 0xff) + chr(face & 0xff) + \ 970ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen chr(0) + _code_default(name) 98182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 994b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _code_boolean(data, key): 10070a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald print 'XXXX boolean:', repr(data) 1010ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return chr(data) 102182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 1034b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _code_text(data, key): 1040ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return data 105182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 1064b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _code_charset(data, key): 1070ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return data[0] + data[1] 108182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 1094b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _code_appspec(data, key): 1100ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return data[0] + _code_default(data[1]) 111182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 1124b76ba3280634886356782c0ecc66ac08895826aJack Jansen_decoder_table = { 1130ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "ArchieAll" : (_decode_multistr , _code_multistr), 1140ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "UMichAll" : (_decode_multistr , _code_multistr), 1150ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "InfoMacAll" : (_decode_multistr , _code_multistr), 1160ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "ListFont" : (_decode_fontrecord , _code_fontrecord), 1170ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "ScreenFont" : (_decode_fontrecord , _code_fontrecord), 1180ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "PrinterFont" : (_decode_fontrecord , _code_fontrecord), 1190ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen# "DownloadFolder" : (_decode_filespec , _code_filespec), 1200ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "Signature": (_decode_text , _code_text), 1210ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "Plan" : (_decode_text , _code_text), 1220ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "MailHeaders" : (_decode_text , _code_text), 1230ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "NewsHeaders" : (_decode_text , _code_text), 124182b5aca27d376b08a2904bed42b751496f932f3Tim Peters# "Mapping" 1250ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "CharacterSet" : (_decode_charset , _code_charset), 1260ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "Helper\245" : (_decode_appspec , _code_appspec), 1270ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen# "Services" : (_decode_services, ????), 1280ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "NewMailFlashIcon" : (_decode_boolean , _code_boolean), 1290ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "NewMailDialog" : (_decode_boolean , _code_boolean), 1300ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "NewMailPlaySound" : (_decode_boolean , _code_boolean), 1310ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen# "WebBackgroundColor" : _decode_color, 1320ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "NoProxyDomains" : (_decode_multistr , _code_multistr), 1330ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "UseHTTPProxy" : (_decode_boolean , _code_boolean), 1340ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "UseGopherProxy": (_decode_boolean , _code_boolean), 1350ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "UseFTPProxy" : (_decode_boolean , _code_boolean), 1360ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen "UsePassiveFTP" : (_decode_boolean , _code_boolean), 1374b76ba3280634886356782c0ecc66ac08895826aJack Jansen} 1384b76ba3280634886356782c0ecc66ac08895826aJack Jansen 1394b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _decode(data, key): 1400ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen if '\245' in key: 1410ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen key2 = key[:string.index(key, '\245')+1] 1420ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen else: 1430ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen key2 = key 144a3a505076efc19ec23669370778c5fa22d030ffaMark Dickinson if key2 in _decoder_table: 1450ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen decoder = _decoder_table[key2][0] 1460ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen else: 1470ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen decoder = _decode_default 1480ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return decoder(data, key) 1494b76ba3280634886356782c0ecc66ac08895826aJack Jansen 1504b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _code(data, key): 1510ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen if type(data) == _ICOpaqueDataType: 1520ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return data.data 1530ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen if '\245' in key: 1540ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen key2 = key[:string.index(key, '\245')+1] 1550ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen else: 1560ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen key2 = key 157a3a505076efc19ec23669370778c5fa22d030ffaMark Dickinson if key2 in _decoder_table: 1580ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen coder = _decoder_table[key2][1] 1590ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen else: 1600ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen coder = _code_default 1610ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return coder(data, key) 162182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 1634b76ba3280634886356782c0ecc66ac08895826aJack Jansenclass IC: 1640ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen def __init__(self, signature='Pyth', ic=None): 1650ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen if ic: 1660ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen self.ic = ic 1670ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen else: 1680ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen self.ic = icglue.ICStart(signature) 1690ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen if hasattr(self.ic, 'ICFindConfigFile'): 1700ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen self.ic.ICFindConfigFile() 1710ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen self.h = Res.Resource('') 172182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 1730ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen def keys(self): 1740ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen rv = [] 1750ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen self.ic.ICBegin(icReadOnlyPerm) 1760ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen num = self.ic.ICCountPref() 1770ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen for i in range(num): 1780ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen rv.append(self.ic.ICGetIndPref(i+1)) 1790ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen self.ic.ICEnd() 1800ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return rv 181182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 1820ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen def has_key(self, key): 1830ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return self.__contains__(key) 184182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 1850ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen def __contains__(self, key): 1860ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen try: 1870ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen dummy = self.ic.ICFindPrefHandle(key, self.h) 1880ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen except icglue.error: 1890ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return 0 1900ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return 1 191182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 1920ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen def __getitem__(self, key): 1930ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen attr = self.ic.ICFindPrefHandle(key, self.h) 1940ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return _decode(self.h.data, key) 195182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 1960ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen def __setitem__(self, key, value): 1970ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen value = _code(value, key) 1980ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen self.ic.ICSetPref(key, ICattr_no_change, value) 199182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 2000ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen def launchurl(self, url, hint=""): 2010ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen # Work around a bug in ICLaunchURL: file:/foo does 2020ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen # not work but file:///foo does. 2030ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen if url[:6] == 'file:/' and url[6] != '/': 2040ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen url = 'file:///' + url[6:] 2050ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen self.ic.ICLaunchURL(hint, url, 0, len(url)) 206182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 2070ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen def parseurl(self, data, start=None, end=None, hint=""): 2085b63acd31e0e40c1a9a9e9762905b0054ff37994Benjamin Peterson if start is None: 2090ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen selStart = 0 2100ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen selEnd = len(data) 2110ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen else: 2120ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen selStart = selEnd = start 2135b63acd31e0e40c1a9a9e9762905b0054ff37994Benjamin Peterson if end is not None: 2140ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen selEnd = end 2150ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen selStart, selEnd = self.ic.ICParseURL(hint, data, selStart, selEnd, self.h) 2160ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return self.h.data, selStart, selEnd 217182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 2180ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen def mapfile(self, file): 2190ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen if type(file) != type(''): 2200ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen file = file.as_tuple()[2] 2210ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return self.ic.ICMapFilename(file) 222182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 2230ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen def maptypecreator(self, type, creator, filename=""): 2240ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return self.ic.ICMapTypeCreator(type, creator, filename) 225182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 2260ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen def settypecreator(self, file): 2270ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen file = Carbon.File.pathname(file) 2280ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen record = self.mapfile(os.path.split(file)[1]) 2290ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen MacOS.SetCreatorAndType(file, record[2], record[1]) 2300ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen macostools.touched(fss) 231182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 2324b76ba3280634886356782c0ecc66ac08895826aJack Jansen# Convenience routines 2334b76ba3280634886356782c0ecc66ac08895826aJack Jansen_dft_ic = None 2344b76ba3280634886356782c0ecc66ac08895826aJack Jansen 2354b76ba3280634886356782c0ecc66ac08895826aJack Jansendef launchurl(url, hint=""): 2360ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen global _dft_ic 2375b63acd31e0e40c1a9a9e9762905b0054ff37994Benjamin Peterson if _dft_ic is None: _dft_ic = IC() 2380ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return _dft_ic.launchurl(url, hint) 239182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 2404b76ba3280634886356782c0ecc66ac08895826aJack Jansendef parseurl(data, start=None, end=None, hint=""): 2410ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen global _dft_ic 2425b63acd31e0e40c1a9a9e9762905b0054ff37994Benjamin Peterson if _dft_ic is None: _dft_ic = IC() 2430ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return _dft_ic.parseurl(data, start, end, hint) 244182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 2454b76ba3280634886356782c0ecc66ac08895826aJack Jansendef mapfile(filename): 2460ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen global _dft_ic 2475b63acd31e0e40c1a9a9e9762905b0054ff37994Benjamin Peterson if _dft_ic is None: _dft_ic = IC() 2480ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return _dft_ic.mapfile(filename) 249182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 2504b76ba3280634886356782c0ecc66ac08895826aJack Jansendef maptypecreator(type, creator, filename=""): 2510ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen global _dft_ic 2525b63acd31e0e40c1a9a9e9762905b0054ff37994Benjamin Peterson if _dft_ic is None: _dft_ic = IC() 2530ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return _dft_ic.maptypecreator(type, creator, filename) 254182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 2554b76ba3280634886356782c0ecc66ac08895826aJack Jansendef settypecreator(file): 2560ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen global _dft_ic 2575b63acd31e0e40c1a9a9e9762905b0054ff37994Benjamin Peterson if _dft_ic is None: _dft_ic = IC() 2580ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen return _dft_ic.settypecreator(file) 259182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 2604b76ba3280634886356782c0ecc66ac08895826aJack Jansendef _test(): 2610ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen ic = IC() 2620ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen for k in ic.keys(): 2630ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen try: 2640ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen v = ic[k] 2650ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen except error: 2660ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen v = '????' 2670ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen print k, '\t', v 2680ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen sys.exit(1) 269182b5aca27d376b08a2904bed42b751496f932f3Tim Peters 2704b76ba3280634886356782c0ecc66ac08895826aJack Jansenif __name__ == '__main__': 2710ae3220736f9b71820b01aee1f540d0afcceb9a6Jack Jansen _test() 272