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