<?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='ProgramArgs' id=''>
  <oberon-doc>
    <summary>This module provides access to the command line arguments passed to the program's invocation.</summary>
    <p pad-after='yes' no-indent='yes'>This module provides access to the command line arguments passed to the program's invocation.  They are mapped onto a standard channel, with each argument transformed to a single line of text.  Newline characters embedded in arguments are converted to spaces.  Interpreting the arguments is usually done by applying <oberon-proc href='TextRider#Reader'>TextRider.Reader</oberon-proc> or <oberon-proc href='TextRider#Scanner'>TextRider.Scanner</oberon-proc> to the argument channel.</p>
    <p pad-after='yes' no-indent='no'>The number of arguments can be determined by calling <oberon-proc href='#ChannelDesc.ArgNumber'>args.ArgNumber</oberon-proc>.  If the invokation was something like <samp>foo bar 42</samp>, where <samp>foo</samp> is the command's name, then the channel's contents would look like this:</p>
    <example pad-after='yes'>foo
bar
42
</example>
    <p pad-after='yes' no-indent='no'>For the given example <oberon-proc href='#ChannelDesc.ArgNumber'>args.ArgNumber</oberon-proc> would return <samp>2</samp>.</p>
  </oberon-doc>
  <import-decl name='SYSTEM' id='SYSTEM' export='no' module='SYSTEM'/>
  <import-decl name='Ch' id='Ch' export='no' module='Channel'/>
  <import-decl name='Time' id='Time' export='no' module='Time'/>
  <const-decl name='done' id='done' export='yes' value='unknown'/>
  <const-decl name='outOfRange' id='outOfRange' export='yes' value='unknown'/>
  <const-decl name='readAfterEnd' id='readAfterEnd' export='yes' value='unknown'/>
  <const-decl name='channelClosed' id='channelClosed' export='yes' value='unknown'/>
  <const-decl name='noWriteAccess' id='noWriteAccess' export='yes' value='unknown'/>
  <const-decl name='noModTime' id='noModTime' export='yes' value='unknown'/>
  <var-decl name='args' id='args' export='read-only'>
    <type>
      <type-name name='Channel' href='#Channel'/>
    </type>
  </var-decl>
  <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='Channel'>
    <type-decl name='Channel' id='Channel' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='ChannelDesc' href='#ChannelDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='ChannelDesc' id='ChannelDesc' export='no'>
      <type>
        <record/>
      </type>
    </type-decl>
    <procedure name='Length' id='ChannelDesc.Length' export='yes'>
      <doc-inherited-from module='Channel' name='Length' class='Channel' href='Channel#ChannelDesc.Length'/>
      <oberon-doc>
        <summary>Result is the number of bytes of data that this channel refers to.</summary>
        <p pad-after='yes' no-indent='yes'>Result is the number of bytes of data that this channel refers to.  If <oberon-param href='#ChannelDesc.Length.ch'>ch</oberon-param> represents a file, then this value is the file's size.  If <oberon-param href='#ChannelDesc.Length.ch'>ch</oberon-param> has no fixed length (e.g. because it's interactive), the result is <oberon-const href='Channel#noLength'>noLength</oberon-const>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='ch' id='ChannelDesc.Length.ch' export='no' variable-parameter='no'>
          <type>
            <type-name name='Channel' href='#Channel'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='#predef' name='LONGINT'/>
        </result-type>
      </formal-parameters>
      <redefined-method module='Channel' name='Length' class='Channel' href='Channel#ChannelDesc.Length'/>
    </procedure>
    <procedure name='ArgNumber' id='ChannelDesc.ArgNumber' export='yes'>
      <oberon-doc>
        <summary>Returns the number of command line arguments (excluding the program name itself) passed to the program.</summary>
        <p pad-after='yes' no-indent='yes'>Returns the number of command line arguments (excluding the program name itself) passed to the program.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='ch' id='ChannelDesc.ArgNumber.ch' export='no' variable-parameter='no'>
          <type>
            <type-name name='Channel' href='#Channel'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='#predef' name='LONGINT'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='GetModTime' id='ChannelDesc.GetModTime' export='yes'>
      <oberon-doc>
        <summary>Since the argument channel has no modification time, this procedure will always signal a `noModTime' error.</summary>
        <p pad-after='yes' no-indent='yes'>Since the argument channel has no modification time, this procedure will always signal a `noModTime' error.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='ch' id='ChannelDesc.GetModTime.ch' export='no' variable-parameter='no'>
          <type>
            <type-name name='Channel' href='#Channel'/>
          </type>
        </receiver-decl>
        <parameter-decl name='mtime' id='ChannelDesc.GetModTime.mtime' export='no' variable-parameter='yes'>
          <type>
            <type-name module='Time' name='TimeStamp' href='Time#TimeStamp'/>
          </type>
        </parameter-decl>
      </formal-parameters>
      <redefined-method module='Channel' name='GetModTime' class='Channel' href='Channel#ChannelDesc.GetModTime'/>
    </procedure>
    <procedure name='NewReader' id='ChannelDesc.NewReader' export='yes'>
      <doc-inherited-from module='Channel' name='NewReader' class='Channel' href='Channel#ChannelDesc.NewReader'/>
      <oberon-doc>
        <summary>Attaches a new reader to the channel <oberon-param href='#ChannelDesc.NewReader.ch'>ch</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Attaches a new reader to the channel <oberon-param href='#ChannelDesc.NewReader.ch'>ch</oberon-param>.  It is placed at the very start of the channel, and its <oberon-field href='Channel#ReaderDesc.res'>Reader.res</oberon-field> field is initialized to <oberon-const href='Channel#done'>done</oberon-const>.  <oberon-field href='Channel#ChannelDesc.res'>ch.res</oberon-field> is set to <oberon-const href='Channel#done'>done</oberon-const> on success and the new reader is returned.  Otherwise result is <code>NIL</code> and <oberon-field href='Channel#ChannelDesc.res'>ch.res</oberon-field> is changed to indicate the error cause.  Note that always the same reader is returned if the channel does not support multiple reading positions.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='ch' id='ChannelDesc.NewReader.ch' export='no' variable-parameter='no'>
          <type>
            <type-name name='Channel' href='#Channel'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name name='Reader' href='#Reader'/>
        </result-type>
      </formal-parameters>
      <redefined-method module='Channel' name='NewReader' class='Channel' href='Channel#ChannelDesc.NewReader'/>
    </procedure>
    <procedure name='Flush' id='ChannelDesc.Flush' export='yes'>
      <doc-inherited-from module='Channel' name='Flush' class='Channel' href='Channel#ChannelDesc.Flush'/>
      <oberon-doc>
        <summary>Flushes all buffers related to this channel.</summary>
        <p pad-after='yes' no-indent='yes'>Flushes all buffers related to this channel.  Any pending write operations are passed to the underlying OS and all buffers are marked as invalid.  The next read operation will get its data directly from the channel instead of the buffer.  If a writing error occurs during flushing, the field <oberon-field href='Channel#ChannelDesc.res'>ch.res</oberon-field> will be changed to <oberon-const href='Channel#writeError'>writeError</oberon-const>, otherwise it's assigned <oberon-const href='Channel#done'>done</oberon-const>.  Note that you have to check the channel's <oberon-field href='Channel#ChannelDesc.res'>Channel.res</oberon-field> flag after an explicit flush yourself, since none of the attached writers will notice any write error in this case.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='ch' id='ChannelDesc.Flush.ch' export='no' variable-parameter='no'>
          <type>
            <type-name name='Channel' href='#Channel'/>
          </type>
        </receiver-decl>
      </formal-parameters>
      <redefined-method module='Channel' name='Flush' class='Channel' href='Channel#ChannelDesc.Flush'/>
    </procedure>
    <procedure name='Close' id='ChannelDesc.Close' export='yes'>
      <doc-inherited-from module='Channel' name='Close' class='Channel' href='Channel#ChannelDesc.Close'/>
      <oberon-doc>
        <summary>Flushes all buffers associated with <oberon-param href='#ChannelDesc.Close.ch'>ch</oberon-param>, closes the channel, and frees all system resources allocated to it.</summary>
        <p pad-after='yes' no-indent='yes'>Flushes all buffers associated with <oberon-param href='#ChannelDesc.Close.ch'>ch</oberon-param>, closes the channel, and frees all system resources allocated to it.  This invalidates all riders attached to <oberon-param href='#ChannelDesc.Close.ch'>ch</oberon-param>, and they can't be used further.  On success, i.e. if all read and write operations (including flush) completed successfully, <oberon-field href='Channel#ChannelDesc.res'>ch.res</oberon-field> is set to <oberon-const href='Channel#done'>done</oberon-const>.  An opened channel can only be closed once, successive calls of <oberon-proc href='Channel#ChannelDesc.Close'>Channel.Close</oberon-proc> are undefined.  Note that unlike the Oberon System all opened channels have to be closed explicitly.  Otherwise resources allocated to them will remain blocked.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='ch' id='ChannelDesc.Close.ch' export='no' variable-parameter='no'>
          <type>
            <type-name name='Channel' href='#Channel'/>
          </type>
        </receiver-decl>
      </formal-parameters>
      <redefined-method module='Channel' name='Close' class='Channel' href='Channel#ChannelDesc.Close'/>
    </procedure>
    <base-class module='Channel' class='Channel' href='Channel#Channel'>
      <inherited-method module='Channel' name='ClearError' class='Channel' href='Channel#ChannelDesc.ClearError'/>
      <inherited-method module='Channel' name='Close' class='Channel' href='Channel#ChannelDesc.Close'/>
      <inherited-method module='Channel' name='Flush' class='Channel' href='Channel#ChannelDesc.Flush'/>
      <inherited-method module='Channel' name='GetModTime' class='Channel' href='Channel#ChannelDesc.GetModTime'/>
      <inherited-method module='Channel' name='Length' class='Channel' href='Channel#ChannelDesc.Length'/>
      <inherited-method module='Channel' name='NewReader' class='Channel' href='Channel#ChannelDesc.NewReader'/>
      <inherited-method module='Channel' name='NewWriter' class='Channel' href='Channel#ChannelDesc.NewWriter'/>
      <inherited-field module='Channel' name='open' class='Channel' href='Channel#ChannelDesc.open'/>
      <inherited-field module='Channel' name='readable' class='Channel' href='Channel#ChannelDesc.readable'/>
      <inherited-field module='Channel' name='res' class='Channel' href='Channel#ChannelDesc.res'/>
      <inherited-field module='Channel' name='writable' class='Channel' href='Channel#ChannelDesc.writable'/>
    </base-class>
  </class>
  <class name='Reader'>
    <type-decl name='Reader' id='Reader' export='no'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='ReaderDesc' href='#ReaderDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='ReaderDesc' id='ReaderDesc' export='no'>
      <type>
        <record/>
      </type>
    </type-decl>
    <procedure name='Pos' id='ReaderDesc.Pos' export='yes'>
      <doc-inherited-from module='Channel' name='Pos' class='Reader' href='Channel#ReaderDesc.Pos'/>
      <oberon-doc>
        <summary>Returns the current reading position associated with the reader <oberon-param href='#ReaderDesc.Pos.r'>r</oberon-param> in channel <oberon-field href='Channel#ReaderDesc.base'>r.base</oberon-field>, i.e.</summary>
        <p pad-after='yes' no-indent='yes'>Returns the current reading position associated with the reader <oberon-param href='#ReaderDesc.Pos.r'>r</oberon-param> in channel <oberon-field href='Channel#ReaderDesc.base'>r.base</oberon-field>, i.e. the index of the first byte that is read by the next call to <oberon-proc href='Channel#ReaderDesc.ReadByte'>Reader.ReadByte</oberon-proc> resp. <oberon-proc href='Channel#ReaderDesc.ReadBytes'>Reader.ReadBytes</oberon-proc>.  This procedure will return <oberon-const href='Channel#noPosition'>noPosition</oberon-const> if the reader has no concept of a reading position (e.g. if it corresponds to input from keyboard), otherwise the result is not negative.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='r' id='ReaderDesc.Pos.r' export='no' variable-parameter='no'>
          <type>
            <type-name name='Reader' href='#Reader'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='#predef' name='LONGINT'/>
        </result-type>
      </formal-parameters>
      <redefined-method module='Channel' name='Pos' class='Reader' href='Channel#ReaderDesc.Pos'/>
    </procedure>
    <procedure name='Available' id='ReaderDesc.Available' export='yes'>
      <doc-inherited-from module='Channel' name='Available' class='Reader' href='Channel#ReaderDesc.Available'/>
      <oberon-doc>
        <summary>Returns the number of bytes available for the next reading operation.</summary>
        <p pad-after='yes' no-indent='yes'>Returns the number of bytes available for the next reading operation.  For a file this is the length of the channel <oberon-field href='Channel#ReaderDesc.base'>r.base</oberon-field> minus the current reading position, for an sequential channel (or a channel designed to handle slow transfer rates) this is the number of bytes that can be accessed without additional waiting.  The result is <samp>-1</samp> if <oberon-proc href='Channel#ChannelDesc.Close'>Channel.Close</oberon-proc> was called for the channel, or no more byte are available and the remote end of the channel has been closed.  Note that the number of bytes returned is always a lower approximation of the number that could be read at once; for some channels or systems it might be as low as <samp>1</samp> even if tons of bytes are waiting to be processed.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='r' id='ReaderDesc.Available.r' export='no' variable-parameter='no'>
          <type>
            <type-name name='Reader' href='#Reader'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='#predef' name='LONGINT'/>
        </result-type>
      </formal-parameters>
      <redefined-method module='Channel' name='Available' class='Reader' href='Channel#ReaderDesc.Available'/>
    </procedure>
    <procedure name='SetPos' id='ReaderDesc.SetPos' export='yes'>
      <doc-inherited-from module='Channel' name='SetPos' class='Reader' href='Channel#ReaderDesc.SetPos'/>
      <oberon-doc>
        <summary>Sets the reading position to <oberon-param href='#ReaderDesc.SetPos.newPos'>newPos</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Sets the reading position to <oberon-param href='#ReaderDesc.SetPos.newPos'>newPos</oberon-param>.  A negative value of <oberon-param href='#ReaderDesc.SetPos.newPos'>newPos</oberon-param> or calling this procedure for a reader that doesn't allow positioning will set <oberon-field href='Channel#ReaderDesc.res'>r.res</oberon-field> to <oberon-const href='Channel#outOfRange'>outOfRange</oberon-const>.  A value larger than the channel's length is legal, but the following read operation will most likely fail with an <oberon-const href='Channel#readAfterEnd'>readAfterEnd</oberon-const> error unless the channel has grown beyond this position in the meantime.  Calls to this procedure while <samp>r.res # done</samp> will be ignored, in particular a call with <samp>r.res.code = readAfterEnd</samp> error will not reset <oberon-field href='Channel#ReaderDesc.res'>Reader.res</oberon-field> to <oberon-const href='Channel#done'>done</oberon-const>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='r' id='ReaderDesc.SetPos.r' export='no' variable-parameter='no'>
          <type>
            <type-name name='Reader' href='#Reader'/>
          </type>
        </receiver-decl>
        <parameter-decl name='newPos' id='ReaderDesc.SetPos.newPos' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
      </formal-parameters>
      <redefined-method module='Channel' name='SetPos' class='Reader' href='Channel#ReaderDesc.SetPos'/>
    </procedure>
    <procedure name='ReadByte' id='ReaderDesc.ReadByte' export='yes'>
      <doc-inherited-from module='Channel' name='ReadByte' class='Reader' href='Channel#ReaderDesc.ReadByte'/>
      <oberon-doc>
        <summary>Reads a single byte from the channel <oberon-field href='Channel#ReaderDesc.base'>r.base</oberon-field> at the reading position associated with <oberon-param href='#ReaderDesc.ReadByte.r'>r</oberon-param> and places it in <oberon-param href='#ReaderDesc.ReadByte.x'>x</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Reads a single byte from the channel <oberon-field href='Channel#ReaderDesc.base'>r.base</oberon-field> at the reading position associated with <oberon-param href='#ReaderDesc.ReadByte.r'>r</oberon-param> and places it in <oberon-param href='#ReaderDesc.ReadByte.x'>x</oberon-param>.  The reading position is moved forward by one byte on success, otherwise <oberon-field href='Channel#ReaderDesc.res'>r.res</oberon-field> is changed to indicate the error cause.  Calling this procedure with the reader <oberon-param href='#ReaderDesc.ReadByte.r'>r</oberon-param> placed at the end (or beyond the end) of the channel will set <oberon-field href='Channel#ReaderDesc.res'>r.res</oberon-field> to <oberon-const href='Channel#readAfterEnd'>readAfterEnd</oberon-const>.  <oberon-field href='Channel#ReaderDesc.bytesRead'>r.bytesRead</oberon-field> will be <samp>1</samp> on success and <samp>0</samp> on failure.  Calls to this procedure while <samp>r.res # done</samp> will be ignored.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='r' id='ReaderDesc.ReadByte.r' export='no' variable-parameter='no'>
          <type>
            <type-name name='Reader' href='#Reader'/>
          </type>
        </receiver-decl>
        <parameter-decl name='x' id='ReaderDesc.ReadByte.x' export='no' variable-parameter='yes'>
          <type>
            <type-name module='SYSTEM' name='BYTE' href='SYSTEM#BYTE'/>
          </type>
        </parameter-decl>
      </formal-parameters>
      <redefined-method module='Channel' name='ReadByte' class='Reader' href='Channel#ReaderDesc.ReadByte'/>
    </procedure>
    <procedure name='ReadBytes' id='ReaderDesc.ReadBytes' export='yes'>
      <doc-inherited-from module='Channel' name='ReadBytes' class='Reader' href='Channel#ReaderDesc.ReadBytes'/>
      <oberon-doc>
        <summary>Reads <oberon-param href='#ReaderDesc.ReadBytes.n'>n</oberon-param> bytes from the channel <oberon-field href='Channel#ReaderDesc.base'>r.base</oberon-field> at the reading position associated with <oberon-param href='#ReaderDesc.ReadBytes.r'>r</oberon-param> and places them in <oberon-param href='#ReaderDesc.ReadBytes.x'>x</oberon-param>, starting at index <oberon-param href='#ReaderDesc.ReadBytes.start'>start</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Reads <oberon-param href='#ReaderDesc.ReadBytes.n'>n</oberon-param> bytes from the channel <oberon-field href='Channel#ReaderDesc.base'>r.base</oberon-field> at the reading position associated with <oberon-param href='#ReaderDesc.ReadBytes.r'>r</oberon-param> and places them in <oberon-param href='#ReaderDesc.ReadBytes.x'>x</oberon-param>, starting at index <oberon-param href='#ReaderDesc.ReadBytes.start'>start</oberon-param>.  The reading position is moved forward by <oberon-param href='#ReaderDesc.ReadBytes.n'>n</oberon-param> bytes on success, otherwise <oberon-field href='Channel#ReaderDesc.res'>r.res</oberon-field> is changed to indicate the error cause.  Calling this procedure with the reader <oberon-param href='#ReaderDesc.ReadBytes.r'>r</oberon-param> placed less than <oberon-param href='#ReaderDesc.ReadBytes.n'>n</oberon-param> bytes before the end of the channel will will set <oberon-field href='Channel#ReaderDesc.res'>r.res</oberon-field> to <oberon-const href='Channel#readAfterEnd'>readAfterEnd</oberon-const>.  <oberon-field href='Channel#ReaderDesc.bytesRead'>r.bytesRead</oberon-field> will hold the number of bytes that were actually read (being equal to <oberon-param href='#ReaderDesc.ReadBytes.n'>n</oberon-param> on success).  Calls to this procedure while <samp>r.res # done</samp> will be ignored.</p>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'><samp>(n &gt;= 0) &amp; (0 &lt;= start) &amp; (start+n &lt;= LEN (x))</samp></p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='r' id='ReaderDesc.ReadBytes.r' export='no' variable-parameter='no'>
          <type>
            <type-name name='Reader' href='#Reader'/>
          </type>
        </receiver-decl>
        <parameter-decl name='x' id='ReaderDesc.ReadBytes.x' export='no' variable-parameter='yes'>
          <type>
            <array>
              <element-type>
                <type-name module='SYSTEM' name='BYTE' href='SYSTEM#BYTE'/>
              </element-type>
            </array>
          </type>
        </parameter-decl>
        <parameter-decl name='start' id='ReaderDesc.ReadBytes.start' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='n' id='ReaderDesc.ReadBytes.n' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
      </formal-parameters>
      <redefined-method module='Channel' name='ReadBytes' class='Reader' href='Channel#ReaderDesc.ReadBytes'/>
    </procedure>
    <base-class module='Channel' class='Reader' href='Channel#Reader'>
      <inherited-method module='Channel' name='Available' class='Reader' href='Channel#ReaderDesc.Available'/>
      <inherited-method module='Channel' name='ClearError' class='Reader' href='Channel#ReaderDesc.ClearError'/>
      <inherited-method module='Channel' name='Pos' class='Reader' href='Channel#ReaderDesc.Pos'/>
      <inherited-method module='Channel' name='ReadByte' class='Reader' href='Channel#ReaderDesc.ReadByte'/>
      <inherited-method module='Channel' name='ReadBytes' class='Reader' href='Channel#ReaderDesc.ReadBytes'/>
      <inherited-method module='Channel' name='SetPos' class='Reader' href='Channel#ReaderDesc.SetPos'/>
      <inherited-field module='Channel' name='base' class='Reader' href='Channel#ReaderDesc.base'/>
      <inherited-field module='Channel' name='bytesRead' class='Reader' href='Channel#ReaderDesc.bytesRead'/>
      <inherited-field module='Channel' name='positionable' class='Reader' href='Channel#ReaderDesc.positionable'/>
      <inherited-field module='Channel' name='res' class='Reader' href='Channel#ReaderDesc.res'/>
    </base-class>
  </class>
  <class name='ErrorContext'>
    <type-decl name='ErrorContextDesc' id='ErrorContextDesc' export='yes'>
      <type>
        <record/>
      </type>
    </type-decl>
    <base-class module='Channel' class='ErrorContext' href='Channel#ErrorContext'>
      <inherited-method module='Channel' name='GetTemplate' class='ErrorContext' href='Channel#ErrorContextDesc.GetTemplate'/>
      <base-class module='Msg' class='Context' href='Msg#Context'>
        <inherited-field module='Msg' name='id' class='Context' href='Msg#ContextDesc.id'/>
      </base-class>
    </base-class>
  </class>
  <module-ref name='Msg'>
    <ref-target type='html' relative-uri='Msg.html'/>
  </module-ref>
  <module-ref name='TextRider'>
    <ref-target type='html' relative-uri='TextRider.html'/>
  </module-ref>
  <module-ref name='Channel'>
    <ref-target type='html' relative-uri='Channel.html'/>
  </module-ref>
  <module-ref name='Time'>
    <ref-target type='html' relative-uri='Time.html'/>
  </module-ref>
</interface-description>
