Finally merged morefindertools into findertools.
authorJack Jansen <jack.jansen@cwi.nl>
Sat, 7 Apr 2001 12:53:45 +0000 (12:53 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Sat, 7 Apr 2001 12:53:45 +0000 (12:53 +0000)
Mac/Contrib/morefindertools/morefindertools.py [deleted file]
Mac/Contrib/morefindertools/morefindertoolstest.py [deleted file]
Mac/Contrib/morefindertools/readme.txt [deleted file]
Mac/Lib/findertools.py

diff --git a/Mac/Contrib/morefindertools/morefindertools.py b/Mac/Contrib/morefindertools/morefindertools.py
deleted file mode 100644 (file)
index 8616e5a..0000000
+++ /dev/null
@@ -1,708 +0,0 @@
-"""Utility routines depending on the finder,
-inspired by findertools, but extended.
-Most events have been captured from
-Lasso Capture AE and than translated to python code.
-
-IMPORTANT
-Note that the processes() function returns different values
-depending on the OS version it is running on. On MacOS 9
-the Finder returns the process *names* which can then be
-used to find out more about them. On MacOS 8.6 and earlier
-the Finder returns a code which does not seem to work.
-So bottom line: the processes() stuff does not work on < MacOS9
-
-Written by erik@letterror.com
-"""
-
-import Finder_7_0_Suite, Finder_Suite
-import AppleEvents
-import aetools
-import MacOS
-import sys
-import macfs
-import aetypes
-from types import *
-
-__version__ = '1.0'
-morefindertoolserror = 'morefindertools Error'
-
-
-SIGNATURE='MACS'
-
-class Finder(aetools.TalkTo, Finder_Suite.Finder_Suite, Finder_7_0_Suite.Finder_7_0_Suite):
-       pass
-       
-_finder_talker = None
-
-def _getfinder():
-       """returns basic (recyclable) Finder AE interface object"""
-       global _finder_talker
-       if not _finder_talker:
-               _finder_talker = Finder(SIGNATURE)
-       _finder_talker.send_flags = ( _finder_talker.send_flags | 
-               AppleEvents.kAECanInteract | AppleEvents.kAECanSwitchLayer)
-       return _finder_talker
-
-
-#---------------------------------------------------
-#      The original findertools
-#
-
-def launch(file):
-       """Open a file thru the finder. Specify file by name or fsspec"""
-       finder = _getfinder()
-       fss = macfs.FSSpec(file)
-       vRefNum, parID, name = fss.as_tuple()
-       dir_fss = macfs.FSSpec((vRefNum, parID, ''))
-       file_alias = fss.NewAlias()
-       dir_alias = dir_fss.NewAlias()
-       return finder.open(dir_alias, items=[file_alias])
-       
-def Print(file):
-       """Print a file thru the finder. Specify file by name or fsspec"""
-       finder = _getfinder()
-       fss = macfs.FSSpec(file)
-       vRefNum, parID, name = fss.as_tuple()
-       dir_fss = macfs.FSSpec((vRefNum, parID, ''))
-       file_alias = fss.NewAlias()
-       dir_alias = dir_fss.NewAlias()
-       return finder._print(dir_alias, items=[file_alias])
-       
-def copy(src, dstdir):
-       """Copy a file to a folder"""
-       finder = _getfinder()
-       src_fss = macfs.FSSpec(src)
-       dst_fss = macfs.FSSpec(dstdir)
-       src_alias = src_fss.NewAlias()
-       dst_alias = dst_fss.NewAlias()
-       return finder.copy_to(dst_alias, _from=[src_alias])
-
-def move(src, dstdir):
-       """Move a file to a folder"""
-       finder = _getfinder()
-       src_fss = macfs.FSSpec(src)
-       dst_fss = macfs.FSSpec(dstdir)
-       src_alias = src_fss.NewAlias()
-       dst_alias = dst_fss.NewAlias()
-       return finder.move_to(dst_alias, _from=[src_alias])
-
-def sleep():
-       """Put the mac to sleep"""
-       finder = _getfinder()
-       finder.sleep()
-       
-def shutdown():
-       """Shut the mac down"""
-       finder = _getfinder()
-       finder.shut_down()
-       
-def restart():
-       """Restart the mac"""
-       finder = _getfinder()
-       finder.restart()
-
-
-#---------------------------------------------------
-#      Additional findertools
-#
-
-def reveal(file):
-       """Reveal a file in the finder. Specify file by name or fsspec."""
-       finder = _getfinder()
-       fss = macfs.FSSpec(file)
-       file_alias = fss.NewAlias()
-       return finder.reveal(file_alias)
-       
-def select(file):
-       """select a file in the finder. Specify file by name or fsspec."""
-       finder = _getfinder()
-       fss = macfs.FSSpec(file)
-       file_alias = fss.NewAlias()
-       return finder.select(file_alias)
-       
-def update(file):
-       """Update the display of the specified object(s) to match 
-       their on-disk representation. Specify file by name or fsspec."""
-       finder = _getfinder()
-       fss = macfs.FSSpec(file)
-       file_alias = fss.NewAlias()
-       return finder.update(file_alias)
-
-
-#---------------------------------------------------
-#      More findertools
-#
-
-def comment(object, comment=None):
-       """comment: get or set the Finder-comment of the item, displayed in the ³Get Info² window."""
-       object = macfs.FSSpec(object)
-       fss = macfs.FSSpec(object)
-       object_alias = fss.NewAlias()
-       if comment == None:
-               return _getcomment(object_alias)
-       else:
-               return _setcomment(object_alias, comment)
-       
-def _setcomment(object_alias, comment):
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
-       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00)
-       args['----'] = aeobj_01
-       args["data"] = comment
-       _reply, args, attrs = finder.send("core", "setd", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----']
-
-def _getcomment(object_alias):
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
-       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00)
-       args['----'] = aeobj_01
-       _reply, args, attrs = finder.send("core", "getd", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----']
-
-
-#---------------------------------------------------
-#      Get information about current processes in the Finder.
-
-def processes():
-       """processes returns a list of all active processes running on this computer and their creators."""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       processnames = []
-       processnumbers = []
-       creators = []
-       partitions = []
-       used = []
-       ## get the processnames or else the processnumbers
-       args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None)
-       _reply, args, attrs = finder.send('core', 'getd', args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       p = []
-       if args.has_key('----'):
-               p =  args['----']
-               for proc in p:
-                       if hasattr(proc, 'seld'):
-                               # it has a real name
-                               processnames.append(proc.seld)
-                       elif hasattr(proc, 'type'):
-                               if proc.type == "psn ":
-                                       # it has a process number
-                                       processnumbers.append(proc.data)
-       ## get the creators
-       args = {}
-       attrs = {}
-       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None)
-       args['----'] =  aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fcrt'), fr=aeobj_0)
-       _reply, args, attrs = finder.send('core', 'getd', args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(_arg)
-       if args.has_key('----'):
-               p =  args['----']
-               for proc in p:
-                       creators.append(proc.type)
-       ## concatenate in one dict
-       result = []
-       if len(processnames) > len(processnumbers):
-               data = processnames
-       else:
-               data = processnumbers
-       for i in range(len(creators)):
-               result.append((data[i], creators[i]))
-       return result
-
-class _process:
-       pass
-
-def isactiveprocess(processname):
-       """Check of processname is active. MacOS9"""
-       all = processes()
-       ok = 0
-       for n, c in all:
-               if n == processname:
-                       return 1
-       return 0
-       
-def processinfo(processname):
-       """Return an object with all process properties as attributes for processname. MacOS9"""
-       p = _process()
-       
-       if processname == "Finder":
-               p.partition = None
-               p.used = None
-       else:
-               p.partition = _processproperty(processname, 'appt')
-               p.used = _processproperty(processname, 'pusd')
-       p.visible = _processproperty(processname, 'pvis')               #Is the process' layer visible?
-       p.frontmost = _processproperty(processname, 'pisf')     #Is the process the frontmost process?
-       p.file = _processproperty(processname, 'file')                  #the file from which the process was launched
-       p.filetype  = _processproperty(processname, 'asty')             #the OSType of the file type of the process
-       p.creatortype = _processproperty(processname, 'fcrt')   #the OSType of the creator of the process (the signature)
-       p.accepthighlevel = _processproperty(processname, 'revt')       #Is the process high-level event aware (accepts open application, open document, print document, and quit)?
-       p.hasscripting = _processproperty(processname, 'hscr')          #Does the process have a scripting terminology, i.e., can it be scripted?
-       return p
-       
-def _processproperty(processname, property):
-       """return the partition size and memory used for processname"""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="name", seld=processname, fr=None)
-       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type(property), fr=aeobj_00)
-       args['----'] = aeobj_01
-       _reply, args, attrs = finder.send("core", "getd", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----']
-
-
-#---------------------------------------------------
-#      Mess around with Finder windows.
-       
-def openwindow(object):
-       """Open a Finder window for object, Specify object by name or fsspec."""
-       finder = _getfinder()
-       object = macfs.FSSpec(object)
-       fss = macfs.FSSpec(object)
-       object_alias = fss.NewAlias()
-       args = {}
-       attrs = {}
-       _code = 'aevt'
-       _subcode = 'odoc'
-       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
-       args['----'] = aeobj_0
-       _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       
-def closewindow(object):
-       """Close a Finder window for folder, Specify by path."""
-       finder = _getfinder()
-       fss = macfs.FSSpec(object)
-       object_alias = fss.NewAlias()
-       args = {}
-       attrs = {}
-       _code = 'core'
-       _subcode = 'clos'
-       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
-       args['----'] = aeobj_0
-       _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-
-def location(object, pos=None):
-       """Set the position of a Finder window for folder to pos=(w, h). Specify file by name or fsspec.
-       If pos=None, location will return the current position of the object."""
-       fss = macfs.FSSpec(object)
-       object_alias = fss.NewAlias()
-       if not pos:
-               return _getlocation(object_alias)
-       return _setlocation(object_alias, pos)
-       
-def _setlocation(object_alias, (x, y)):
-       """_setlocation: Set the location of the icon for the object."""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
-       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00)
-       args['----'] = aeobj_01
-       args["data"] = [x, y]
-       _reply, args, attrs = finder.send("core", "setd", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       return (x,y)
-       
-def _getlocation(object_alias):
-       """_getlocation: get the location of the icon for the object."""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
-       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00)
-       args['----'] = aeobj_01
-       _reply, args, attrs = finder.send("core", "getd", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               pos = args['----']
-               return pos.h, pos.v
-
-def label(object, index=None):
-       """label: set or get the label of the item. Specify file by name or fsspec."""
-       fss = macfs.FSSpec(object)
-       object_alias = fss.NewAlias()
-       if index == None:
-               return _getlabel(object_alias)
-       if index < 0 or index > 7:
-               index = 0
-       return _setlabel(object_alias, index)
-       
-def _getlabel(object_alias):
-       """label: Get the label for the object."""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
-       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('labi'), fr=aeobj_00)
-       args['----'] = aeobj_01
-       _reply, args, attrs = finder.send("core", "getd", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----']
-
-def _setlabel(object_alias, index):
-       """label: Set the label for the object."""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       _code = 'core'
-       _subcode = 'setd'
-       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
-                       form="alis", seld=object_alias, fr=None)
-       aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
-                       form="prop", seld=aetypes.Type('labi'), fr=aeobj_0)
-       args['----'] = aeobj_1
-       args["data"] = index
-       _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       return index
-
-def windowview(folder, view=None):
-       """windowview: Set the view of the window for the folder. Specify file by name or fsspec.
-       0 = by icon (default)
-       1 = by name
-       2 = by button
-       """
-       fss = macfs.FSSpec(folder)
-       folder_alias = fss.NewAlias()
-       if view == None:
-               return _getwindowview(folder_alias)
-       return _setwindowview(folder_alias, view)
-       
-def _setwindowview(folder_alias, view=0):
-       """set the windowview"""
-       attrs = {}
-       args = {}
-       if view == 1:
-               _v = aetypes.Type('pnam')
-       elif view == 2:
-               _v = aetypes.Type('lgbu')
-       else:
-               _v = aetypes.Type('iimg')
-       finder = _getfinder()
-       aeobj_0 = aetypes.ObjectSpecifier(want = aetypes.Type('cfol'), 
-                       form = 'alis', seld = folder_alias, fr=None)
-       aeobj_1 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'), 
-                       form = 'prop', seld = aetypes.Type('cwnd'), fr=aeobj_0)
-       aeobj_2 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'), 
-                       form = 'prop', seld = aetypes.Type('pvew'), fr=aeobj_1)
-       aeobj_3 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'), 
-                       form = 'prop', seld = _v, fr=None)
-       _code = 'core'
-       _subcode = 'setd'
-       args['----'] = aeobj_2
-       args['data'] = aeobj_3
-       _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----']
-
-def _getwindowview(folder_alias):
-       """get the windowview"""
-       attrs = {}
-       args = {}
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=folder_alias, fr=None)
-       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_00)
-       aeobj_02 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('pvew'), fr=aeobj_01)
-       args['----'] = aeobj_02
-       _reply, args, attrs = finder.send("core", "getd", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       views = {'iimg':0, 'pnam':1, 'lgbu':2}
-       if args.has_key('----'):
-               return views[args['----'].enum]
-
-def windowsize(folder, size=None):
-       """Set the size of a Finder window for folder to size=(w, h), Specify by path.
-       If size=None, windowsize will return the current size of the window.
-       Specify file by name or fsspec.
-       """
-       fss = macfs.FSSpec(folder)
-       folder_alias = fss.NewAlias()
-       openwindow(fss)
-       if not size:
-               return _getwindowsize(folder_alias)
-       return _setwindowsize(folder_alias, size)
-       
-def _setwindowsize(folder_alias, (w, h)):
-       """Set the size of a Finder window for folder to (w, h)"""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       _code = 'core'
-       _subcode = 'setd'
-       aevar00 = [w, h]
-       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
-                       form="alis", seld=folder_alias, fr=None)
-       aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
-                       form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
-       aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
-                       form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1)
-       args['----'] = aeobj_2
-       args["data"] = aevar00
-       _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       return (w, h)
-               
-def _getwindowsize(folder_alias):
-       """Set the size of a Finder window for folder to (w, h)"""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), 
-                       form="alis", seld=folder_alias, fr=None)
-       aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
-                       form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
-       aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
-                       form="prop", seld=aetypes.Type('posn'), fr=aeobj_1)
-       args['----'] = aeobj_2
-       _reply, args, attrs = finder.send('core', 'getd', args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----']
-
-def windowposition(folder, pos=None):
-       """Set the position of a Finder window for folder to pos=(w, h)."""
-       fss = macfs.FSSpec(folder)
-       folder_alias = fss.NewAlias()
-       openwindow(fss)
-       if not pos:
-               return _getwindowposition(folder_alias)
-       if type(pos) == InstanceType:
-               # pos might be a QDPoint object as returned by _getwindowposition
-               pos = (pos.h, pos.v)
-       return _setwindowposition(folder_alias, pos)
-                       
-def _setwindowposition(folder_alias, (x, y)):
-       """Set the size of a Finder window for folder to (w, h)."""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), 
-                       form="alis", seld=folder_alias, fr=None)
-       aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
-                       form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
-       aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
-                       form="prop", seld=aetypes.Type('posn'), fr=aeobj_1)
-       args['----'] = aeobj_2
-       args["data"] = [x, y]
-       _reply, args, attrs = finder.send('core', 'setd', args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----']
-
-def _getwindowposition(folder_alias):
-       """Get the size of a Finder window for folder, Specify by path."""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), 
-                       form="alis", seld=folder_alias, fr=None)
-       aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
-                       form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
-       aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
-                       form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1)
-       args['----'] = aeobj_2
-       _reply, args, attrs = finder.send('core', 'getd', args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----']
-
-def icon(object, icondata=None):
-       """icon sets the icon of object, if no icondata is given,
-       icon will return an AE object with binary data for the current icon.
-       If left untouched, this data can be used to paste the icon on another file.
-       Development opportunity: get and set the data as PICT."""
-       fss = macfs.FSSpec(object)
-       object_alias = fss.NewAlias()
-       if icondata == None:
-               return _geticon(object_alias)
-       return _seticon(object_alias, icondata)
-       
-def _geticon(object_alias):
-       """get the icondata for object. Binary data of some sort."""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), 
-                       form="alis", seld=object_alias, fr=None)
-       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
-                       form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00)
-       args['----'] = aeobj_01
-       _reply, args, attrs = finder.send("core", "getd", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----']
-
-def _seticon(object_alias, icondata):
-       """set the icondata for object, formatted as produced by _geticon()"""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), 
-                       form="alis", seld=object_alias, fr=None)
-       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
-                       form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00)
-       args['----'] = aeobj_01
-       args["data"] = icondata
-       _reply, args, attrs = finder.send("core", "setd", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----'].data
-
-
-#---------------------------------------------------
-#      Volumes and servers.
-       
-def mountvolume(volume, server=None, username=None, password=None):
-       """mount a volume, local or on a server on AppleTalk.
-       Note: mounting a ASIP server requires a different operation.
-       server is the name of the server where the volume belongs
-       username, password belong to a registered user of the volume."""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       if password:
-               args["PASS"] = password
-       if username:
-               args["USER"] = username
-       if server:
-               args["SRVR"] = server
-       args['----'] = volume
-       _reply, args, attrs = finder.send("aevt", "mvol", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----']
-
-def unmountvolume(volume):
-       """unmount a volume that's on the desktop"""
-       putaway(volume)
-       
-def putaway(object):
-       """puth the object away, whereever it came from."""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('cdis'), form="name", seld=object, fr=None)
-       _reply, args, attrs = talker.send("fndr", "ptwy", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----']
-
-
-#---------------------------------------------------
-#      Miscellaneous functions
-#
-
-def volumelevel(level):
-       """set the audio output level, parameter between 0 (silent) and 7 (full blast)"""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       if level < 0:
-               level = 0
-       elif level > 7:
-               level = 7
-       args['----'] = level
-       _reply, args, attrs = finder.send("aevt", "stvl", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----']
-
-def OSversion():
-       """return the version of the system software"""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('ver2'), fr=None)
-       args['----'] = aeobj_00
-       _reply, args, attrs = finder.send("core", "getd", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               return args['----']
-
-def filesharing():
-       """return the current status of filesharing and whether it is starting up or not:
-               -1      file sharing is off and not starting up
-               0       file sharing is off and starting up
-               1       file sharing is on"""
-       status = -1
-       finder = _getfinder()
-       # see if it is on
-       args = {}
-       attrs = {}
-       args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fshr'), fr=None)
-       _reply, args, attrs = finder.send("core", "getd", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               if args['----'] == 0:
-                       status = -1
-               else:
-                       status = 1
-       # is it starting up perchance?
-       args = {}
-       attrs = {}
-       args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fsup'), fr=None)
-       _reply, args, attrs = finder.send("core", "getd", args, attrs)
-       if args.has_key('errn'):
-               raise morefindertoolserror, aetools.decodeerror(args)
-       if args.has_key('----'):
-               if args['----'] == 1:
-                       status = 0
-       return status
-       
-def movetotrash(path):
-       """move the object to the trash"""
-       fss = macfs.FSSpec(path)
-       trashfolder = macfs.FSSpec(macfs.FindFolder(fss.as_tuple()[0], 'trsh', 0) + ("",)).as_pathname()
-       findertools.move(path, trashfolder)
-
-def emptytrash():
-       """empty the trash"""
-       finder = _getfinder()
-       args = {}
-       attrs = {}
-       args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('trsh'), fr=None)
-       _reply, args, attrs = finder.send("fndr", "empt", args, attrs)
-       if args.has_key('errn'):
-               raise aetools.Error, aetools.decodeerror(args)
diff --git a/Mac/Contrib/morefindertools/morefindertoolstest.py b/Mac/Contrib/morefindertools/morefindertoolstest.py
deleted file mode 100644 (file)
index 179d25e..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-"""Some tests of various morefindertools functions.
-This does not test the functions that are already defined and tested in findertools.
-10 10 2000 erik@letterror.com
-"""
-
-import morefindertools
-import os.path
-import MacOS
-import random
-
-mft = morefindertools
-
-print '\nmorefindertools version %s\nTests coming up\8a' %mft.__version__
-
-# miscellaneous
-print '\tfilesharing on?',     mft.filesharing()               # is file sharing on, off, starting up?
-print '\tOS version',          mft.OSversion()         # the version of the system software
-
-# set the soundvolume in a simple way
-print '\tSystem beep volume'
-for i in range(0, 7):
-       mft.volumelevel(i)              
-       MacOS.SysBeep()
-
-# Finder's windows, file location, file attributes
-f = __file__                           # get a path name that is innocent to play with and always works
-mft.reveal(f)                          # reveal this file in a Finder window
-mft.select(f)                          # select this file
-
-base, file = os.path.split(f)
-mft.closewindow(base)  # close the window this file is in      (opened by reveal)
-mft.openwindow(base)           # open it again
-mft.windowview(base, 1)        # set the view by list
-
-mft.label(f, 2)                                # set the label of this file to something orange
-print '\tlabel', mft.label(f)  # get the label of this file
-
-# the file location only works in a window with icon view!
-print 'Random locations for an icon'
-mft.windowview(base, 0)                # set the view by icon
-mft.windowsize(base, (600, 600))
-for i in range(50):
-       mft.location(f, (random.randint(10, 590), random.randint(10, 590)))
-
-mft.windowsize(base, (200, 400))
-mft.windowview(base, 1)                # set the view by icon
-
-orgpos = mft.windowposition(base)
-print 'Animated window location'
-for i in range(10):
-       pos = (100+i*10, 100+i*10)
-       mft.windowposition(base, pos)
-       print '\twindow position', pos
-mft.windowposition(base, orgpos)       # park it where it was before\8a
-
-print 'Put a comment in file', f, ':'
-print '\t', mft.comment(f)             # print the Finder comment this file has
-s = 'This is a comment no one reads!'
-mft.comment(f, s)                      # set the Finder comment
-
-#
-#
-#      the following code does not work on MacOS versions older than MacOS 9.
-#
-#
-
-if 0:
-       print 'MacOS9 or better specific functions'
-       # processes
-       pr = mft.processes()            # return a list of tuples with (active_processname, creatorcode)
-       print 'Return a list of current active processes:'
-       for p in pr:
-               print '\t', p
-       
-       # get attributes of the first process in the list
-       print 'Attributes of the first process in the list:'
-       pinfo = mft.processinfo(pr[0][0])
-       print '\t', pr[0][0]
-       print '\t\tmemory partition', pinfo.partition           # the memory allocated to this process
-       print '\t\tmemory used', pinfo.used                     # the memory actuall used by this process
-       print '\t\tis visible', pinfo.visible                   # is the process visible to the user
-       print '\t\tis frontmost', pinfo.frontmost               # is the process the front most one?
-       print '\t\thas scripting', pinfo.hasscripting           # is the process scriptable?
-       print '\t\taccepts high level events',  pinfo.accepthighlevel   # does the process accept high level appleevents?
-print 'Done.'
\ No newline at end of file
diff --git a/Mac/Contrib/morefindertools/readme.txt b/Mac/Contrib/morefindertools/readme.txt
deleted file mode 100644 (file)
index 04b31ab..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-The morefindertools module is an extension to findertools, donated by Erik
-van Blokland, erik@letterror.com. The reason it is included in Contrib in stead
-of incorporated in findertools is lack of time before the release, it will be
-incorporated in the next release.
index 45f3e9e87977ed9a8602ce24090c46a9a7559da5..dde329abfbac47e2bae5656f69883c712fe94576 100644 (file)
@@ -1,15 +1,35 @@
-"""Utility routines depending on the finder."""
+"""Utility routines depending on the finder,
+a combination of code by Jack Jansen and erik@letterror.com.
 
+Most events have been captured from
+Lasso Capture AE and than translated to python code.
+
+IMPORTANT
+Note that the processes() function returns different values
+depending on the OS version it is running on. On MacOS 9
+the Finder returns the process *names* which can then be
+used to find out more about them. On MacOS 8.6 and earlier
+the Finder returns a code which does not seem to work.
+So bottom line: the processes() stuff does not work on < MacOS9
+
+Mostly written by erik@letterror.com
+"""
 import Finder
 import AppleEvents
 import aetools
 import MacOS
 import sys
 import macfs
+import aetypes
+from types import *
+
+__version__ = '1.1'
+Error = 'findertools.Error'
 
 _finder_talker = None
 
 def _getfinder():
+       """returns basic (recyclable) Finder AE interface object"""
        global _finder_talker
        if not _finder_talker:
                _finder_talker = Finder.Finder()
@@ -67,9 +87,615 @@ def restart():
        """Restart the mac"""
        finder = _getfinder()
        finder.restart()
+
+
+#---------------------------------------------------
+#      Additional findertools
+#
+
+def reveal(file):
+       """Reveal a file in the finder. Specify file by name or fsspec."""
+       finder = _getfinder()
+       fss = macfs.FSSpec(file)
+       file_alias = fss.NewAlias()
+       return finder.reveal(file_alias)
+       
+def select(file):
+       """select a file in the finder. Specify file by name or fsspec."""
+       finder = _getfinder()
+       fss = macfs.FSSpec(file)
+       file_alias = fss.NewAlias()
+       return finder.select(file_alias)
+       
+def update(file):
+       """Update the display of the specified object(s) to match 
+       their on-disk representation. Specify file by name or fsspec."""
+       finder = _getfinder()
+       fss = macfs.FSSpec(file)
+       file_alias = fss.NewAlias()
+       return finder.update(file_alias)
+
+
+#---------------------------------------------------
+#      More findertools
+#
+
+def comment(object, comment=None):
+       """comment: get or set the Finder-comment of the item, displayed in the ³Get Info² window."""
+       object = macfs.FSSpec(object)
+       fss = macfs.FSSpec(object)
+       object_alias = fss.NewAlias()
+       if comment == None:
+               return _getcomment(object_alias)
+       else:
+               return _setcomment(object_alias, comment)
+       
+def _setcomment(object_alias, comment):
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
+       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00)
+       args['----'] = aeobj_01
+       args["data"] = comment
+       _reply, args, attrs = finder.send("core", "setd", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----']
+
+def _getcomment(object_alias):
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
+       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00)
+       args['----'] = aeobj_01
+       _reply, args, attrs = finder.send("core", "getd", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----']
+
+
+#---------------------------------------------------
+#      Get information about current processes in the Finder.
+
+def processes():
+       """processes returns a list of all active processes running on this computer and their creators."""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       processnames = []
+       processnumbers = []
+       creators = []
+       partitions = []
+       used = []
+       ## get the processnames or else the processnumbers
+       args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None)
+       _reply, args, attrs = finder.send('core', 'getd', args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       p = []
+       if args.has_key('----'):
+               p =  args['----']
+               for proc in p:
+                       if hasattr(proc, 'seld'):
+                               # it has a real name
+                               processnames.append(proc.seld)
+                       elif hasattr(proc, 'type'):
+                               if proc.type == "psn ":
+                                       # it has a process number
+                                       processnumbers.append(proc.data)
+       ## get the creators
+       args = {}
+       attrs = {}
+       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None)
+       args['----'] =  aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fcrt'), fr=aeobj_0)
+       _reply, args, attrs = finder.send('core', 'getd', args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(_arg)
+       if args.has_key('----'):
+               p =  args['----']
+               creators = p[:]
+       ## concatenate in one dict
+       result = []
+       if len(processnames) > len(processnumbers):
+               data = processnames
+       else:
+               data = processnumbers
+       for i in range(len(creators)):
+               result.append((data[i], creators[i]))
+       return result
+
+class _process:
+       pass
+
+def isactiveprocess(processname):
+       """Check of processname is active. MacOS9"""
+       all = processes()
+       ok = 0
+       for n, c in all:
+               if n == processname:
+                       return 1
+       return 0
+       
+def processinfo(processname):
+       """Return an object with all process properties as attributes for processname. MacOS9"""
+       p = _process()
+       
+       if processname == "Finder":
+               p.partition = None
+               p.used = None
+       else:
+               p.partition = _processproperty(processname, 'appt')
+               p.used = _processproperty(processname, 'pusd')
+       p.visible = _processproperty(processname, 'pvis')               #Is the process' layer visible?
+       p.frontmost = _processproperty(processname, 'pisf')     #Is the process the frontmost process?
+       p.file = _processproperty(processname, 'file')                  #the file from which the process was launched
+       p.filetype  = _processproperty(processname, 'asty')             #the OSType of the file type of the process
+       p.creatortype = _processproperty(processname, 'fcrt')   #the OSType of the creator of the process (the signature)
+       p.accepthighlevel = _processproperty(processname, 'revt')       #Is the process high-level event aware (accepts open application, open document, print document, and quit)?
+       p.hasscripting = _processproperty(processname, 'hscr')          #Does the process have a scripting terminology, i.e., can it be scripted?
+       return p
+       
+def _processproperty(processname, property):
+       """return the partition size and memory used for processname"""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="name", seld=processname, fr=None)
+       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type(property), fr=aeobj_00)
+       args['----'] = aeobj_01
+       _reply, args, attrs = finder.send("core", "getd", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----']
+
+
+#---------------------------------------------------
+#      Mess around with Finder windows.
+       
+def openwindow(object):
+       """Open a Finder window for object, Specify object by name or fsspec."""
+       finder = _getfinder()
+       object = macfs.FSSpec(object)
+       fss = macfs.FSSpec(object)
+       object_alias = fss.NewAlias()
+       args = {}
+       attrs = {}
+       _code = 'aevt'
+       _subcode = 'odoc'
+       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
+       args['----'] = aeobj_0
+       _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       
+def closewindow(object):
+       """Close a Finder window for folder, Specify by path."""
+       finder = _getfinder()
+       fss = macfs.FSSpec(object)
+       object_alias = fss.NewAlias()
+       args = {}
+       attrs = {}
+       _code = 'core'
+       _subcode = 'clos'
+       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
+       args['----'] = aeobj_0
+       _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+
+def location(object, pos=None):
+       """Set the position of a Finder window for folder to pos=(w, h). Specify file by name or fsspec.
+       If pos=None, location will return the current position of the object."""
+       fss = macfs.FSSpec(object)
+       object_alias = fss.NewAlias()
+       if not pos:
+               return _getlocation(object_alias)
+       return _setlocation(object_alias, pos)
+       
+def _setlocation(object_alias, (x, y)):
+       """_setlocation: Set the location of the icon for the object."""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
+       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00)
+       args['----'] = aeobj_01
+       args["data"] = [x, y]
+       _reply, args, attrs = finder.send("core", "setd", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       return (x,y)
+       
+def _getlocation(object_alias):
+       """_getlocation: get the location of the icon for the object."""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None)
+       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00)
+       args['----'] = aeobj_01
+       _reply, args, attrs = finder.send("core", "getd", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               pos = args['----']
+               return pos.h, pos.v
+
+def label(object, index=None):
+       """label: set or get the label of the item. Specify file by name or fsspec."""
+       fss = macfs.FSSpec(object)
+       object_alias = fss.NewAlias()
+       if index == None:
+               return _getlabel(object_alias)
+       if index < 0 or index > 7:
+               index = 0
+       return _setlabel(object_alias, index)
+       
+def _getlabel(object_alias):
+       """label: Get the label for the object."""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None)
+       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('labi'), fr=aeobj_00)
+       args['----'] = aeobj_01
+       _reply, args, attrs = finder.send("core", "getd", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----']
+
+def _setlabel(object_alias, index):
+       """label: Set the label for the object."""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       _code = 'core'
+       _subcode = 'setd'
+       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+                       form="alis", seld=object_alias, fr=None)
+       aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'),
+                       form="prop", seld=aetypes.Type('labi'), fr=aeobj_0)
+       args['----'] = aeobj_1
+       args["data"] = index
+       _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       return index
+
+def windowview(folder, view=None):
+       """windowview: Set the view of the window for the folder. Specify file by name or fsspec.
+       0 = by icon (default)
+       1 = by name
+       2 = by button
+       """
+       fss = macfs.FSSpec(folder)
+       folder_alias = fss.NewAlias()
+       if view == None:
+               return _getwindowview(folder_alias)
+       return _setwindowview(folder_alias, view)
        
