112027Sjungma@eit.uni-kl.de/*****************************************************************************
212027Sjungma@eit.uni-kl.de
312027Sjungma@eit.uni-kl.de  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412027Sjungma@eit.uni-kl.de  more contributor license agreements.  See the NOTICE file distributed
512027Sjungma@eit.uni-kl.de  with this work for additional information regarding copyright ownership.
612027Sjungma@eit.uni-kl.de  Accellera licenses this file to you under the Apache License, Version 2.0
712027Sjungma@eit.uni-kl.de  (the "License"); you may not use this file except in compliance with the
812027Sjungma@eit.uni-kl.de  License.  You may obtain a copy of the License at
912027Sjungma@eit.uni-kl.de
1012027Sjungma@eit.uni-kl.de    http://www.apache.org/licenses/LICENSE-2.0
1112027Sjungma@eit.uni-kl.de
1212027Sjungma@eit.uni-kl.de  Unless required by applicable law or agreed to in writing, software
1312027Sjungma@eit.uni-kl.de  distributed under the License is distributed on an "AS IS" BASIS,
1412027Sjungma@eit.uni-kl.de  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512027Sjungma@eit.uni-kl.de  implied.  See the License for the specific language governing
1612027Sjungma@eit.uni-kl.de  permissions and limitations under the License.
1712027Sjungma@eit.uni-kl.de
1812027Sjungma@eit.uni-kl.de *****************************************************************************/
1912027Sjungma@eit.uni-kl.de
2012027Sjungma@eit.uni-kl.de/*****************************************************************************
2112027Sjungma@eit.uni-kl.de
2212027Sjungma@eit.uni-kl.de  sc_report.cpp -- Run-time logging and reporting facilities
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de  Interface design by SystemC Verification Working Group.
2512027Sjungma@eit.uni-kl.de  Implementation by Alex Riesen, Synopsys Inc.
2612027Sjungma@eit.uni-kl.de  Original implementation by Martin Janssen, Synopsys Inc.
2712027Sjungma@eit.uni-kl.de  Reference implementation by Cadence Design Systems, Inc., 2002-09-23:
2812027Sjungma@eit.uni-kl.de  Norris Ip, Dean Shea, John Rose, Jasvinder Singh, William Paulsen,
2912027Sjungma@eit.uni-kl.de  John Pierce, Rachida Kebichi, Ted Elkind, David Bailey.
3012027Sjungma@eit.uni-kl.de
3112027Sjungma@eit.uni-kl.de  CHANGE LOG AT END OF FILE
3212027Sjungma@eit.uni-kl.de *****************************************************************************/
3312027Sjungma@eit.uni-kl.de
3412027Sjungma@eit.uni-kl.de
3512027Sjungma@eit.uni-kl.de#include <stdlib.h>
3612027Sjungma@eit.uni-kl.de#include <string.h>
3712027Sjungma@eit.uni-kl.de
3812027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_process.h"
3912027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_simcontext_int.h"
4012027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_stop_here.h"
4112027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_report.h"
4212027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_utils_ids.h"
4312027Sjungma@eit.uni-kl.de#include <algorithm> // std::swap
4412027Sjungma@eit.uni-kl.de
4512027Sjungma@eit.uni-kl.denamespace sc_core {
4612027Sjungma@eit.uni-kl.de
4712027Sjungma@eit.uni-kl.de
4812027Sjungma@eit.uni-kl.destatic void sc_deprecated_report_ids(const char* method)
4912027Sjungma@eit.uni-kl.de{
5012027Sjungma@eit.uni-kl.de    static bool warn_report_ids_deprecated=true;
5112027Sjungma@eit.uni-kl.de    if ( warn_report_ids_deprecated )
5212027Sjungma@eit.uni-kl.de    {
5312027Sjungma@eit.uni-kl.de        std::string message;
5412027Sjungma@eit.uni-kl.de	message = "integer report ids are deprecated, use string values: ";
5512027Sjungma@eit.uni-kl.de	message += method;
5612027Sjungma@eit.uni-kl.de        warn_report_ids_deprecated=false;
5712027Sjungma@eit.uni-kl.de	SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_, message.c_str());
5812027Sjungma@eit.uni-kl.de    }
5912027Sjungma@eit.uni-kl.de}
6012027Sjungma@eit.uni-kl.de
6112027Sjungma@eit.uni-kl.destatic char empty_str[] = "";
6212027Sjungma@eit.uni-kl.destatic inline char * empty_dup(const char * p)
6312027Sjungma@eit.uni-kl.de{
6412027Sjungma@eit.uni-kl.de    if ( p && *p )
6512027Sjungma@eit.uni-kl.de    {
6612027Sjungma@eit.uni-kl.de        char* result;
6712027Sjungma@eit.uni-kl.de        result = (char*)malloc(strlen(p)+1);
6812027Sjungma@eit.uni-kl.de        strcpy(result, p);
6912027Sjungma@eit.uni-kl.de        return result;
7012027Sjungma@eit.uni-kl.de    }
7112027Sjungma@eit.uni-kl.de    else
7212027Sjungma@eit.uni-kl.de    {
7312027Sjungma@eit.uni-kl.de        return empty_str;
7412027Sjungma@eit.uni-kl.de    }
7512027Sjungma@eit.uni-kl.de}
7612027Sjungma@eit.uni-kl.de
7712027Sjungma@eit.uni-kl.desc_report::sc_report()
7812027Sjungma@eit.uni-kl.de: severity(SC_INFO),
7912027Sjungma@eit.uni-kl.de  md(0),
8012027Sjungma@eit.uni-kl.de  msg(empty_dup(0)),
8112027Sjungma@eit.uni-kl.de  file(empty_dup(0)),
8212027Sjungma@eit.uni-kl.de  line(0),
8312027Sjungma@eit.uni-kl.de  timestamp(new sc_time(sc_time_stamp())),
8412027Sjungma@eit.uni-kl.de  process(0),
8512027Sjungma@eit.uni-kl.de  m_verbosity_level(SC_MEDIUM),
8612027Sjungma@eit.uni-kl.de  m_what(empty_dup(0))
8712027Sjungma@eit.uni-kl.de{
8812027Sjungma@eit.uni-kl.de}
8912027Sjungma@eit.uni-kl.de
9012027Sjungma@eit.uni-kl.desc_report::sc_report(sc_severity severity_,
9112027Sjungma@eit.uni-kl.de		     const sc_msg_def* md_,
9212027Sjungma@eit.uni-kl.de		     const char* msg_,
9312027Sjungma@eit.uni-kl.de		     const char* file_,
9412027Sjungma@eit.uni-kl.de		     int line_,
9512027Sjungma@eit.uni-kl.de		     int verbosity_level)
9612027Sjungma@eit.uni-kl.de: severity(severity_),
9712027Sjungma@eit.uni-kl.de  md(md_),
9812027Sjungma@eit.uni-kl.de  msg(empty_dup(msg_)),
9912027Sjungma@eit.uni-kl.de  file(empty_dup(file_)),
10012027Sjungma@eit.uni-kl.de  line(line_),
10112027Sjungma@eit.uni-kl.de  timestamp(new sc_time(sc_time_stamp())),
10212027Sjungma@eit.uni-kl.de  process(sc_get_current_process_b()),
10312027Sjungma@eit.uni-kl.de  m_verbosity_level(verbosity_level),
10412027Sjungma@eit.uni-kl.de  m_what( empty_dup( sc_report_compose_message(*this).c_str() ) )
10512027Sjungma@eit.uni-kl.de{
10612027Sjungma@eit.uni-kl.de}
10712027Sjungma@eit.uni-kl.de
10812027Sjungma@eit.uni-kl.desc_report::sc_report(const sc_report& other)
10912027Sjungma@eit.uni-kl.de: std::exception(other),
11012027Sjungma@eit.uni-kl.de  severity(other.severity),
11112027Sjungma@eit.uni-kl.de  md(other.md),
11212027Sjungma@eit.uni-kl.de  msg(empty_dup(other.msg)),
11312027Sjungma@eit.uni-kl.de  file(empty_dup(other.file)),
11412027Sjungma@eit.uni-kl.de  line(other.line),
11512027Sjungma@eit.uni-kl.de  timestamp(new sc_time(*other.timestamp)),
11612027Sjungma@eit.uni-kl.de  process(other.process),
11712027Sjungma@eit.uni-kl.de  m_verbosity_level(other.m_verbosity_level),
11812027Sjungma@eit.uni-kl.de  m_what(empty_dup(other.m_what))
11912027Sjungma@eit.uni-kl.de{
12012027Sjungma@eit.uni-kl.de}
12112027Sjungma@eit.uni-kl.de
12212027Sjungma@eit.uni-kl.desc_report & sc_report::operator=(const sc_report& other)
12312027Sjungma@eit.uni-kl.de{
12412027Sjungma@eit.uni-kl.de    sc_report copy(other);
12512027Sjungma@eit.uni-kl.de    swap( copy );
12612027Sjungma@eit.uni-kl.de    return *this;
12712027Sjungma@eit.uni-kl.de}
12812027Sjungma@eit.uni-kl.de
12912027Sjungma@eit.uni-kl.devoid
13012027Sjungma@eit.uni-kl.desc_report::swap( sc_report & that )
13112027Sjungma@eit.uni-kl.de{
13212027Sjungma@eit.uni-kl.de    using std::swap;
13312027Sjungma@eit.uni-kl.de    swap( severity,          that.severity );
13412027Sjungma@eit.uni-kl.de    swap( md,                that.md );
13512027Sjungma@eit.uni-kl.de    swap( msg,               that.msg );
13612027Sjungma@eit.uni-kl.de    swap( file,              that.file );
13712027Sjungma@eit.uni-kl.de    swap( line,              that.line );
13812027Sjungma@eit.uni-kl.de    swap( timestamp,         that.timestamp );
13912027Sjungma@eit.uni-kl.de    swap( process,           that.process );
14012027Sjungma@eit.uni-kl.de    swap( m_verbosity_level, that.m_verbosity_level );
14112027Sjungma@eit.uni-kl.de    swap( m_what,            that.m_what );
14212027Sjungma@eit.uni-kl.de}
14312027Sjungma@eit.uni-kl.de
14412027Sjungma@eit.uni-kl.desc_report::~sc_report() throw()
14512027Sjungma@eit.uni-kl.de{
14612027Sjungma@eit.uni-kl.de    if ( file != empty_str )
14712027Sjungma@eit.uni-kl.de	free(file);
14812027Sjungma@eit.uni-kl.de    if ( msg != empty_str )
14912027Sjungma@eit.uni-kl.de	free(msg);
15012027Sjungma@eit.uni-kl.de    delete timestamp;
15112027Sjungma@eit.uni-kl.de    if ( m_what != empty_str )
15212027Sjungma@eit.uni-kl.de    free(m_what);
15312027Sjungma@eit.uni-kl.de}
15412027Sjungma@eit.uni-kl.de
15512027Sjungma@eit.uni-kl.deconst char * sc_report::get_msg_type() const
15612027Sjungma@eit.uni-kl.de{
15712027Sjungma@eit.uni-kl.de    return md->msg_type;
15812027Sjungma@eit.uni-kl.de}
15912027Sjungma@eit.uni-kl.de
16012027Sjungma@eit.uni-kl.de//
16112027Sjungma@eit.uni-kl.de// backward compatibility with 2.0+
16212027Sjungma@eit.uni-kl.de//
16312027Sjungma@eit.uni-kl.de
16412027Sjungma@eit.uni-kl.destatic bool warnings_are_errors = false;
16512027Sjungma@eit.uni-kl.destatic const char unknown_id[] = "unknown id";
16612027Sjungma@eit.uni-kl.de
16712027Sjungma@eit.uni-kl.devoid sc_report_handler::report(sc_severity severity_,
16812027Sjungma@eit.uni-kl.de			       int         id_,
16912027Sjungma@eit.uni-kl.de			       const char* msg_,
17012027Sjungma@eit.uni-kl.de			       const char* file_,
17112027Sjungma@eit.uni-kl.de			       int         line_ )
17212027Sjungma@eit.uni-kl.de{
17312027Sjungma@eit.uni-kl.de    sc_msg_def * md = sc_report_handler::mdlookup(id_);
17412027Sjungma@eit.uni-kl.de
17512027Sjungma@eit.uni-kl.de    if ( !md )
17612027Sjungma@eit.uni-kl.de    {
17712027Sjungma@eit.uni-kl.de	md = sc_report_handler::add_msg_type(unknown_id);
17812027Sjungma@eit.uni-kl.de	md->id = id_;
17912027Sjungma@eit.uni-kl.de    }
18012027Sjungma@eit.uni-kl.de
18112027Sjungma@eit.uni-kl.de    if ( severity_ == SC_WARNING && warnings_are_errors )
18212027Sjungma@eit.uni-kl.de	severity_ = SC_ERROR;
18312027Sjungma@eit.uni-kl.de
18412027Sjungma@eit.uni-kl.de    sc_actions actions = execute(md, severity_);
18512027Sjungma@eit.uni-kl.de    sc_report rep(severity_, md, msg_, file_, line_);
18612027Sjungma@eit.uni-kl.de
18712027Sjungma@eit.uni-kl.de    if ( actions & SC_CACHE_REPORT )
18812027Sjungma@eit.uni-kl.de	cache_report(rep);
18912027Sjungma@eit.uni-kl.de
19012027Sjungma@eit.uni-kl.de    if ( severity_ == SC_ERROR )
19112027Sjungma@eit.uni-kl.de	actions |= SC_THROW;
19212027Sjungma@eit.uni-kl.de    else if ( severity_ == SC_FATAL )
19312027Sjungma@eit.uni-kl.de	actions |= SC_ABORT;
19412027Sjungma@eit.uni-kl.de
19512027Sjungma@eit.uni-kl.de    handler(rep, actions);
19612027Sjungma@eit.uni-kl.de}
19712027Sjungma@eit.uni-kl.de
19812027Sjungma@eit.uni-kl.devoid sc_report::register_id( int id, const char* msg )
19912027Sjungma@eit.uni-kl.de{
20012027Sjungma@eit.uni-kl.de    sc_deprecated_report_ids("sc_report::register_id()");
20112027Sjungma@eit.uni-kl.de    if( id < 0 ) {
20212027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_REGISTER_ID_FAILED_,
20312027Sjungma@eit.uni-kl.de			 "invalid report id" );
20412027Sjungma@eit.uni-kl.de    }
20512027Sjungma@eit.uni-kl.de    if( msg == 0 ) {
20612027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_REGISTER_ID_FAILED_,
20712027Sjungma@eit.uni-kl.de			 "invalid report message" );
20812027Sjungma@eit.uni-kl.de    }
20912027Sjungma@eit.uni-kl.de    sc_msg_def * md = sc_report_handler::mdlookup(id);
21012027Sjungma@eit.uni-kl.de
21112027Sjungma@eit.uni-kl.de    if ( !md )
21212027Sjungma@eit.uni-kl.de	md = sc_report_handler::add_msg_type(msg);
21312027Sjungma@eit.uni-kl.de
21412027Sjungma@eit.uni-kl.de    if ( !md ) {
21512027Sjungma@eit.uni-kl.de	SC_REPORT_ERROR( SC_ID_REGISTER_ID_FAILED_,
21612027Sjungma@eit.uni-kl.de			 "report_map insertion error" );
21712027Sjungma@eit.uni-kl.de    }
21812027Sjungma@eit.uni-kl.de
21912027Sjungma@eit.uni-kl.de    if( md->id != -1 ) {
22012027Sjungma@eit.uni-kl.de	if( strcmp( msg, md->msg_type ) != 0 ) {
22112027Sjungma@eit.uni-kl.de	    SC_REPORT_ERROR( SC_ID_REGISTER_ID_FAILED_,
22212027Sjungma@eit.uni-kl.de			     "report id already exists" );
22312027Sjungma@eit.uni-kl.de	}
22412027Sjungma@eit.uni-kl.de	return;
22512027Sjungma@eit.uni-kl.de    }
22612027Sjungma@eit.uni-kl.de    md->id = id;
22712027Sjungma@eit.uni-kl.de}
22812027Sjungma@eit.uni-kl.de
22912027Sjungma@eit.uni-kl.deconst char* sc_report::get_message( int id )
23012027Sjungma@eit.uni-kl.de{
23112027Sjungma@eit.uni-kl.de    sc_deprecated_report_ids("sc_report::get_message()");
23212027Sjungma@eit.uni-kl.de    sc_msg_def* md = sc_report_handler::mdlookup(id);
23312027Sjungma@eit.uni-kl.de
23412027Sjungma@eit.uni-kl.de    return md ? md->msg_type: unknown_id;
23512027Sjungma@eit.uni-kl.de}
23612027Sjungma@eit.uni-kl.de
23712027Sjungma@eit.uni-kl.debool sc_report::is_suppressed( int id )
23812027Sjungma@eit.uni-kl.de{
23912027Sjungma@eit.uni-kl.de    sc_deprecated_report_ids("sc_report::is_suppressed()");
24012027Sjungma@eit.uni-kl.de    sc_msg_def* md = sc_report_handler::mdlookup(id);
24112027Sjungma@eit.uni-kl.de
24212027Sjungma@eit.uni-kl.de    return md ? md->actions == SC_DO_NOTHING: false; // only do-nothing set
24312027Sjungma@eit.uni-kl.de}
24412027Sjungma@eit.uni-kl.de
24512027Sjungma@eit.uni-kl.devoid sc_report::suppress_id(int id_, bool suppress)
24612027Sjungma@eit.uni-kl.de{
24712027Sjungma@eit.uni-kl.de    sc_deprecated_report_ids("sc_report::suppress_id()");
24812027Sjungma@eit.uni-kl.de    sc_msg_def* md = sc_report_handler::mdlookup(id_);
24912027Sjungma@eit.uni-kl.de
25012027Sjungma@eit.uni-kl.de    if ( md )
25112027Sjungma@eit.uni-kl.de	md->actions = suppress ? SC_DO_NOTHING: SC_UNSPECIFIED;
25212027Sjungma@eit.uni-kl.de}
25312027Sjungma@eit.uni-kl.de
25412027Sjungma@eit.uni-kl.devoid sc_report::suppress_infos(bool suppress)
25512027Sjungma@eit.uni-kl.de{
25612027Sjungma@eit.uni-kl.de    sc_deprecated_report_ids("sc_report::supress_infos");
25712027Sjungma@eit.uni-kl.de    sc_report_handler::sev_actions[SC_INFO] =
25812027Sjungma@eit.uni-kl.de	suppress ? SC_DO_NOTHING: SC_DEFAULT_INFO_ACTIONS;
25912027Sjungma@eit.uni-kl.de}
26012027Sjungma@eit.uni-kl.de
26112027Sjungma@eit.uni-kl.devoid sc_report::suppress_warnings(bool suppress)
26212027Sjungma@eit.uni-kl.de{
26312027Sjungma@eit.uni-kl.de    sc_deprecated_report_ids("sc_report::suppress_warnings");
26412027Sjungma@eit.uni-kl.de    sc_report_handler::sev_actions[SC_WARNING] =
26512027Sjungma@eit.uni-kl.de	suppress ? SC_DO_NOTHING: SC_DEFAULT_WARNING_ACTIONS;
26612027Sjungma@eit.uni-kl.de}
26712027Sjungma@eit.uni-kl.de
26812027Sjungma@eit.uni-kl.devoid sc_report::make_warnings_errors(bool flag)
26912027Sjungma@eit.uni-kl.de{
27012027Sjungma@eit.uni-kl.de    sc_deprecated_report_ids("sc_report::make_warnings_errors");
27112027Sjungma@eit.uni-kl.de    warnings_are_errors = flag;
27212027Sjungma@eit.uni-kl.de}
27312027Sjungma@eit.uni-kl.de
27412027Sjungma@eit.uni-kl.deint sc_report::get_id() const
27512027Sjungma@eit.uni-kl.de{
27612027Sjungma@eit.uni-kl.de    return md->id;
27712027Sjungma@eit.uni-kl.de}
27812027Sjungma@eit.uni-kl.de
27912027Sjungma@eit.uni-kl.de} // namespace sc_core
28012027Sjungma@eit.uni-kl.de
28112027Sjungma@eit.uni-kl.de// $Log: sc_report.cpp,v $
28212027Sjungma@eit.uni-kl.de// Revision 1.8  2011/08/29 18:04:32  acg
28312027Sjungma@eit.uni-kl.de//  Philipp A. Hartmann: miscellaneous clean ups.
28412027Sjungma@eit.uni-kl.de//
28512027Sjungma@eit.uni-kl.de// Revision 1.7  2011/08/26 20:43:01  acg
28612027Sjungma@eit.uni-kl.de//  Andy Goodrich:
28712027Sjungma@eit.uni-kl.de//    (1) Replaced strdup with new and strcpy to eliminate issue with the
28812027Sjungma@eit.uni-kl.de//        Greenhills compiler.
28912027Sjungma@eit.uni-kl.de//    (2) Moved modification log to the end of the file to eliminate line
29012027Sjungma@eit.uni-kl.de//        skew when check-ins are done.
29112027Sjungma@eit.uni-kl.de//
29212027Sjungma@eit.uni-kl.de// Revision 1.6  2011/08/24 22:05:56  acg
29312027Sjungma@eit.uni-kl.de//  Torsten Maehne: initialization changes to remove warnings.
29412027Sjungma@eit.uni-kl.de//
29512027Sjungma@eit.uni-kl.de// Revision 1.5  2011/05/05 17:46:04  acg
29612027Sjungma@eit.uni-kl.de//  Philip A. Hartmann: changes in "swap" support.
29712027Sjungma@eit.uni-kl.de//
29812027Sjungma@eit.uni-kl.de// Revision 1.4  2011/03/23 16:16:48  acg
29912027Sjungma@eit.uni-kl.de//  Andy Goodrich: finish message verbosity support.
30012027Sjungma@eit.uni-kl.de//
30112027Sjungma@eit.uni-kl.de// Revision 1.3  2011/02/18 20:38:44  acg
30212027Sjungma@eit.uni-kl.de//  Andy Goodrich: Updated Copyright notice.
30312027Sjungma@eit.uni-kl.de//
30412027Sjungma@eit.uni-kl.de// Revision 1.2  2011/02/01 23:02:05  acg
30512027Sjungma@eit.uni-kl.de//  Andy Goodrich: IEEE 1666 2011 changes.
30612027Sjungma@eit.uni-kl.de//
30712027Sjungma@eit.uni-kl.de// Revision 1.1.1.1  2006/12/15 20:20:06  acg
30812027Sjungma@eit.uni-kl.de// SystemC 2.3
30912027Sjungma@eit.uni-kl.de//
31012027Sjungma@eit.uni-kl.de// Revision 1.7  2006/03/21 00:00:37  acg
31112027Sjungma@eit.uni-kl.de//   Andy Goodrich: changed name of sc_get_current_process_base() to be
31212027Sjungma@eit.uni-kl.de//   sc_get_current_process_b() since its returning an sc_process_b instance.
31312027Sjungma@eit.uni-kl.de//
31412027Sjungma@eit.uni-kl.de// Revision 1.6  2006/01/25 00:31:27  acg
31512027Sjungma@eit.uni-kl.de//  Andy Goodrich: Changed over to use a standard message id of
31612027Sjungma@eit.uni-kl.de//  SC_ID_IEEE_1666_DEPRECATION for all deprecation messages.
31712027Sjungma@eit.uni-kl.de//
31812027Sjungma@eit.uni-kl.de// Revision 1.5  2006/01/24 22:02:30  acg
31912027Sjungma@eit.uni-kl.de//  Andy Goodrich: switch deprecated features warnings to use a single message
32012027Sjungma@eit.uni-kl.de//  id, SC_ID_IEEE_1666_DEPRECATION_.
32112027Sjungma@eit.uni-kl.de//
32212027Sjungma@eit.uni-kl.de// Revision 1.4  2006/01/24 20:53:41  acg
32312027Sjungma@eit.uni-kl.de// Andy Goodrich: added warnings indicating that use of integer ids in reports
32412027Sjungma@eit.uni-kl.de// is deprecated. Added tracing/sc_trace_ids.h to message list.
32512027Sjungma@eit.uni-kl.de//
32612027Sjungma@eit.uni-kl.de// Revision 1.3  2006/01/13 18:53:11  acg
32712027Sjungma@eit.uni-kl.de// Andy Goodrich: Added $Log command so that CVS comments are reproduced in
32812027Sjungma@eit.uni-kl.de// the source.
32912027Sjungma@eit.uni-kl.de
33012027Sjungma@eit.uni-kl.de// taf
331