What's New
==========

OMNeT++ 3.1 (Mar 2005)
----------------------
This release contains several bugfixes since 3.0, as well as new features
and new example simulations. To see a detailed list of problems fixed, check
the ChangeLog files in the various source directories. Thanks all of you who
have discovered and reported the problems.

A brief list of enhancements since version 3.0:

Real-time/hybrid simulation:
- Real-time simulation has been implemented, and it is demonstrated by the
  "Dyna/Real Time" sample simulation.

- An example for hybrid (hardware-in-the-loop) simulation is now provided,
  which is the "Sockets" sample simulation. It uses TCP sockets to communicate
  with the outside world -- in real-life applications this will probably need
  to be replaced with some other means of communication.

- In relation to the above: new methods got added to the cScheduler interface.

For Windows:
- Debug info (*.pdb) files have been included in the installer, so one can now
  single-step into the simulation kernel and user interface library sources
  while debugging.

Simulation library:
- New utility class: cStringTokenizer. It splits strings to "tokens" along
  given separator characters (by default spaces).

- Changed the way scheduled events or pending messages are handled when their
  destination module gets deleted during runtime. Before, these messages were
  deleted by the cSimpleModule destructor, but this made it very long to clean
  up large models. Now, messages are not deleted in the destructor, but left
  in the FES -- they will be discarded in cSimulation::selectNextModule() when
  they're met.

- cDisplayString's getTagArg() method was modified to never return NULL; it
  returns "" instead when the requested tag is not in the display string.

Configuration:
- Ini file runs can be given descriptions, and they will be displayed in the
  Tkenv run selection dialog. Just add the description="some text" line
  under the [Run x] headings.

- New omnetpp.ini entry to help debugging: [General]/debug-on-errors=
  true/false. If turned on, runtime errors (such as scheduling a message
  into the past) will cause the program to break into the C++ debugger
  if one is running, or just-in-time debugging is enabled. This makes it
  possible to investigate the context of the error (stack frames, variables
  etc). It works by doing INT 3 (debugger interrupt) on Windows, and
  raise(SIGABRT) on Linux.

- Slight change in the rules of handling included ini files, NED list files
  and all filenames mentioned in them. All filenames are now understood as
  relative to the location of the file which contains the reference,
  rather than relative to the current working directory of the simulation.
  This change is not backwards compatible, but has been found not to affect
  any of the simulation frameworks already ported to 3.0.

Tkenv:
- Implemented the "t=<string>,<color>" display string tag for connections.
  It makes the given string to appear near the connection arrow.

- Tooltips can now be added to submodule icons, connection arrows and messages.
  The tooltip text has to be given in the "tt=<tooltip-string>" display
  string tag, and will be displayed if the mouse rests over the component for
  a while. Tooltips allows more info to be displayed than can be squeezed
  into the "t=" display string tag.

- Added support for -r <run-number> command-line option, which has the same
  effect as (but takes priority over) the [Tkenv]/default-run ini file entry.

Misc:
- opp_makemake, opp_nmakemake: implemented -X option (ignore subdirectory
  during recursive build)

- The -h command-line option is now understood by both Cmdenv and Tkenv,
  and handled in a consistent way

- The place/ icon directory was renamed to misc/ (Please update display
  strings containing "i=place/..")

- nedc got removed from the distribution

Known problem: OMNeT++ windows have no Maximize button under recent
KDE versions. This is a known Tk+kwin problem which was fixed in Tk
early 2004.



OMNeT++ 3.0 (Dec 2004)
----------------------

The following list summarizes *all* changes since OMNeT++ 2.3:

- The simulation kernel has received an overhaul.

- A new step-by-step tutorial, revised documentation and several new
  sample simulations have been included to shorten your learning curve.

- Dynamic NED loading will cut model build time and simplify your work.

- Documentation generation tool will document your own large simulation
  models, and help you quickly get an overview about the structure
  of 3rd party models.

- The new Random Number Architecture features a modern, very long cycle
  Random Number Generator (Mersenne Twister) for more realistic simulation
  results, and RNG mapping for more flexibility in simulation experiments.

- Simulation models can now conveniently access XML configuration files
  for complex input.

- Plove now features a powerful interactive charting component, and also
  an internal data-flow engine for processing output vectors before
  plotting.

- The new Scalars tool complements Plove, and lets you analyze and plot
  scalar data produced by simulations.

- Support for Parallel Distributed Simulation

- Several Simulation GUI usability enhancements will save you time, and
  make your work more efficient.

- New icons, and enhanced animation capabilities (icon coloring, queue
  length display, status text, transmission range, transient bubbles,
  etc.) improve the overall look and feel of your models, give you more
  insight, and make the models instantly presentable.

- For better visualization of model dynamics, OMNeT++ now supports
  animation of direct message sending and C++ method calls across modules.

- The automatic network layouting using the SpringEmbedder algorithm will
  let you work with large networks in the GUI, without the need for
  individual positioning of nodes.

- Ready to receive your extensions: plug-in interfaces for new random
  number generators, new configuration databases and simulation event
  schedulers complement existing plug-in interfaces for recording simulation
  data, and let you implement custom input/output, real-time simulation,
  hardware-in-the-loop simulation and more.

Delta from 3.0 beta 1:

- User Manual revised

- Several bugfixes and new test cases, significant performance improvements
  in the network setup code; more intuitive error messages at places.

- The new <parametername>.use-default=true notation in omnetpp.ini makes it
  possible to apply the NED file defaults (specified via input()) to some
  or all unbound module parameters.

- histogram classes (cLongHistogram, cDoubleHistogram) revisited


