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

OMNeT++ 2.3p1 release (November 2003)
-------------------------------------
This is a bugfix release, and its main job is to resolve issues of compiling
the package with the Microsoft .NET compiler (aka VC7). It also improves
Tkenv to make structures defined in .msg files visible (before, only "{...}"
was displayed), and contains a number of user interface refinements and
fixes to GNED (thanks to Eric Wu and Steve Woon for the hints).

What it doesn't contain yet are the new opp_neddoc, new Tkenv features such as
senddirect animation, the new parallel simulation architecture, dynamic loading
of NED files and other refinements. These features need more testing and
they're not appropriate for a bugfix release anyway.


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

