<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <title>SDTS_AL: </title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body> <!-- Generated by Doxygen 1.6.2-20100208 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li class="current"><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul> </div> </div> <div class="contents"> <div class="fragment"><pre class="fragment"><span class="comment">/* ****************************************************************************</span> <span class="comment"> * $Id: 8211view.cpp 10645 2007-01-18 02:22:39Z warmerdam $</span> <span class="comment"> *</span> <span class="comment"> * Project: SDTS Translator</span> <span class="comment"> * Purpose: Example program dumping data in 8211 data to stdout.</span> <span class="comment"> * Author: Frank Warmerdam, warmerdam@pobox.com</span> <span class="comment"> *</span> <span class="comment"> ******************************************************************************</span> <span class="comment"> * Copyright (c) 1999, Frank Warmerdam</span> <span class="comment"> *</span> <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span> <span class="comment"> * copy of this software and associated documentation files (the "Software"),</span> <span class="comment"> * to deal in the Software without restriction, including without limitation</span> <span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span> <span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span> <span class="comment"> * Software is furnished to do so, subject to the following conditions:</span> <span class="comment"> *</span> <span class="comment"> * The above copyright notice and this permission notice shall be included</span> <span class="comment"> * in all copies or substantial portions of the Software.</span> <span class="comment"> *</span> <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS</span> <span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span> <span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL</span> <span class="comment"> * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span> <span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span> <span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span> <span class="comment"> * DEALINGS IN THE SOFTWARE.</span> <span class="comment"> ****************************************************************************/</span> <span class="preprocessor">#include <stdio.h></span> <span class="preprocessor">#include "iso8211.h"</span> CPL_CVSID(<span class="stringliteral">"$Id: 8211view.cpp 10645 2007-01-18 02:22:39Z warmerdam $"</span>); <span class="keyword">static</span> <span class="keywordtype">void</span> ViewRecordField( <a class="code" href="classDDFField.html">DDFField</a> * poField ); <span class="keyword">static</span> <span class="keywordtype">int</span> ViewSubfield( <a class="code" href="classDDFSubfieldDefn.html">DDFSubfieldDefn</a> *poSFDefn, <span class="keyword">const</span> <span class="keywordtype">char</span> * pachFieldData, <span class="keywordtype">int</span> nBytesRemaining ); <span class="comment">/* **********************************************************************/</span> <span class="comment">/* main() */</span> <span class="comment">/* **********************************************************************/</span> <span class="keywordtype">int</span> main( <span class="keywordtype">int</span> nArgc, <span class="keywordtype">char</span> ** papszArgv ) { <a class="code" href="classDDFModule.html">DDFModule</a> oModule; <span class="keyword">const</span> <span class="keywordtype">char</span> *pszFilename = NULL; <span class="keywordtype">int</span> bFSPTHack = FALSE; <span class="keywordflow">for</span>( <span class="keywordtype">int</span> iArg = 1; iArg < nArgc; iArg++ ) { <span class="keywordflow">if</span>( EQUAL(papszArgv[iArg],<span class="stringliteral">"-fspt_repeating"</span>) ) bFSPTHack = TRUE; <span class="keywordflow">else</span> pszFilename = papszArgv[iArg]; } <span class="keywordflow">if</span>( pszFilename == NULL ) { printf( <span class="stringliteral">"Usage: 8211view filename\n"</span> ); exit( 1 ); } <span class="comment">/* -------------------------------------------------------------------- */</span> <span class="comment">/* Open the file. Note that by default errors are reported to */</span> <span class="comment">/* stderr, so we don't bother doing it ourselves. */</span> <span class="comment">/* -------------------------------------------------------------------- */</span> <span class="keywordflow">if</span>( !oModule.<a class="code" href="classDDFModule.html#af4ffa6d8f0d6f06221b94ff8082adf43">Open</a>( pszFilename ) ) { exit( 1 ); } <span class="keywordflow">if</span>( bFSPTHack ) { <a class="code" href="classDDFFieldDefn.html">DDFFieldDefn</a> *poFSPT = oModule.<a class="code" href="classDDFModule.html#a46ac8b2349e89aee4e38871fc9ae7e12">FindFieldDefn</a>( <span class="stringliteral">"FSPT"</span> ); <span class="keywordflow">if</span>( poFSPT == NULL ) fprintf( stderr, <span class="stringliteral">"unable to find FSPT field to set repeating flag.\n"</span> ); <span class="keywordflow">else</span> poFSPT-><a class="code" href="classDDFFieldDefn.html#ab9a007019110ddd2bedc968a5a7ba0ff">SetRepeatingFlag</a>( TRUE ); } <span class="comment">/* -------------------------------------------------------------------- */</span> <span class="comment">/* Loop reading records till there are none left. */</span> <span class="comment">/* -------------------------------------------------------------------- */</span> <a class="code" href="classDDFRecord.html">DDFRecord</a> *poRecord; <span class="keywordtype">int</span> iRecord = 0; <span class="keywordflow">while</span>( (poRecord = oModule.<a class="code" href="classDDFModule.html#adc0cb91dc1b1880b73d2dfacc57e2516">ReadRecord</a>()) != NULL ) { printf( <span class="stringliteral">"Record %d (%d bytes)\n"</span>, ++iRecord, poRecord-><a class="code" href="classDDFRecord.html#a46e99da99de578ae02d8d2a07b0a34c8">GetDataSize</a>() ); <span class="comment">/* ------------------------------------------------------------ */</span> <span class="comment">/* Loop over each field in this particular record. */</span> <span class="comment">/* ------------------------------------------------------------ */</span> <span class="keywordflow">for</span>( <span class="keywordtype">int</span> iField = 0; iField < poRecord-><a class="code" href="classDDFRecord.html#ab4a918565fea347e5bcf0aea8806d048">GetFieldCount</a>(); iField++ ) { <a class="code" href="classDDFField.html">DDFField</a> *poField = poRecord-><a class="code" href="classDDFRecord.html#a304aff436017b95527a0d6df2c1820ee">GetField</a>( iField ); ViewRecordField( poField ); } } } <span class="comment">/* **********************************************************************/</span> <span class="comment">/* ViewRecordField() */</span> <span class="comment">/* */</span> <span class="comment">/* Dump the contents of a field instance in a record. */</span> <span class="comment">/* **********************************************************************/</span> <span class="keyword">static</span> <span class="keywordtype">void</span> ViewRecordField( <a class="code" href="classDDFField.html">DDFField</a> * poField ) { <span class="keywordtype">int</span> nBytesRemaining; <span class="keyword">const</span> <span class="keywordtype">char</span> *pachFieldData; <a class="code" href="classDDFFieldDefn.html">DDFFieldDefn</a> *poFieldDefn = poField-><a class="code" href="classDDFField.html#ae2dc98dc9f24cd548a8b0c7461f4179d">GetFieldDefn</a>(); <span class="comment">// Report general information about the field.</span> printf( <span class="stringliteral">" Field %s: %s\n"</span>, poFieldDefn-><a class="code" href="classDDFFieldDefn.html#a74b88cf7b76eea9fca01f3034a60a375">GetName</a>(), poFieldDefn-><a class="code" href="classDDFFieldDefn.html#a4b40f35561f8a4e4d2d5442cca7a9058">GetDescription</a>() ); <span class="comment">// Get pointer to this fields raw data. We will move through</span> <span class="comment">// it consuming data as we report subfield values.</span> pachFieldData = poField-><a class="code" href="classDDFField.html#a1e7577f4577b917eaeb0fa06702367c4">GetData</a>(); nBytesRemaining = poField-><a class="code" href="classDDFField.html#a10da0719702d80b6ce7a2ebc0a756483">GetDataSize</a>(); <span class="comment">/* -------------------------------------------------------- */</span> <span class="comment">/* Loop over the repeat count for this fields */</span> <span class="comment">/* subfields. The repeat count will almost */</span> <span class="comment">/* always be one. */</span> <span class="comment">/* -------------------------------------------------------- */</span> <span class="keywordtype">int</span> iRepeat; <span class="keywordflow">for</span>( iRepeat = 0; iRepeat < poField-><a class="code" href="classDDFField.html#af192de6f3189570fd6dfb31c8fd091ce">GetRepeatCount</a>(); iRepeat++ ) { <span class="comment">/* -------------------------------------------------------- */</span> <span class="comment">/* Loop over all the subfields of this field, advancing */</span> <span class="comment">/* the data pointer as we consume data. */</span> <span class="comment">/* -------------------------------------------------------- */</span> <span class="keywordtype">int</span> iSF; <span class="keywordflow">for</span>( iSF = 0; iSF < poFieldDefn-><a class="code" href="classDDFFieldDefn.html#ab0aca50e5913eda6ae7f058ae3e20971">GetSubfieldCount</a>(); iSF++ ) { <a class="code" href="classDDFSubfieldDefn.html">DDFSubfieldDefn</a> *poSFDefn = poFieldDefn-><a class="code" href="classDDFFieldDefn.html#ae9e1df79781078301f83fd09f713e416">GetSubfield</a>( iSF ); <span class="keywordtype">int</span> nBytesConsumed; nBytesConsumed = ViewSubfield( poSFDefn, pachFieldData, nBytesRemaining ); nBytesRemaining -= nBytesConsumed; pachFieldData += nBytesConsumed; } } } <span class="comment">/* **********************************************************************/</span> <span class="comment">/* ViewSubfield() */</span> <span class="comment">/* **********************************************************************/</span> <span class="keyword">static</span> <span class="keywordtype">int</span> ViewSubfield( <a class="code" href="classDDFSubfieldDefn.html">DDFSubfieldDefn</a> *poSFDefn, <span class="keyword">const</span> <span class="keywordtype">char</span> * pachFieldData, <span class="keywordtype">int</span> nBytesRemaining ) { <span class="keywordtype">int</span> nBytesConsumed = 0; <span class="keywordflow">switch</span>( poSFDefn-><a class="code" href="classDDFSubfieldDefn.html#ad5bf003ff800ff8acaee62718ae72472">GetType</a>() ) { <span class="keywordflow">case</span> DDFInt: <span class="keywordflow">if</span>( poSFDefn->GetBinaryFormat() == DDFSubfieldDefn::UInt ) printf( <span class="stringliteral">" %s = %u\n"</span>, poSFDefn-><a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>(), poSFDefn-><a class="code" href="classDDFSubfieldDefn.html#a32ecb1b1e3da05e500049e4925dd20e5">ExtractIntData</a>( pachFieldData, nBytesRemaining, &nBytesConsumed ) ); <span class="keywordflow">else</span> printf( <span class="stringliteral">" %s = %d\n"</span>, poSFDefn-><a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>(), poSFDefn-><a class="code" href="classDDFSubfieldDefn.html#a32ecb1b1e3da05e500049e4925dd20e5">ExtractIntData</a>( pachFieldData, nBytesRemaining, &nBytesConsumed ) ); <span class="keywordflow">break</span>; <span class="keywordflow">case</span> DDFFloat: printf( <span class="stringliteral">" %s = %f\n"</span>, poSFDefn-><a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>(), poSFDefn-><a class="code" href="classDDFSubfieldDefn.html#a67fddf36a98106bf445ea49811812b00">ExtractFloatData</a>( pachFieldData, nBytesRemaining, &nBytesConsumed ) ); <span class="keywordflow">break</span>; <span class="keywordflow">case</span> DDFString: printf( <span class="stringliteral">" %s = `%s'\n"</span>, poSFDefn-><a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>(), poSFDefn-><a class="code" href="classDDFSubfieldDefn.html#ad95ecafda6bcf87437030c273eb06643">ExtractStringData</a>( pachFieldData, nBytesRemaining, &nBytesConsumed ) ); <span class="keywordflow">break</span>; <span class="keywordflow">case</span> DDFBinaryString: { <span class="keywordtype">int</span> i; <span class="comment">//rjensen 19-Feb-2002 5 integer variables to decode NAME and LNAM</span> <span class="keywordtype">int</span> vrid_rcnm=0; <span class="keywordtype">int</span> vrid_rcid=0; <span class="keywordtype">int</span> foid_agen=0; <span class="keywordtype">int</span> foid_find=0; <span class="keywordtype">int</span> foid_fids=0; GByte *pabyBString = (GByte *) poSFDefn-><a class="code" href="classDDFSubfieldDefn.html#ad95ecafda6bcf87437030c273eb06643">ExtractStringData</a>( pachFieldData, nBytesRemaining, &nBytesConsumed ); printf( <span class="stringliteral">" %s = 0x"</span>, poSFDefn-><a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>() ); <span class="keywordflow">for</span>( i = 0; i < MIN(nBytesConsumed,24); i++ ) printf( <span class="stringliteral">"%02X"</span>, pabyBString[i] ); <span class="keywordflow">if</span>( nBytesConsumed > 24 ) printf( <span class="stringliteral">"%s"</span>, <span class="stringliteral">"..."</span> ); <span class="comment">// rjensen 19-Feb-2002 S57 quick hack. decode NAME and LNAM bitfields</span> <span class="keywordflow">if</span> ( EQUAL(poSFDefn-><a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>(),<span class="stringliteral">"NAME"</span>) ) { vrid_rcnm=pabyBString[0]; vrid_rcid=pabyBString[1] + (pabyBString[2]*256)+ (pabyBString[3]*65536)+ (pabyBString[4]*16777216); printf(<span class="stringliteral">"\tVRID RCNM = %d,RCID = %u"</span>,vrid_rcnm,vrid_rcid); } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( EQUAL(poSFDefn-><a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>(),<span class="stringliteral">"LNAM"</span>) ) { 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(<span class="stringliteral">"\tFOID AGEN = %u,FIDN = %u,FIDS = %u"</span>, foid_agen,foid_find,foid_fids); } printf( <span class="stringliteral">"\n"</span> ); } <span class="keywordflow">break</span>; } <span class="keywordflow">return</span> nBytesConsumed; } </pre></div> </div> <hr> Generated for GDAL by <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.6.2-20100208. </body> </html>