void HFAField::DumpInstValue( FILE *fpOut, GByte *pabyData, GUInt32 nDataOffset, int nDataSize, const char *pszPrefix ) { int iEntry, nEntries; void *pReturn; char szLongFieldName[256]; nEntries = GetInstCount( pabyData, nDataSize ); /* -------------------------------------------------------------------- */ /* Special case for arrays of chars or uchars which are printed */ /* as a string. */ /* -------------------------------------------------------------------- */ if( (chItemType == 'c' || chItemType == 'C') && nEntries > 0 ) { if( ExtractInstValue( NULL, 0, pabyData, nDataOffset, nDataSize, 's', &pReturn ) ) VSIFPrintf( fpOut, "%s%s = `%s'\n", pszPrefix, pszFieldName, (char *) pReturn ); else VSIFPrintf( fpOut, "%s%s = (access failed)\n", pszPrefix, pszFieldName ); return; } /* -------------------------------------------------------------------- */ /* For BASEDATA objects, we want to first dump their dimension */ /* and type. */ /* -------------------------------------------------------------------- */ if( chItemType == 'b' ) { int nDataType, nRows, nColumns; int bSuccess = ExtractInstValue( NULL, -3, pabyData, nDataOffset, nDataSize, 'i', &nDataType ); if (bSuccess) { ExtractInstValue( NULL, -2, pabyData, nDataOffset, nDataSize, 'i', &nColumns ); ExtractInstValue( NULL, -1, pabyData, nDataOffset, nDataSize, 'i', &nRows ); VSIFPrintf( fpOut, "%sBASEDATA(%s): %dx%d of %s\n", pszPrefix, pszFieldName, nColumns, nRows, HFAGetDataTypeName( nDataType ) ); } else { VSIFPrintf( fpOut, "%sBASEDATA(%s): empty\n", pszPrefix, pszFieldName ); } } /* -------------------------------------------------------------------- */ /* Dump each entry in the field array. */ /* -------------------------------------------------------------------- */ for( iEntry = 0; iEntry < MIN(MAX_ENTRY_REPORT,nEntries); iEntry++ ) { if( nEntries == 1 ) VSIFPrintf( fpOut, "%s%s = ", pszPrefix, pszFieldName ); else VSIFPrintf( fpOut, "%s%s[%d] = ", pszPrefix, pszFieldName, iEntry ); switch( chItemType ) { case 'f': case 'd': { double dfValue; if( ExtractInstValue( NULL, iEntry, pabyData, nDataOffset, nDataSize, 'd', &dfValue ) ) VSIFPrintf( fpOut, "%f\n", dfValue ); else VSIFPrintf( fpOut, "(access failed)\n" ); } break; case 'b': { double dfValue; if( ExtractInstValue( NULL, iEntry, pabyData, nDataOffset, nDataSize, 'd', &dfValue ) ) VSIFPrintf( fpOut, "%s%.15g\n", pszPrefix, dfValue ); else VSIFPrintf( fpOut, "%s(access failed)\n", pszPrefix ); } break; case 'e': if( ExtractInstValue( NULL, iEntry, pabyData, nDataOffset, nDataSize, 's', &pReturn ) ) VSIFPrintf( fpOut, "%s\n", (char *) pReturn ); else VSIFPrintf( fpOut, "(access failed)\n" ); break; case 'o': if( !ExtractInstValue( NULL, iEntry, pabyData, nDataOffset, nDataSize, 'p', &pReturn ) ) { VSIFPrintf( fpOut, "(access failed)\n" ); } else { int nByteOffset; VSIFPrintf( fpOut, "\n" ); nByteOffset = ((GByte *) pReturn) - pabyData; sprintf( szLongFieldName, "%s ", pszPrefix ); if( poItemObjectType ) poItemObjectType->DumpInstValue( fpOut, pabyData + nByteOffset, nDataOffset + nByteOffset, nDataSize - nByteOffset, szLongFieldName ); } break; default: { GInt32 nIntValue; if( ExtractInstValue( NULL, iEntry, pabyData, nDataOffset, nDataSize, 'i', &nIntValue ) ) VSIFPrintf( fpOut, "%d\n", nIntValue ); else VSIFPrintf( fpOut, "(access failed)\n" ); } break; } } if( nEntries > MAX_ENTRY_REPORT ) printf( "%s ... remaining instances omitted ...\n", pszPrefix ); if( nEntries == 0 ) VSIFPrintf( fpOut, "%s%s = (no values)\n", pszPrefix, pszFieldName ); }
void HFAField::DumpInstValue( FILE *fpOut, GByte *pabyData, int nDataOffset, int nDataSize, const char *pszPrefix ) { int iEntry, nEntries; void *pReturn; char szLongFieldName[256]; nEntries = GetInstCount( pabyData ); /* -------------------------------------------------------------------- */ /* Special case for arrays of chars or uchars which are printed */ /* as a string. */ /* -------------------------------------------------------------------- */ if( (chItemType == 'c' || chItemType == 'C') && nEntries > 0 ) { pReturn = ExtractInstValue( NULL, 0, pabyData, nDataOffset, nDataSize, 's' ); if( pReturn != NULL ) VSIFPrintf( fpOut, "%s%s = `%s'\n", pszPrefix, pszFieldName, (char *) pReturn ); else VSIFPrintf( fpOut, "%s%s = (access failed)\n", pszPrefix, pszFieldName ); return; } /* -------------------------------------------------------------------- */ /* Dump each entry in the field array. */ /* -------------------------------------------------------------------- */ for( iEntry = 0; iEntry < MIN(8,nEntries); iEntry++ ) { if( nEntries == 1 ) VSIFPrintf( fpOut, "%s%s = ", pszPrefix, pszFieldName ); else VSIFPrintf( fpOut, "%s%s[%d] = ", pszPrefix, pszFieldName, iEntry ); switch( chItemType ) { case 'f': case 'd': pReturn = ExtractInstValue( NULL, iEntry, pabyData, nDataOffset, nDataSize, 'd' ); if( pReturn != NULL ) VSIFPrintf( fpOut, "%f\n", *((double *) pReturn) ); else VSIFPrintf( fpOut, "(access failed)\n" ); break; case 'b': VSIFPrintf( fpOut, "(basedata)\n" ); break; case 'e': pReturn = ExtractInstValue( NULL, iEntry, pabyData, nDataOffset, nDataSize, 's' ); if( pReturn != NULL ) VSIFPrintf( fpOut, "%s\n", (char *) pReturn ); else VSIFPrintf( fpOut, "(access failed)\n" ); break; case 'o': pReturn = ExtractInstValue( NULL, iEntry, pabyData, nDataOffset, nDataSize, 'p' ); if( pReturn == NULL ) { VSIFPrintf( fpOut, "(access failed)\n" ); } else { int nByteOffset; VSIFPrintf( fpOut, "\n" ); nByteOffset = ((GByte *) pReturn) - pabyData; sprintf( szLongFieldName, "%s ", pszPrefix ); poItemObjectType->DumpInstValue( fpOut, pabyData + nByteOffset, nDataOffset + nByteOffset, nDataSize - nByteOffset, szLongFieldName ); } break; default: pReturn = ExtractInstValue( NULL, iEntry, pabyData, nDataOffset, nDataSize, 'i' ); if( pReturn != NULL ) VSIFPrintf( fpOut, "%d\n", *((int *) pReturn) ); else VSIFPrintf( fpOut, "(access failed)\n" ); break; } } if( nEntries > 8 ) printf( "%s ... remaining instances omitted ...\n", pszPrefix ); if( nEntries == 0 ) VSIFPrintf( fpOut, "%s%s = (no values)\n", pszPrefix, pszFieldName ); }