<?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='RT0' id=''>
  <oberon-doc>
    <summary>Proxy module for the run-time system.</summary>
    <p pad-after='yes' no-indent='yes'>Proxy module for the run-time system.  This module is used to pull in the executable code of the run-time system, and to mark the place of the run-time system's header files.  This module's directory is added to the include path of the C compiler, so that <file>__oo2c.h</file>, <file>__typemap.h</file>, and so on, are picked up from here.</p>
    <p pad-after='yes' no-indent='no'>The compiler implicitly adds an import for this module to every module.  A program may import this module directly, for example to gain access to meta data embedded by the compiler into a module's object file.  Please note that this module should be considered a part of the compiler, <emph>not</emph> of the standard library.  As such, it may differ across different compiler implementations, and for a given compiler its interface might change without prior notice.</p>
    <p pad-after='yes' no-indent='no'>Note: The math library <samp>libm</samp> is always linked in for the sake of the predefined function <code>ENTIER</code>.</p>
  </oberon-doc>
  <import-decl name='SYSTEM' id='SYSTEM' export='no' module='SYSTEM'/>
  <const-decl name='strBoolean' id='strBoolean' export='yes' value='unknown'/>
  <const-decl name='strChar' id='strChar' export='yes' value='unknown'/>
  <const-decl name='strLongchar' id='strLongchar' export='yes' value='unknown'/>
  <const-decl name='strUCS4Char' id='strUCS4Char' export='yes' value='unknown'/>
  <const-decl name='strShortint' id='strShortint' export='yes' value='unknown'/>
  <const-decl name='strInteger' id='strInteger' export='yes' value='unknown'/>
  <const-decl name='strLongint' id='strLongint' export='yes' value='unknown'/>
  <const-decl name='strReal' id='strReal' export='yes' value='unknown'/>
  <const-decl name='strLongreal' id='strLongreal' export='yes' value='unknown'/>
  <const-decl name='strSet32' id='strSet32' export='yes' value='unknown'/>
  <const-decl name='strByte' id='strByte' export='yes' value='unknown'/>
  <const-decl name='strPtr' id='strPtr' export='yes' value='unknown'/>
  <const-decl name='strArray' id='strArray' export='yes' value='unknown'>
    <oberon-doc>
      <summary>An array definition with a fixed length, as in <samp>ARRAY 123 OF CHAR</samp>.</summary>
      <p pad-after='yes' no-indent='yes'>An array definition with a fixed length, as in <samp>ARRAY 123 OF CHAR</samp>.</p>
    </oberon-doc>
  </const-decl>
  <const-decl name='strOpenArray' id='strOpenArray' export='yes' value='unknown'>
    <oberon-doc>
      <summary>An array definition with an unspecified length, as in <samp>ARRAY OF CHAR</samp>.</summary>
      <p pad-after='yes' no-indent='yes'>An array definition with an unspecified length, as in <samp>ARRAY OF CHAR</samp>.</p>
    </oberon-doc>
  </const-decl>
  <const-decl name='strRecord' id='strRecord' export='yes' value='unknown'>
    <oberon-doc>
      <summary>A record, either in its C <code>struct</code> or <code>union</code> variant.</summary>
      <p pad-after='yes' no-indent='yes'>A record, either in its C <code>struct</code> or <code>union</code> variant.</p>
    </oberon-doc>
  </const-decl>
  <const-decl name='strPointer' id='strPointer' export='yes' value='unknown'>
    <oberon-doc>
      <summary>A pointer definition of the form <samp>POINTER TO T</samp>.</summary>
      <p pad-after='yes' no-indent='yes'>A pointer definition of the form <samp>POINTER TO T</samp>.</p>
    </oberon-doc>
  </const-decl>
  <type-decl name='Name' id='Name' export='yes'>
    <type>
      <pointer>
        <pointer-base>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </pointer-base>
      </pointer>
    </type>
  </type-decl>
  <var-decl name='boolean' id='boolean' export='read-only'>
    <type>
      <type-name name='StructDesc' href='#StructDesc'/>
    </type>
  </var-decl>
  <var-decl name='char' id='char' export='read-only'>
    <type>
      <type-name name='StructDesc' href='#StructDesc'/>
    </type>
  </var-decl>
  <var-decl name='longchar' id='longchar' export='read-only'>
    <type>
      <type-name name='StructDesc' href='#StructDesc'/>
    </type>
  </var-decl>
  <var-decl name='ucs4char' id='ucs4char' export='read-only'>
    <type>
      <type-name name='StructDesc' href='#StructDesc'/>
    </type>
  </var-decl>
  <var-decl name='shortint' id='shortint' export='read-only'>
    <type>
      <type-name name='StructDesc' href='#StructDesc'/>
    </type>
  </var-decl>
  <var-decl name='integer' id='integer' export='read-only'>
    <type>
      <type-name name='StructDesc' href='#StructDesc'/>
    </type>
  </var-decl>
  <var-decl name='longint' id='longint' export='read-only'>
    <type>
      <type-name name='StructDesc' href='#StructDesc'/>
    </type>
  </var-decl>
  <var-decl name='real' id='real' export='read-only'>
    <type>
      <type-name name='StructDesc' href='#StructDesc'/>
    </type>
  </var-decl>
  <var-decl name='longreal' id='longreal' export='read-only'>
    <type>
      <type-name name='StructDesc' href='#StructDesc'/>
    </type>
  </var-decl>
  <var-decl name='set32' id='set32' export='read-only'>
    <type>
      <type-name name='StructDesc' href='#StructDesc'/>
    </type>
  </var-decl>
  <var-decl name='byte' id='byte' export='read-only'>
    <type>
      <type-name name='StructDesc' href='#StructDesc'/>
    </type>
  </var-decl>
  <var-decl name='ptr' id='ptr' export='read-only'>
    <type>
      <type-name name='StructDesc' href='#StructDesc'/>
    </type>
  </var-decl>
  <var-decl name='argc' id='argc' export='read-only'>
    <type>
      <type-name module='#predef' name='LONGINT'/>
    </type>
  </var-decl>
  <var-decl name='argv' id='argv' export='read-only'>
    <type>
      <pointer>
        <pointer-base>
          <array>
            <element-type>
              <pointer>
                <pointer-base>
                  <array>
                    <element-type>
                      <type-name module='#predef' name='CHAR'/>
                    </element-type>
                  </array>
                </pointer-base>
              </pointer>
            </element-type>
          </array>
        </pointer-base>
      </pointer>
    </type>
  </var-decl>
  <var-decl name='poisonHeap' id='poisonHeap' export='yes'>
    <oberon-doc>
      <summary>If set to a non-negative value, then memory allocated through <oberon-proc href='#NewObject'>NewObject</oberon-proc> and <oberon-proc href='#NewBlock'>NewBlock</oberon-proc> is filled with this byte value.</summary>
      <p pad-after='yes' no-indent='yes'>If set to a non-negative value, then memory allocated through <oberon-proc href='#NewObject'>NewObject</oberon-proc> and <oberon-proc href='#NewBlock'>NewBlock</oberon-proc> is filled with this byte value.  Otherwise, the memory is left as provided by the used libc or libgc library.  This is the default.</p>
    </oberon-doc>
    <type>
      <type-name module='#predef' name='LONGINT'/>
    </type>
  </var-decl>
  <procedure name='NewObject' id='NewObject' export='yes'>
    <oberon-doc>
      <summary>Allocates a new array or record variable on the heap, using the type descriptor <oberon-param href='#NewObject.td'>td</oberon-param>.</summary>
      <p pad-after='yes' no-indent='yes'>Allocates a new array or record variable on the heap, using the type descriptor <oberon-param href='#NewObject.td'>td</oberon-param>.  For an open array object, the lengths of the array's dimensions are passed as second, third, and so on, parameter.  They must be of type <code>LONGINT</code>.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='td' id='NewObject.td' export='no' variable-parameter='no'>
        <type>
          <type-name name='Struct' href='#Struct'/>
        </type>
      </parameter-decl>
      <result-type>
        <type-name module='SYSTEM' name='PTR' href='SYSTEM#PTR'/>
      </result-type>
    </formal-parameters>
  </procedure>
  <procedure name='NewBlock' id='NewBlock' export='yes'>
    <oberon-doc>
      <summary>Allocates a memory block on the heap with a size of at least <oberon-param href='#NewBlock.bytes'>bytes</oberon-param> bytes.</summary>
      <p pad-after='yes' no-indent='yes'>Allocates a memory block on the heap with a size of at least <oberon-param href='#NewBlock.bytes'>bytes</oberon-param> bytes.  Pointers in the allocated block are ignored during garbage collection.  That is, the block must not contain any references to objects on the heap that are not kept live by other pointers.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='bytes' id='NewBlock.bytes' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
      <result-type>
        <type-name module='SYSTEM' name='PTR' href='SYSTEM#PTR'/>
      </result-type>
    </formal-parameters>
  </procedure>
  <procedure name='FreeBlock' id='FreeBlock' export='yes'>
    <oberon-doc>
      <summary>Frees a block of memory allocated with <oberon-proc href='#NewBlock'>NewBlock</oberon-proc>.</summary>
      <p pad-after='yes' no-indent='yes'>Frees a block of memory allocated with <oberon-proc href='#NewBlock'>NewBlock</oberon-proc>.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='ptr' id='FreeBlock.ptr' export='no' variable-parameter='no'>
        <type>
          <type-name module='SYSTEM' name='PTR' href='SYSTEM#PTR'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='CollectGarbage' id='CollectGarbage' export='yes'>
    <oberon-doc>
      <summary>Explicitly trigger a full, world-stop garbage collection.</summary>
      <p pad-after='yes' no-indent='yes'>Explicitly trigger a full, world-stop garbage collection.</p>
    </oberon-doc>
    <formal-parameters/>
  </procedure>
  <procedure name='ErrorIndexOutOfRange' id='ErrorIndexOutOfRange' export='yes'>
    <formal-parameters>
      <parameter-decl name='mid' id='ErrorIndexOutOfRange.mid' export='no' variable-parameter='no'>
        <type>
          <type-name name='Module' href='#Module'/>
        </type>
      </parameter-decl>
      <parameter-decl name='pos' id='ErrorIndexOutOfRange.pos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
      <parameter-decl name='index' id='ErrorIndexOutOfRange.index' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
      <parameter-decl name='length' id='ErrorIndexOutOfRange.length' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='ErrorDerefOfNil' id='ErrorDerefOfNil' export='yes'>
    <formal-parameters>
      <parameter-decl name='mid' id='ErrorDerefOfNil.mid' export='no' variable-parameter='no'>
        <type>
          <type-name name='Module' href='#Module'/>
        </type>
      </parameter-decl>
      <parameter-decl name='pos' id='ErrorDerefOfNil.pos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='ErrorFailedTypeGuard' id='ErrorFailedTypeGuard' export='yes'>
    <formal-parameters>
      <parameter-decl name='mid' id='ErrorFailedTypeGuard.mid' export='no' variable-parameter='no'>
        <type>
          <type-name name='Module' href='#Module'/>
        </type>
      </parameter-decl>
      <parameter-decl name='pos' id='ErrorFailedTypeGuard.pos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
      <parameter-decl name='typeTag' id='ErrorFailedTypeGuard.typeTag' export='no' variable-parameter='no'>
        <type>
          <type-name name='Struct' href='#Struct'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='ErrorFailedCase' id='ErrorFailedCase' export='yes'>
    <formal-parameters>
      <parameter-decl name='mid' id='ErrorFailedCase.mid' export='no' variable-parameter='no'>
        <type>
          <type-name name='Module' href='#Module'/>
        </type>
      </parameter-decl>
      <parameter-decl name='pos' id='ErrorFailedCase.pos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
      <parameter-decl name='select' id='ErrorFailedCase.select' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='ErrorFailedWith' id='ErrorFailedWith' export='yes'>
    <formal-parameters>
      <parameter-decl name='mid' id='ErrorFailedWith.mid' export='no' variable-parameter='no'>
        <type>
          <type-name name='Module' href='#Module'/>
        </type>
      </parameter-decl>
      <parameter-decl name='pos' id='ErrorFailedWith.pos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
      <parameter-decl name='typeTag' id='ErrorFailedWith.typeTag' export='no' variable-parameter='no'>
        <type>
          <type-name name='Struct' href='#Struct'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='ErrorFailedTypeAssert' id='ErrorFailedTypeAssert' export='yes'>
    <formal-parameters>
      <parameter-decl name='mid' id='ErrorFailedTypeAssert.mid' export='no' variable-parameter='no'>
        <type>
          <type-name name='Module' href='#Module'/>
        </type>
      </parameter-decl>
      <parameter-decl name='pos' id='ErrorFailedTypeAssert.pos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='ErrorFailedFunction' id='ErrorFailedFunction' export='yes'>
    <formal-parameters>
      <parameter-decl name='mid' id='ErrorFailedFunction.mid' export='no' variable-parameter='no'>
        <type>
          <type-name name='Module' href='#Module'/>
        </type>
      </parameter-decl>
      <parameter-decl name='pos' id='ErrorFailedFunction.pos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='ErrorAssertionFailed' id='ErrorAssertionFailed' export='yes'>
    <formal-parameters>
      <parameter-decl name='mid' id='ErrorAssertionFailed.mid' export='no' variable-parameter='no'>
        <type>
          <type-name name='Module' href='#Module'/>
        </type>
      </parameter-decl>
      <parameter-decl name='pos' id='ErrorAssertionFailed.pos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
      <parameter-decl name='code' id='ErrorAssertionFailed.code' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='Halt' id='Halt' export='yes'>
    <formal-parameters>
      <parameter-decl name='code' id='Halt.code' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='LONGINT'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='RegisterModule' id='RegisterModule' export='yes'>
    <oberon-doc>
      <summary>Registers the module descriptor with the run-time system.</summary>
      <p pad-after='yes' no-indent='yes'>Registers the module descriptor with the run-time system.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='mid' id='RegisterModule.mid' export='no' variable-parameter='no'>
        <type>
          <type-name name='Module' href='#Module'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='GetEnv' id='GetEnv' export='yes'>
    <oberon-doc>
      <summary>If an environment variable <oberon-param href='#GetEnv.name'>name</oberon-param> exists, copy its value into <oberon-param href='#GetEnv.value'>value</oberon-param> and return <code>TRUE</code>.</summary>
      <p pad-after='yes' no-indent='yes'>If an environment variable <oberon-param href='#GetEnv.name'>name</oberon-param> exists, copy its value into <oberon-param href='#GetEnv.value'>value</oberon-param> and return <code>TRUE</code>.  Otherwise, return <code>FALSE</code>.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='name' id='GetEnv.name' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='value' id='GetEnv.value' export='no' variable-parameter='yes'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <result-type>
        <type-name module='#predef' name='BOOLEAN'/>
      </result-type>
    </formal-parameters>
  </procedure>
  <class name='Struct'>
    <type-decl name='Struct' id='Struct' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='StructDesc' href='#StructDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='StructDesc' id='StructDesc' export='no'>
      <type>
        <record>
          <field-decl name='baseTypes' id='StructDesc.baseTypes' export='read-only'>
            <oberon-doc>
              <summary>Array element type, pointer base type, or list of record base types.</summary>
              <p pad-after='yes' no-indent='yes'>Array element type, pointer base type, or list of record base types.  For predefined scalar types this field is <code>NIL</code>.</p>
            </oberon-doc>
            <type>
              <pointer>
                <pointer-base>
                  <array>
                    <element-type>
                      <type-name name='Struct' href='#Struct'/>
                    </element-type>
                  </array>
                </pointer-base>
              </pointer>
            </type>
          </field-decl>
          <field-decl name='tbProcs' id='StructDesc.tbProcs' export='read-only'>
            <oberon-doc>
              <summary>Table of type-bound procedures of a record type.</summary>
              <p pad-after='yes' no-indent='yes'>Table of type-bound procedures of a record type.  This field is <code>NIL</code> for all other types.</p>
            </oberon-doc>
            <type>
              <pointer>
                <pointer-base>
                  <array>
                    <element-type>
                      <type-name module='SYSTEM' name='PTR' href='SYSTEM#PTR'/>
                    </element-type>
                  </array>
                </pointer-base>
              </pointer>
            </type>
          </field-decl>
          <field-decl name='module' id='StructDesc.module' export='read-only'>
            <oberon-doc>
              <summary>The module that defines this type descriptor.</summary>
              <p pad-after='yes' no-indent='yes'>The module that defines this type descriptor.  For predefined types, this is a reference to module <samp>RT0</samp>.</p>
            </oberon-doc>
            <type>
              <type-name name='Module' href='#Module'/>
            </type>
          </field-decl>
          <field-decl name='name' id='StructDesc.name' export='read-only'>
            <oberon-doc>
              <summary>Type name.</summary>
              <p pad-after='yes' no-indent='yes'>Type name.  <code>NIL</code> for anonymous types.</p>
            </oberon-doc>
            <type>
              <type-name name='Name' href='#Name'/>
            </type>
          </field-decl>
          <field-decl name='size' id='StructDesc.size' export='read-only'>
            <oberon-doc>
              <summary>Size of the data type in bytes.</summary>
              <p pad-after='yes' no-indent='yes'>Size of the data type in bytes.  For an open array type, which has no static size of its own, this field is size of the first element type that is not an open array.</p>
            </oberon-doc>
            <type>
              <type-name module='#predef' name='LONGINT'/>
            </type>
          </field-decl>
          <field-decl name='len' id='StructDesc.len' export='read-only'>
            <oberon-doc>
              <summary>Holds the length of an array, the number of open dimensions of an open array, or the extension level of a record.</summary>
              <p pad-after='yes' no-indent='yes'>Holds the length of an array, the number of open dimensions of an open array, or the extension level of a record.</p>
            </oberon-doc>
            <type>
              <type-name module='#predef' name='LONGINT'/>
            </type>
          </field-decl>
          <field-decl name='form' id='StructDesc.form' export='read-only'>
            <oberon-doc>
              <summary>Identifies which kind of type constructor variant is used.</summary>
              <p pad-after='yes' no-indent='yes'>Identifies which kind of type constructor variant is used.</p>
            </oberon-doc>
            <type>
              <type-name module='#predef' name='SHORTINT'/>
            </type>
          </field-decl>
        </record>
      </type>
    </type-decl>
    <procedure name='TypeOf' id='TypeOf' export='yes'>
      <oberon-doc>
        <summary>Returns the type of the record pointer <oberon-param href='#TypeOf.ptr'>ptr</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Returns the type of the record pointer <oberon-param href='#TypeOf.ptr'>ptr</oberon-param>.  The address <oberon-param href='#TypeOf.ptr'>ptr</oberon-param> must be a previous result of <oberon-proc href='#NewObject'>NewObject</oberon-proc>.  Result is undefined if <oberon-param href='#TypeOf.ptr'>ptr</oberon-param> is not a reference to a record object.</p>
      </oberon-doc>
      <formal-parameters>
        <parameter-decl name='ptr' id='TypeOf.ptr' export='no' variable-parameter='no'>
          <type>
            <type-name module='SYSTEM' name='PTR' href='SYSTEM#PTR'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name name='Struct' href='#Struct'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='ThisType' id='ThisType' export='yes'>
      <oberon-doc>
        <summary>Returns the type descriptor for the type <oberon-param href='#ThisType.name'>name</oberon-param> of module <oberon-param href='#ThisType.mid'>mid</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Returns the type descriptor for the type <oberon-param href='#ThisType.name'>name</oberon-param> of module <oberon-param href='#ThisType.mid'>mid</oberon-param>.  Result is <code>NIL</code> if there is not such type descriptor.</p>
      </oberon-doc>
      <formal-parameters>
        <parameter-decl name='mid' id='ThisType.mid' export='no' variable-parameter='no'>
          <type>
            <type-name name='Module' href='#Module'/>
          </type>
        </parameter-decl>
        <parameter-decl name='name' id='ThisType.name' export='no' variable-parameter='no'>
          <type>
            <array>
              <element-type>
                <type-name module='#predef' name='CHAR'/>
              </element-type>
            </array>
          </type>
        </parameter-decl>
        <result-type>
          <type-name name='Struct' href='#Struct'/>
        </result-type>
      </formal-parameters>
    </procedure>
  </class>
  <class name='Module'>
    <type-decl name='Module' id='Module' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='ModuleDesc' href='#ModuleDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='ModuleDesc' id='ModuleDesc' export='no'>
      <type>
        <record>
          <field-decl name='name' id='ModuleDesc.name' export='read-only'>
            <oberon-doc>
              <summary>Name of the module.</summary>
              <p pad-after='yes' no-indent='yes'>Name of the module.</p>
            </oberon-doc>
            <type>
              <type-name name='Name' href='#Name'/>
            </type>
          </field-decl>
          <field-decl name='typeDescriptors' id='ModuleDesc.typeDescriptors' export='read-only'>
            <oberon-doc>
              <summary>All type descriptors of this module that correspond to named types defined on the top level.</summary>
              <p pad-after='yes' no-indent='yes'>All type descriptors of this module that correspond to named types defined on the top level.  Descriptors are listed in no particular order.  The last element of the array has the value <code>NIL</code>.</p>
            </oberon-doc>
            <type>
              <pointer>
                <pointer-base>
                  <array>
                    <element-type>
                      <type-name name='Struct' href='#Struct'/>
                    </element-type>
                  </array>
                </pointer-base>
              </pointer>
            </type>
          </field-decl>
        </record>
      </type>
    </type-decl>
    <procedure name='ThisModule' id='ThisModule' export='yes'>
      <oberon-doc>
        <summary>Returns the module descriptor for the module <oberon-param href='#ThisModule.name'>name</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Returns the module descriptor for the module <oberon-param href='#ThisModule.name'>name</oberon-param>.  Result is <code>NIL</code> if no module of this name has been registered.</p>
      </oberon-doc>
      <formal-parameters>
        <parameter-decl name='name' id='ThisModule.name' export='no' variable-parameter='no'>
          <type>
            <array>
              <element-type>
                <type-name module='#predef' name='CHAR'/>
              </element-type>
            </array>
          </type>
        </parameter-decl>
        <result-type>
          <type-name name='Module' href='#Module'/>
        </result-type>
      </formal-parameters>
    </procedure>
  </class>
</interface-description>