OMNeT++ 3.0 beta 1 (Nov 24 2004)
--------------------------------
- added new TicToc tutorial
- nedtool: implemented -h option (put output files into current dir, not source
  file's dir) [patch from Johnny Lai]
- Windows binary release contains 4 sets of libs now: vc6-debug, vc6-release,
  vc7-debug, vc7-release.
- several fixes and improvements


OMNeT++ 3.0 alpha 9 (Nov 3 2004)
--------------------------------
- fixed configure script problems in alpha 8

- new random number architecture: support for Mersenne Twister and Akaroa
  RNGs; unlimited number of RNGs; RNG mapping (module-local RNG numbers
  can be mapped arbitrarily to physical RNGs from omnetpp.ini. Details
  in src/envir/ChangeLog and on omnetpp.org.

- Tkenv fixes and usability improvements: (1) allow user interactions during
  message animation: animation speed can be changed with the slider, STOP
  button can be clicked, inspectors can be closed, etc;  (2) improved
  "Fast Run until next local event" function: now it always animates events
  that occur in the local module;  (3) fixed display string handling bugs: in
  "t=", commas and equals signs weren't handled properly.

- signatures of fullPath() and info() functions changed to use std::string.
  The new signatures are both safer (no danger of accidental buffer overrun
  or confusion caused by using static buffers) and easier to use.
  POTENTIAL INCOMPATIBILITY: fullPath() calls in sprintf(), ev.printf(),
  new cException() etc calls should be changed to fullPath().c_str().
  (ev<< statements are not affected.)

- support for categorized icons (icons grouped into subdirectories with
  the bitmaps folder) in GNED and Tkenv

- linking problems (linker symbol conflicts) with recent Akaroa versions
  resolved


OMNeT++ 3.0 alpha 8 (Oct 2004)
--------------------------------
- in .msg files, struct fields can have initializers (a constructor gets
  generated)
- Tkenv: minor improvements
- configure script refinements


OMNeT++ 3.0 alpha 7 (Sept 2004)
-------------------------------
Several improvements and bug fixes since 3.0a6. Detailed list of changes:

- loading XML config files via "xml"-type NED parameters or
  ev.getXMLDocument(): If the document has an attached DTD (DOCTYPE
  declaration), the document will be validated, and attribute default values
  will be completed from the DTD.

- Scalars tool: enhanced Copy to clipboard functionality: different
  variables can be put on different columns. This makes it easier to use
  Excel's PivotTable or OpenOffice's DataPilot) functionality to analyze
  data.

- NED: gate vectors, if there's no "gatesizes:", will be created with zero
  size. (Previously they were created with size one -- this is a potential
  incompatibility.)  A zero-sized gate vector is internally represented by a
  single gate object whose size() method returns zero, and cannot be
  connected.

- Tkenv: bitmap path can now be specified in omnetpp.ini, using the
  [Tkenv]/bitmap-path= entry. Value should be "quoted", and directories
  should be separated by ";". The contents of the OMNETPP_BITMAP_PATH
  environment variable (or if that's not set, the compilation-time bitmap
  path) gets concatenated to this one.

  IMPORTANT: if you forget the quotes, ONLY THE FIRST DIRECTORY will be
  used with the rest ignored, because ";" is the comment mark in omnetpp.ini!

- opp_makemake, opp_nmakemake: facilitated creating makefiles which only
  have relative paths in them. The -b <basedir> option was added. <basedir>
  is supposed to be the toplevel directory of large multi-directory
  simulation model (such as IPSuite or MF). The -b option will cause all path
  names (passed with -I, -L, etc.) to be converted from absolute to relative.
  This means that makefiles will not need to be re-generated or edited when
  the project is compiled in a different directory.

- opp_neddoc: backslashing can be used to prevent intentional hyperlinking
  of a word which is also a component (e.g. module) name. That is, if you
  write "\IP", "IP" won't get hyper-linked in the HTML output, even if
  there's a module type called IP. Single backslashes will be removed from
  the HTML output -- double them if you want them to appear.

- opp_neddoc: on Windows, listing directories on the command line which had
  no .ned or .msg files in them caused opp_neddoc to stop with "file not
  found" error.


OMNeT++ 3.0 alpha 6 (Aug 2004)
------------------------------
POTENTIAL INCOMPATIBILITY: because the resolution of "*" has changed (it no
longer matches "."), you may need to revise your existing omnetpp.ini files.

New features introduced in this release, in nutshell: enhanced wildcard
resolution in omnetpp.ini; direct support for XML config files via the "xml"
NED parameter type; Cmdenv now lets you choose which modules' ev output you
want to print; plugin interface for using configuration data sources other
than omnetpp.ini. Several improvements in opp_neddoc and opp_makemake, and
some bugfixes.

For more details, see article
  http://www.omnetpp.org/article.php?story=20040722133521209


OMNeT++ 3.0 alpha 5 (June 2004)
-------------------------------
Plove has been completely rewritten under the skin. It is no longer a wrapper
around grep, awk and gnuplot -- it boasts a powerful internal extensible
data-flow engine (for filtering and processing output vectors before plotting),
and a BLT-based plotting window (which allows a multiple plots via tabbed
window, and these plots are a bit easier to customize than gnuplot-based ones
were -- oh yes and they allow arbitrary zooming on the fly). The new Plove
can also do scatter plot. Calculating histograms and cumulative distribution
functions and various other refinements will come soon.

What else? opp_msgc now generates the pack/unpack operations so parallel
simulation has become a lot more transparent. Plus a couple of bugfixes of
course. The test suite (test/core) is supposed to pass completely, except
for one little known bug in ev<< w/ Cmdenv.


OMNeT++ 3.0 alpha 4 (May 2004)
------------------------------
This alpha release introduces a new tool, Scalars for analysing output scalar
(.sca) files. Scalars requires BLT. Another novelty is the new "control info"
field in cMessage which provides a better way to implement communication
between protocol layers than the traditional "interface packet" approach
used in older IPSuite versions. (IPSuite has also been switched over to employ
the control info approach.)


OMNeT++ 3.0 alpha 3 (March 2004)
--------------------------------
Bugfixes.


OMNeT++ 3.0 alpha 2 (March 2004)
--------------------------------
Improvements on opp_(n)makemake, Plove, Tkenv, parallel simulation; bugfixes.


OMNeT++ 3.0 alpha 1 (Jan 2004)
------------------------------
Sames as 3.0 Preview


OMNeT++ 3.0 Preview, 2004 January
---------------------------------
This is an intermediate code snapshot -- it was released to show you what
features are planned for release 3.0, and possibly to get early feedback
about them. It has not been fully tested.

The model documentation tool opp_neddoc has been introduced. It generates
fully hyperlinked documentation with diagrams from comments in .ned and .msg
files. It can also link to Doxygen-generated C++ documentation. It works both
on Unix and Windows.

Several Tkenv network animation enhancements: next event marker; animation
of sendDirect() and method calls between modules; message icons; auto-layouting
of networks; icon coloring; module "bubbles" (callouts); display of queue
length next to module icon; display of a status string above module icon;
optional modifier icon on top of submodule icon; submodule icon optionally on
top of a rect/oval; display of "transmission range"; color names in display
strings are accepted in HSB (hue-saturation-brightness) too.

Changing display strings was made more comfortable from simple modules.

Other Tkenv enhancements: powerful object search dialog; enhanced plugin
support (see test/tkenv/plugin); better tabnotebook and multi-column listbox
widgets via BLT. All Tkenv settings restored from .tkenvrc now.

New sample simulations: Tictoc (a step-by-step tutorial), Aloha, CQN (Closed
Queueing Network), Queueing, Routing, RoutingDB, Point-to-Point Transmitter.
Other changes are that Dyna and Dyna2, Fifo and Fifo2 was merged, Topo was
renamed to NEDDemo, Token renamed to TokenRing. The Nim example has finally
retired. The new/revised sample simulations demonstrate new Tkenv features
and also more simulation kernel features. They also mark a shift from
activity() based modules towards handleMessage()-based ones.

Dynamic loading of NED files has been implemented, which means it is possible
to use NED files directly, without nedc and C++ compilation. NED files
containing compound modules and networks can be loaded dynamically.
NED files can be loaded interactively (Tkenv "Load NED file" toolbar icon)
or automatically (via omnetpp.ini, preload-ned-files= entry). (alpha!)

Simulation kernel: internal object ownership handling, has been redesigned,
which both reduced memory footprint (sizeof(cObject)) and increased speed.
Another efficiency improvement is that for short object name strings,
the string is now stored inside cObject (and not dynamically allocated via
new char[...].)

Distributed simulation support rewritten, currently experimental. (alpha!)

Several new tests in test suite, also for testing opp_neddoc and Tkenv.

TODO:
The Manual is still to be updated at places. Further items are the
introduction of new RNG architecture based on modern RNGs, and testing
and completion of nedxml/nedtool (which will bring the retirement of nedc).


OMNeT++ 2.3 release (June 2003)
-------------------------------
A major revision of the User Manual has taken place. In addition to
documenting new features, several existing sections have been revised,
updated and expanded for clarity and informativeness, based on feedback
from the community.

Even if you already have a printed copy of an earlier manual, this is
a good time to discard it and print a new one -- even experienced OMNeT++
users will find a wealth of new information in it. For the list of
changes, see the "Document History" table at the front of the manual.

Deprecations! To ensure your simulation will be compatible with future
releases, please check doc/API-Changes.txt and remove use of
deprecated functions from you simulation models. Functions deprecated
now are likely to be removed in next major release.

Improvements:
- message subclassing: generated message classes now accept message kind
  in the constructor.

Bugfixes since 2.3b2:
- fixed problem with deleting dynamically created modules
- fixed opp_msgc problem with RedHat9's broken Perl (doesn't recognize [^\s]
  in regexps)
