Sophie

Sophie

distrib > Fedora > 13 > i386 > by-pkgid > 7fd7c575020aa78a8e2e309ea8909f43 > files > 422

gdal-1.6.2-6.fc13.i686.rpm

<!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&nbsp;Page</span></a></li>
      <li class="current"><a href="pages.html"><span>Related&nbsp;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 &quot;Software&quot;),</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 &quot;AS IS&quot;, 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 &lt;stdio.h&gt;</span>
<span class="preprocessor">#include &quot;iso8211.h&quot;</span>

CPL_CVSID(<span class="stringliteral">&quot;$Id: 8211view.cpp 10645 2007-01-18 02:22:39Z warmerdam $&quot;</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 &lt; nArgc; iArg++ )
    {
        <span class="keywordflow">if</span>( EQUAL(papszArgv[iArg],<span class="stringliteral">&quot;-fspt_repeating&quot;</span>) )
            bFSPTHack = TRUE;
        <span class="keywordflow">else</span>
            pszFilename = papszArgv[iArg];
    }

    <span class="keywordflow">if</span>( pszFilename == NULL )
    {
        printf( <span class="stringliteral">&quot;Usage: 8211view filename\n&quot;</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&#39;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">&quot;FSPT&quot;</span> );

        <span class="keywordflow">if</span>( poFSPT == NULL )
            fprintf( stderr,
                     <span class="stringliteral">&quot;unable to find FSPT field to set repeating flag.\n&quot;</span> );
        <span class="keywordflow">else</span>
            poFSPT-&gt;<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">&quot;Record %d (%d bytes)\n&quot;</span>,
                ++iRecord, poRecord-&gt;<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 &lt; poRecord-&gt;<a class="code" href="classDDFRecord.html#ab4a918565fea347e5bcf0aea8806d048">GetFieldCount</a>(); iField++ )
        {
            <a class="code" href="classDDFField.html">DDFField</a>    *poField = poRecord-&gt;<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-&gt;<a class="code" href="classDDFField.html#ae2dc98dc9f24cd548a8b0c7461f4179d">GetFieldDefn</a>();

    <span class="comment">// Report general information about the field.</span>
    printf( <span class="stringliteral">&quot;    Field %s: %s\n&quot;</span>,
            poFieldDefn-&gt;<a class="code" href="classDDFFieldDefn.html#a74b88cf7b76eea9fca01f3034a60a375">GetName</a>(), poFieldDefn-&gt;<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-&gt;<a class="code" href="classDDFField.html#a1e7577f4577b917eaeb0fa06702367c4">GetData</a>();
    nBytesRemaining = poField-&gt;<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 &lt; poField-&gt;<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 &lt; poFieldDefn-&gt;<a class="code" href="classDDFFieldDefn.html#ab0aca50e5913eda6ae7f058ae3e20971">GetSubfieldCount</a>(); iSF++ )
        {
            <a class="code" href="classDDFSubfieldDefn.html">DDFSubfieldDefn</a> *poSFDefn = poFieldDefn-&gt;<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-&gt;<a class="code" href="classDDFSubfieldDefn.html#ad5bf003ff800ff8acaee62718ae72472">GetType</a>() )
    {
      <span class="keywordflow">case</span> DDFInt:
        <span class="keywordflow">if</span>( poSFDefn-&gt;GetBinaryFormat() == DDFSubfieldDefn::UInt )
            printf( <span class="stringliteral">&quot;        %s = %u\n&quot;</span>,
                    poSFDefn-&gt;<a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>(),
                    poSFDefn-&gt;<a class="code" href="classDDFSubfieldDefn.html#a32ecb1b1e3da05e500049e4925dd20e5">ExtractIntData</a>( pachFieldData, nBytesRemaining,
                                              &amp;nBytesConsumed ) );
        <span class="keywordflow">else</span>
            printf( <span class="stringliteral">&quot;        %s = %d\n&quot;</span>,
                    poSFDefn-&gt;<a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>(),
                    poSFDefn-&gt;<a class="code" href="classDDFSubfieldDefn.html#a32ecb1b1e3da05e500049e4925dd20e5">ExtractIntData</a>( pachFieldData, nBytesRemaining,
                                              &amp;nBytesConsumed ) );
        <span class="keywordflow">break</span>;

      <span class="keywordflow">case</span> DDFFloat:
        printf( <span class="stringliteral">&quot;        %s = %f\n&quot;</span>,
                poSFDefn-&gt;<a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>(),
                poSFDefn-&gt;<a class="code" href="classDDFSubfieldDefn.html#a67fddf36a98106bf445ea49811812b00">ExtractFloatData</a>( pachFieldData, nBytesRemaining,
                                            &amp;nBytesConsumed ) );
        <span class="keywordflow">break</span>;

      <span class="keywordflow">case</span> DDFString:
        printf( <span class="stringliteral">&quot;        %s = `%s&#39;\n&quot;</span>,
                poSFDefn-&gt;<a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>(),
                poSFDefn-&gt;<a class="code" href="classDDFSubfieldDefn.html#ad95ecafda6bcf87437030c273eb06643">ExtractStringData</a>( pachFieldData, nBytesRemaining,
                                             &amp;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-&gt;<a class="code" href="classDDFSubfieldDefn.html#ad95ecafda6bcf87437030c273eb06643">ExtractStringData</a>( pachFieldData, nBytesRemaining,
                                           &amp;nBytesConsumed );

          printf( <span class="stringliteral">&quot;        %s = 0x&quot;</span>, poSFDefn-&gt;<a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>() );
          <span class="keywordflow">for</span>( i = 0; i &lt; MIN(nBytesConsumed,24); i++ )
              printf( <span class="stringliteral">&quot;%02X&quot;</span>, pabyBString[i] );

          <span class="keywordflow">if</span>( nBytesConsumed &gt; 24 )
              printf( <span class="stringliteral">&quot;%s&quot;</span>, <span class="stringliteral">&quot;...&quot;</span> );

          <span class="comment">// rjensen 19-Feb-2002 S57 quick hack. decode NAME and LNAM bitfields</span>
          <span class="keywordflow">if</span> ( EQUAL(poSFDefn-&gt;<a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>(),<span class="stringliteral">&quot;NAME&quot;</span>) )
          {
              vrid_rcnm=pabyBString[0];
              vrid_rcid=pabyBString[1] + (pabyBString[2]*256)+
                  (pabyBString[3]*65536)+ (pabyBString[4]*16777216);
              printf(<span class="stringliteral">&quot;\tVRID RCNM = %d,RCID = %u&quot;</span>,vrid_rcnm,vrid_rcid);
          }
          <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( EQUAL(poSFDefn-&gt;<a class="code" href="classDDFSubfieldDefn.html#a2fdfa7e689051d44242eb2a46407a756">GetName</a>(),<span class="stringliteral">&quot;LNAM&quot;</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">&quot;\tFOID AGEN = %u,FIDN = %u,FIDS = %u&quot;</span>,
                     foid_agen,foid_find,foid_fids);
          }

          printf( <span class="stringliteral">&quot;\n&quot;</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>