def testOpenRF(self): try: fp = open(test_support.TESTFN, 'w') fp.write('hello world\n') fp.close() rfp = MacOS.openrf(test_support.TESTFN, '*wb') rfp.write('goodbye world\n') rfp.close() fp = open(test_support.TESTFN, 'r') data = fp.read() fp.close() self.assertEquals(data, 'hello world\n') rfp = MacOS.openrf(test_support.TESTFN, '*rb') data = rfp.read(100) data2 = rfp.read(100) rfp.close() self.assertEquals(data, 'goodbye world\n') self.assertEquals(data2, '') finally: os.unlink(test_support.TESTFN)
def _platform_cp(self, source_path, destination_path): ## copy file data source = self._open(source_path, 'rb') destination = self._open(destination_path, 'wb') self._raw_copy(source, destination) source.close() destination.close() ## copy resource file data source = MacOS.openrf(source_path, '*rb') destination = MacOS.openrf(destination_path, '*wb') self._raw_copy(source, destination) source.close() destination.close() ## set creator/type on the Macintosh source_spec = macfs.FSSpec(source_path) (creator, type) = source_spec.GetCreatorType() destination_spec = macfs.FSSpec(destination_path) destination_spec.SetCreatorType(creator, type) ## copy file mode/time bits st = os.stat(source_path) mtime = st[stat.ST_MTIME] destination_spec.SetDates(mtime, mtime, mtime)
def compareData(self, isrf, data): if isrf: fp = MacOS.openrf(TESTFN2, '*rb') else: fp = open(TESTFN2, 'rb') filedata = fp.read(1000) self.assertEqual(data, filedata)
def setUp(self): fp = open(test_support.TESTFN, 'w') fp.write('hello world\n') fp.close() rfp = MacOS.openrf(test_support.TESTFN, '*wb') rfp.write('goodbye world\n') rfp.close()
def compareData(self): fp = open(test_support.TESTFN, 'r') data1 = fp.read() fp.close() fp = open(TESTFN2, 'r') data2 = fp.read() fp.close() if data1 != data2: return 'Data forks differ' rfp = MacOS.openrf(test_support.TESTFN, '*rb') data1 = rfp.read(1000) rfp.close() rfp = MacOS.openrf(TESTFN2, '*rb') data2 = rfp.read(1000) rfp.close() if data1 != data2: return 'Resource forks differ' return ''
def openrf(path, mode): if have_macos: try: return MacOS.openrf(mac_path(path), "*" + mode) except MacOS.Error: pass try: return open(os.path.join(path, "..namedfork", "rsrc"), mode) except IOError: pass return None
def fromFile(self, path): s = os.lstat(path) self.md5 = '' self.rfmd5 = '' # Find resource fork size manually if S_ISREG(s[ST_MODE]): rf = MacOS.openrf(path, 'r') rf.seek(0, 2) #seeks to end of file self.rfSize = rf.tell() rfNumBytes = int(self.rfSize) if gUseMD5 and rfNumBytes > 0: rf.seek(0) h = hashlib.md5() h.update(rf.read(rfNumBytes)) self.rfmd5 = h.hexdigest() rf.close() else: self.rfSize = 0 # Find data md5 if gUseMD5 and S_ISREG(s[ST_MODE]) and s[ST_SIZE] > 0: f = open(path, 'r') h = hashlib.md5() d = f.read(4096) while d: h.update(d) d = f.read(4096) #h.update(f.read()) self.md5 = h.hexdigest() self.name = path self.mode = s[ST_MODE] self.uid = s[ST_UID] self.gid = s[ST_GID] self.size = s[ST_SIZE] self.creationDate = s[ST_CTIME] self.modificationDate = s[ST_MTIME] if S_ISLNK(s[ST_MODE]): self.linkPath = os.readlink(path) else: self.linkPath = ''
def tofile(self, path, resonly=False): outfile = open(path, "wb") data = False if resonly: if self.resourcefork is None: raise Error, "No resource fork found" fp = open(path, "wb") fp.write(self.resourcefork) fp.close() elif self.resourcefork is None and self.datafork is None: raise Error, "No useful forks found" else: if self.datafork is not None: fp = open(path, "wb") fp.write(self.datafork) fp.close() if self.resourcefork is not None: fp = MacOS.openrf(path, "*wb") fp.write(self.resourcefork) fp.close()
def __init__(self, redirect=_defRedirect, filename=None, useBestVisual=False, clearSigInt=True): """ Construct a ``wx.App`` object. :param redirect: Should ``sys.stdout`` and ``sys.stderr`` be redirected? Defaults to True on Windows and Mac, False otherwise. If `filename` is None then output will be redirected to a window that pops up as needed. (You can control what kind of window is created for the output by resetting the class variable ``outputWindowClass`` to a class of your choosing.) :param filename: The name of a file to redirect output to, if redirect is True. :param useBestVisual: Should the app try to use the best available visual provided by the system (only relevant on systems that have more than one visual.) This parameter must be used instead of calling `SetUseBestVisual` later on because it must be set before the underlying GUI toolkit is initialized. :param clearSigInt: Should SIGINT be cleared? This allows the app to terminate upon a Ctrl-C in the console like other GUI apps will. :note: You should override OnInit to do applicaition initialization to ensure that the system, toolkit and wxWidgets are fully initialized. """ wx.PyApp.__init__(self) if wx.Platform == "__WXMAC__": try: import MacOS if not MacOS.WMAvailable(): print """\ This program needs access to the screen. Please run with 'pythonw', not 'python', and only when you are logged in on the main display of your Mac.""" _sys.exit(1) except SystemExit: raise except: pass # This has to be done before OnInit self.SetUseBestVisual(useBestVisual) # Set the default handler for SIGINT. This fixes a problem # where if Ctrl-C is pressed in the console that started this # app then it will not appear to do anything, (not even send # KeyboardInterrupt???) but will later segfault on exit. By # setting the default handler then the app will exit, as # expected (depending on platform.) if clearSigInt: try: import signal signal.signal(signal.SIGINT, signal.SIG_DFL) except: pass # Save and redirect the stdio to a window? self.stdioWin = None self.saveStdio = (_sys.stdout, _sys.stderr) if redirect: self.RedirectStdio(filename) # Use Python's install prefix as the default wx.StandardPaths.Get().SetInstallPrefix(_sys.prefix) # This finishes the initialization of wxWindows and then calls # the OnInit that should be present in the derived class self._BootstrapApp()
def errorMessage(errorNum): if _errors.has_key(errorNum): return _errors[errorNum] else: return MacOS.GetErrorString(errorNum)
def GetArgv(optionlist=None, commandlist=None, addoldfile=1, addnewfile=1, addfolder=1, id=ARGV_ID): _initialize() _interact() d = GetNewDialog(id, -1) if not d: print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)" return # h = d.GetDialogItemAsControl(3) # SetDialogItemText(h, lf2cr(prompt)) # h = d.GetDialogItemAsControl(4) # SetDialogItemText(h, lf2cr(default)) # d.SelectDialogItemText(4, 0, 999) # d.SetDialogItem(4, 0, 255) if optionlist: _setmenu(d.GetDialogItemAsControl(ARGV_OPTION_GROUP), optionlist) _selectoption(d, optionlist, 0) else: d.GetDialogItemAsControl(ARGV_OPTION_GROUP).DeactivateControl() if commandlist: _setmenu(d.GetDialogItemAsControl(ARGV_COMMAND_GROUP), commandlist) if type(commandlist[0]) == type(()) and len(commandlist[0]) > 1: help = commandlist[0][-1] h = d.GetDialogItemAsControl(ARGV_COMMAND_EXPLAIN) Dlg.SetDialogItemText(h, help) else: d.GetDialogItemAsControl(ARGV_COMMAND_GROUP).DeactivateControl() if not addoldfile: d.GetDialogItemAsControl(ARGV_ADD_OLDFILE).DeactivateControl() if not addnewfile: d.GetDialogItemAsControl(ARGV_ADD_NEWFILE).DeactivateControl() if not addfolder: d.GetDialogItemAsControl(ARGV_ADD_FOLDER).DeactivateControl() d.SetDialogDefaultItem(ARGV_ITEM_OK) d.SetDialogCancelItem(ARGV_ITEM_CANCEL) d.GetDialogWindow().ShowWindow() d.DrawDialog() if hasattr(MacOS, 'SchedParams'): appsw = MacOS.SchedParams(1, 0) try: while 1: stringstoadd = [] n = ModalDialog(None) if n == ARGV_ITEM_OK: break elif n == ARGV_ITEM_CANCEL: raise SystemExit elif n == ARGV_OPTION_GROUP: idx = d.GetDialogItemAsControl( ARGV_OPTION_GROUP).GetControlValue() - 1 _selectoption(d, optionlist, idx) elif n == ARGV_OPTION_VALUE: pass elif n == ARGV_OPTION_ADD: idx = d.GetDialogItemAsControl( ARGV_OPTION_GROUP).GetControlValue() - 1 if 0 <= idx < len(optionlist): option = optionlist[idx] if type(option) == type(()): option = option[0] if option[-1] == '=' or option[-1] == ':': option = option[:-1] h = d.GetDialogItemAsControl(ARGV_OPTION_VALUE) value = Dlg.GetDialogItemText(h) else: value = '' if len(option) == 1: stringtoadd = '-' + option else: stringtoadd = '--' + option stringstoadd = [stringtoadd] if value: stringstoadd.append(value) else: MacOS.SysBeep() elif n == ARGV_COMMAND_GROUP: idx = d.GetDialogItemAsControl( ARGV_COMMAND_GROUP).GetControlValue() - 1 if 0 <= idx < len(commandlist) and type(commandlist[idx]) == type(()) and \ len(commandlist[idx]) > 1: help = commandlist[idx][-1] h = d.GetDialogItemAsControl(ARGV_COMMAND_EXPLAIN) Dlg.SetDialogItemText(h, help) elif n == ARGV_COMMAND_ADD: idx = d.GetDialogItemAsControl( ARGV_COMMAND_GROUP).GetControlValue() - 1 if 0 <= idx < len(commandlist): command = commandlist[idx] if type(command) == type(()): command = command[0] stringstoadd = [command] else: MacOS.SysBeep() elif n == ARGV_ADD_OLDFILE: pathname = AskFileForOpen() if pathname: stringstoadd = [pathname] elif n == ARGV_ADD_NEWFILE: pathname = AskFileForSave() if pathname: stringstoadd = [pathname] elif n == ARGV_ADD_FOLDER: pathname = AskFolder() if pathname: stringstoadd = [pathname] elif n == ARGV_CMDLINE_DATA: pass # Nothing to do else: raise RuntimeError, "Unknown dialog item %d" % n for stringtoadd in stringstoadd: if '"' in stringtoadd or "'" in stringtoadd or " " in stringtoadd: stringtoadd = repr(stringtoadd) h = d.GetDialogItemAsControl(ARGV_CMDLINE_DATA) oldstr = GetDialogItemText(h) if oldstr and oldstr[-1] != ' ': oldstr = oldstr + ' ' oldstr = oldstr + stringtoadd if oldstr[-1] != ' ': oldstr = oldstr + ' ' SetDialogItemText(h, oldstr) d.SelectDialogItemText(ARGV_CMDLINE_DATA, 0x7fff, 0x7fff) h = d.GetDialogItemAsControl(ARGV_CMDLINE_DATA) oldstr = GetDialogItemText(h) tmplist = string.split(oldstr) newlist = [] while tmplist: item = tmplist[0] del tmplist[0] if item[0] == '"': while item[-1] != '"': if not tmplist: raise RuntimeError, "Unterminated quoted argument" item = item + ' ' + tmplist[0] del tmplist[0] item = item[1:-1] if item[0] == "'": while item[-1] != "'": if not tmplist: raise RuntimeError, "Unterminated quoted argument" item = item + ' ' + tmplist[0] del tmplist[0] item = item[1:-1] newlist.append(item) return newlist finally: if hasattr(MacOS, 'SchedParams'): MacOS.SchedParams(*appsw) del d
# This python script creates Finder aliases for all the
def set_creator_type(file): MacOS.SetCreatorAndType(file, 'Pyth', 'PYC ')
def do_menu(self, id, item, window, event): if hasattr(MacOS, 'OutputSeen'): MacOS.OutputSeen() self.menubar.dispatch(id, item, window, event)
def compileaete(aete, resinfo, fname, output=None, basepkgname=None, edit_modnames=None, creatorsignature=None, verbose=None): """Generate code for a full aete resource. fname passed for doc purposes""" version, language, script, suites = aete major, minor = divmod(version, 256) if not creatorsignature: creatorsignature, dummy = MacOS.GetCreatorAndType(fname) packagename = identify(os.path.splitext(os.path.basename(fname))[0]) if language: packagename = packagename + '_lang%d' % language if script: packagename = packagename + '_script%d' % script if len(packagename) > 27: packagename = packagename[:27] if output: if not os.path.exists(output): os.mkdir(output) pathname = output else: pathname = EasyDialogs.AskFolder( message='Create and select package folder for %s' % packagename, defaultLocation=DEFAULT_USER_PACKAGEFOLDER) output = pathname if not pathname: return else: packagename = os.path.split(os.path.normpath(pathname))[1] if not basepkgname: basepkgname = EasyDialogs.AskFolder( message='Package folder for base suite (usually StdSuites)', defaultLocation=DEFAULT_STANDARD_PACKAGEFOLDER) if basepkgname: dirname, basepkgname = os.path.split(os.path.normpath(basepkgname)) if dirname and dirname not in sys.path: sys.path.insert(0, dirname) basepackage = __import__(basepkgname) else: basepackage = None suitelist = [] allprecompinfo = [] allsuites = [] for suite in suites: compiler = SuiteCompiler(suite, basepackage, output, edit_modnames, verbose) code, modname, precompinfo = compiler.precompilesuite() if not code: continue allprecompinfo = allprecompinfo + precompinfo suiteinfo = (suite, pathname, modname) suitelist.append((code, modname)) allsuites.append(compiler) for compiler in allsuites: compiler.compilesuite(major, minor, language, script, fname, allprecompinfo) initfilename = os.path.join(output, '__init__.py') fp = open(initfilename, 'w') MacOS.SetCreatorAndType(initfilename, 'Pyth', 'TEXT') fp.write('"""\n') fp.write('Package generated from %s\n' % ascii(fname)) if resinfo: fp.write('Resource %s resid %d %s\n' % (ascii(resinfo[1]), resinfo[0], ascii(resinfo[2]))) fp.write('"""\n') fp.write('import aetools\n') fp.write('Error = aetools.Error\n') suitelist.sort() for code, modname in suitelist: fp.write('import %s\n' % modname) fp.write('\n\n_code_to_module = {\n') for code, modname in suitelist: fp.write(" '%s' : %s,\n" % (ascii(code), modname)) fp.write('}\n\n') fp.write('\n\n_code_to_fullname = {\n') for code, modname in suitelist: fp.write(" '%s' : ('%s.%s', '%s'),\n" % (ascii(code), packagename, modname, modname)) fp.write('}\n\n') for code, modname in suitelist: fp.write('from %s import *\n' % modname) fp.write('\ndef getbaseclasses(v):\n') fp.write(" if not getattr(v, '_propdict', None):\n") fp.write(' v._propdict = {}\n') fp.write(' v._elemdict = {}\n') fp.write( " for superclassname in getattr(v, '_superclassnames', []):\n" ) fp.write(' superclass = eval(superclassname)\n') fp.write(' getbaseclasses(superclass)\n') fp.write( " v._propdict.update(getattr(superclass, '_propdict', {}))\n" ) fp.write( " v._elemdict.update(getattr(superclass, '_elemdict', {}))\n" ) fp.write( " v._propdict.update(getattr(v, '_privpropdict', {}))\n") fp.write( " v._elemdict.update(getattr(v, '_privelemdict', {}))\n") fp.write('\n') fp.write('import StdSuites\n') allprecompinfo.sort() if allprecompinfo: fp.write( '\n#\n# Set property and element dictionaries now that all classes have been defined\n#\n' ) for codenamemapper in allprecompinfo: for k, v in codenamemapper.getall('class'): fp.write('getbaseclasses(%s)\n' % v) application_class = None if allprecompinfo: fp.write('\n#\n# Indices of types declared in this module\n#\n') fp.write('_classdeclarations = {\n') for codenamemapper in allprecompinfo: for k, v in codenamemapper.getall('class'): fp.write(' %r : %s,\n' % (k, v)) if k == 'capp': application_class = v fp.write('}\n') if suitelist: fp.write('\n\nclass %s(%s_Events' % (packagename, suitelist[0][1])) for code, modname in suitelist[1:]: fp.write(',\n %s_Events' % modname) fp.write(',\n aetools.TalkTo):\n') fp.write(' _signature = %r\n\n' % (creatorsignature, )) fp.write(" _moduleName = '%s'\n\n" % packagename) if application_class: fp.write(' _elemdict = %s._elemdict\n' % application_class) fp.write(' _propdict = %s._propdict\n' % application_class) fp.close() return
"""Utility routines depending on the finder,
def __init__(self, path = "", title = ""): defaultfontsettings, defaulttabsettings, defaultwindowsize = geteditorprefs() global _scriptuntitledcounter if not path: if title: self.title = title else: self.title = "Untitled Script %r" % (_scriptuntitledcounter,) _scriptuntitledcounter = _scriptuntitledcounter + 1 text = "" self._creator = W._signature self._eoln = os.linesep elif os.path.exists(path): path = resolvealiases(path) dir, name = os.path.split(path) self.title = name f = open(path, "rb") text = f.read() f.close() self._creator, filetype = MacOS.GetCreatorAndType(path) self.addrecentfile(path) if '\n' in text: if string.find(text, '\r\n') >= 0: self._eoln = '\r\n' else: self._eoln = '\n' text = string.replace(text, self._eoln, '\r') else: self._eoln = '\r' else: raise IOError, "file '%s' does not exist" % path self.path = path self.settings = {} if self.path: self.readwindowsettings() if self.settings.has_key("windowbounds"): bounds = self.settings["windowbounds"] else: bounds = defaultwindowsize if self.settings.has_key("fontsettings"): self.fontsettings = self.settings["fontsettings"] else: self.fontsettings = defaultfontsettings if self.settings.has_key("tabsize"): try: self.tabsettings = (tabsize, tabmode) = self.settings["tabsize"] except: self.tabsettings = defaulttabsettings else: self.tabsettings = defaulttabsettings W.Window.__init__(self, bounds, self.title, minsize = (330, 120), tabbable = 0) self.setupwidgets(text) if self.settings.has_key("selection"): selstart, selend = self.settings["selection"] self.setselection(selstart, selend) self.open() self.setinfotext() self.globals = {} self._buf = "" # for write method self.debugging = 0 self.profiling = 0 self.run_as_main = self.settings.get("run_as_main", 0) self.run_with_interpreter = self.settings.get("run_with_interpreter", 0) self.run_with_cl_interpreter = self.settings.get("run_with_cl_interpreter", 0)
def setMacCreatorAndType(path, fileCreator, fileType): if MacOS is not None: MacOS.SetCreatorAndType(path, fileCreator, fileType)
def buildapplet(): buildtools.DEBUG=1 # Find the template # (there's no point in proceeding if we can't find it) template = buildtools.findtemplate() # Ask for source text if not specified in sys.argv[1:] if not sys.argv[1:]: filename = EasyDialogs.AskFileForOpen(message='Select Python source or applet:', typeList=('TEXT', 'APPL')) if not filename: return tp, tf = os.path.split(filename) if tf[-3:] == '.py': tf = tf[:-3] else: tf = tf + '.applet' dstfilename = EasyDialogs.AskFileForSave(message='Save application as:', savedFileName=tf) if not dstfilename: return cr, tp = MacOS.GetCreatorAndType(filename) if tp == 'APPL': buildtools.update(template, filename, dstfilename) else: buildtools.process(template, filename, dstfilename, 1) else: SHORTOPTS = "o:r:ne:v?PR" LONGOPTS=("output=", "resource=", "noargv", "extra=", "verbose", "help", "python=", "destroot=") try: options, args = getopt.getopt(sys.argv[1:], SHORTOPTS, LONGOPTS) except getopt.error: usage() if options and len(args) > 1: sys.stderr.write("Cannot use options when specifying multiple input files") sys.exit(1) dstfilename = None rsrcfilename = None raw = 0 extras = [] verbose = None destroot = '' for opt, arg in options: if opt in ('-o', '--output'): dstfilename = arg elif opt in ('-r', '--resource'): rsrcfilename = arg elif opt in ('-n', '--noargv'): raw = 1 elif opt in ('-e', '--extra'): if ':' in arg: arg = arg.split(':') extras.append(arg) elif opt in ('-P', '--python'): # This is a very dirty trick. We set sys.executable # so that bundlebuilder will use this in the #! line # for the applet bootstrap. sys.executable = arg elif opt in ('-v', '--verbose'): verbose = Verbose() elif opt in ('-?', '--help'): usage() elif opt in ('-d', '--destroot'): destroot = arg # On OS9 always be verbose if sys.platform == 'mac' and not verbose: verbose = 'default' # Loop over all files to be processed for filename in args: cr, tp = MacOS.GetCreatorAndType(filename) if tp == 'APPL': buildtools.update(template, filename, dstfilename) else: buildtools.process(template, filename, dstfilename, 1, rsrcname=rsrcfilename, others=extras, raw=raw, progress=verbose, destroot=destroot)
"""Create an applet from a Python script.
"""macgen_info - Generate CodeWarrior project, config source, resource file"""
def setfiletype(self, filename): if MacOS and (self.filecreator or self.filetype): creator, type = MacOS.GetCreatorAndType(filename) if self.filecreator: creator = self.filecreator if self.filetype: type = self.filetype MacOS.SetCreatorAndType(filename, creator, type)
def __del__(self): if self._doing_asyncevents: self._doing_asyncevents = 0 MacOS.SetEventHandler()
def SetOutputFileName(file = None): "Set the output file name and set its creator&type to CWIE&TEXT" _SetOutputFileName(file) if file: import MacOS MacOS.SetCreatorAndType(file, 'CWIE', 'TEXT')
def do_inDesk(self, partcode, window, event): if hasattr(MacOS, 'HandleEvent'): MacOS.HandleEvent(event)
def __ensure_WMAvailable(klass): if klass.__eventloop_initialized: return 1 if not MacOS.WMAvailable(): return 0 Evt.WaitNextEvent(0, 0)
def do_unknownwindow(self, partcode, window, event): if DEBUG: print 'Unknown window:', window if hasattr(MacOS, 'HandleEvent'): MacOS.HandleEvent(event)
def guess_type(url): # On the mac we can have serious conflicts between the # extension and the cretor/type of the file. As there is # no 100% correct way to solve this we let the extension # override the creator/type. This will only lead to unexpected # results when a file is given an extension _and_ that extension # belongs to files with a different mimetype. type, encoding = mimetypes.guess_type(url) if type: return type, encoding if not _ic_instance: return type, encoding # # Next step is to see whether the extension is known to Internet Config # try: descr = _ic_instance.mapfile(url) except ic.error: descr = None else: mimetype = descr[8] if mimetype: if not '/' in mimetype: mimetype = mimetype + '/unknown' return mimetype, None # # Final step, for urls pointing to existing local files, we use # the creator/type code and give a warning # utype, host, path, params, query, fragment = urlparse.urlparse(url) if (utype and utype != 'file') or (host and host != 'localhost'): return None, None import windowinterface filename = MMurl.url2pathname(path) filename_lastpart = os.path.split(filename)[-1] try: creator, type = MacOS.GetCreatorAndType(filename) except MacOS.Error: # File doesn't exist. Give the long talk. if not warned_names.has_key(filename_lastpart): windowinterface.showmessage( 'Extension for "%s" not recognized.\nFor use with GRiNS (and for use on the web in general) please give your file the correct extension.' % filename_lastpart, identity='nomimetype') warned_names[filename_lastpart] = 1 return None, None try: descr = _ic_instance.maptypecreator(type, creator, url) except: descr = None if not descr: if not warned_names.has_key(filename_lastpart): windowinterface.showmessage( 'Extension for "%s" not recognized.\nFor use with GRiNS (and for use on the web in general) please give your file the correct extension.' % filename_lastpart, identity='nomimetype') warned_names[filename_lastpart] = 1 return None, None import windowinterface if not warned_names.has_key(filename_lastpart): windowinterface.showmessage( 'Incorrect extension for "%s"\nThis may cause problems on the web' % filename_lastpart, identity='mimetypemismatch') warned_names[filename_lastpart] = 1 mimetype = descr[8] if mimetype: if not '/' in mimetype: mimetype = mimetype + '/unknown' else: # it may be an empty string, turn into None mimetype = None return mimetype, None
def compilesuite(self, major, minor, language, script, fname, precompinfo): """Generate code for a single suite""" name, desc, code, level, version, events, classes, comps, enums = self.suite def class_sorter(k1, k2): """Sort classes by code, and make sure main class sorts before synonyms""" if k1[1] < k2[1]: return -1 if k1[1] > k2[1]: return 1 if not k2[3] or k2[3][0][1] == 'c@#!': return -1 if not k1[3] or k1[3][0][1] == 'c@#!': return 1 return 0 events.sort() classes.sort(class_sorter) comps.sort() enums.sort() self.fp = fp = open(self.pathname, 'w') MacOS.SetCreatorAndType(self.pathname, 'Pyth', 'TEXT') fp.write('"""Suite %s: %s\n' % (ascii(name), ascii(desc))) fp.write('Level %d, version %d\n\n' % (level, version)) fp.write('Generated from %s\n' % ascii(fname)) fp.write('AETE/AEUT resource version %d/%d, language %d, script %d\n' % (major, minor, language, script)) fp.write('"""\n\n') fp.write('import aetools\n') fp.write('import MacOS\n\n') fp.write('_code = %r\n\n' % (code, )) if self.basepackage and code in self.basepackage._code_to_module: fp.write('from %s import *\n' % self.basepackage._code_to_fullname[code][0]) basemodule = self.basepackage._code_to_module[code] elif self.basepackage and code.lower( ) in self.basepackage._code_to_module: fp.write('from %s import *\n' % self.basepackage._code_to_fullname[code.lower()][0]) basemodule = self.basepackage._code_to_module[code.lower()] else: basemodule = None self.basemodule = basemodule self.compileclassheader() self.enumsneeded = {} if events: for event in events: self.compileevent(event) else: fp.write(' pass\n\n') objc = ObjectCompiler(fp, self.modname, basemodule, precompinfo, interact=self.edit_modnames is None, verbose=self.verbose) for cls in classes: objc.compileclass(cls) for cls in classes: objc.fillclasspropsandelems(cls) for comp in comps: objc.compilecomparison(comp) for enum in enums: objc.compileenumeration(enum) for enum in self.enumsneeded.keys(): objc.checkforenum(enum) objc.dumpindex() return
"""Tools for use in AppleEvent clients and servers.
# The oldest AppleEvent test program. # Its function has been overtaken by echo.py and tell.py. import AE from AppleEvents import * import Evt from Events import * import struct import aetools import macfs import sys import MacOS MacOS.EnableAppswitch(0) def aehandler(request, reply): tosend = [] print 'request:', aetools.unpackevent(request) param = request.AEGetParamDesc(keyDirectObject, typeWildCard) if param.type == typeAEList: n = param.AECountItems() print 'List has', n, 'items' for i in range(1, 1+n): type, item = param.AEGetNthDesc(i, typeFSS) data = item.data print 'item', i, ':', type, item.type, len(data), 'bytes' vol, dir, fnlen = struct.unpack('hlb', data[:7]) filename = data[7:7+fnlen] print 'vol:', vol, '; dir:', dir, '; filename:', `filename` print 'full path:', macfs.FSSpec((vol,dir,filename)).as_pathname() tosend.append(item)
__version__ = "$Id$" # # Mac GRiNS Player wrapper # DEBUG = 0 import sys import os import MacOS if not MacOS.WMAvailable(): raise 'No access to the window manager' progdir = os.path.split(sys.argv[0])[0] # This is cmif:build:macosx if not progdir: progdir = os.getcwd() ID_SPLASH_DIALOG = 513 # Assure the resource file is available from Carbon import Res try: Res.GetResource('DLOG', ID_SPLASH_DIALOG) except: import macresource macdir = os.path.join(os.path.split(progdir)[0], 'mac') macresource.open_pathname(os.path.join(macdir, 'player.rsrc'), 1) macresource.open_pathname(os.path.join(macdir, 'playercontrols.rsrc'), 1) macresource.open_pathname(os.path.join(macdir, 'common.rsrc'), 1) Res.GetResource('DLOG', ID_SPLASH_DIALOG)
"""'echo' -- an AppleEvent handler which handles all events the same.
def time(): return MacOS.GetTicks() / 60.0
return elif what == mouseDown: partcode, window = Win.FindWindow(where) if partcode == inMenuBar: result = Menu.MenuSelect(where) id = (result >> 16) & 0xffff # Hi word item = result & 0xffff # Lo word if id == self.appleid: if item == 1: EasyDialogs.Message(self.getabouttext()) elif item > 1 and hasattr(Menu, 'OpenDeskAcc'): name = self.applemenu.GetMenuItemText(item) Menu.OpenDeskAcc(name) elif id == self.quitid and item == 1: if hasattr(MacOS, 'OutputSeen'): MacOS.OutputSeen() self.quitting = 1 Menu.HiliteMenu(0) return # Anything not handled is passed to Python/SIOUX if hasattr(MacOS, 'HandleEvent'): MacOS.HandleEvent(event) else: print "Unhandled event:", event def getabouttext(self): return self.__class__.__name__ def getaboutmenutext(self): return "About %s\311" % self.__class__.__name__
"""AEservertest - Test AppleEvent server interface
# applesingle - a module to decode AppleSingle files import struct import MacOS import sys Error="applesingle.Error" verbose=0 # File header format: magic, version, unused, number of entries AS_HEADER_FORMAT="ll16sh" AS_HEADER_LENGTH=26 # The flag words for AppleSingle AS_MAGIC=0x00051600 AS_VERSION=0x00020000 # Entry header format: id, offset, length AS_ENTRY_FORMAT="lll" AS_ENTRY_LENGTH=12 # The id values AS_DATAFORK=1 AS_RESOURCEFORK=2 AS_IGNORE=(3,4,5,6,8,9,10,11,12,13,14,15) def decode(input, output, resonly=0): if type(input) == type(''): input = open(input, 'rb') # Should we also test for FSSpecs or FSRefs? header = input.read(AS_HEADER_LENGTH) print `header` try: magic, version, dummy, nentry = struct.unpack(AS_HEADER_FORMAT, header) except ValueError, arg: raise Error, "Unpack header error: %s"%arg if verbose:
add_sibling_path("data_acquisition" ) #look in 'data acquisition' folder for needed routines, too add_sibling_path( "analysis") #look in 'data acquisition' folder for needed routines, too import vxi_crate_devices as vxi import array import threading import time import tagged_data from dstp_async import DSTPServer, UseNumericArray try: import MacOS MacOS.SchedParams(1, 1, 1, 0.1, 0.05) #allow nullEvent handling on Classic/Carbon except: MacOS = None #in case we want to check later class voltmeter(vxi.scanning_voltmeter ): #almost like those, just use a different range! idn_head = "HEWLETT-PACKARD,E1326B" device_loop_sleep = 0.5 initial_config_string = ":conf:volt:dc 10.0,(@100:107);" def get_data(self): vxi.scanning_voltmeter.get_data(self) data.volts = [v.loop_count, v.scan] def monitor(self):
def compilesuite(self, major, minor, language, script, fname, precompinfo): """Generate code for a single suite""" [name, desc, code, level, version, events, classes, comps, enums] = self.suite # Sort various lists, so re-generated source is easier compared def class_sorter(k1, k2): """Sort classes by code, and make sure main class sorts before synonyms""" # [name, code, desc, properties, elements] = cls if k1[1] < k2[1]: return -1 if k1[1] > k2[1]: return 1 if not k2[3] or k2[3][0][1] == 'c@#!': # This is a synonym, the other one is better return -1 if not k1[3] or k1[3][0][1] == 'c@#!': # This is a synonym, the other one is better return 1 return 0 events.sort() classes.sort(class_sorter) comps.sort() enums.sort() self.fp = fp = open(self.pathname, 'w') MacOS.SetCreatorAndType(self.pathname, 'Pyth', 'TEXT') fp.write('"""Suite %s: %s\n' % (ascii(name), ascii(desc))) fp.write("Level %d, version %d\n\n" % (level, version)) fp.write("Generated from %s\n" % ascii(fname)) fp.write("AETE/AEUT resource version %d/%d, language %d, script %d\n" % \ (major, minor, language, script)) fp.write('"""\n\n') fp.write('import aetools\n') fp.write('import MacOS\n\n') fp.write("_code = %r\n\n" % (code, )) if self.basepackage and code in self.basepackage._code_to_module: # We are an extension of a baseclass (usually an application extending # Standard_Suite or so). Import everything from our base module fp.write('from %s import *\n' % self.basepackage._code_to_fullname[code][0]) basemodule = self.basepackage._code_to_module[code] elif self.basepackage and code.lower( ) in self.basepackage._code_to_module: # This is needed by CodeWarrior and some others. fp.write('from %s import *\n' % self.basepackage._code_to_fullname[code.lower()][0]) basemodule = self.basepackage._code_to_module[code.lower()] else: # We are not an extension. basemodule = None self.basemodule = basemodule self.compileclassheader() self.enumsneeded = {} if events: for event in events: self.compileevent(event) else: fp.write(" pass\n\n") objc = ObjectCompiler(fp, self.modname, basemodule, precompinfo, interact=(self.edit_modnames is None), verbose=self.verbose) for cls in classes: objc.compileclass(cls) for cls in classes: objc.fillclasspropsandelems(cls) for comp in comps: objc.compilecomparison(comp) for enum in enums: objc.compileenumeration(enum) for enum in self.enumsneeded.keys(): objc.checkforenum(enum) objc.dumpindex()
"""PythonCGISlave.py This program can be used in two ways: - As a Python CGI script server for web servers supporting "Actions", like WebStar. - As a wrapper for a single Python CGI script, for any "compliant" Mac web server. See CGI_README.txt for more details. """ # # Written by Just van Rossum, but partly stolen from example code by Jack. # LONG_RUNNING = 1 # If true, don't quit after each request. import MacOS MacOS.SchedParams(0, 0) from MiniAEFrame import AEServer, MiniApplication import os import string import cStringIO import sys import traceback import mimetools __version__ = '3.2' slave_dir = os.getcwd() # log file for errors sys.stderr = open(sys.argv[0] + ".errors", "a+") def convertFSSpec(fss): return fss.as_pathname()