- minor improvements: opp_nmakemake now autodetects C++ file extension
  (.cc or .cpp); opp_msgc doesn't choke on -I flag


OMNeT++ 2.3b2 release (March 2003)
----------------------------------
This is a bugfix release. Resolved issues include:
- wrong handling of channels (bug was introduced in 2.3b1)
- opp_test failed on Unix if "." was not in the PATH
- various smaller bugs in GNED, Tkenv, Envir, and opp_nmakemake
- added several test cases (e.g. for channel testing) in test/

See doc/API-Changes.txt for the list of changes since 2.2, including those
that affect compatibility. ChangeLogs in respective source directories
contain even more details.


OMNeT++ 2.3b1 release (February 2003)
-------------------------------------
Licensing change: The license used in previous versions has been replaced
with a new "Academic Public License" (doc/License). This license gives
noncommercial users rights to use, modify and distribute copies of OMNeT++.
The possibility of using OMNeT++ under the GPL has been removed. Commercial
users of OMNeT++ should obtain a commercial license.

Major changes of this release in nutshell:
- The simulation kernel has been ported to use C++ exceptions and RTTI
  (Run-time Type Information) and on Windows, the Fiber API. Also, there
  has been extensive internal refactoring and refinement of the APIs.

- The "message subclassing" feature has been officially introduced. It is now
  documented in the manual, and used by several sample simulations.

- Added the implementation of several distributions: continuous distributions
  gamma, beta, Erlang, chi^2, student-t, Cauchy, triangular, lognormal, Weibull
  and Pareto; discrete distributions Bernoulli, binomial, geometric, negbino-
  mial and Poisson [contributed by Werner Sandmann and Kay Michael Masslow].

- Contains an alpha version of the new NED compiler architecture,
  built upon XML foundations. This includes a tool for generating
  documentation from NED files.

- Akaroa support. Akaroa does MRIP (multiple replications in parallel).

- Tkenv GUI has been polished -- both functionality and usability has been
  greatly improved. Plove GUI was also redesigned.

For the list of changes that affect portability of simulation models,
see the new doc/API-Changes.txt file. You can find even more detailed
information in the ChangeLogs of the respective source directories.

A more detailed list of changes follows:

Simulation kernel refactoring:
- On Windows, now Win32 native coroutines are used (Fibers API). This change
  made it possible to introduce the use of C++ exceptions.

- Error handling in simulation kernel (and in other libs too) has been ported
  to C++ exceptions. This not only resulted in cleaner kernel code, but also
  has benefits for you:
  * you can now use try-catch for better error handling. The API documentation
    describes which methods throw exceptions. The common exception class
    is cException.
  * methods like end(), endSimulation(), deleteModule() terminate the module
    immediately even when called from handleMessage(). In earlier versions,
    handleMessage() had to go through in any case.
  * you can now safely use C++ libraries that throw exceptions, e.g. STL.
  Methods like cSimpleModule::error() and opp_error() are remained for backward
  compatibility, but they simply throw cException. opp_warning() remained but
  its use is discouraged.

