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()
