**********	A lot to do here ... 	********************

I took the chance to make some changes when moving to Apache. In particular:

* The package names have changed, just rename the prefix
  de.fub.bytecode -> org.apache.bcel
* All deprecated classes and methods have been removed (e.g.,
  Instruction.getTag() == getOpcode())
* The FindPattern class has been removed in favor of
  org.apache.bcel.util.InstructionFinder which offers an improved API
* The Regex package from Jakarta is used instead of GNU regexp
* BCEL now relies on JDK1.2 classes, collection classes in particular, this
  may even speed up BCEL a bit since no more synchronization locks are used
* BCEL is compiled using ANT instead of make

However, for 99% of the users they will just have to rename the
packages and it will work.


There are also some new parts of BCEL, which have been distributed as
separate packages before:

BCEL Manual
-----------

The BCEL manual (the former Technical report) is added to the distribution.


Class Construction Kit (CCK)
----------------------------

The sources can be obtained upon request, however they've been developed
with IBM's VisualAge, thus they're hard to read at best. You can request
and Visual Age repository file as well. CCK has been developed by
Markus Dahm (markus.dahm@berlin.de)

You can run CCK with java -jar lib/CCK.jar

JustIce verifier
----------------

The JustIce bytecode verifier has been developed by Enver Haase 
(enver@convergence.de) and is now an integral part of BCEL.

Mini
----

The Mini programming language is now distributed together with BCEL.


New versions
------------

	http://jakarta.apache.org/bcel/

Author
------

The  BCEL  is copyright  (2001)  Markus  Dahm.  Send bug  reports  and
suggestions  to markus.dahm@berlin.de  (Markus Dahm),  please  tell me
also if  you find this tool helpful  and in what kind  of projects you
use it.