- Use of C++ RTTI (Run-time Type Information). From now on, you can use
  dynamic_cast<> in your code, and you don't need to provide a className()
  method in your classes (because the kernel can figure it out using typeid
  in the base class, cObject).

- Eliminated gcc 3.0.x warnings, and changed to the I/O headers <iostream>, etc.

- Several smaller auxiliary classes have been turned into inner classes of
  their respective 'main' classes. (For example, cQueueIterator became
  cQueue::Iterator, sTopoNode became cTopology::Node, etc; full list in
  include/ChangeLog.) Compatibility typedefs exist for the old names.

- Cleanup in cObject and cSimulation: several internally used methods have been
  eliminated or moved to better places. (For example, inspector-related methods
  cObject::inspector() and cObject::inspectorFactoryName() have been removed,
  and inspectors are now fully internal matter of Tkenv.)

- Refactoring on dynamic module creation: instead of modtype->buildInside(mod),
  one should now write mod->buildInside(), which is more natural.
  (The former syntax still works -- a cModuleType::buildInside() is still
  provided for backward compatibility). buildInside() delegates task to
  doBuildInside() (a new method), so it's doBuildInside() which should be
  redefined in subclasses, and also nedc generates now doBuildInside() code.

- Container classes are now more consistent in what they do when the requested
  object doesn't exist:
  * Convention 1: methods returning an object reference (e.g. cPar&) now
    always throw an exception if the object is not found. (Until now, some
    methods issued a warning and returned null reference, i.e. *(cPar*)NULL).
  * Convention 2: methods returning a pointer (e.g. cGate*) return NULL
    pointer if the object is not found. (Until now, some methods issued
    a warning and returned NULL pointer.)
  These conventions necessitated the following changes:
  * par() of cModule and cMessage now throws an exception if parameter was not
    found. (In simple module code, check for existence of a parameter before
    accessing it can now be replaced with try-catch.)
  * cModule: cGate *gate() methods no longer issue a warning if the gate is
    not found, just return NULL.
  * cArray::remove(cObject *) and cQueue::remove(cObject *) methods
    now return NULL instead of the original pointer if the object was
    not found.

- cPar can now use compiled expressions subclassed from cDoubleExpression (a
  new class). This is needed for code generated by the new nedtool.

- cSimulation changes:
  * lastModuleIndex() renamed to lastModuleId();
  * operator[] deprecated (use module(int) method instead)
  * del() renamed to deleteModule(); add() renamed to addModule()

- Channels are now represented by real objects (subclassed from cChannel)
  rather than parameters in cGate. Channels can be assigned to connections
  via cGate's setChannel() method; at the same time, DEPRECATED cGate's
  setDelay(), setError(), setDatarate(), setLink() methods (these attributes
  should be set on the channel object).

- cSubModIterator: operator[] deprecated (use operator()(int) method instead)

- For further, more internal changes and for more details on the above changes
  see include/ChangeLog and src/sim/ChangeLog.

Simulation kernel new features:
- Added convenience functions to cGate, cMessage, and cArray (see
  API-Changes.txt for details).

- A new utility class cDisplayStringParser lets you easily manipulate display
  strings.

Message subclassing, new NED compiler architecture:
- The Perl-based message compiler opp_msgc is now available in bin/. Message
  subclassing is documented in the manual, and it is demonstrated by several
  sample simulations. 40+ test cases deal with testing the generated code.

- Added nedtool, the new NED and message compiler (alpha). nedtool converts
  NED from/to XML, providing much better integration possibilities (for example
  it is now possible to use XML/XSLT to generate NED topologies from external
  data sources -- or to extract NED info to arbitrary XML format.)

- Added nedxml library (the library under nedtool) to src/, and its API-doc
  to doc/nedxml-api.

Manual:
- Manual source has been converted from Word to Latex [thanks to Ulrich Kaage
  for this non-trivial and time consuming task!]. He also added an Index.
  HTML conversion (using L2H, by myself) is not 100% yet, you should regard
  the PDF as the authoritative form.

- New chapter about message subclassing, plus various updates, fixes and
  clarifications [thanks to Phillip Feldman for his comments]

Build:
- In addition to Cygwin, the MinGW compiler is now also supported in Windows.
  Older Cygwin versions with the 2.95.x compiler cannot be used any more.

- Improved MSVC support: opp_nmakemake creates MSVC makefiles; running the
  test suite now works smoothly with MSVC; opp_stacktool displays reserved
  stack size for executables.

- MSVC projects now need *different* compiler flags. Every source should be
  compiled with exceptions enabled and using /GR, otherwise there will be RTTI
  exceptions. Because of the Fiber API, reserved stack size should be set to
  a low value, 64K.

- New utilities (Unix, MSVC): opp_neddoc creates HTML documentation for NED
  files; opp_neddocall creates HTML documentation for all nedfiles in a
  directory tree; splitvec to split output vector files.

- There are new targets in Makefiles that are generated by opp_makemake:
  Target neddoc.html generates a file named neddoc.html by using the
  opp_neddoc tool on all NED files. Target htmldocs generates HTML
  documentation of all source files (*.h and *.cc) using Doxygen. The
  HTML files are placed into the sub-directory ./htmldoc. Also, Makefile
  now generates ../doc/api/tags. This tag file can be included when generating
  model documentation.

- Improved configure script. Now we support Tk8.4, and also optional packages
  like Akaroa.

- Test suite: the number of test cases has grown from 19 to about 120 since
  omnetpp-2.2; now it covers a bigger part of the core functionality (modules,
  messages, queues, parameter) as well as message subclassing and some aspects
  of NED and Cmdenv. Tests for the distributions are in test/distr.

GNED, Plove:
- The Plove GUI has been redesigned, with focus on intuitiveness and usability.
  It also features icon toolbars, tooltips and more self-explanatory dialogs.

- The number of module icons available for simulations has grown from 41 to ~90
  since the 2.2 release. GNED also has an improved icon selector dialog now.

