Found this on my harddrive recently from an old project, example provided to me by Ed some time ago… Better posted here than lost or squandered. To explain, it’s a relatively simple python script that you can run against your Buzz gear directories and a list of all machines in the directory is given and the type of machine, what flags it uses, the author, etc. is returned. It is more or less a starting example, but you may find it useful for sorting modules as-is:
import ctypes from ctypes import c_int, c_char_p, c_void_p class MachineInfo: def __init__(self, dllname): # Info struct from machineinterface.h class CMachineInfo(ctypes.Structure): _fields_ = [ ("Type", c_int), ("Version", c_int), ("Flags", c_int), ("minTracks", c_int), ("maxTracks", c_int), ("numGlobalParameters", c_int), ("numTrackParameters", c_int), ("Parameters", c_void_p), ("numAttributes", c_int), ("Attributes", c_void_p), ("Name", c_char_p), ("ShortName", c_char_p), ("Author", c_char_p), ("Commands", c_char_p), ("pLI", c_void_p) ] # Load library and call GetInfo dll = ctypes.cdll.LoadLibrary(dllname) dll.GetInfo.restype = ctypes.POINTER(CMachineInfo) info = dll.GetInfo().contents # Copy all attributes from the info struct into self # Skip attributes starting with _ for attr in dir(info): if attr[0] != '_': setattr(self, attr, getattr(info, attr)) # Set types to a human-readable string types = { 0: "MT_MASTER", 1: "MT_GENERATOR", 2: "MT_EFFECT" } if self.Type in types: self.Type = types[self.Type] # Flag values from machineinterface.h flags = { (1<<0) : "MIF_MONO_TO_STEREO", (1<<1) : "MIF_PLAYS_WAVES", (1<<2) : "MIF_USES_LIB_INTERFACE", (1<<3) : "MIF_USES_INSTRUMENTS", (1<<4) : "MIF_DOES_INPUT_MIXING", (1<<5) : "MIF_NO_OUTPUT", (1<<6) : "MIF_CONTROL_MACHINE", (1<<7) : "MIF_INTERNAL_AUX", (1<<8) : "MIF_EXTENDED_MENUS", (1<<9) : "MIF_PATTERN_EDITOR", (1<<10) : "MIF_PE_NO_CLIENT_EDGE", (1<<11) : "MIF_GROOVE_CONTROL", (1<<12) : "MIF_DRAW_PATTERN_BOX", } # Set flags to a list of strings # If unknown flags are included, append them to the list as an int newflags = [] for k,v in flags.iteritems(): if self.Flags & k: newflags.append(v) self.Flags &= ~k if self.Flags != 0: newflags.append(self.Flags) self.Flags = newflags # The main program def main(): from sys import argv if len(argv) != 2: print "Usage: machinfo.py path\\to\\buzz\\gear\\generators_or_effects" raise SystemExit # Find all dlls in the given directory from glob import glob from os.path import join for dllname in glob(join(argv[1], '*.dll')): print dllname try: info = MachineInfo(dllname) except: print "Error" print continue print "Name:", info.Name print "Author:", info.Author print "Type:", info.Type print "Flags:", info.Flags print if __name__ == '__main__': main()