<?xml version='1.0' encoding='ISO-8859-1' standalone='no'?>
<!DOCTYPE interface-description SYSTEM 'file:///usr/pkgsrc/lang/oo2c/work.macaroon/oo2c_32-2.0.11/rsrc/OOC/xml/interface-description.dtd'>
<interface-description name='XML:InputBuffer' id=''>
  <import-decl name='Msg' id='Msg' export='no' module='Msg'/>
  <import-decl name='IO' id='IO' export='no' module='IO'/>
  <type-decl name='Char' id='Char' export='yes'>
    <oberon-doc>
      <summary>Character type used to represent the input data.</summary>
      <p pad-after='yes' no-indent='yes'>Character type used to represent the input data.</p>
    </oberon-doc>
    <type>
      <type-name module='#predef' name='CHAR'/>
    </type>
  </type-decl>
  <type-decl name='CharArray' id='CharArray' export='yes'>
    <oberon-doc>
      <summary>Character array of arbitrary length.</summary>
      <p pad-after='yes' no-indent='yes'>Character array of arbitrary length.  This type is used for the character data of the input buffer.</p>
    </oberon-doc>
    <type>
      <pointer>
        <pointer-base>
          <array>
            <element-type>
              <type-name module='#predef' name='Char'/>
            </element-type>
          </array>
        </pointer-base>
      </pointer>
    </type>
  </type-decl>
  <type-decl name='CharPos' id='CharPos' export='yes'>
    <oberon-doc>
      <summary>Character position for a channel.</summary>
      <p pad-after='yes' no-indent='yes'>Character position for a channel.  The very first byte that would be read from the channel has position 0.</p>
    </oberon-doc>
    <type>
      <type-name module='#predef' name='LONGINT'/>
    </type>
  </type-decl>
  <const-decl name='markerEOB' id='markerEOB' export='yes' value='unknown'>
    <oberon-doc>
      <summary>This is the character value that is used to mark the first invalid character after the buffer.</summary>
      <p pad-after='yes' no-indent='yes'>This is the character value that is used to mark the first invalid character after the buffer.  Use <oberon-proc href='#BufferDesc.EndOfBuffer'>Buffer.EndOfBuffer</oberon-proc> to determine, whether the character position is indeed the end of the buffer.</p>
    </oberon-doc>
  </const-decl>
  <const-decl name='sizeOfBuffer' id='sizeOfBuffer' export='yes' value='unknown'/>
  <import-decl name='-RT0' id='-RT0' export='no' module='RT0'/>
  <import-decl name='-Object' id='-Object' export='no' module='Object'/>
  <import-decl name='-Exception' id='-Exception' export='no' module='Exception'/>
  <class name='Buffer'>
    <type-decl name='Buffer' id='Buffer' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='BufferDesc' href='#BufferDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='BufferDesc' id='BufferDesc' export='no'>
      <type>
        <record>
          <field-decl name='chars' id='BufferDesc.chars' export='read-only'>
            <oberon-doc>
              <summary>Character data from input channel.</summary>
              <p pad-after='yes' no-indent='yes'>Character data from input channel.</p>
            </oberon-doc>
            <type>
              <type-name name='CharArray' href='#CharArray'/>
            </type>
          </field-decl>
          <field-decl name='offsetFromPos0' id='BufferDesc.offsetFromPos0' export='read-only'>
            <oberon-doc>
              <summary>Offset of <samp>chars[0]</samp> from the beginning of the input text.</summary>
              <p pad-after='yes' no-indent='yes'>Offset of <samp>chars[0]</samp> from the beginning of the input text.</p>
            </oberon-doc>
            <type>
              <type-name module='#predef' name='CharPos'/>
            </type>
          </field-decl>
          <field-decl name='endOfBuffer' id='BufferDesc.endOfBuffer' export='read-only'>
            <oberon-doc>
              <summary>Number of valid characters in <oberon-field href='#BufferDesc.chars'>chars</oberon-field>.</summary>
              <p pad-after='yes' no-indent='yes'>Number of valid characters in <oberon-field href='#BufferDesc.chars'>chars</oberon-field>.  All index values in the range [0..<oberon-field href='#BufferDesc.endOfBuffer'>endOfBuffer</oberon-field>-1] hold valid characters.  The value of <samp>chars[endOfBuffer]</samp> is <oberon-const href='#markerEOB'>markerEOB</oberon-const>.</p>
            </oberon-doc>
            <type>
              <type-name module='#predef' name='CharPos'/>
            </type>
          </field-decl>
          <field-decl name='discardable' id='BufferDesc.discardable' export='yes'>
            <oberon-doc>
              <summary>The client can define here how many bytes that have been read into the buffer will not be inspected again later, and can therefore be discarded by <oberon-proc href='#BufferDesc.NextBlock'>Buffer.NextBlock</oberon-proc>.</summary>
              <p pad-after='yes' no-indent='yes'>The client can define here how many bytes that have been read into the buffer will not be inspected again later, and can therefore be discarded by <oberon-proc href='#BufferDesc.NextBlock'>Buffer.NextBlock</oberon-proc>.  Possible values for this field are [0..<oberon-field href='#BufferDesc.endOfBuffer'>endOfBuffer</oberon-field>].</p>
            </oberon-doc>
            <type>
              <type-name module='#predef' name='CharPos'/>
            </type>
          </field-decl>
          <field-decl name='errList' id='BufferDesc.errList' export='read-only'>
            <oberon-doc>
              <summary>Error messages are appended to this list.</summary>
              <p pad-after='yes' no-indent='yes'>Error messages are appended to this list.</p>
            </oberon-doc>
            <type>
              <type-name module='Msg' name='MsgList' href='Msg#MsgList'/>
            </type>
          </field-decl>
        </record>
      </type>
    </type-decl>
    <procedure name='NextBlock' id='BufferDesc.NextBlock' export='yes'>
      <oberon-doc>
        <summary>Tries to read additional data from <oberon-param href='#BufferDesc.NextBlock.b'>b</oberon-param>'s channel.</summary>
        <p pad-after='yes' no-indent='yes'>Tries to read additional data from <oberon-param href='#BufferDesc.NextBlock.b'>b</oberon-param>'s channel.  If at least one byte could be read, result is <code>TRUE</code>.  <code>FALSE</code> means that not a single byte was added to the buffer, either because the end of the file was reached, or because of a read error.  In the latter case, an message is added to <oberon-param href='#BufferDesc.NextBlock.b'>b</oberon-param>'s error list.</p>
        <p pad-after='yes' no-indent='no'>A call to this buffer may change the fields <oberon-field href='#BufferDesc.chars'>Buffer.chars</oberon-field>, <oberon-field href='#BufferDesc.offsetFromPos0'>Buffer.offsetFromPos0</oberon-field>, and <oberon-field href='#BufferDesc.endOfBuffer'>Buffer.endOfBuffer</oberon-field>.  If part of the buffer is discarded, <oberon-field href='#BufferDesc.discardable'>Buffer.discardable</oberon-field> is set to zero.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='b' id='BufferDesc.NextBlock.b' export='no' variable-parameter='no'>
          <type>
            <type-name name='Buffer' href='#Buffer'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='#predef' name='BOOLEAN'/>
        </result-type>
        <exceptions>
          <type-name module='IO' name='Error' href='IO#Error'/>
        </exceptions>
      </formal-parameters>
    </procedure>
    <procedure name='EndOfBuffer' id='BufferDesc.EndOfBuffer' export='yes'>
      <oberon-doc>
        <summary>Returns TRUE iff character position <oberon-param href='#BufferDesc.EndOfBuffer.cpos'>cpos</oberon-param> refers to the position after the last valid byte in the buffer.</summary>
        <p pad-after='yes' no-indent='yes'>Returns TRUE iff character position <oberon-param href='#BufferDesc.EndOfBuffer.cpos'>cpos</oberon-param> refers to the position after the last valid byte in the buffer.</p>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'><samp>0</samp> &lt;= <oberon-param href='#BufferDesc.EndOfBuffer.cpos'>cpos</oberon-param> &lt;= <samp>b.endOfBuffer</samp> and <samp>b. chars[cpos] = markerEOB</samp></p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='b' id='BufferDesc.EndOfBuffer.b' export='no' variable-parameter='no'>
          <type>
            <type-name name='Buffer' href='#Buffer'/>
          </type>
        </receiver-decl>
        <parameter-decl name='cpos' id='BufferDesc.EndOfBuffer.cpos' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='CharPos'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name module='#predef' name='BOOLEAN'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Close' id='BufferDesc.Close' export='yes'>
      <oberon-doc>
        <summary>Closes the channel associated with buffer <oberon-param href='#BufferDesc.Close.b'>b</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Closes the channel associated with buffer <oberon-param href='#BufferDesc.Close.b'>b</oberon-param>.  Afterwards, no further operations are permitted on <oberon-param href='#BufferDesc.Close.b'>b</oberon-param>, except for reading the field <oberon-field href='#BufferDesc.errList'>Buffer.errList</oberon-field>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='b' id='BufferDesc.Close.b' export='no' variable-parameter='no'>
          <type>
            <type-name name='Buffer' href='#Buffer'/>
          </type>
        </receiver-decl>
        <exceptions>
          <type-name module='IO' name='Error' href='IO#Error'/>
        </exceptions>
      </formal-parameters>
    </procedure>
    <procedure name='New' id='New' export='yes'>
      <oberon-doc>
        <summary>Creates a new input buffer for reader <oberon-param href='#New.reader'>reader</oberon-param> and tries to read the first block of data from it.</summary>
        <p pad-after='yes' no-indent='yes'>Creates a new input buffer for reader <oberon-param href='#New.reader'>reader</oberon-param> and tries to read the first block of data from it.  Returns an initialized input buffer with up to <oberon-const href='#sizeOfBuffer'>sizeOfBuffer</oberon-const> characters of input.</p>
      </oberon-doc>
      <formal-parameters>
        <parameter-decl name='reader' id='New.reader' export='no' variable-parameter='no'>
          <type>
            <type-name module='IO' name='ByteChannel' href='IO#ByteChannel'/>
          </type>
        </parameter-decl>
        <parameter-decl name='errList' id='New.errList' export='no' variable-parameter='no'>
          <type>
            <type-name module='Msg' name='MsgList' href='Msg#MsgList'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name name='Buffer' href='#Buffer'/>
        </result-type>
        <exceptions>
          <type-name module='IO' name='Error' href='IO#Error'/>
        </exceptions>
      </formal-parameters>
    </procedure>
  </class>
  <module-ref name='IO'>
    <ref-target type='html' relative-uri='../IO.html'/>
  </module-ref>
  <module-ref name='Msg'>
    <ref-target type='html' relative-uri='../Msg.html'/>
  </module-ref>
</interface-description>
