diff options
| author | Mark Wenning <wenning@us.ibm.com> | 2011-10-20 11:17:06 -0500 |
|---|---|---|
| committer | Mark W. Wenning <wenning@us.ibm.com> | 2011-11-02 10:55:48 -0500 |
| commit | 75a2f91534b9d3450ff450e63914bde9cb39514b (patch) | |
| tree | debe069486911e560c819242a77ed6789234e9b0 /src/usr/errl/parser/errlusrparser.C | |
| parent | b72ee9b1f333be7847d694bfa2c5fbafa2e4c487 (diff) | |
| download | blackbird-hostboot-75a2f91534b9d3450ff450e63914bde9cb39514b.tar.gz blackbird-hostboot-75a2f91534b9d3450ff450e63914bde9cb39514b.zip | |
RTC3964: x86 Support for UserDetails
- first commit
- errlparserbase and errluserparser
- need linker step for userdetails libs
- final merge
Change-Id: I32daae8de483616f20e66581f4e8f3de0dc98257
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/467
Tested-by: Jenkins Server
Reviewed-by: Monte K. Copeland <copelanm@us.ibm.com>
Diffstat (limited to 'src/usr/errl/parser/errlusrparser.C')
| -rwxr-xr-x | src/usr/errl/parser/errlusrparser.C | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/src/usr/errl/parser/errlusrparser.C b/src/usr/errl/parser/errlusrparser.C new file mode 100755 index 000000000..569b2202d --- /dev/null +++ b/src/usr/errl/parser/errlusrparser.C @@ -0,0 +1,185 @@ +// IBM_PROLOG_BEGIN_TAG +// This is an automatically generated prolog. +// +// $Source: src/usr/errl/parser/errlusrparser.C $ +// +// IBM CONFIDENTIAL +// +// COPYRIGHT International Business Machines Corp. 2011 +// +// p1 +// +// Object Code Only (OCO) source materials +// Licensed Internal Code Source Materials +// IBM HostBoot Licensed Internal Code +// +// The source code for this program is not published or other- +// wise divested of its trade secrets, irrespective of what has +// been deposited with the U.S. Copyright Office. +// +// Origin: 30 +// +// IBM_PROLOG_END +/** + * @file errlusrparser.C + * + * @brief <Brief Description of this file> + * + * <Detailed description of what this file does, functions it includes, + * etc,> +*/ + +/*****************************************************************************/ +// I n c l u d e s +/*****************************************************************************/ +#include <cstring> +#include <ctype.h> +#include <cstdarg> + +#include <errl/parser/errlusrparser.H> + +/*****************************************************************************/ +// Constant string defines +/*****************************************************************************/ +const char * ERRL_MSG_UNKNOWN = "Unknown"; +const char * ERRL_MSG_BOOL_TRUE = "True"; +const char * ERRL_MSG_BOOL_FALSE = "False"; +const char * ERRL_MSG_STR_ENABLED = "Enabled"; +const char * ERRL_MSG_STR_DISABLED = "Disabled"; + + +/*****************************************************************************/ +// Send the label & return # of chars printed +/*****************************************************************************/ +static int PrintLabel( + FILE * i_stream, + const char * i_label + ) +{ + if ( ! i_label ) + { + i_label = ""; + } + + return fprintf(i_stream,"| %-25.25s: ",i_label); +} + + +/*****************************************************************************/ +// Regular string ( may be multiline ) +/*****************************************************************************/ +void ErrlUsrParser::PrintString( + const char * i_label, + const char * i_string + ) +{ + // Must make sure the string fits on the available width + int l_strlen = 0; + int l_printed = 0; + + + // Ensure String is valid + if ( i_string ) + { + l_strlen = strlen( i_string ); + } + + // Fake a blank string + if ( ! l_strlen ) + { + l_strlen = 1; + i_string = " "; + } + + // Print it out + while ( l_strlen > l_printed ) + { + // Leader ( label or blanks ) + PrintLabel( iv_Stream, i_label ); + + // label is only printed once + i_label = ""; + + l_printed += fprintf( + iv_Stream, + "%-50.50s", + i_string+l_printed + ); + + fprintf(iv_Stream,"|\n"); + } +} +/*****************************************************************************/ +// Numeric Print +/*****************************************************************************/ +void ErrlUsrParser::PrintNumber( + const char * i_label, + const char * i_fmt, + uint32_t i_value + ){ + ErrlParser::PrintNumber( i_label, i_fmt, i_value ); +} + + +/*****************************************************************************/ +// Hex Dump +/*****************************************************************************/ +void ErrlUsrParser::PrintHexDump( + const void * i_data, + uint32_t i_len + ) +{ + uint32_t i = 0 ; + uint32_t l_counter = 0; + uint32_t l_written; + uint8_t *l_data = (uint8_t*)i_data; + + while ( l_counter < i_len) + { + fprintf(iv_Stream,"| %08X ",l_counter); + + // Display 16 bytes in Hex with 2 spaces in between + l_written = 0; + for ( i = 0; i < 16 && l_counter < i_len; i++ ) + { + l_written += fprintf(iv_Stream,"%02X",l_data[l_counter++]); + + if ( ! ( l_counter % 4 ) ) + { + l_written += fprintf(iv_Stream," "); + } + } + + // Pad with spaces + fprintf(iv_Stream,"%-*c",43-l_written,' '); + + // Display ASCII -- fk1 + l_written = 0; + uint8_t l_char; + for ( ; i > 0 ; i-- ) + { + l_char = l_data[ l_counter-i ]; + + if ( isprint( l_char ) && + ( l_char != '&' ) && + ( l_char != '<' ) && + ( l_char != '>' ) + ) + { + l_written += fprintf( iv_Stream,"%c",l_char ); + } + else + { + l_written += fprintf( iv_Stream,"." ); + } + } + + // Pad with spaces -- fk1 + fprintf( iv_Stream,"%-*c|\n",19-l_written,' ' ); + + + + } +} + + |

