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_handler.cpp - 2312027Sjungma@eit.uni-kl.de 2412027Sjungma@eit.uni-kl.de Original Author: Alex Riesen, Synopsys, Inc. 2512027Sjungma@eit.uni-kl.de see also sc_report.cpp 2612027Sjungma@eit.uni-kl.de 2712027Sjungma@eit.uni-kl.de CHANGE LOG AT END OF FILE 2812027Sjungma@eit.uni-kl.de *****************************************************************************/ 2912027Sjungma@eit.uni-kl.de 3012027Sjungma@eit.uni-kl.de#include <cstdio> 3112027Sjungma@eit.uni-kl.de#include <stdlib.h> 3212027Sjungma@eit.uni-kl.de#include <string.h> 3312027Sjungma@eit.uni-kl.de 3412027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_iostream.h" 3512027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_process.h" 3612027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_simcontext_int.h" 3712027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_stop_here.h" 3812027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_report_handler.h" 3912027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_report.h" 4012027Sjungma@eit.uni-kl.de 4112027Sjungma@eit.uni-kl.denamespace std {} 4212027Sjungma@eit.uni-kl.de 4312027Sjungma@eit.uni-kl.denamespace sc_core { 4412027Sjungma@eit.uni-kl.de 4512027Sjungma@eit.uni-kl.deint sc_report_handler::verbosity_level = SC_MEDIUM; 4612027Sjungma@eit.uni-kl.de 4712027Sjungma@eit.uni-kl.de// not documented, but available 4812027Sjungma@eit.uni-kl.deconst std::string sc_report_compose_message(const sc_report& rep) 4912027Sjungma@eit.uni-kl.de{ 5012027Sjungma@eit.uni-kl.de static const char * severity_names[] = { 5112027Sjungma@eit.uni-kl.de "Info", "Warning", "Error", "Fatal" 5212027Sjungma@eit.uni-kl.de }; 5312027Sjungma@eit.uni-kl.de std::string str; 5412027Sjungma@eit.uni-kl.de 5512027Sjungma@eit.uni-kl.de str += severity_names[rep.get_severity()]; 5612027Sjungma@eit.uni-kl.de str += ": "; 5712027Sjungma@eit.uni-kl.de 5812027Sjungma@eit.uni-kl.de if ( rep.get_id() >= 0 ) // backward compatibility with 2.0+ 5912027Sjungma@eit.uni-kl.de { 6012027Sjungma@eit.uni-kl.de char idstr[64]; 6112027Sjungma@eit.uni-kl.de std::sprintf(idstr, "(%c%d) ", 6212027Sjungma@eit.uni-kl.de "IWEF"[rep.get_severity()], rep.get_id()); 6312027Sjungma@eit.uni-kl.de str += idstr; 6412027Sjungma@eit.uni-kl.de } 6512027Sjungma@eit.uni-kl.de str += rep.get_msg_type(); 6612027Sjungma@eit.uni-kl.de 6712027Sjungma@eit.uni-kl.de if( *rep.get_msg() ) 6812027Sjungma@eit.uni-kl.de { 6912027Sjungma@eit.uni-kl.de str += ": "; 7012027Sjungma@eit.uni-kl.de str += rep.get_msg(); 7112027Sjungma@eit.uni-kl.de } 7212027Sjungma@eit.uni-kl.de if( rep.get_severity() > SC_INFO ) 7312027Sjungma@eit.uni-kl.de { 7412027Sjungma@eit.uni-kl.de char line_number_str[16]; 7512027Sjungma@eit.uni-kl.de str += "\nIn file: "; 7612027Sjungma@eit.uni-kl.de str += rep.get_file_name(); 7712027Sjungma@eit.uni-kl.de str += ":"; 7812027Sjungma@eit.uni-kl.de std::sprintf(line_number_str, "%d", rep.get_line_number()); 7912027Sjungma@eit.uni-kl.de str += line_number_str; 8012027Sjungma@eit.uni-kl.de sc_simcontext* simc = sc_get_curr_simcontext(); 8112027Sjungma@eit.uni-kl.de 8212027Sjungma@eit.uni-kl.de if( simc && sc_is_running() ) 8312027Sjungma@eit.uni-kl.de { 8412027Sjungma@eit.uni-kl.de const char* proc_name = rep.get_process_name(); 8512027Sjungma@eit.uni-kl.de 8612027Sjungma@eit.uni-kl.de if( proc_name ) 8712027Sjungma@eit.uni-kl.de { 8812027Sjungma@eit.uni-kl.de str += "\nIn process: "; 8912027Sjungma@eit.uni-kl.de str += proc_name; 9012027Sjungma@eit.uni-kl.de str += " @ "; 9112027Sjungma@eit.uni-kl.de str += rep.get_time().to_string(); 9212027Sjungma@eit.uni-kl.de } 9312027Sjungma@eit.uni-kl.de } 9412027Sjungma@eit.uni-kl.de } 9512027Sjungma@eit.uni-kl.de 9612027Sjungma@eit.uni-kl.de return str; 9712027Sjungma@eit.uni-kl.de} 9812027Sjungma@eit.uni-kl.debool sc_report_close_default_log(); 9912027Sjungma@eit.uni-kl.de 10012027Sjungma@eit.uni-kl.destatic ::std::ofstream* log_stream = 0; 10112027Sjungma@eit.uni-kl.destatic 10212027Sjungma@eit.uni-kl.destruct auto_close_log 10312027Sjungma@eit.uni-kl.de{ 10412027Sjungma@eit.uni-kl.de ~auto_close_log() 10512027Sjungma@eit.uni-kl.de { 10612027Sjungma@eit.uni-kl.de sc_report_close_default_log(); 10712027Sjungma@eit.uni-kl.de } 10812027Sjungma@eit.uni-kl.de} auto_close; 10912027Sjungma@eit.uni-kl.de 11012027Sjungma@eit.uni-kl.deconst char* sc_report::get_process_name() const 11112027Sjungma@eit.uni-kl.de{ 11212027Sjungma@eit.uni-kl.de return process ? process->name() : 0; 11312027Sjungma@eit.uni-kl.de} 11412027Sjungma@eit.uni-kl.de 11512027Sjungma@eit.uni-kl.de 11612027Sjungma@eit.uni-kl.de// 11712027Sjungma@eit.uni-kl.de// The official handler of the exception reporting 11812027Sjungma@eit.uni-kl.de// 11912027Sjungma@eit.uni-kl.de 12012027Sjungma@eit.uni-kl.devoid sc_report_handler::default_handler(const sc_report& rep, 12112027Sjungma@eit.uni-kl.de const sc_actions& actions) 12212027Sjungma@eit.uni-kl.de{ 12312027Sjungma@eit.uni-kl.de if ( actions & SC_DISPLAY ) 12412027Sjungma@eit.uni-kl.de ::std::cout << ::std::endl << sc_report_compose_message(rep) << 12512027Sjungma@eit.uni-kl.de ::std::endl; 12612027Sjungma@eit.uni-kl.de 12712027Sjungma@eit.uni-kl.de if ( (actions & SC_LOG) && get_log_file_name() ) 12812027Sjungma@eit.uni-kl.de { 12912027Sjungma@eit.uni-kl.de if ( !log_stream ) 13012027Sjungma@eit.uni-kl.de log_stream = new ::std::ofstream(get_log_file_name()); // ios::trunc 13112027Sjungma@eit.uni-kl.de 13212027Sjungma@eit.uni-kl.de *log_stream << rep.get_time() << ": " 13312027Sjungma@eit.uni-kl.de << sc_report_compose_message(rep) << ::std::endl; 13412027Sjungma@eit.uni-kl.de } 13512027Sjungma@eit.uni-kl.de if ( actions & SC_STOP ) 13612027Sjungma@eit.uni-kl.de { 13712027Sjungma@eit.uni-kl.de sc_stop_here(rep.get_msg_type(), rep.get_severity()); 13812027Sjungma@eit.uni-kl.de sc_stop(); 13912027Sjungma@eit.uni-kl.de } 14012027Sjungma@eit.uni-kl.de if ( actions & SC_INTERRUPT ) 14112027Sjungma@eit.uni-kl.de sc_interrupt_here(rep.get_msg_type(), rep.get_severity()); 14212027Sjungma@eit.uni-kl.de 14312027Sjungma@eit.uni-kl.de if ( actions & SC_ABORT ) 14412027Sjungma@eit.uni-kl.de abort(); 14512027Sjungma@eit.uni-kl.de 14612027Sjungma@eit.uni-kl.de if ( actions & SC_THROW ) { 14712027Sjungma@eit.uni-kl.de sc_process_b* proc_p = sc_get_current_process_b(); 14812027Sjungma@eit.uni-kl.de if( proc_p && proc_p->is_unwinding() ) 14912027Sjungma@eit.uni-kl.de proc_p->clear_unwinding(); 15012027Sjungma@eit.uni-kl.de throw rep; 15112027Sjungma@eit.uni-kl.de } 15212027Sjungma@eit.uni-kl.de} 15312027Sjungma@eit.uni-kl.de 15412027Sjungma@eit.uni-kl.de// not documented, but available 15512027Sjungma@eit.uni-kl.debool sc_report_close_default_log() 15612027Sjungma@eit.uni-kl.de{ 15712027Sjungma@eit.uni-kl.de delete log_stream; 15812027Sjungma@eit.uni-kl.de sc_report_handler::set_log_file_name(NULL); 15912027Sjungma@eit.uni-kl.de 16012027Sjungma@eit.uni-kl.de if ( !log_stream ) 16112027Sjungma@eit.uni-kl.de return false; 16212027Sjungma@eit.uni-kl.de 16312027Sjungma@eit.uni-kl.de log_stream = 0; 16412027Sjungma@eit.uni-kl.de return true; 16512027Sjungma@eit.uni-kl.de} 16612027Sjungma@eit.uni-kl.de 16712027Sjungma@eit.uni-kl.deint sc_report_handler::get_count(sc_severity severity_) 16812027Sjungma@eit.uni-kl.de{ 16912027Sjungma@eit.uni-kl.de return sev_call_count[severity_]; 17012027Sjungma@eit.uni-kl.de} 17112027Sjungma@eit.uni-kl.de 17212027Sjungma@eit.uni-kl.deint sc_report_handler::get_count(const char* msg_type_) 17312027Sjungma@eit.uni-kl.de{ 17412027Sjungma@eit.uni-kl.de sc_msg_def * md = mdlookup(msg_type_); 17512027Sjungma@eit.uni-kl.de 17612027Sjungma@eit.uni-kl.de if ( !md ) 17712027Sjungma@eit.uni-kl.de md = add_msg_type(msg_type_); 17812027Sjungma@eit.uni-kl.de 17912027Sjungma@eit.uni-kl.de return md->call_count; 18012027Sjungma@eit.uni-kl.de} 18112027Sjungma@eit.uni-kl.de 18212027Sjungma@eit.uni-kl.deint sc_report_handler::get_count(const char* msg_type_, sc_severity severity_) 18312027Sjungma@eit.uni-kl.de{ 18412027Sjungma@eit.uni-kl.de sc_msg_def * md = mdlookup(msg_type_); 18512027Sjungma@eit.uni-kl.de 18612027Sjungma@eit.uni-kl.de if ( !md ) 18712027Sjungma@eit.uni-kl.de md = add_msg_type(msg_type_); 18812027Sjungma@eit.uni-kl.de 18912027Sjungma@eit.uni-kl.de return md->sev_call_count[severity_]; 19012027Sjungma@eit.uni-kl.de} 19112027Sjungma@eit.uni-kl.de 19212027Sjungma@eit.uni-kl.de 19312027Sjungma@eit.uni-kl.de// 19412027Sjungma@eit.uni-kl.de// CLASS: sc_report_handler 19512027Sjungma@eit.uni-kl.de// implementation 19612027Sjungma@eit.uni-kl.de// 19712027Sjungma@eit.uni-kl.de 19812027Sjungma@eit.uni-kl.desc_msg_def * sc_report_handler::mdlookup(const char * msg_type_) 19912027Sjungma@eit.uni-kl.de{ 20012027Sjungma@eit.uni-kl.de if( !msg_type_ ) // if msg_type is NULL, report unknown error 20112027Sjungma@eit.uni-kl.de msg_type_ = SC_ID_UNKNOWN_ERROR_; 20212027Sjungma@eit.uni-kl.de 20312027Sjungma@eit.uni-kl.de for ( msg_def_items * item = messages; item; item = item->next ) 20412027Sjungma@eit.uni-kl.de { 20512027Sjungma@eit.uni-kl.de for ( int i = 0; i < item->count; ++i ) 20612027Sjungma@eit.uni-kl.de if ( !strcmp(msg_type_, item->md[i].msg_type) ) 20712027Sjungma@eit.uni-kl.de return item->md + i; 20812027Sjungma@eit.uni-kl.de } 20912027Sjungma@eit.uni-kl.de return 0; 21012027Sjungma@eit.uni-kl.de} 21112027Sjungma@eit.uni-kl.de 21212027Sjungma@eit.uni-kl.de// The calculation of actions to be executed 21312027Sjungma@eit.uni-kl.desc_actions sc_report_handler::execute(sc_msg_def* md, sc_severity severity_) 21412027Sjungma@eit.uni-kl.de{ 21512027Sjungma@eit.uni-kl.de sc_actions actions = md->sev_actions[severity_]; // high prio 21612027Sjungma@eit.uni-kl.de 21712027Sjungma@eit.uni-kl.de if ( SC_UNSPECIFIED == actions ) // middle prio 21812027Sjungma@eit.uni-kl.de actions = md->actions; 21912027Sjungma@eit.uni-kl.de 22012027Sjungma@eit.uni-kl.de if ( SC_UNSPECIFIED == actions ) // the lowest prio 22112027Sjungma@eit.uni-kl.de actions = sev_actions[severity_]; 22212027Sjungma@eit.uni-kl.de 22312027Sjungma@eit.uni-kl.de actions &= ~suppress_mask; // higher than the high prio 22412027Sjungma@eit.uni-kl.de actions |= force_mask; // higher than above, and the limit is the highest 22512027Sjungma@eit.uni-kl.de 22612027Sjungma@eit.uni-kl.de unsigned * limit = 0; 22712027Sjungma@eit.uni-kl.de unsigned * call_count = 0; 22812027Sjungma@eit.uni-kl.de 22912027Sjungma@eit.uni-kl.de // just increment counters and check for overflow 23012027Sjungma@eit.uni-kl.de if ( md->sev_call_count[severity_] < UINT_MAX ) 23112027Sjungma@eit.uni-kl.de md->sev_call_count[severity_]++; 23212027Sjungma@eit.uni-kl.de if ( md->call_count < UINT_MAX ) 23312027Sjungma@eit.uni-kl.de md->call_count++; 23412027Sjungma@eit.uni-kl.de if ( sev_call_count[severity_] < UINT_MAX ) 23512027Sjungma@eit.uni-kl.de sev_call_count[severity_]++; 23612027Sjungma@eit.uni-kl.de 23712027Sjungma@eit.uni-kl.de if ( md->limit_mask & (1 << (severity_ + 1)) ) 23812027Sjungma@eit.uni-kl.de { 23912027Sjungma@eit.uni-kl.de limit = md->sev_limit + severity_; 24012027Sjungma@eit.uni-kl.de call_count = md->sev_call_count + severity_; 24112027Sjungma@eit.uni-kl.de } 24212027Sjungma@eit.uni-kl.de if ( !limit && (md->limit_mask & 1) ) 24312027Sjungma@eit.uni-kl.de { 24412027Sjungma@eit.uni-kl.de limit = &md->limit; 24512027Sjungma@eit.uni-kl.de call_count = &md->call_count; 24612027Sjungma@eit.uni-kl.de } 24712027Sjungma@eit.uni-kl.de if ( !limit ) 24812027Sjungma@eit.uni-kl.de { 24912027Sjungma@eit.uni-kl.de limit = sev_limit + severity_; 25012027Sjungma@eit.uni-kl.de call_count = sev_call_count + severity_; 25112027Sjungma@eit.uni-kl.de } 25212027Sjungma@eit.uni-kl.de if ( *limit == 0 ) 25312027Sjungma@eit.uni-kl.de { 25412027Sjungma@eit.uni-kl.de // stop limit disabled 25512027Sjungma@eit.uni-kl.de } 25612027Sjungma@eit.uni-kl.de else if ( *limit != UINT_MAX ) 25712027Sjungma@eit.uni-kl.de { 25812027Sjungma@eit.uni-kl.de if ( *call_count >= *limit ) 25912027Sjungma@eit.uni-kl.de actions |= SC_STOP; // force sc_stop() 26012027Sjungma@eit.uni-kl.de } 26112027Sjungma@eit.uni-kl.de return actions; 26212027Sjungma@eit.uni-kl.de} 26312027Sjungma@eit.uni-kl.de 26412027Sjungma@eit.uni-kl.devoid sc_report_handler::report( sc_severity severity_, 26512027Sjungma@eit.uni-kl.de const char* msg_type_, 26612027Sjungma@eit.uni-kl.de const char* msg_, 26712027Sjungma@eit.uni-kl.de int verbosity_, 26812027Sjungma@eit.uni-kl.de const char* file_, 26912027Sjungma@eit.uni-kl.de int line_ ) 27012027Sjungma@eit.uni-kl.de{ 27112027Sjungma@eit.uni-kl.de sc_msg_def * md = mdlookup(msg_type_); 27212027Sjungma@eit.uni-kl.de 27312027Sjungma@eit.uni-kl.de // If the severity of the report is SC_INFO and the specified verbosity 27412027Sjungma@eit.uni-kl.de // level is greater than the maximum verbosity level of the simulator then 27512027Sjungma@eit.uni-kl.de // return without any action. 27612027Sjungma@eit.uni-kl.de 27712027Sjungma@eit.uni-kl.de if ( (severity_ == SC_INFO) && (verbosity_ > verbosity_level) ) return; 27812027Sjungma@eit.uni-kl.de 27912027Sjungma@eit.uni-kl.de // Process the report: 28012027Sjungma@eit.uni-kl.de 28112027Sjungma@eit.uni-kl.de if ( !md ) 28212027Sjungma@eit.uni-kl.de md = add_msg_type(msg_type_); 28312027Sjungma@eit.uni-kl.de 28412027Sjungma@eit.uni-kl.de sc_actions actions = execute(md, severity_); 28512027Sjungma@eit.uni-kl.de sc_report rep(severity_, md, msg_, file_, line_, verbosity_); 28612027Sjungma@eit.uni-kl.de 28712027Sjungma@eit.uni-kl.de if ( actions & SC_CACHE_REPORT ) 28812027Sjungma@eit.uni-kl.de cache_report(rep); 28912027Sjungma@eit.uni-kl.de 29012027Sjungma@eit.uni-kl.de handler(rep, actions); 29112027Sjungma@eit.uni-kl.de} 29212027Sjungma@eit.uni-kl.de 29312027Sjungma@eit.uni-kl.devoid sc_report_handler::report(sc_severity severity_, 29412027Sjungma@eit.uni-kl.de const char * msg_type_, 29512027Sjungma@eit.uni-kl.de const char * msg_, 29612027Sjungma@eit.uni-kl.de const char * file_, 29712027Sjungma@eit.uni-kl.de int line_) 29812027Sjungma@eit.uni-kl.de{ 29912027Sjungma@eit.uni-kl.de sc_msg_def * md = mdlookup(msg_type_); 30012027Sjungma@eit.uni-kl.de 30112027Sjungma@eit.uni-kl.de // If the severity of the report is SC_INFO and the maximum verbosity 30212027Sjungma@eit.uni-kl.de // level is less than SC_MEDIUM return without any action. 30312027Sjungma@eit.uni-kl.de 30412027Sjungma@eit.uni-kl.de if ( (severity_ == SC_INFO) && (SC_MEDIUM > verbosity_level) ) return; 30512027Sjungma@eit.uni-kl.de 30612027Sjungma@eit.uni-kl.de // Process the report: 30712027Sjungma@eit.uni-kl.de 30812027Sjungma@eit.uni-kl.de 30912027Sjungma@eit.uni-kl.de if ( !md ) 31012027Sjungma@eit.uni-kl.de md = add_msg_type(msg_type_); 31112027Sjungma@eit.uni-kl.de 31212027Sjungma@eit.uni-kl.de sc_actions actions = execute(md, severity_); 31312027Sjungma@eit.uni-kl.de sc_report rep(severity_, md, msg_, file_, line_); 31412027Sjungma@eit.uni-kl.de 31512027Sjungma@eit.uni-kl.de if ( actions & SC_CACHE_REPORT ) 31612027Sjungma@eit.uni-kl.de cache_report(rep); 31712027Sjungma@eit.uni-kl.de 31812027Sjungma@eit.uni-kl.de handler(rep, actions); 31912027Sjungma@eit.uni-kl.de} 32012027Sjungma@eit.uni-kl.de 32112027Sjungma@eit.uni-kl.de// The following method is never called by the simulator. 32212027Sjungma@eit.uni-kl.de 32312027Sjungma@eit.uni-kl.devoid sc_report_handler::initialize() 32412027Sjungma@eit.uni-kl.de{ 32512027Sjungma@eit.uni-kl.de#if 0 // actually, i do not know whether we have to reset these. 32612027Sjungma@eit.uni-kl.de suppress(); 32712027Sjungma@eit.uni-kl.de force(); 32812027Sjungma@eit.uni-kl.de set_actions(SC_INFO, SC_DEFAULT_INFO_ACTIONS); 32912027Sjungma@eit.uni-kl.de set_actions(SC_WARNING, SC_DEFAULT_WARNING_ACTIONS); 33012027Sjungma@eit.uni-kl.de set_actions(SC_ERROR, SC_DEFAULT_ERROR_ACTIONS); 33112027Sjungma@eit.uni-kl.de set_actions(SC_FATAL, SC_DEFAULT_FATAL_ACTIONS); 33212027Sjungma@eit.uni-kl.de#endif 33312027Sjungma@eit.uni-kl.de 33412027Sjungma@eit.uni-kl.de sev_call_count[SC_INFO] = 0; 33512027Sjungma@eit.uni-kl.de sev_call_count[SC_WARNING] = 0; 33612027Sjungma@eit.uni-kl.de sev_call_count[SC_ERROR] = 0; 33712027Sjungma@eit.uni-kl.de sev_call_count[SC_FATAL] = 0; 33812027Sjungma@eit.uni-kl.de 33912027Sjungma@eit.uni-kl.de msg_def_items * items = messages; 34012027Sjungma@eit.uni-kl.de 34112027Sjungma@eit.uni-kl.de while ( items != &msg_terminator ) 34212027Sjungma@eit.uni-kl.de { 34312027Sjungma@eit.uni-kl.de for ( int i = 0; i < items->count; ++i ) 34412027Sjungma@eit.uni-kl.de { 34512027Sjungma@eit.uni-kl.de items->md[i].call_count = 0; 34612027Sjungma@eit.uni-kl.de items->md[i].sev_call_count[SC_INFO] = 0; 34712027Sjungma@eit.uni-kl.de items->md[i].sev_call_count[SC_WARNING] = 0; 34812027Sjungma@eit.uni-kl.de items->md[i].sev_call_count[SC_ERROR] = 0; 34912027Sjungma@eit.uni-kl.de items->md[i].sev_call_count[SC_FATAL] = 0; 35012027Sjungma@eit.uni-kl.de } 35112027Sjungma@eit.uni-kl.de items = items->next; 35212027Sjungma@eit.uni-kl.de } 35312027Sjungma@eit.uni-kl.de 35412027Sjungma@eit.uni-kl.de // PROCESS ANY ENVIRONMENTAL OVERRIDES: 35512027Sjungma@eit.uni-kl.de 35612027Sjungma@eit.uni-kl.de const char* deprecation_warn = std::getenv("SC_DEPRECATION_WARNINGS"); 35712027Sjungma@eit.uni-kl.de if ( (deprecation_warn!=0) && !strcmp(deprecation_warn,"DISABLE") ) 35812027Sjungma@eit.uni-kl.de { 35912027Sjungma@eit.uni-kl.de set_actions("/IEEE_Std_1666/deprecated", SC_DO_NOTHING); 36012027Sjungma@eit.uni-kl.de } 36112027Sjungma@eit.uni-kl.de} 36212027Sjungma@eit.uni-kl.de 36312027Sjungma@eit.uni-kl.de// free the sc_msg_def's allocated by add_msg_type 36412027Sjungma@eit.uni-kl.de// (or implicit msg_type registration: set_actions, abort_after) 36512027Sjungma@eit.uni-kl.de// clear last_global_report. 36612027Sjungma@eit.uni-kl.devoid sc_report_handler::release() 36712027Sjungma@eit.uni-kl.de{ 36812027Sjungma@eit.uni-kl.de delete last_global_report; 36912027Sjungma@eit.uni-kl.de last_global_report = 0; 37012027Sjungma@eit.uni-kl.de sc_report_close_default_log(); 37112027Sjungma@eit.uni-kl.de 37212027Sjungma@eit.uni-kl.de msg_def_items * items = messages, * newitems = &msg_terminator; 37312027Sjungma@eit.uni-kl.de messages = &msg_terminator; 37412027Sjungma@eit.uni-kl.de 37512027Sjungma@eit.uni-kl.de while ( items != &msg_terminator ) 37612027Sjungma@eit.uni-kl.de { 37712027Sjungma@eit.uni-kl.de for ( int i = 0; i < items->count; ++i ) 37812027Sjungma@eit.uni-kl.de if ( items->md[i].msg_type == items->md[i].msg_type_data ) 37912027Sjungma@eit.uni-kl.de free(items->md[i].msg_type_data); 38012027Sjungma@eit.uni-kl.de 38112027Sjungma@eit.uni-kl.de msg_def_items * prev = items; 38212027Sjungma@eit.uni-kl.de items = items->next; 38312027Sjungma@eit.uni-kl.de 38412027Sjungma@eit.uni-kl.de if ( prev->allocated ) 38512027Sjungma@eit.uni-kl.de { 38612027Sjungma@eit.uni-kl.de delete [] prev->md; 38712027Sjungma@eit.uni-kl.de delete prev; 38812027Sjungma@eit.uni-kl.de } 38912027Sjungma@eit.uni-kl.de else 39012027Sjungma@eit.uni-kl.de { 39112027Sjungma@eit.uni-kl.de prev->next = newitems; 39212027Sjungma@eit.uni-kl.de newitems = prev; 39312027Sjungma@eit.uni-kl.de } 39412027Sjungma@eit.uni-kl.de } 39512027Sjungma@eit.uni-kl.de messages = newitems; 39612027Sjungma@eit.uni-kl.de} 39712027Sjungma@eit.uni-kl.de 39812027Sjungma@eit.uni-kl.desc_msg_def * sc_report_handler::add_msg_type(const char * msg_type_) 39912027Sjungma@eit.uni-kl.de{ 40012027Sjungma@eit.uni-kl.de sc_msg_def * md = mdlookup(msg_type_); 40112027Sjungma@eit.uni-kl.de int msg_type_len; 40212027Sjungma@eit.uni-kl.de 40312027Sjungma@eit.uni-kl.de if ( md ) 40412027Sjungma@eit.uni-kl.de return md; 40512027Sjungma@eit.uni-kl.de 40612027Sjungma@eit.uni-kl.de msg_def_items * items = new msg_def_items; 40712027Sjungma@eit.uni-kl.de 40812027Sjungma@eit.uni-kl.de if ( !items ) 40912027Sjungma@eit.uni-kl.de return 0; 41012027Sjungma@eit.uni-kl.de 41112027Sjungma@eit.uni-kl.de items->count = 1; 41212027Sjungma@eit.uni-kl.de items->md = new sc_msg_def[items->count]; 41312027Sjungma@eit.uni-kl.de 41412027Sjungma@eit.uni-kl.de if ( !items->md ) 41512027Sjungma@eit.uni-kl.de { 41612027Sjungma@eit.uni-kl.de delete items; 41712027Sjungma@eit.uni-kl.de return 0; 41812027Sjungma@eit.uni-kl.de } 41912027Sjungma@eit.uni-kl.de memset(items->md, 0, sizeof(sc_msg_def) * items->count); 42012027Sjungma@eit.uni-kl.de msg_type_len = strlen(msg_type_); 42112027Sjungma@eit.uni-kl.de if ( msg_type_len > 0 ) 42212027Sjungma@eit.uni-kl.de { 42312027Sjungma@eit.uni-kl.de items->md->msg_type_data = (char*) malloc(msg_type_len+1); 42412027Sjungma@eit.uni-kl.de strcpy( items->md->msg_type_data, msg_type_ ); 42512027Sjungma@eit.uni-kl.de items->md->id = -1; // backward compatibility with 2.0+ 42612027Sjungma@eit.uni-kl.de } 42712027Sjungma@eit.uni-kl.de else 42812027Sjungma@eit.uni-kl.de { 42912027Sjungma@eit.uni-kl.de delete items->md; 43012027Sjungma@eit.uni-kl.de delete items; 43112027Sjungma@eit.uni-kl.de return 0; 43212027Sjungma@eit.uni-kl.de } 43312027Sjungma@eit.uni-kl.de items->md->msg_type = items->md->msg_type_data; 43412027Sjungma@eit.uni-kl.de add_static_msg_types(items); 43512027Sjungma@eit.uni-kl.de items->allocated = true; 43612027Sjungma@eit.uni-kl.de 43712027Sjungma@eit.uni-kl.de return items->md; 43812027Sjungma@eit.uni-kl.de} 43912027Sjungma@eit.uni-kl.de 44012027Sjungma@eit.uni-kl.devoid sc_report_handler::add_static_msg_types(msg_def_items * items) 44112027Sjungma@eit.uni-kl.de{ 44212027Sjungma@eit.uni-kl.de items->allocated = false; 44312027Sjungma@eit.uni-kl.de items->next = messages; 44412027Sjungma@eit.uni-kl.de messages = items; 44512027Sjungma@eit.uni-kl.de} 44612027Sjungma@eit.uni-kl.de 44712027Sjungma@eit.uni-kl.desc_actions sc_report_handler::set_actions(sc_severity severity_, 44812027Sjungma@eit.uni-kl.de sc_actions actions_) 44912027Sjungma@eit.uni-kl.de{ 45012027Sjungma@eit.uni-kl.de sc_actions old = sev_actions[severity_]; 45112027Sjungma@eit.uni-kl.de sev_actions[severity_] = actions_; 45212027Sjungma@eit.uni-kl.de return old; 45312027Sjungma@eit.uni-kl.de} 45412027Sjungma@eit.uni-kl.de 45512027Sjungma@eit.uni-kl.desc_actions sc_report_handler::set_actions(const char * msg_type_, 45612027Sjungma@eit.uni-kl.de sc_actions actions_) 45712027Sjungma@eit.uni-kl.de{ 45812027Sjungma@eit.uni-kl.de sc_msg_def * md = mdlookup(msg_type_); 45912027Sjungma@eit.uni-kl.de 46012027Sjungma@eit.uni-kl.de if ( !md ) 46112027Sjungma@eit.uni-kl.de md = add_msg_type(msg_type_); 46212027Sjungma@eit.uni-kl.de 46312027Sjungma@eit.uni-kl.de sc_actions old = md->actions; 46412027Sjungma@eit.uni-kl.de md->actions = actions_; 46512027Sjungma@eit.uni-kl.de 46612027Sjungma@eit.uni-kl.de return old; 46712027Sjungma@eit.uni-kl.de} 46812027Sjungma@eit.uni-kl.de 46912027Sjungma@eit.uni-kl.desc_actions sc_report_handler::set_actions(const char * msg_type_, 47012027Sjungma@eit.uni-kl.de sc_severity severity_, 47112027Sjungma@eit.uni-kl.de sc_actions actions_) 47212027Sjungma@eit.uni-kl.de{ 47312027Sjungma@eit.uni-kl.de sc_msg_def * md = mdlookup(msg_type_); 47412027Sjungma@eit.uni-kl.de 47512027Sjungma@eit.uni-kl.de if ( !md ) 47612027Sjungma@eit.uni-kl.de md = add_msg_type(msg_type_); 47712027Sjungma@eit.uni-kl.de 47812027Sjungma@eit.uni-kl.de sc_actions old = md->sev_actions[severity_]; 47912027Sjungma@eit.uni-kl.de md->sev_actions[severity_] = actions_; 48012027Sjungma@eit.uni-kl.de 48112027Sjungma@eit.uni-kl.de return old; 48212027Sjungma@eit.uni-kl.de} 48312027Sjungma@eit.uni-kl.de 48412027Sjungma@eit.uni-kl.deint sc_report_handler::stop_after(sc_severity severity_, int limit) 48512027Sjungma@eit.uni-kl.de{ 48612027Sjungma@eit.uni-kl.de int old = sev_limit[severity_]; 48712027Sjungma@eit.uni-kl.de 48812027Sjungma@eit.uni-kl.de sev_limit[severity_] = limit < 0 ? UINT_MAX: (unsigned) limit; 48912027Sjungma@eit.uni-kl.de 49012027Sjungma@eit.uni-kl.de return old; 49112027Sjungma@eit.uni-kl.de} 49212027Sjungma@eit.uni-kl.de 49312027Sjungma@eit.uni-kl.deint sc_report_handler::stop_after(const char * msg_type_, int limit) 49412027Sjungma@eit.uni-kl.de{ 49512027Sjungma@eit.uni-kl.de sc_msg_def * md = mdlookup(msg_type_); 49612027Sjungma@eit.uni-kl.de 49712027Sjungma@eit.uni-kl.de if ( !md ) 49812027Sjungma@eit.uni-kl.de md = add_msg_type(msg_type_); 49912027Sjungma@eit.uni-kl.de 50012027Sjungma@eit.uni-kl.de int old = md->limit_mask & 1 ? md->limit: UINT_MAX; 50112027Sjungma@eit.uni-kl.de 50212027Sjungma@eit.uni-kl.de if ( limit < 0 ) 50312027Sjungma@eit.uni-kl.de md->limit_mask &= ~1; 50412027Sjungma@eit.uni-kl.de else 50512027Sjungma@eit.uni-kl.de { 50612027Sjungma@eit.uni-kl.de md->limit_mask |= 1; 50712027Sjungma@eit.uni-kl.de md->limit = limit; 50812027Sjungma@eit.uni-kl.de } 50912027Sjungma@eit.uni-kl.de return old; 51012027Sjungma@eit.uni-kl.de} 51112027Sjungma@eit.uni-kl.de 51212027Sjungma@eit.uni-kl.deint sc_report_handler::stop_after(const char * msg_type_, 51312027Sjungma@eit.uni-kl.de sc_severity severity_, 51412027Sjungma@eit.uni-kl.de int limit) 51512027Sjungma@eit.uni-kl.de{ 51612027Sjungma@eit.uni-kl.de sc_msg_def * md = mdlookup(msg_type_); 51712027Sjungma@eit.uni-kl.de 51812027Sjungma@eit.uni-kl.de if ( !md ) 51912027Sjungma@eit.uni-kl.de md = add_msg_type(msg_type_); 52012027Sjungma@eit.uni-kl.de 52112027Sjungma@eit.uni-kl.de int mask = 1 << (severity_ + 1); 52212027Sjungma@eit.uni-kl.de int old = md->limit_mask & mask ? md->sev_limit[severity_]: UINT_MAX; 52312027Sjungma@eit.uni-kl.de 52412027Sjungma@eit.uni-kl.de if ( limit < 0 ) 52512027Sjungma@eit.uni-kl.de md->limit_mask &= ~mask; 52612027Sjungma@eit.uni-kl.de else 52712027Sjungma@eit.uni-kl.de { 52812027Sjungma@eit.uni-kl.de md->limit_mask |= mask; 52912027Sjungma@eit.uni-kl.de md->sev_limit[severity_] = limit; 53012027Sjungma@eit.uni-kl.de } 53112027Sjungma@eit.uni-kl.de return old; 53212027Sjungma@eit.uni-kl.de} 53312027Sjungma@eit.uni-kl.de 53412027Sjungma@eit.uni-kl.desc_actions sc_report_handler::suppress(sc_actions mask) 53512027Sjungma@eit.uni-kl.de{ 53612027Sjungma@eit.uni-kl.de sc_actions old = suppress_mask; 53712027Sjungma@eit.uni-kl.de suppress_mask = mask; 53812027Sjungma@eit.uni-kl.de return old; 53912027Sjungma@eit.uni-kl.de} 54012027Sjungma@eit.uni-kl.de 54112027Sjungma@eit.uni-kl.desc_actions sc_report_handler::suppress() 54212027Sjungma@eit.uni-kl.de{ 54312027Sjungma@eit.uni-kl.de return suppress(0); 54412027Sjungma@eit.uni-kl.de} 54512027Sjungma@eit.uni-kl.de 54612027Sjungma@eit.uni-kl.desc_actions sc_report_handler::force(sc_actions mask) 54712027Sjungma@eit.uni-kl.de{ 54812027Sjungma@eit.uni-kl.de sc_actions old = force_mask; 54912027Sjungma@eit.uni-kl.de force_mask = mask; 55012027Sjungma@eit.uni-kl.de return old; 55112027Sjungma@eit.uni-kl.de} 55212027Sjungma@eit.uni-kl.de 55312027Sjungma@eit.uni-kl.desc_actions sc_report_handler::force() 55412027Sjungma@eit.uni-kl.de{ 55512027Sjungma@eit.uni-kl.de return force(0); 55612027Sjungma@eit.uni-kl.de} 55712027Sjungma@eit.uni-kl.de 55812027Sjungma@eit.uni-kl.desc_report_handler_proc 55912027Sjungma@eit.uni-kl.desc_report_handler::set_handler(sc_report_handler_proc handler_) 56012027Sjungma@eit.uni-kl.de{ 56112027Sjungma@eit.uni-kl.de sc_report_handler_proc old = handler; 56212027Sjungma@eit.uni-kl.de handler = handler_ ? handler_: &sc_report_handler::default_handler; 56312027Sjungma@eit.uni-kl.de return old; 56412027Sjungma@eit.uni-kl.de} 56512027Sjungma@eit.uni-kl.de 56612027Sjungma@eit.uni-kl.desc_report_handler_proc 56712027Sjungma@eit.uni-kl.desc_report_handler::get_handler() 56812027Sjungma@eit.uni-kl.de{ 56912027Sjungma@eit.uni-kl.de return handler; 57012027Sjungma@eit.uni-kl.de} 57112027Sjungma@eit.uni-kl.de 57212027Sjungma@eit.uni-kl.desc_report* sc_report_handler::get_cached_report() 57312027Sjungma@eit.uni-kl.de{ 57412027Sjungma@eit.uni-kl.de sc_process_b * proc = sc_get_current_process_b(); 57512027Sjungma@eit.uni-kl.de 57612027Sjungma@eit.uni-kl.de if ( proc ) 57712027Sjungma@eit.uni-kl.de return proc->get_last_report(); 57812027Sjungma@eit.uni-kl.de 57912027Sjungma@eit.uni-kl.de return last_global_report; 58012027Sjungma@eit.uni-kl.de} 58112027Sjungma@eit.uni-kl.de 58212027Sjungma@eit.uni-kl.devoid sc_report_handler::clear_cached_report() 58312027Sjungma@eit.uni-kl.de{ 58412027Sjungma@eit.uni-kl.de sc_process_b * proc = sc_get_current_process_b(); 58512027Sjungma@eit.uni-kl.de 58612027Sjungma@eit.uni-kl.de if ( proc ) 58712027Sjungma@eit.uni-kl.de proc->set_last_report(0); 58812027Sjungma@eit.uni-kl.de else 58912027Sjungma@eit.uni-kl.de { 59012027Sjungma@eit.uni-kl.de delete last_global_report; 59112027Sjungma@eit.uni-kl.de last_global_report = 0; 59212027Sjungma@eit.uni-kl.de } 59312027Sjungma@eit.uni-kl.de} 59412027Sjungma@eit.uni-kl.de 59512027Sjungma@eit.uni-kl.desc_actions sc_report_handler::get_new_action_id() 59612027Sjungma@eit.uni-kl.de{ 59712027Sjungma@eit.uni-kl.de for ( sc_actions p = 1; p; p <<= 1 ) 59812027Sjungma@eit.uni-kl.de { 59912027Sjungma@eit.uni-kl.de if ( !(p & available_actions) ) // free 60012027Sjungma@eit.uni-kl.de { 60112027Sjungma@eit.uni-kl.de available_actions |= p; 60212027Sjungma@eit.uni-kl.de return p; 60312027Sjungma@eit.uni-kl.de } 60412027Sjungma@eit.uni-kl.de } 60512027Sjungma@eit.uni-kl.de return SC_UNSPECIFIED; 60612027Sjungma@eit.uni-kl.de} 60712027Sjungma@eit.uni-kl.de 60812027Sjungma@eit.uni-kl.debool sc_report_handler::set_log_file_name(const char* name_) 60912027Sjungma@eit.uni-kl.de{ 61012027Sjungma@eit.uni-kl.de if ( !name_ ) 61112027Sjungma@eit.uni-kl.de { 61212027Sjungma@eit.uni-kl.de free(log_file_name); 61312027Sjungma@eit.uni-kl.de log_file_name = 0; 61412027Sjungma@eit.uni-kl.de return false; 61512027Sjungma@eit.uni-kl.de } 61612027Sjungma@eit.uni-kl.de if ( log_file_name ) 61712027Sjungma@eit.uni-kl.de return false; 61812027Sjungma@eit.uni-kl.de 61912027Sjungma@eit.uni-kl.de log_file_name = (char*)malloc(strlen(name_)+1); 62012027Sjungma@eit.uni-kl.de strcpy(log_file_name, name_); 62112027Sjungma@eit.uni-kl.de return true; 62212027Sjungma@eit.uni-kl.de} 62312027Sjungma@eit.uni-kl.de 62412027Sjungma@eit.uni-kl.deconst char * sc_report_handler::get_log_file_name() 62512027Sjungma@eit.uni-kl.de{ 62612027Sjungma@eit.uni-kl.de return log_file_name; 62712027Sjungma@eit.uni-kl.de} 62812027Sjungma@eit.uni-kl.de 62912027Sjungma@eit.uni-kl.devoid sc_report_handler::cache_report(const sc_report& rep) 63012027Sjungma@eit.uni-kl.de{ 63112027Sjungma@eit.uni-kl.de sc_process_b * proc = sc_get_current_process_b(); 63212027Sjungma@eit.uni-kl.de if ( proc ) 63312027Sjungma@eit.uni-kl.de proc->set_last_report(new sc_report(rep)); 63412027Sjungma@eit.uni-kl.de else 63512027Sjungma@eit.uni-kl.de { 63612027Sjungma@eit.uni-kl.de delete last_global_report; 63712027Sjungma@eit.uni-kl.de last_global_report = new sc_report(rep); 63812027Sjungma@eit.uni-kl.de } 63912027Sjungma@eit.uni-kl.de} 64012027Sjungma@eit.uni-kl.de 64112027Sjungma@eit.uni-kl.de// 64212027Sjungma@eit.uni-kl.de// backward compatibility with 2.0+ 64312027Sjungma@eit.uni-kl.de// 64412027Sjungma@eit.uni-kl.de 64512027Sjungma@eit.uni-kl.desc_msg_def * sc_report_handler::mdlookup(int id) 64612027Sjungma@eit.uni-kl.de{ 64712027Sjungma@eit.uni-kl.de for ( msg_def_items * item = messages; item; item = item->next ) 64812027Sjungma@eit.uni-kl.de { 64912027Sjungma@eit.uni-kl.de for ( int i = 0; i < item->count; ++i ) 65012027Sjungma@eit.uni-kl.de if ( id == item->md[i].id ) 65112027Sjungma@eit.uni-kl.de return item->md + i; 65212027Sjungma@eit.uni-kl.de } 65312027Sjungma@eit.uni-kl.de return 0; 65412027Sjungma@eit.uni-kl.de} 65512027Sjungma@eit.uni-kl.de 65612027Sjungma@eit.uni-kl.deint sc_report_handler::get_verbosity_level() { return verbosity_level; } 65712027Sjungma@eit.uni-kl.de 65812027Sjungma@eit.uni-kl.deint sc_report_handler::set_verbosity_level( int level ) 65912027Sjungma@eit.uni-kl.de{ 66012027Sjungma@eit.uni-kl.de int result = verbosity_level; 66112027Sjungma@eit.uni-kl.de verbosity_level = level; 66212027Sjungma@eit.uni-kl.de return result; 66312027Sjungma@eit.uni-kl.de} 66412027Sjungma@eit.uni-kl.de 66512027Sjungma@eit.uni-kl.de// 66612027Sjungma@eit.uni-kl.de// CLASS: sc_report_handler 66712027Sjungma@eit.uni-kl.de// static variables 66812027Sjungma@eit.uni-kl.de// 66912027Sjungma@eit.uni-kl.de 67012027Sjungma@eit.uni-kl.desc_actions sc_report_handler::suppress_mask = 0; 67112027Sjungma@eit.uni-kl.desc_actions sc_report_handler::force_mask = 0; 67212027Sjungma@eit.uni-kl.de 67312027Sjungma@eit.uni-kl.desc_actions sc_report_handler::sev_actions[SC_MAX_SEVERITY] = 67412027Sjungma@eit.uni-kl.de{ 67512027Sjungma@eit.uni-kl.de /* info */ SC_DEFAULT_INFO_ACTIONS, 67612027Sjungma@eit.uni-kl.de /* warn */ SC_DEFAULT_WARNING_ACTIONS, 67712027Sjungma@eit.uni-kl.de /* error */ SC_DEFAULT_ERROR_ACTIONS, 67812027Sjungma@eit.uni-kl.de /* fatal */ SC_DEFAULT_FATAL_ACTIONS 67912027Sjungma@eit.uni-kl.de}; 68012027Sjungma@eit.uni-kl.de 68112027Sjungma@eit.uni-kl.de// Note that SC_FATAL has a limit of 1 by default 68212027Sjungma@eit.uni-kl.de 68312027Sjungma@eit.uni-kl.desc_actions sc_report_handler::sev_limit[SC_MAX_SEVERITY] = 68412027Sjungma@eit.uni-kl.de{ 68512027Sjungma@eit.uni-kl.de UINT_MAX, UINT_MAX, UINT_MAX, UINT_MAX 68612027Sjungma@eit.uni-kl.de}; 68712027Sjungma@eit.uni-kl.desc_actions sc_report_handler::sev_call_count[SC_MAX_SEVERITY] = { 0, 0, 0, 0 }; 68812027Sjungma@eit.uni-kl.de 68912027Sjungma@eit.uni-kl.desc_report* sc_report_handler::last_global_report = NULL; 69012027Sjungma@eit.uni-kl.desc_actions sc_report_handler::available_actions = 69112027Sjungma@eit.uni-kl.de SC_DO_NOTHING | 69212027Sjungma@eit.uni-kl.de SC_THROW | 69312027Sjungma@eit.uni-kl.de SC_LOG | 69412027Sjungma@eit.uni-kl.de SC_DISPLAY | 69512027Sjungma@eit.uni-kl.de SC_CACHE_REPORT | 69612027Sjungma@eit.uni-kl.de SC_INTERRUPT | 69712027Sjungma@eit.uni-kl.de SC_STOP | 69812027Sjungma@eit.uni-kl.de SC_ABORT; 69912027Sjungma@eit.uni-kl.de 70012027Sjungma@eit.uni-kl.desc_report_handler_proc sc_report_handler::handler = 70112027Sjungma@eit.uni-kl.de &sc_report_handler::default_handler; 70212027Sjungma@eit.uni-kl.de 70312027Sjungma@eit.uni-kl.dechar * sc_report_handler::log_file_name = 0; 70412027Sjungma@eit.uni-kl.de 70512027Sjungma@eit.uni-kl.desc_report_handler::msg_def_items * sc_report_handler::messages = 70612027Sjungma@eit.uni-kl.de &sc_report_handler::msg_terminator; 70712027Sjungma@eit.uni-kl.de 70812027Sjungma@eit.uni-kl.de 70912027Sjungma@eit.uni-kl.de// 71012027Sjungma@eit.uni-kl.de// predefined messages 71112027Sjungma@eit.uni-kl.de// 71212027Sjungma@eit.uni-kl.de 71312027Sjungma@eit.uni-kl.deconst char SC_ID_REGISTER_ID_FAILED_[] = "register_id failed"; 71412027Sjungma@eit.uni-kl.deconst char SC_ID_UNKNOWN_ERROR_[] = "unknown error"; 71512027Sjungma@eit.uni-kl.deconst char SC_ID_WITHOUT_MESSAGE_[] = ""; 71612027Sjungma@eit.uni-kl.deconst char SC_ID_NOT_IMPLEMENTED_[] = "not implemented"; 71712027Sjungma@eit.uni-kl.deconst char SC_ID_INTERNAL_ERROR_[] = "internal error"; 71812027Sjungma@eit.uni-kl.deconst char SC_ID_ASSERTION_FAILED_[] = "assertion failed"; 71912027Sjungma@eit.uni-kl.deconst char SC_ID_OUT_OF_BOUNDS_[] = "out of bounds"; 72012027Sjungma@eit.uni-kl.de 72112027Sjungma@eit.uni-kl.de#define DEFINE_MSG(id,n) \ 72212027Sjungma@eit.uni-kl.de { \ 72312027Sjungma@eit.uni-kl.de (id), \ 72412027Sjungma@eit.uni-kl.de 0u, {0u}, /* actions */ \ 72512027Sjungma@eit.uni-kl.de 0u, {0u}, 0u, /* limits */ \ 72612027Sjungma@eit.uni-kl.de 0u, {0u}, NULL, /* call counters */ \ 72712027Sjungma@eit.uni-kl.de n \ 72812027Sjungma@eit.uni-kl.de } 72912027Sjungma@eit.uni-kl.de 73012027Sjungma@eit.uni-kl.destatic sc_msg_def default_msgs[] = { 73112027Sjungma@eit.uni-kl.de DEFINE_MSG(SC_ID_REGISTER_ID_FAILED_, 800), 73212027Sjungma@eit.uni-kl.de DEFINE_MSG(SC_ID_UNKNOWN_ERROR_, 0), 73312027Sjungma@eit.uni-kl.de DEFINE_MSG(SC_ID_WITHOUT_MESSAGE_, 1), 73412027Sjungma@eit.uni-kl.de DEFINE_MSG(SC_ID_NOT_IMPLEMENTED_, 2), 73512027Sjungma@eit.uni-kl.de DEFINE_MSG(SC_ID_INTERNAL_ERROR_, 3), 73612027Sjungma@eit.uni-kl.de DEFINE_MSG(SC_ID_ASSERTION_FAILED_, 4), 73712027Sjungma@eit.uni-kl.de DEFINE_MSG(SC_ID_OUT_OF_BOUNDS_, 5) 73812027Sjungma@eit.uni-kl.de}; 73912027Sjungma@eit.uni-kl.de 74012027Sjungma@eit.uni-kl.desc_report_handler::msg_def_items sc_report_handler::msg_terminator = 74112027Sjungma@eit.uni-kl.de{ 74212027Sjungma@eit.uni-kl.de default_msgs, 74312027Sjungma@eit.uni-kl.de sizeof(default_msgs)/sizeof(*default_msgs), 74412027Sjungma@eit.uni-kl.de false, 74512027Sjungma@eit.uni-kl.de NULL 74612027Sjungma@eit.uni-kl.de}; 74712027Sjungma@eit.uni-kl.de 74812027Sjungma@eit.uni-kl.de} // namespace sc_core 74912027Sjungma@eit.uni-kl.de 75012027Sjungma@eit.uni-kl.de// $Log: sc_report_handler.cpp,v $ 75112027Sjungma@eit.uni-kl.de// Revision 1.9 2011/08/29 18:04:32 acg 75212027Sjungma@eit.uni-kl.de// Philipp A. Hartmann: miscellaneous clean ups. 75312027Sjungma@eit.uni-kl.de// 75412027Sjungma@eit.uni-kl.de// Revision 1.8 2011/08/26 20:46:19 acg 75512027Sjungma@eit.uni-kl.de// Andy Goodrich: moved the modification log to the end of the file to 75612027Sjungma@eit.uni-kl.de// eliminate source line number skew when check-ins are done. 75712027Sjungma@eit.uni-kl.de// 75812027Sjungma@eit.uni-kl.de// Revision 1.7 2011/08/07 19:08:08 acg 75912027Sjungma@eit.uni-kl.de// Andy Goodrich: moved logs to end of file so line number synching works 76012027Sjungma@eit.uni-kl.de// better between versions. 76112027Sjungma@eit.uni-kl.de// 76212027Sjungma@eit.uni-kl.de// Revision 1.6 2011/08/07 18:56:03 acg 76312027Sjungma@eit.uni-kl.de// Philipp A. Hartmann: added cast to ? : to eliminate clang warning message. 76412027Sjungma@eit.uni-kl.de// 76512027Sjungma@eit.uni-kl.de// Revision 1.5 2011/03/23 16:16:49 acg 76612027Sjungma@eit.uni-kl.de// Andy Goodrich: finish message verbosity support. 76712027Sjungma@eit.uni-kl.de// 76812027Sjungma@eit.uni-kl.de// Revision 1.4 2011/02/18 20:38:44 acg 76912027Sjungma@eit.uni-kl.de// Andy Goodrich: Updated Copyright notice. 77012027Sjungma@eit.uni-kl.de// 77112027Sjungma@eit.uni-kl.de// Revision 1.3 2011/02/11 13:25:55 acg 77212027Sjungma@eit.uni-kl.de// Andy Goodrich: Philipp's changes for sc_unwind_exception. 77312027Sjungma@eit.uni-kl.de// 77412027Sjungma@eit.uni-kl.de// Revision 1.2 2011/02/01 23:02:05 acg 77512027Sjungma@eit.uni-kl.de// Andy Goodrich: IEEE 1666 2011 changes. 77612027Sjungma@eit.uni-kl.de// 77712027Sjungma@eit.uni-kl.de// Revision 1.1.1.1 2006/12/15 20:20:06 acg 77812027Sjungma@eit.uni-kl.de// SystemC 2.3 77912027Sjungma@eit.uni-kl.de// 78012027Sjungma@eit.uni-kl.de// Revision 1.7 2006/05/26 20:35:52 acg 78112027Sjungma@eit.uni-kl.de// Andy Goodrich: removed debug message that should not have been left in. 78212027Sjungma@eit.uni-kl.de// 78312027Sjungma@eit.uni-kl.de// Revision 1.6 2006/03/21 00:00:37 acg 78412027Sjungma@eit.uni-kl.de// Andy Goodrich: changed name of sc_get_current_process_base() to be 78512027Sjungma@eit.uni-kl.de// sc_get_current_process_b() since its returning an sc_process_b instance. 78612027Sjungma@eit.uni-kl.de// 78712027Sjungma@eit.uni-kl.de// Revision 1.5 2006/01/31 21:42:07 acg 78812027Sjungma@eit.uni-kl.de// Andy Goodrich: Added checks for SC_DEPRECATED_WARNINGS being defined as 78912027Sjungma@eit.uni-kl.de// DISABLED. If so, we turn off the /IEEE_Std_1666/deprecated message group. 79012027Sjungma@eit.uni-kl.de// 79112027Sjungma@eit.uni-kl.de// Revision 1.4 2006/01/26 21:08:17 acg 79212027Sjungma@eit.uni-kl.de// Andy Goodrich: conversion to use sc_is_running instead of deprecated 79312027Sjungma@eit.uni-kl.de// sc_simcontext::is_running() 79412027Sjungma@eit.uni-kl.de// 79512027Sjungma@eit.uni-kl.de// Revision 1.3 2006/01/13 18:53:11 acg 79612027Sjungma@eit.uni-kl.de// Andy Goodrich: Added $Log command so that CVS comments are reproduced in 79712027Sjungma@eit.uni-kl.de// the source. 79812027Sjungma@eit.uni-kl.de 79912027Sjungma@eit.uni-kl.de// Taf! 800