$Id: README 1948 2008-08-31 19:29:14Z ensonic $

= quick info =
Please turn you browser to http://www.buzztard.org to learn what this project
is about. Buzztard is free software and distributed under the LGPL.

= intro =
The libbml is a library that loads buzz machines from the windows music
composer Buzz, so that Linux apps can use them.
This lib is either using the libavifile wrapper or the libfst one.
See original README in README.libfst for the latter.

= building =
Please note that loading the windows dlls only works on x86 systems.
If one build on a non x86 system, the library can only support native
buzzmachines (see buzzmachines module in same svn).
.
= machines =
Export the path we you have the machine, e.g.:
  export BML_PATH=$HOME/buzztard/lib/Gear:$HOME/buzztard/lib/Gear/Effects:\
    $HOME/buzztard/lib/Gear/Generators

I have the native ones in Gear and the windows ones under Gear/Effects and Gear/
Generators.

= windows machines =
The emulation uses some parts of wine at runtime. It needs kernel32.dll, e.g.
/usr/lib/wine/kernel32.dll.so, MFC42.DLL, MSVCRT.DLL.
The original windows dll should also work.

Then you need to copy the all *.dll libraries from a windows buzz installation
to your LD_LIBARY_PATH. We recommend to copy them to buzztard-prefix/lib.

Next copy the machines. You can e.g. just copy the whole Gear folder to
buzztard-prefix/lib as well.
You might need to fix some machine names (e.g. names with '?' in them).

= usage =
For testing, create a folder 'machines' and put some original buzz machines
in there. After building invoke :
  env LD_LIBRARY_PATH="./bml" ./bml/bmltest_info ./machines/mymachine.dll
or alternatively run the testmachine.sh script to probe a whole directory with
machines.

If you have compiled with logging and set BML_DEBUG=1 before running, you'll get
more diagnostics.

= building the BuzzMachineLoader.dll =
1) use MS developer studio
2) CC=/usr/local/bin/i386-mingw32-gcc CXX=/usr/local/bin/i386-mingw32-g++ make
   ^^^ does not work :/
3) ./configure --host=i386-mingw32 ... 
  cd src/BuzzMachineLoader
  Makefile.am: changes
  make
  make BuzzMachineLoader.dll

// when using fastcall
BuzzMachineLoader.cpp:83: undefined reference to `@_Z8DSP_Initi@4'
// normal symbol
BuzzMachineLoader.cpp:83: undefined reference to `DSP_Init(int)'
// name in lib
> i386-mingw32-nm dsplib.lib | grep DSP_Init
00000000 T ?DSP_Init@@YIXH@Z
00000000 I __imp_?DSP_Init@@YIXH@Z

http://sourceforge.net/project/shownotes.php?release_id=90402
However, the --enable-stdcall-fixup feature (which is on by default) has not yet
been extended to fastcall symbols. That is, an undefined symbol @foo@n will *not* 
automatically be resolved to a defined symbol foo. 

Maybe a own .def can help:
http://www.digitalmars.com/ctg/win32programming.html

= problems =
== /dev/zero needs to be executable ==
make sure your /dev/zero is executable (needed for mmap() )
== 64 bit builds ==
http://www.x86-64.org/documentation/assembly.html

