-*- text -*- This is Voodoo v. 1.99.11 (pre-2.0) Voodoo is an UML graphical editor that uses the Tk toolkit for its GUI. It was designed to be easy to use, and to provide a good separation of the GUI from the rest of the code. REQUIREMENTS You'll need a modern C++ compiler (gcc 2.95+ is good) with libstdc++ (or equivalent) installed. You'll also need the Tcl/Tk development libraries, version 8.0.5+. We've gotten it to work with Tcl/Tk 8.0.5, 8.2 and 8.3 without problems. However, if you want the existing makefiles to work ``out of the box'', you'll need at least Tcl/Tk 8.3.2, and this is the recommended configuration; after all, this is the latest stable version. Finally, if you need to change the source code, it would be a good idea for you to have SWIG (http://www.swig.org) installed. For building under Win32, you should use the mingw environment with Tcl/Tk libraries built for that environment (http://www.mingw.org; Tcl/Tk is in Mumit's ports page, at: ftp://ftp.nanotech.wisc.edu/pub/khan/tcl/gnu-win32/tcl8.3.0/tcltk830-msvcrt.zip just install the Scriptics distribution and overwrite with Mumit's stuff). It's also possible to compile under VC++ with the provided .dsp and .dsw files, but they tend to lag behind the mingw support. I heartily recommend mingw, though---it's a better compiler, although executables generated are a bit larger (but the latter is partly due to the C++ library being static) INSTALLATION Currently, I tried to learn autoconf and it gave me a headache, so you'll have to edit Makefile.linux. Make sure LIBS contains the appropriate link flags to link with the Tcl and Tk libraries that are installed on your system. Once this is done, simply type make -f Makefile.linux Note that the default make target is Solaris, but I don't think it works well anymore, as I have no access to a Solaris machine anymore (contributors who know how to write autoconf files are more than welcome!); I'll scrap Solaris support soon if I don't get any help there. A ``make install'' isn't provided, so you'll have to roll your own. To start the program, change to the tcl directory and run the vd.tcl program. Either make it executable, or source it in wish. The important thing is that voodoo.so, voodoo.tcl and voodoo.gif must be in the same directory as the startup script. If this is not practical, you can easily edit the startup script to set $voodooPath to your installation directory (in fact, it assumes /usr/local/lib/voodoo, so you can jam the voodoo files there and rename vd.tcl to what you wish and jam it in /usr/local/bin) WIN32 INSTALLATION, MINGW INSTRUCTIONS First, make sure g++ is in your path, and that you have GNU make utility in your path as well. Then, edit Makefile.win32. You should change the LIBS and CFLAGS so the paths there point to where you installed the Tcl include files and libraries. Then, type ``make -f Makefile.win32''. If all goes well, voodoo.dll should be sitting in the tcl subdirectory. Then, jam voodoo.dll together with voodoo.tcl, voodoo.gif and vd.tcl in your installation directory. Create a shortcut to vd.tcl (if .tcl maps to the wish interpreter), or create a batch file that calls wish8 with vd.tcl as an argument. Note that the vd.c program is of absolutely no use now; voodoo does not compile its own interpreter, which makes it slightly smaller as well as eliminating huge problems under Win32, where no window would show up whatsoever in some configurations. WIN32 INSTALLATION--WITH VC++ [NOTE: for 1.99.11, .dsw and .dsp files are broken, so those are obsolute instructions; they should be good again in 1.99.12] Use the supplied .dsw and .dsp file. You may need to re-insert the tcl and tk .lib files in the project, since they're not included in the archive. Same thing goes with the pre-processor settings: the include path is .\include;c:\devel\tcl83\include for the TCL include files; move that to wherever you installed those files. From there, all you need to do is build (F7). The DLL is voodoo.dll; place it in the tcl subdirectory, and source vd.tcl in wish. This should run flawlessly; if it doesn't, it's a bug. You can then install the program the same way you'd install the mingw build. VC++ does generate slightly smaller builds, but even though, one should consider that gcc does a pretty fine job, overall, considering it's 0$ and VC++ is 300$+... WHAT'S SUPPLIED The program itself is licensed under the LGPL; see file ``COPYING'' for more information. Several people contributed to this project; see file ``THANKS'' for more information. At one point in the project's lifetime, there was a full, ``waterfall-model'' set of documents on the design and requirements of Voodoo. All this has been distilled down to a manual and a design document. The design document resides in design/ , and the manual in manual/ . You'll note that all the diagrams in the design document were generated using Voodoo itself, which was essentially the ultimate test of the editor. To use the editor, you can read the manual (provided in HTML or PDF). It should be fairly straightforward, though, although not necessarily up to date... The design document is a good start if you want to fiddle with the system itself. BUGS None, hopefully. :{) There are some infelicities in the code, though. Namely, there's some code duplication that must be factored out soon. In addition, the binding between the voodoo.tcl script and the rest of the system is a bit too tight to my tastes; this will probably change in the future. Finally, the code itself isn't nearly as well-commented as it should be. The design document helps somewhat if you want to hack in, though. The system appears to freeze when loading a large diagram on slow machines (and larger diagrams on not-so-slow machines). This is normal and has to do with the binding to the Tcl subsystem. I've got to look into a way to fix this once and for all (by drawing our own stuff directly on the canvas with XDrawLine, maybe?) FUTURE PLANS (in decreasing priority order) - fix code duplication issues - fix file format so it can be upgraded more easily. Ideally, we should have a pluggable system here. - add autoconf support and a better Makefile overall - a plug-in system for new object types, making them easy to add. Ideally, plug-ins could be in C++ or in Tcl. With a bit of swig magic, I'm confident we could give plug-ins all they need to interface with the main system. Eventually, we could turn Voodoo into a generic UML editor---that would be really swell! - speed up load/save. This is a major project, as it would require creating new Tk canvas shapes, and I don't know how portable that would be. MUSINGS On my system, the executable hovers around 500 KB. That's rather small, considering what the system does (IMHO). Although it's bigger than the previous 300 KB, mostly due to the fact that shared libraries are position independent and have a lot of crap in them, generally. The system is fully portable, and its programming style is pretty robust. Who said C++ always yields big, bloated programs? :{) Building the system as a shared library solved several problems; my ultimate goal is to run the freewrap program on the system to ``freeze'' it into a single executable. This would definitely solve distribution issues for Win32 users. It also solved ``runaway console'' problems that plagued the program in Win32 environments. I hope Windows users appreciate all the trouble I go through for them... Also, building as a shared library uncovered a couple of interesting bugs, so I'm happy I did this, despite my gripes. One was, I suspect, the reason I had trouble with the Win32 mingw build on my workstation at work. Benoit Goudreault-Emond