+def _setwindowview(folder_alias, view=0):
+       """set the windowview"""
+       attrs = {}
+       args = {}
+       if view == 1:
+               _v = aetypes.Type('pnam')
+       elif view == 2:
+               _v = aetypes.Type('lgbu')
+       else:
+               _v = aetypes.Type('iimg')
+       finder = _getfinder()
+       aeobj_0 = aetypes.ObjectSpecifier(want = aetypes.Type('cfol'), 
+                       form = 'alis', seld = folder_alias, fr=None)
+       aeobj_1 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'), 
+                       form = 'prop', seld = aetypes.Type('cwnd'), fr=aeobj_0)
+       aeobj_2 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'), 
+                       form = 'prop', seld = aetypes.Type('pvew'), fr=aeobj_1)
+       aeobj_3 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'), 
+                       form = 'prop', seld = _v, fr=None)
+       _code = 'core'
+       _subcode = 'setd'
+       args['----'] = aeobj_2
+       args['data'] = aeobj_3
+       _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----']
+
+def _getwindowview(folder_alias):
+       """get the windowview"""
+       attrs = {}
+       args = {}
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=folder_alias, fr=None)
+       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_00)
+       aeobj_02 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('pvew'), fr=aeobj_01)
+       args['----'] = aeobj_02
+       _reply, args, attrs = finder.send("core", "getd", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       views = {'iimg':0, 'pnam':1, 'lgbu':2}
+       if args.has_key('----'):
+               return views[args['----'].enum]
+
+def windowsize(folder, size=None):
+       """Set the size of a Finder window for folder to size=(w, h), Specify by path.
+       If size=None, windowsize will return the current size of the window.
+       Specify file by name or fsspec.
+       """
+       fss = macfs.FSSpec(folder)
+       folder_alias = fss.NewAlias()
+       openwindow(fss)
+       if not size:
+               return _getwindowsize(folder_alias)
+       return _setwindowsize(folder_alias, size)
+       
+def _setwindowsize(folder_alias, (w, h)):
+       """Set the size of a Finder window for folder to (w, h)"""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       _code = 'core'
+       _subcode = 'setd'
+       aevar00 = [w, h]
+       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'),
+                       form="alis", seld=folder_alias, fr=None)
+       aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
+                       form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
+       aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
+                       form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1)
+       args['----'] = aeobj_2
+       args["data"] = aevar00
+       _reply, args, attrs = finder.send(_code, _subcode, args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       return (w, h)
+               
+def _getwindowsize(folder_alias):
+       """Set the size of a Finder window for folder to (w, h)"""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), 
+                       form="alis", seld=folder_alias, fr=None)
+       aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
+                       form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
+       aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
+                       form="prop", seld=aetypes.Type('posn'), fr=aeobj_1)
+       args['----'] = aeobj_2
+       _reply, args, attrs = finder.send('core', 'getd', args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----']
+
+def windowposition(folder, pos=None):
+       """Set the position of a Finder window for folder to pos=(w, h)."""
+       fss = macfs.FSSpec(folder)
+       folder_alias = fss.NewAlias()
+       openwindow(fss)
+       if not pos:
+               return _getwindowposition(folder_alias)
+       if type(pos) == InstanceType:
+               # pos might be a QDPoint object as returned by _getwindowposition
+               pos = (pos.h, pos.v)
+       return _setwindowposition(folder_alias, pos)
+                       
+def _setwindowposition(folder_alias, (x, y)):
+       """Set the size of a Finder window for folder to (w, h)."""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), 
+                       form="alis", seld=folder_alias, fr=None)
+       aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
+                       form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
+       aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
+                       form="prop", seld=aetypes.Type('posn'), fr=aeobj_1)
+       args['----'] = aeobj_2
+       args["data"] = [x, y]
+       _reply, args, attrs = finder.send('core', 'setd', args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----']
+
+def _getwindowposition(folder_alias):
+       """Get the size of a Finder window for folder, Specify by path."""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), 
+                       form="alis", seld=folder_alias, fr=None)
+       aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
+                       form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0)
+       aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
+                       form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1)
+       args['----'] = aeobj_2
+       _reply, args, attrs = finder.send('core', 'getd', args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----']
+
+def icon(object, icondata=None):
+       """icon sets the icon of object, if no icondata is given,
+       icon will return an AE object with binary data for the current icon.
+       If left untouched, this data can be used to paste the icon on another file.
+       Development opportunity: get and set the data as PICT."""
+       fss = macfs.FSSpec(object)
+       object_alias = fss.NewAlias()
+       if icondata == None:
+               return _geticon(object_alias)
+       return _seticon(object_alias, icondata)
+       
+def _geticon(object_alias):
+       """get the icondata for object. Binary data of some sort."""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), 
+                       form="alis", seld=object_alias, fr=None)
+       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
+                       form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00)
+       args['----'] = aeobj_01
+       _reply, args, attrs = finder.send("core", "getd", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----']
+
+def _seticon(object_alias, icondata):
+       """set the icondata for object, formatted as produced by _geticon()"""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), 
+                       form="alis", seld=object_alias, fr=None)
+       aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), 
+                       form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00)
+       args['----'] = aeobj_01
+       args["data"] = icondata
+       _reply, args, attrs = finder.send("core", "setd", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----'].data
+
+
+#---------------------------------------------------
+#      Volumes and servers.
+       
+def mountvolume(volume, server=None, username=None, password=None):
+       """mount a volume, local or on a server on AppleTalk.
+       Note: mounting a ASIP server requires a different operation.
+       server is the name of the server where the volume belongs
+       username, password belong to a registered user of the volume."""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       if password:
+               args["PASS"] = password
+       if username:
+               args["USER"] = username
+       if server:
+               args["SRVR"] = server
+       args['----'] = volume
+       _reply, args, attrs = finder.send("aevt", "mvol", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----']
+
+def unmountvolume(volume):
+       """unmount a volume that's on the desktop"""
+       putaway(volume)
+       
+def putaway(object):
+       """puth the object away, whereever it came from."""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('cdis'), form="name", seld=object, fr=None)
+       _reply, args, attrs = talker.send("fndr", "ptwy", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----']
+
 
-def main():
+#---------------------------------------------------
+#      Miscellaneous functions
+#
+
+def volumelevel(level):
+       """set the audio output level, parameter between 0 (silent) and 7 (full blast)"""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       if level < 0:
+               level = 0
+       elif level > 7:
+               level = 7
+       args['----'] = level
+       _reply, args, attrs = finder.send("aevt", "stvl", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----']
+
+def OSversion():
+       """return the version of the system software"""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('ver2'), fr=None)
+       args['----'] = aeobj_00
+       _reply, args, attrs = finder.send("core", "getd", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               return args['----']
+
+def filesharing():
+       """return the current status of filesharing and whether it is starting up or not:
+               -1      file sharing is off and not starting up
+               0       file sharing is off and starting up
+               1       file sharing is on"""
+       status = -1
+       finder = _getfinder()
+       # see if it is on
+       args = {}
+       attrs = {}
+       args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fshr'), fr=None)
+       _reply, args, attrs = finder.send("core", "getd", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               if args['----'] == 0:
+                       status = -1
+               else:
+                       status = 1
+       # is it starting up perchance?
+       args = {}
+       attrs = {}
+       args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fsup'), fr=None)
+       _reply, args, attrs = finder.send("core", "getd", args, attrs)
+       if args.has_key('errn'):
+               raise Error, aetools.decodeerror(args)
+       if args.has_key('----'):
+               if args['----'] == 1:
+                       status = 0
+       return status
+       
+def movetotrash(path):
+       """move the object to the trash"""
+       fss = macfs.FSSpec(path)
+       trashfolder = macfs.FSSpec(macfs.FindFolder(fss.as_tuple()[0], 'trsh', 0) + ("",)).as_pathname()
+       findertools.move(path, trashfolder)
+
+def emptytrash():
+       """empty the trash"""
+       finder = _getfinder()
+       args = {}
+       attrs = {}
+       args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('trsh'), fr=None)
+       _reply, args, attrs = finder.send("fndr", "empt", args, attrs)
+       if args.has_key('errn'):
+               raise aetools.Error, aetools.decodeerror(args)
+
+
+def _test():
+       print 'Original findertools functionality test...'
        print 'Testing launch...'
        fss, ok = macfs.PromptGetFile('File to launch:')
        if ok:
@@ -128,7 +754,80 @@ def main():
                        print 'Result:', result
                print 'Press return-',
                sys.stdin.readline()
-               
+
+def _test2():
+       print '\nmorefindertools version %s\nTests coming up\8a' %__version__
+       import os
+       import random
+
+       # miscellaneous
+       print '\tfilesharing on?',      filesharing()           # is file sharing on, off, starting up?
+       print '\tOS version',           OSversion()             # the version of the system software
+
+       # set the soundvolume in a simple way
+       print '\tSystem beep volume'
+       for i in range(0, 7):
+               volumelevel(i)          
+               MacOS.SysBeep()
+
+       # Finder's windows, file location, file attributes
+       open("@findertoolstest", "w")
+       f = macfs.FSSpec("@findertoolstest").as_pathname()
+       reveal(f)                               # reveal this file in a Finder window
+       select(f)                               # select this file
+
+       base, file = os.path.split(f)
+       closewindow(base)       # close the window this file is in      (opened by reveal)
+       openwindow(base)                # open it again
+       windowview(base, 1)     # set the view by list
+
+       label(f, 2)                             # set the label of this file to something orange
+       print '\tlabel', label(f)       # get the label of this file
+
+       # the file location only works in a window with icon view!
+       print 'Random locations for an icon'
+       windowview(base, 0)             # set the view by icon
+       windowsize(base, (600, 600))
+       for i in range(50):
+               location(f, (random.randint(10, 590), random.randint(10, 590)))
+
+       windowsize(base, (200, 400))
+       windowview(base, 1)             # set the view by icon
+
+       orgpos = windowposition(base)
+       print 'Animated window location'
+       for i in range(10):
+               pos = (100+i*10, 100+i*10)
+               windowposition(base, pos)
+               print '\twindow position', pos
+       windowposition(base, orgpos)    # park it where it was before\8a
+
+       print 'Put a comment in file', f, ':'
+       print '\t', comment(f)          # print the Finder comment this file has
+       s = 'This is a comment no one reads!'
+       comment(f, s)                   # set the Finder comment
+       
+def _test3():
+       print 'MacOS9 or better specific functions'
+       # processes
+       pr = processes()                # return a list of tuples with (active_processname, creatorcode)
+       print 'Return a list of current active processes:'
+       for p in pr:
+               print '\t', p
+       
+       # get attributes of the first process in the list
+       print 'Attributes of the first process in the list:'
+       pinfo = processinfo(pr[0][0])
+       print '\t', pr[0][0]
+       print '\t\tmemory partition', pinfo.partition           # the memory allocated to this process
+       print '\t\tmemory used', pinfo.used                     # the memory actuall used by this process
+       print '\t\tis visible', pinfo.visible                   # is the process visible to the user
+       print '\t\tis frontmost', pinfo.frontmost               # is the process the front most one?
+       print '\t\thas scripting', pinfo.hasscripting           # is the process scriptable?
+       print '\t\taccepts high level events',  pinfo.accepthighlevel   # does the process accept high level appleevents?
+
 if __name__ == '__main__':
-       main()
+       _test()
+       _test2()
+       _test3()