- There have been other small fixes and improvements in GNED, e.g. fixed the
  bug which caused display strings always being added to connections.

- All Tk GUIs now make use of the combobox widget from Bryan Oakley.

Envir changes (apply both to Cmdenv and Tkenv):
- Integrated Steffen Sroka's Akaroa extension that supports multiple
  independent replicated simulation runs.
  Akaroa can be activated by specifying
      [General]
      outputvectormanager-class=AkOutputVectorManager
  in the ini file. By default, all output vectors are under Akaroa
  control; the <modulename>.<vectorname>.akaroa=false setting can be used
  to make Akaroa ignore specific vectors. For more info see the Akaroa
  home page and the OMNeT++ documentation.

- Added fname-append-host=yes/no ini file setting. When turned on, appends
  the host name to the names of the output
  files (output vector, output scalar, snapshot files). This is
  useful when the simulation is run on multiple machines concurrently
  (parallel independent runs (Akaroa) or parallel/distributed simulation),
  and all running instances write to the same directory (e.g. shared
  via NFS mount). [Idea from Steffen Sroka's Akaroa extension]

- 2 bugfixes: (1) output scalar file did not get opened sometimes; (2) output
  scalar file got removed between runs

Cmdenv:
- Cmdenv can now display various performance measures like event/sec,
  event/simsec, simsec/sev, number of message objects, etc. during execution,
  so you can compare Tkenv and Cmdenv performances.

- The omnetpp.ini entries that control Cmdenv execution mode and amount of
  printed info have been changed. An express-mode=yes/no (default: no) switch
  has been introduced, with a meaning similar to Tkenv. Normal mode
  (express-mode=no) can be controlled with the module-messages=yes/no,
  event-banners=yes/no, and message-trace=yes/no entries (the third adds new
  functionality), while express mode is affected by the status-frequency=
  <num-events>, performance-display=yes/no entries. autoflush=yes/no has
  also been added. The display-update=, verbose-simulation= entries are now
  obsolete.

- The -h command-line switch now lists all networks and modules linked into
  the executable.

Tkenv:
- Inspector windows are now restored from a ./.tkenvrc file if you restart the
  simulation. More precisely: as soon as an inspected object (identified by
  fullpath and classname) gets created in the simulation, its window pops up.
  Objects must have unique names for this to work properly! [Thanks to Nicky
  Van Foreest for the idea]

- For better navigation of simulation objects, an object tree view has been
  added to the left side of the main window. It can be turned off from the
  toolbar for performance.

- Inspector windows have been re-though to make them more intuitive, consistent
  and informative. All inspector windows now feature an inspector bar with
  object fullpath, classname and pointer value (useful for debugging), and a
  color code to make it easier to match different inspectors of the same
  object. Axis labelling have been added to output vector inspectors.
  Added tooltips to graphical module inspectors, speeded up animation of on
  very long connection arrows, and refined functionality of the Step icon
  into 3 distinct icons ("Run until next local event", "Fast", "Stop").

- Improved File|New run and New network dialogs (now also available from the
  toolbar) offer choice from a combobox. Other improvements: main text window
  is now cleared when simulation is restarted; more tooltips & toolbar icons;
  better output in Message Trace window; increased event number status bar
  field width by 3 digits (it was limited in size to 1.000.000 events);

- With "ring" layout, changed display order of modules from clockwise to the
  more natural counter-clockwise.

- Extensive internal refactoring mostly because of the introduction exception
  handling and reorganization of inspector registration and creation.

Sample simulations:
- HCube, Token Ring and Dyna2 now use message subclassing. Token Ring has
  also been significantly revised. The PVMEx example has been removed.

- A new example simulation Topo has been created to demonstrate NED features.
  Currently it shows how to build various parametric topologies (chain, mesh,
  ring, star, random graph, binary tree, hexagonal grid) using NED.


OMNeT++ 2.2p1,p2,p3
-------------------
Only exist in source patch form.


In the OMNeT++ 2.2 release (May 2002)
-------------------------------------
It's almost a year since the last, 2.1 release, and that's why this change
list tends to be a bit lengthy. Sorry about that.

For this release I got many more bugfixes, bug reports and suggestions than
for any previous one. Thanks to everybody who helped! Huge credit goes to
Ulrich Kaage in Karlsruhe who built up a server infrastructure (CVS,
bugtracker, Wiki, etc.) and was restless in testing and improving OMNeT++.
Thanks Uli! This is the first release since the CVS went online last year.

This release contains experimental support for the long-demanded feature known
as 'message subclassing'. This means that C++ message classes can be generated
from NED code, replacing the practice of dynamically adding cPar objects to
messages. Data fields added via the subclassing mechanism are inspectable in
Tkenv. The new NED syntax is experimental; the compiler extensions have been
temporarily implemented in Perl. The new Dyna2 sample simulation demonstrates
this feature. See doc/msgsubclassing.txt for more information.

The simulation kernel now has an indexed and hyperlinked on-line API reference,
generated from header file comments. (We're using Doxygen.) At the same time,
the Reference chapter in the manual was deleted.

Distributed simulation can now use the MPI library which is more readily
available nowadays than PVM. (Code contributed by Eric Wu).

The simulation kernel was made const-correct; because of this, older code
may need changes (especially where one didn't use the Module_Class_Members()
macro to define module classes.) There were other changes on the simulation
kernel to make it cleaner.

cGate::setDisplayString() was fixed: changes are now immediately reflected
in the Tkenv graphics as they should. cModule's display string methods were
reorganized: the displayString(int type) method was split into displayString()
and displayStringAsParent(), eliminating the type parameter. Similar change
was made to the set...() methods. (Old methods remained but are now
deprecated.)  All setDisplayString() methods are now compatible with
auto-layouted modules (randomly placed modules won't jump around in Tkenv
after each display update).

New methods: opp_nextrand(long& seed); opp_strlen(..); opp_strprettytrunc(..);
opp_mkindexedname(..) (the latter was formerly called indexedname()).
fullName() no longer uses a static buffer; with fullPath(), it is possible
to avoid static buffers by using the new fullPath(buffer,buflen) method.

In NED, an expression may now refer to a submodule parameter with the following
syntax: submod.par or submod[index].par. A limitation is that the index
might not be an expression itself.

Foundations of a simulation kernel regression test suite have been laid
down. The test/ subdirectory contains a few initial test cases that rely
on the new opp_test tool. The test tool can be very well used to build
model tests, too. Also, as tests tend to be compact and easy to write, the
test tool is also excellent for experimenting with OMNeT++ library classes.
See doc/opp_test.txt for details.

The Envir library has been extended with a plugin mechanism: one can now
plug in code that actually handles recording output vectors (e.g. one can
write them to database instead of files, apply filtering before writing
them out, or send them to a simulation controller app) without having
to modify the user interface library, the simulation kernel or existing models.
Similar mechanisms exist for output scalars and snapshots. The new
include/envirext.h header contains the interfaces the plugins have to
conform to: cOutputVectorManager, cOutputScalarManager, cSnapshotManager.

Tkenv's plugin handling was improved: plugins are searched in the directories
in OMNETPP_PLUGIN_PATH (set to ./plugins by default). DLL file names that are
looked for now correctly depend on the platform (*.dll on windows, .so* on
Unix).

For the default output vector mechanism (vec files), number precision was
increased to 9 digits (fprintf format changed).

The module parameter change logging feature is no longer supported.

Size limitations on omnetpp.ini were removed (only max line length=1024 chars
remained).

ChangeLogs are now GNU-style, with the most recent entries at the top.

Exit codes of simulation programs were made more natural: 0 if the simulation
terminated normally, 1 otherwise. Also, SIGTERM and SIGINT signals are now
handled more gracefully: they call finish() before terminating the simulation
(Unix only).

In GNED, regexp find/replace now understands the \1,\2,... notation in replace
strings. Backwards search was implemented in the Find/Replace dialogs of GNED
and Tkenv. Fixed Plove's problems with tabs/spaces in vector files and
slashes/backslashes on Windows, and also GNED's problems with command-line
arguments.

The makefiles now use a new Perl-based dependency generator which works on all
platforms. opp_makemake: added -L option, and removed Makefile.in from the
'depend' target.


In the OMNeT++ 2.1 release (May 2001)
-------------------------------------
This release is devoted to making OMNeT++ easier to install, easier
to use and easier to learn. Most important, there is now a binary package
for Windows. The install package comes with Tcl/Tk, Gnuplot and some
Unix utilities (grep, awk) bundled, and in addition to the OMNeT++ programs
and libraries compiled with MSVC, it also contains prebuilt executables
of the sample simulations. To shorten the learning curve, the package
contains Nick van Foreest's Queueing Tutorial. Some MSVC integration stuff
(AppWizard, macro to add a NED file to the project) was also added.

Changes in the source distribution: it now includes the Tutorial and
the sources of the MSVC integration components. To facilitate creating
binary distributions, omnetpp.h and the other simulation kernel headers
have been moved out of src/sim/, to a new include/ directory. There was no
change on the simulation kernel itself.

Further enhancements: Plove can now be built as a single executable with
compiled-in Tcl code; on Windows, Plove and GNED can now be compiled as GUI
apps (using WinMain() instead of main()). I added makefiles for Win95/98/ME
(although I couldn't test them). Borland C++ is no longer supported:
I removed the old project files (*.ide), but added back (unsupported)
Makefile.bc's.


In the OMNeT++ 2.0 patch 1 (March 2001)
---------------------------------------
Fixes build issues with Cygwin, PVM, and static libs under Unix.


In the OMNeT++ 2.0 final version (February 2001)
------------------------------------------------
There are a number of enhancements mainly on the GUI parts, GNED and Tkenv,
but the simulation API remains fully compatible. Bugs that were reported
since the 2.0b5 release have largely been fixed. All those who cared to
report bugs and suggested features -- thanks!

In cQueue, a number of methods were made virtual to enable customizing the
class (e.g. adding statistics for maintaining average queue length, etc.).
Some bugfixes on cQueue, cArray and cBag. I also added the OMNETPP_VERSION
symbol to the sim header files (currently #defined as 0x0200).

Tkenv was enhanced quite a bit. Now you can now open module output windows for
all modules (not only for simple modules), and the window will accumulate
ev<< output from that module and all submodules. (This feature is especially
useful for tracing dynamically created modules). Now you can search for text
in all module windows (^F Find, F3/^N Find next). Hotkeys were assigned to the
run commands too (F4 Step, F5 Run, F6 Fast, F7 Express, F8 Stop), and the
behaviour of the "step within module" command (^F4) was refined. I added a
Performance status bar (it displays events/sec, simulated sec/sec,
events/simulated sec readings). Another toolbar shows (among others) the number
of message objects currently in existence -- this feature may help you discover
the most common kind of memory leaks: forgetting to delete messages.
Display string handling was improved: modules in a module vector may now be
positioned individually, and submodule display strings may use the parent
module's parameters, too. See src/tkenv/ChangeLog for details.

The most important addition to GNED is its new, experimental XML support (needs
the TclXML-1.2 package). XML will play a much more significant role in future
releases of OMNeT++, as a universal data exchange format. Many smaller
enhancements: GNED now accepts NED file names as command line arguments;
.gnedrc was introduced; more & better Properties dialogs (Channel, Connection,
Module, etc. Properties); GNED is more careful now when you want to exit the
program; the File menu now has a Save all item. Plus a number of other fixes
to improve the robustness and reliability of the code.

A short section was added to the manual about parallel simulation in general.


In the OMNeT++ 2.0 beta 5 version (June 2000)
---------------------------------------------
Fixed the errors/warnings that occurred when compiling 2.0b4 with gcc 2.95.2.


In the OMNeT++ 2.0 beta 4 version (May 2000)
--------------------------------------------
This is release is a preparation to the 2.0 final release: most of the changes
improve on the ISO compliance, cleanliness, portability or quality of the code
and fix bugs, but there are a number of new features too.

Steps toward better ISO compliance: the source was made 'const char *'-correct,
and the TRUE/FALSE #defines were replaced by the true/false C++ keywords.
Also, nearly all '-Wall' gcc warnings were eliminated from the source.

Now it is possible to create DLLs from the libraries on Windows. This wasn't
as easy as I thought, because there are fundamental conceptual differences
between Windows DLLs and Unix shared objects. (For me it seems like the Unix
approach is a lot more flexible.) The MSVC makefiles were further refined
using a contribution from Balazs Kelemen.

Improvements on the simulation library: Multi-stage module initialization
support via cModule's initialize(int stage) and int numInitStages() functions.
The send...() functions now have versions which take cGate* pointers.
sum() and sqrSum() members added to the statistics classes (cStdDev and
subclasses); isNumeric() member added to cPar; remove(cObject *) added to
cArray. Also, three functions were added to cModule to facilitate navigating
the module hierarchy: int findSubmodule(...), cModule *submodule(...) and
cModule *moduleByRelativePath(...).

New Cmdenv/Tkenv features: you may link more than one user interfaces into the
simulation executable, and you can select one at runtime with the
[General]/user-interface=Tkenv (or =Cmdenv) ini file option or the -u Tkenv
(or -u Cmdenv) command-line argument to the simulation executable.
The per-module extra stack size needed by the user interface libraries
can now be configured from the ini file: [Cmdenv]/extra-stack= and
[Tkenv]/extra-stack= options.

The setDisplayString() sim.library functions are now properly handled by Tkenv,
so you can change the network graphics at runtime. Module parameters in display
strings (e.g. in "p=$xpos,$ypos;i=router") are also implemented finally.
However, implementing the message appearance customization feature (message
display strings) was left for next releases.

In NEDC (and GNED), fixed the ?: operator and changed its precedence to bind
looser than || and &&. Changed nedc-generated code to suppress warnings about
unused variables (which are normal anyway in machine-generated code); this
could only be done for MSVC and Borland C++ because gcc seems to lack such a
pragma.

Unfortunately I didn't get a chance to further refine GNED. It would really
help to have contributors to GNED development, so if you're interested, please
write! (Basically only Tcl/Tk programming is required [no need to touch the
C++ part], and I could give any support needed.)

Makefiles change: the 'install-local' target was eliminated: the new-built
libraries and programs are immediately copied to the lib/ and bin/ subdirs.

Several other smaller changes like fixed PVM execution; improved error
handling, bugfix related to wrong transmissionFinishes() behavior, etc; see the
sim/ChangeLog file.


In the OMNeT++ 2.0 beta 3 version (Jan 2000)
--------------------------------------------
License change: you can now elect to use GPL for the whole OMNeT++ package.

Compiling with MSVC is now supported. Makefile.vc files have been added for
system components, and project files for sample simulatons. No DLL support yet.
MSVC support required a number or small changes in the sources too.

The documentation was significantly expanded and reorganized. RefMan got merged
into the User Manual, and the new User Manual now contains a lot of background
information, new hints and techniques, references to other simulation packages,
etc. New sections include in-depth analyis of handleMessage() and activity(),
and a comparison with Parsec.

GNED has been further enhanced: you can create submodules by dragging a module
type from the tree view to the canvas; submodule names can be edited in-place;
there are dialogs to edit submodule, connection, channel, etc. specifications
directly.

A new sample called Demo was added which works as a GUI shell to the other
sample simulations, and also demonstrates how you can link several simulation
models into a single executable. The other samples were cleaned up a bit too
(e.g. indentation & commenting made more consistent).

Some API changes were made to improve the clarity of the code. See API_CHANGES
in the doc/ directory.

TVEnv was removed from the distribution.


In the OMNeT++ 2.0 beta 1 and 2 versions (Sep,Nov 1999)
-------------------------------------------------------

License conditions have been alleviated: from this release on, one can elect
to use GPL for the base components of OMNeT++.

The configure script has been replaced by GNU Autoconf. The makefiles have been
brushed up (more standard symbol names, autodepend, version number in lib names,
etc). Cygwin is now fully supported. DOS+BC3.1 support has been removed for
lack of interest. File names longer than 8+3 are now used within the package.

Most of the effort since the last release was put into GNED. As a result,
GNED can now directly read/write NED files, so you can use it to work on your
existing NED sources. Moreover, GNED is now a fully two-way tool: you can edit
compound modules in graphic or in NED source form, and switch to the other view
any time. The GUI has been improved too: toolbar icons, tooltips, NED syntax
highlight. GNED is still in beta and there's some missing functionality.

Tkenv's user interface has also undergone some beautifying and bugfixing:
now it has toolbar icons, tooltips, etc.

OMNETPP_BITMAP_PATH can now contain a list of directories; it includes "." and
"./bitmaps" by default, so individual simulation models can have their own
icons in their own directories.

Smaller enhancements were made to the simulation library. Some of them are:
dynamic simple modules can now be created and booted in one step by using
cModuleType's createScheduleInit() function; callInitialize() and callFinish()
was added to the module classes (for compound modules they work recursively);
behavior of cancelEvent() slightly changed. cMessage now has isScheduled()
and isSelfMessage() member functions; a "context pointer" was also added to
cMessage to facilitate writing modules which use a large number of self
messages concurrently.

See the ChangeLog in the directory of the individual components for details
on what has been changed/fixed/improved.

Contributions have been added. They include NED syntax highlight for Emacs,
and recipes and sample code to use Octave with OMNeT++.

Which is less visible to you, the development has moved to use CVS.


In version of Feb, 1999 (OMNeT++ 1.1)
-------------------------------------

handleMessage() support added as alternative to activity(). Finite
State Machines (FSMs) are now also supported. They are demonstrated
in the fifo2 sample simulation.

The cPacket class and the protocol.h header was added; its aim is
to standardize on protocol models. Negative message kind values
are now reserved.

Added contributed howto about using OMNeT++ on NT with CYGWIN. Also
added contributed report on using message subclassing.

The way of writing custom inspectors has been redesigned to make it
more flexible. Also, Tkenv now has a plugin interface.

Several bugfixes and smaller improvements: Tkenv message inspector
redesigned; bugs in the ini file reader and the statistics classes
were fixed; vsscanf() was eliminated; the makefiles are now created
from makefile.in files; wait(), receive() and surroundings were
optimized; bug in GNED bug fixed etc.


In version of Aug, 1998 (OMNeT++ 1.0)
-------------------------------------

Data collection by output vectors can be configured in the ini file
(ie. OPNET 'probes'). Display strings can now be specified in the ini file
as an alternative to embedding them in ned files.

GNED has been totally rewritten. Now it supports colors, icon selection
etc. and correctly generates display strings. Cut/copy/paste capability.

A models/support library added with several base/utility classes and modules.

Ported to Windows 95/NT. Borland C++ 5.0 project files are included.

Numerous smaller improvements on Plove and Tkenv. Possibility
to make standalone simulation executables with Tkenv's TCL script
parts compiled into the executable.

To-do list and coding conventions (style guide) has been added to the
docs; please stick to it. Tkenv is now better documented; and so is the
cKSplit class.

As usually, additions and changes in the User Manual are marked with
(new) in the text. It does not necessarily mean the feature documented
there is new; most probably only the documentation is.

As usually, you're welcome to hack on the code and send in patches!
GNED is a very good target to start at. If you plan to do development,
you can sign up on the OMNeT++ mailing list and exchange ideas with
others.


In version of July, 1998
------------------------

Documentation now includes quickstart reference for OPNET users.
Additions to the User Manual are marked with (new!) in the text.

Tkenv has been improved significantly. Better animation: message names
are displayed and message kind is color-coded. New connection inspector
shows a connection path graphically. Module inspector has been redesigned
in notepad-style. Right-click popup menus in inspector windows.
Variables can be changed at run-time by cWatch inspectors. You can now
use the menu and play with the inspectors while simulation is running.
Several smaller improvements.

Routing support through the cTopology class. Other new classes are
cWeightedStdDev, cLinkedList. Direct message encapsulation support.
cPar can now store void* pointers. Output scalar file added which
accumulates results from several simulation runs. Several refinements
on the class library, more informative error messages.

Improved makemake script supports large models which span across
multiple directories. Plove made more intuitive with mc-like key bindings
and right-click popup menus.


In version of June 5, 1998
--------------------------

Documentation now comes also in HTML. We now have an LSM entry.

Tkenv made the default user interface.

Network graphics (module icons, connection arrows etc) and message
flow animation has been added to Tkenv. Usefulness of Tkenv dramatically
improved. Default graphics for models originally written without
graphics (no modifications needed).

By default, libraries are now dynamically linked which drastically reduces
executable sizes. You can revert to static linking by editing in `configure'.
You can load shared objects (e.g simple module code) at run-time
(-l command-line option).

Source directory tree changed to be more 'unix-like'.

New histogram class with user-defined and equal-frequency cells added
(thanks to Gabor Lencse), existing ones cleaned up and significantly
enhanced.

Wildcards (*,?) can be used in omnetpp.ini to supply values to several
model parameters at a time. Ini file inclusion and multiple ini files
support (via multiple -f command-line options) added. Total stack size
for the coroutines can now be given in the omnetpp.ini file.

Several bug fixes and minor improvements on Plove, GNED etc.


Version of May, 1998
--------------------
Wasn't publicly announced.


In version of March, 1998
-------------------------

An new interactive tool, Plove has been added. Plove is for analyzing
and plotting output vector files. Plove uses gnuplot to do the actual
work. In addition to viewing, you can save the gnuplot graphs to files
(postscript, latex, pbm etc) with a click. Filtering the results
before plotting (averaging, truncation, smoothing, etc) is possible.
Some filters are built in, and you can easily create new filters or
modify the existing ones.

Portability: Unix and (with some limitations) Win95/NT


In version of February, 1998
----------------------------

Type checking has been added to the NED language and the compiler.
New operators have also been added (like binary and/or/xor, shifting etc).

Now it is not necessary to declare module parameters and gates in .cc files
(Module..End stuff can be left out).

A new example program, HCube was added. It simulates an arbitrary-size
hypercube network with a simple deflection routing.

A configur script was added that -- on Unix platforms -- finds the
installation directories of Tcl/Tk, X, PVM and Turbo Vision, and
customizes the makefiles accordingly.

The Jar compiler has been renamed to NEDC because the name 'Jar' was
used by other software (a DOS archiver; Java tar on Solaris etc.)

Some scripts in util/ have also been renamed.

Now it is possible to specify values with time units (s,ms,us,m,h,d etc.)
in omnetpp.ini.

Misc improvements: some bugs fixed; some error messages in the sim. kernel
made more informative etc.


In version of December, 1997
----------------------------

A graphical model editor (GNED) is here. It's written entirely in Tcl/Tk.
Try it. It is the first, simple version; there's more to come.

The way of defining simple modules has been simplified a lot. Check out the
manual or see the example programs!

A new example program (fifo) was added that models a single-server queue and
also demonstrates how to derive a simple module from another one.

Important: the [All runs] ini file section has been renamed to [Parameters] to
reduce misunderstandings.


In version of October 15, 1997
------------------------------

Several member functions (and even classes) have been renamed for the sake
of a more readable code as well as consistency in naming and style. The utils
directory contains a Unix script (convert) to upgrade your files.

The cKSplit class was added -- another, experimental on-line distribution
approximation method.

Several bugfixes and improvements, updated manual.

The arg.list to the constructor of the histogram classes has changed --
beware, the compiler might not warn you!


In version of September 15, 1997
--------------------------------

Tkenv has been developed upon a lot -- try it with the improved Token Ring
example!

Parallel execution via PVM has been tested and significantly improved.
Syncpoints (a tool for synchronization) were added. See the user manual
for details. Go ahead and do Parallel Discrete Event Simulation (PDES)
with OMNeT++!

The implementation of the message queue (Future Event Set) has become more
efficient: the underlying data structure has been changed to heap.

Most important change in the simulation class library: cQueue's interface
has changed. See the manual or the source code.

Most important change in the ini file: The [General]/number-of-runs option
has been replaced by the [Cmdenv]/runs-to-execute option and the
-r command-line switch.

Check the version.log files for the numerous other changes. Many bugfixes
and code cleanups were made.

----------
Copyright (C) 2002 Andras Varga

