2015-02-26 15:02:31 +00:00
|
|
|
|
|
|
|
#include <string.h>
|
|
|
|
#include <sstream>
|
|
|
|
|
2015-06-01 15:28:29 +00:00
|
|
|
#include "trick/MessageLCout.hh"
|
2015-02-26 15:02:31 +00:00
|
|
|
|
|
|
|
Trick::MessageLCout::MessageLCout() {
|
|
|
|
enabled = 1 ;
|
|
|
|
subs['a'] = "4" ;
|
|
|
|
subs['e'] = "3" ;
|
|
|
|
subs['f'] = "ph" ;
|
|
|
|
subs['g'] = "9" ;
|
|
|
|
subs['l'] = "1" ;
|
|
|
|
subs['o'] = "0" ;
|
|
|
|
subs['s'] = "5" ;
|
|
|
|
subs['t'] = "7" ;
|
|
|
|
|
|
|
|
seed = 0 ;
|
|
|
|
|
|
|
|
name = "lcout" ;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Trick::MessageLCout::update( unsigned int level , std::string header , std::string message ) {
|
|
|
|
if (!enabled) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if ( level == 1337 ) {
|
|
|
|
std::string in_string ;
|
|
|
|
std::string temp_string ;
|
|
|
|
unsigned int ii , jj ;
|
|
|
|
|
|
|
|
in_string = header + message ;
|
|
|
|
|
|
|
|
for ( ii = 0 ; ii < in_string.size() ; ii++ ) {
|
|
|
|
seed += in_string[ii] * ii ;
|
|
|
|
}
|
|
|
|
srandom(seed) ;
|
|
|
|
for ( ii = 0 ; ii < in_string.size() ; ii++ ) {
|
|
|
|
if ( random() < RAND_MAX * 0.3 ) {
|
|
|
|
if ( subs.find((char)tolower(in_string[ii])) != subs.end()) {
|
|
|
|
//temp_string += subs[(char)tolower(in_string[ii])] ;
|
|
|
|
std::string replace_str = subs[(char)tolower(in_string[ii])] ;
|
|
|
|
for ( jj = 0 ; jj < replace_str.size() ; jj++ ) {
|
|
|
|
if ( random() < RAND_MAX * 0.5 ) {
|
|
|
|
temp_string += toupper(replace_str[jj]) ;
|
|
|
|
} else {
|
|
|
|
temp_string += tolower(replace_str[jj]) ;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
temp_string += in_string[ii] ;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if ( random() < RAND_MAX * 0.3 ) {
|
|
|
|
temp_string += toupper(in_string[ii]) ;
|
|
|
|
} else {
|
|
|
|
temp_string += tolower(in_string[ii]) ;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
std::cout << temp_string << std::flush ;
|
|
|
|
} else if ( level < 100 ) {
|
|
|
|
// Building the final string in a temporary stream ensures an automic call to cout, which prevents
|
|
|
|
// multithreaded sims from interleaving header and message elements.
|
|
|
|
std::ostringstream oss;
|
|
|
|
oss << header << message ;
|
|
|
|
std::cout << oss.str() << std::flush ;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|