#include <stdio.h>
#include "iso8211.h"
#include <algorithm>
CPL_CVSID("$Id: 8211view.cpp 36352 2016-11-20 22:31:49Z rouault $");
static void ViewRecordField(
DDFField * poField );
const char * pachFieldData,
int nBytesRemaining );
int main( int nArgc, char ** papszArgv )
{
const char *pszFilename = NULL;
int bFSPTHack = FALSE;
for( int iArg = 1; iArg < nArgc; iArg++ )
{
if( EQUAL(papszArgv[iArg],"-fspt_repeating") )
bFSPTHack = TRUE;
else
pszFilename = papszArgv[iArg];
}
if( pszFilename == NULL )
{
printf( "Usage: 8211view filename\n" );
exit( 1 );
}
if( !oModule.
Open( pszFilename ) )
{
exit( 1 );
}
if( bFSPTHack )
{
if( poFSPT == NULL )
fprintf( stderr,
"unable to find FSPT field to set repeating flag.\n" );
else
}
int iRecord = 0;
while( (poRecord = oModule.
ReadRecord()) != NULL )
{
printf( "Record %d (%d bytes)\n",
for(
int iField = 0; iField < poRecord->
GetFieldCount(); iField++ )
{
ViewRecordField( poField );
}
}
}
static void ViewRecordField(
DDFField * poField )
{
printf( " Field %s: %s\n",
const char *pachFieldData = poField->
GetData();
for(
int iRepeat = 0; iRepeat < poField->
GetRepeatCount(); iRepeat++ )
{
{
int nBytesConsumed =
ViewSubfield( poSFDefn, pachFieldData, nBytesRemaining );
nBytesRemaining -= nBytesConsumed;
pachFieldData += nBytesConsumed;
}
}
}
const char * pachFieldData,
int nBytesRemaining )
{
int nBytesConsumed = 0;
{
case DDFInt:
if( poSFDefn->GetBinaryFormat() == DDFSubfieldDefn::UInt )
printf( " %s = %u\n",
static_cast<unsigned int>(
&nBytesConsumed )) );
else
printf( " %s = %d\n",
&nBytesConsumed ) );
break;
case DDFFloat:
printf( " %s = %f\n",
&nBytesConsumed ) );
break;
case DDFString:
printf( " %s = `%s'\n",
&nBytesConsumed ) );
break;
case DDFBinaryString:
{
int i;
int vrid_rcnm=0;
int vrid_rcid=0;
int foid_agen=0;
int foid_find=0;
int foid_fids=0;
GByte *pabyBString = (GByte *)
&nBytesConsumed );
printf(
" %s = 0x", poSFDefn->
GetName() );
for( i = 0; i < std::min(nBytesConsumed, 24); i++ )
printf( "%02X", pabyBString[i] );
if( nBytesConsumed > 24 )
printf( "%s", "..." );
if ( EQUAL(poSFDefn->
GetName(),
"NAME") )
{
vrid_rcnm=pabyBString[0];
vrid_rcid=pabyBString[1] + (pabyBString[2]*256)+
(pabyBString[3]*65536)+ (pabyBString[4]*16777216);
printf("\tVRID RCNM = %d,RCID = %d",vrid_rcnm,vrid_rcid);
}
else if ( EQUAL(poSFDefn->
GetName(),
"LNAM") )
{
foid_agen=pabyBString[0] + (pabyBString[1]*256);
foid_find=pabyBString[2] + (pabyBString[3]*256)+
(pabyBString[4]*65536)+ (pabyBString[5]*16777216);
foid_fids=pabyBString[6] + (pabyBString[7]*256);
printf("\tFOID AGEN = %d,FIDN = %d,FIDS = %d",
foid_agen,foid_find,foid_fids);
}
printf( "\n" );
}
break;
}
return nBytesConsumed;
}