From: <cn...@us...> - 2009-08-18 22:26:58
|
Revision: 494 http://hgengine.svn.sourceforge.net/hgengine/?rev=494&view=rev Author: cnlohr Date: 2009-08-18 22:26:48 +0000 (Tue, 18 Aug 2009) Log Message: ----------- add the C formatting stuff ( \n => (newline) ) Modified Paths: -------------- Mercury2/src/MercuryUtil.cpp Mercury2/src/MercuryUtil.h Modified: Mercury2/src/MercuryUtil.cpp =================================================================== --- Mercury2/src/MercuryUtil.cpp 2009-08-18 22:25:48 UTC (rev 493) +++ Mercury2/src/MercuryUtil.cpp 2009-08-18 22:26:48 UTC (rev 494) @@ -4,6 +4,85 @@ #include <MercuryVector.h> #include <MercuryBacktrace.h> +MString ConvertToCFormat( const MString & ncf ) +{ + MString ret; + const char* nccf = ncf.c_str(); + + for ( int i = 0; (unsigned)i < ncf.length(); i++ ) + { + switch ( nccf[i] ) + { + case '\t': ret += "\\t"; break; + case '\n': ret += "\\n"; break; + case '\r': ret += "\\r"; break; + case '\f': ret += "\\f"; break; + case '\b': ret += "\\b"; break; + case '\\': ret += "\\\\"; break; + case '\'': ret += "\\\'"; break; + case '\"': ret += "\\\""; break; + default: + if( nccf[i] < 32 ) + { + ret += "\\"; + ret += ((unsigned char)nccf[i]/64)%8 + '0'; + ret += ((unsigned char)nccf[i]/8)%8 + '0'; + ret += (unsigned char)nccf[i]%8 + '0'; + } else + ret += nccf[i]; + } + } + return ret; +} + +MString ConvertToUnformatted( const MString & cf ) +{ + MString ret; + const char* ccf = cf.c_str(); + + for ( int i = 0; (unsigned)i < cf.length(); i++ ) + { + switch ( ccf[i] ) + { + case '\\': + i++; + if ( (unsigned)i >= cf.length() ) + return ret; + switch ( ccf[i] ) + { + case 't': ret += '\t'; break; + case 'n': ret += '\n'; break; + case 'r': ret += '\r'; break; + case 'f': ret += '\f'; break; + case 'b': ret += '\b'; break; + case '\\': ret += '\\'; break; + case '\'': ret += '\''; break; + case '\"': ret += '\"'; break; + default: + if( ccf[i] >= '0' && ccf[i] <= '7' ) + { + char c = ccf[i] - '0'; + if( ccf[i+1] >= '0' && ccf[i+1] <= '8' ) + { + i++; + c = c * 8 + ccf[i] - '0'; + } + if( ccf[i+1] >= '0' && ccf[i+1] <= '8' ) + { + i++; + c = c * 8 + ccf[i] - '0'; + } + ret += c; + } + } + break; + default: + ret += ccf[i]; + } + } + return ret; +} + MString ToUpper(const MString& s) { MString t = s; Modified: Mercury2/src/MercuryUtil.h =================================================================== --- Mercury2/src/MercuryUtil.h 2009-08-18 22:25:48 UTC (rev 493) +++ Mercury2/src/MercuryUtil.h 2009-08-18 22:26:48 UTC (rev 494) @@ -124,7 +124,12 @@ ///Split given string into other strings using delimiters from termin void SplitStrings( const MString & in, MVector < MString > & out, const char * termin, const char * whitespace, long termlen, long wslen ); +///Convert string containing binary characters to C-style formatted string. +MString ConvertToCFormat( const MString & ncf ); +///Convert a C-style formatted string into it's binary string equivalent. +MString ConvertToUnformatted( const MString & cf ); + #endif /* Copyright (c) 2009, Joshua Allen and Charles Lohr This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |