<?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='Strings' id=''>
  <oberon-doc>
    <p pad-after='yes' no-indent='yes'/>
    <p pad-after='yes' no-indent='no'>Unlike Modula-2, the behaviour of a procedure is undefined, if one of its input parameters is an unterminated character array.  All of the following procedures expect to get 0X terminated strings, and will return likewise terminated strings.</p>
    <p pad-after='yes' no-indent='no'>All input parameters that represent an array index or a length are expected to be non-negative.  In the descriptions below these restrictions are stated as pre-conditions of the procedures, but they aren't checked explicitly.  If this module is compiled with run-time index enabled, checks some illegal input values may be caught.  By default it is installed <emph>without</emph> index checks.</p>
    <p pad-after='yes' no-indent='no'/>
  </oberon-doc>
  <type-decl name='CompareResults' id='CompareResults' export='yes'>
    <oberon-doc>
      <summary>Result type of <oberon-proc href='#Compare'>Compare</oberon-proc>.</summary>
      <p pad-after='yes' no-indent='yes'>Result type of <oberon-proc href='#Compare'>Compare</oberon-proc>.</p>
    </oberon-doc>
    <type>
      <type-name module='#predef' name='SHORTINT'/>
    </type>
  </type-decl>
  <const-decl name='less' id='less' export='yes' value='unknown'>
    <oberon-doc>
      <summary>Result of <oberon-proc href='#Compare'>Compare</oberon-proc> if the first argument is lexically less than the second one.</summary>
      <p pad-after='yes' no-indent='yes'>Result of <oberon-proc href='#Compare'>Compare</oberon-proc> if the first argument is lexically less than the second one.</p>
    </oberon-doc>
  </const-decl>
  <const-decl name='equal' id='equal' export='yes' value='unknown'>
    <oberon-doc>
      <summary>Result of <oberon-proc href='#Compare'>Compare</oberon-proc> if the first argument is equal to the second one.</summary>
      <p pad-after='yes' no-indent='yes'>Result of <oberon-proc href='#Compare'>Compare</oberon-proc> if the first argument is equal to the second one.</p>
    </oberon-doc>
  </const-decl>
  <const-decl name='greater' id='greater' export='yes' value='unknown'>
    <oberon-doc>
      <summary>Result of <oberon-proc href='#Compare'>Compare</oberon-proc> if the first argument is lexically greater than the second one.</summary>
      <p pad-after='yes' no-indent='yes'>Result of <oberon-proc href='#Compare'>Compare</oberon-proc> if the first argument is lexically greater than the second one.</p>
    </oberon-doc>
  </const-decl>
  <procedure name='Length' id='Length' export='yes'>
    <oberon-doc>
      <summary>Returns the length of <oberon-param href='#Length.stringVal'>stringVal</oberon-param>.</summary>
      <p pad-after='yes' no-indent='yes'>Returns the length of <oberon-param href='#Length.stringVal'>stringVal</oberon-param>.  This is equal to the number of characters in <oberon-param href='#Length.stringVal'>stringVal</oberon-param> up to and excluding the first <code>0X</code>.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='stringVal' id='Length.stringVal' 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 module='#predef' name='INTEGER'/>
      </result-type>
    </formal-parameters>
  </procedure>
  <procedure name='Assign' id='Assign' export='yes'>
    <oberon-doc>
      <summary>Copies <oberon-param href='#Assign.source'>source</oberon-param> to <oberon-param href='#Assign.destination'>destination</oberon-param>.</summary>
      <p pad-after='yes' no-indent='yes'>Copies <oberon-param href='#Assign.source'>source</oberon-param> to <oberon-param href='#Assign.destination'>destination</oberon-param>.  Equivalent to the predefined procedure <code>COPY</code>.  Unlike <code>COPY</code>, this procedure can be assigned to a procedure variable.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='source' id='Assign.source' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='destination' id='Assign.destination' export='no' variable-parameter='yes'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='Extract' id='Extract' export='yes'>
    <oberon-doc>
      <summary>Copies at most <oberon-param href='#Extract.numberToExtract'>numberToExtract</oberon-param> characters from <oberon-param href='#Extract.source'>source</oberon-param> to <oberon-param href='#Extract.destination'>destination</oberon-param>, starting at position <oberon-param href='#Extract.startPos'>startPos</oberon-param> in <oberon-param href='#Extract.source'>source</oberon-param>.</summary>
      <p pad-after='yes' no-indent='yes'>Copies at most <oberon-param href='#Extract.numberToExtract'>numberToExtract</oberon-param> characters from <oberon-param href='#Extract.source'>source</oberon-param> to <oberon-param href='#Extract.destination'>destination</oberon-param>, starting at position <oberon-param href='#Extract.startPos'>startPos</oberon-param> in <oberon-param href='#Extract.source'>source</oberon-param>.  An empty string value will be extracted if <oberon-param href='#Extract.startPos'>startPos</oberon-param> is greater than or equal to <samp>Length(source)</samp>.</p>
      <pre-cond pad-after='yes'>
        <p pad-after='no' no-indent='yes'><oberon-param href='#Extract.startPos'>startPos</oberon-param> and <oberon-param href='#Extract.numberToExtract'>numberToExtract</oberon-param> are not negative.</p>
      </pre-cond>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='source' id='Extract.source' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='startPos' id='Extract.startPos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='numberToExtract' id='Extract.numberToExtract' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='destination' id='Extract.destination' export='no' variable-parameter='yes'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='Delete' id='Delete' export='yes'>
    <oberon-doc>
      <summary>Deletes at most <oberon-param href='#Delete.numberToDelete'>numberToDelete</oberon-param> characters from <oberon-param href='#Delete.stringVar'>stringVar</oberon-param>, starting at position <oberon-param href='#Delete.startPos'>startPos</oberon-param>.</summary>
      <p pad-after='yes' no-indent='yes'>Deletes at most <oberon-param href='#Delete.numberToDelete'>numberToDelete</oberon-param> characters from <oberon-param href='#Delete.stringVar'>stringVar</oberon-param>, starting at position <oberon-param href='#Delete.startPos'>startPos</oberon-param>.  The string value in <oberon-param href='#Delete.stringVar'>stringVar</oberon-param> is not altered if <oberon-param href='#Delete.startPos'>startPos</oberon-param> is greater than or equal to <samp>Length(stringVar)</samp>.</p>
      <pre-cond pad-after='yes'>
        <p pad-after='no' no-indent='yes'><oberon-param href='#Delete.startPos'>startPos</oberon-param> and <oberon-param href='#Delete.numberToDelete'>numberToDelete</oberon-param> are not negative.</p>
      </pre-cond>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='stringVar' id='Delete.stringVar' export='no' variable-parameter='yes'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='startPos' id='Delete.startPos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='numberToDelete' id='Delete.numberToDelete' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='Insert' id='Insert' export='yes'>
    <oberon-doc>
      <summary>Inserts <oberon-param href='#Insert.source'>source</oberon-param> into <oberon-param href='#Insert.destination'>destination</oberon-param> at position <oberon-param href='#Insert.startPos'>startPos</oberon-param>.</summary>
      <p pad-after='yes' no-indent='yes'>Inserts <oberon-param href='#Insert.source'>source</oberon-param> into <oberon-param href='#Insert.destination'>destination</oberon-param> at position <oberon-param href='#Insert.startPos'>startPos</oberon-param>.  After the call <oberon-param href='#Insert.destination'>destination</oberon-param> contains the string that is contructed by first splitting <oberon-param href='#Insert.destination'>destination</oberon-param> at the position <oberon-param href='#Insert.startPos'>startPos</oberon-param> and then concatenating the first half, <oberon-param href='#Insert.source'>source</oberon-param>, and the second half.  The string value in <oberon-param href='#Insert.destination'>destination</oberon-param> is not altered if <oberon-param href='#Insert.startPos'>startPos</oberon-param> is greater than <samp>Length(source)</samp>.  If <samp>startPos = Length(source)</samp>, then <oberon-param href='#Insert.source'>source</oberon-param> is appended to <oberon-param href='#Insert.destination'>destination</oberon-param>.</p>
      <pre-cond pad-after='yes'>
        <p pad-after='no' no-indent='yes'><oberon-param href='#Insert.startPos'>startPos</oberon-param> is not negative.</p>
      </pre-cond>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='source' id='Insert.source' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='startPos' id='Insert.startPos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='destination' id='Insert.destination' export='no' variable-parameter='yes'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='Replace' id='Replace' export='yes'>
    <oberon-doc>
      <summary>Copies <oberon-param href='#Replace.source'>source</oberon-param> into <oberon-param href='#Replace.destination'>destination</oberon-param>, starting at position <oberon-param href='#Replace.startPos'>startPos</oberon-param>.</summary>
      <p pad-after='yes' no-indent='yes'>Copies <oberon-param href='#Replace.source'>source</oberon-param> into <oberon-param href='#Replace.destination'>destination</oberon-param>, starting at position <oberon-param href='#Replace.startPos'>startPos</oberon-param>. Copying stops when all of <oberon-param href='#Replace.source'>source</oberon-param> has been copied, or when the last character of the string value in <oberon-param href='#Replace.destination'>destination</oberon-param> has been replaced.  The string value in <oberon-param href='#Replace.destination'>destination</oberon-param> is not altered if <oberon-param href='#Replace.startPos'>startPos</oberon-param> is greater than or equal to <samp>Length(source)</samp>.</p>
      <pre-cond pad-after='yes'>
        <p pad-after='no' no-indent='yes'><oberon-param href='#Replace.startPos'>startPos</oberon-param> is not negative.</p>
      </pre-cond>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='source' id='Replace.source' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='startPos' id='Replace.startPos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='destination' id='Replace.destination' export='no' variable-parameter='yes'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='Append' id='Append' export='yes'>
    <oberon-doc>
      <summary>Appends <oberon-param href='#Append.source'>source</oberon-param> to <oberon-param href='#Append.destination'>destination</oberon-param>.</summary>
      <p pad-after='yes' no-indent='yes'>Appends <oberon-param href='#Append.source'>source</oberon-param> to <oberon-param href='#Append.destination'>destination</oberon-param>.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='source' id='Append.source' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='destination' id='Append.destination' export='no' variable-parameter='yes'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='Concat' id='Concat' export='yes'>
    <oberon-doc>
      <summary>Concatenates <oberon-param href='#Concat.source2'>source2</oberon-param> onto <oberon-param href='#Concat.source1'>source1</oberon-param> and copies the result into <oberon-param href='#Concat.destination'>destination</oberon-param>.</summary>
      <p pad-after='yes' no-indent='yes'>Concatenates <oberon-param href='#Concat.source2'>source2</oberon-param> onto <oberon-param href='#Concat.source1'>source1</oberon-param> and copies the result into <oberon-param href='#Concat.destination'>destination</oberon-param>.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='source1' id='Concat.source1' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='source2' id='Concat.source2' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='destination' id='Concat.destination' export='no' variable-parameter='yes'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='CanAssignAll' id='CanAssignAll' export='yes'>
    <oberon-doc>
      <summary>Returns <code>TRUE</code> if a number of characters, indicated by <oberon-param href='#CanAssignAll.sourceLength'>sourceLength</oberon-param>, will fit into <oberon-param href='#CanAssignAll.destination'>destination</oberon-param>; otherwise returns <code>FALSE</code>.</summary>
      <p pad-after='yes' no-indent='yes'>Returns <code>TRUE</code> if a number of characters, indicated by <oberon-param href='#CanAssignAll.sourceLength'>sourceLength</oberon-param>, will fit into <oberon-param href='#CanAssignAll.destination'>destination</oberon-param>; otherwise returns <code>FALSE</code>.</p>
      <pre-cond pad-after='yes'>
        <p pad-after='no' no-indent='yes'><oberon-param href='#CanAssignAll.sourceLength'>sourceLength</oberon-param> is not negative.</p>
      </pre-cond>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='sourceLength' id='CanAssignAll.sourceLength' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='destination' id='CanAssignAll.destination' 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>
  <procedure name='CanExtractAll' id='CanExtractAll' export='yes'>
    <oberon-doc>
      <summary>Returns <code>TRUE</code> if there are <oberon-param href='#CanExtractAll.numberToExtract'>numberToExtract</oberon-param> characters starting at <oberon-param href='#CanExtractAll.startPos'>startPos</oberon-param> and within the <oberon-param href='#CanExtractAll.sourceLength'>sourceLength</oberon-param> of some string, and if the capacity of <oberon-param href='#CanExtractAll.destination'>destination</oberon-param> is sufficient to hold <oberon-param href='#CanExtractAll.numberToExtract'>numberToExtract</oberon-param> characters; otherwise returns <code>FALSE</code>.</summary>
      <p pad-after='yes' no-indent='yes'>Returns <code>TRUE</code> if there are <oberon-param href='#CanExtractAll.numberToExtract'>numberToExtract</oberon-param> characters starting at <oberon-param href='#CanExtractAll.startPos'>startPos</oberon-param> and within the <oberon-param href='#CanExtractAll.sourceLength'>sourceLength</oberon-param> of some string, and if the capacity of <oberon-param href='#CanExtractAll.destination'>destination</oberon-param> is sufficient to hold <oberon-param href='#CanExtractAll.numberToExtract'>numberToExtract</oberon-param> characters; otherwise returns <code>FALSE</code>.</p>
      <pre-cond pad-after='yes'>
        <p pad-after='no' no-indent='yes'><oberon-param href='#CanExtractAll.sourceLength'>sourceLength</oberon-param>, <oberon-param href='#CanExtractAll.startPos'>startPos</oberon-param>, and <oberon-param href='#CanExtractAll.numberToExtract'>numberToExtract</oberon-param> are not negative.</p>
      </pre-cond>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='sourceLength' id='CanExtractAll.sourceLength' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='startPos' id='CanExtractAll.startPos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='numberToExtract' id='CanExtractAll.numberToExtract' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='destination' id='CanExtractAll.destination' 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>
  <procedure name='CanDeleteAll' id='CanDeleteAll' export='yes'>
    <oberon-doc>
      <summary>Returns <code>TRUE</code> if there are <oberon-param href='#CanDeleteAll.numberToDelete'>numberToDelete</oberon-param> characters starting at <oberon-param href='#CanDeleteAll.startPos'>startPos</oberon-param> and within the <oberon-param href='#CanDeleteAll.stringLength'>stringLength</oberon-param> of some string; otherwise returns <code>FALSE</code>.</summary>
      <p pad-after='yes' no-indent='yes'>Returns <code>TRUE</code> if there are <oberon-param href='#CanDeleteAll.numberToDelete'>numberToDelete</oberon-param> characters starting at <oberon-param href='#CanDeleteAll.startPos'>startPos</oberon-param> and within the <oberon-param href='#CanDeleteAll.stringLength'>stringLength</oberon-param> of some string; otherwise returns <code>FALSE</code>.</p>
      <pre-cond pad-after='yes'>
        <p pad-after='no' no-indent='yes'><oberon-param href='#CanDeleteAll.stringLength'>stringLength</oberon-param>, <oberon-param href='#CanDeleteAll.startPos'>startPos</oberon-param> and <oberon-param href='#CanDeleteAll.numberToDelete'>numberToDelete</oberon-param> are not negative.</p>
      </pre-cond>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='stringLength' id='CanDeleteAll.stringLength' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='startPos' id='CanDeleteAll.startPos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='numberToDelete' id='CanDeleteAll.numberToDelete' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <result-type>
        <type-name module='#predef' name='BOOLEAN'/>
      </result-type>
    </formal-parameters>
  </procedure>
  <procedure name='CanInsertAll' id='CanInsertAll' export='yes'>
    <oberon-doc>
      <summary>Returns <code>TRUE</code> if there is room for the insertion of <oberon-param href='#CanInsertAll.sourceLength'>sourceLength</oberon-param> characters from some string into <oberon-param href='#CanInsertAll.destination'>destination</oberon-param> starting at <oberon-param href='#CanInsertAll.startPos'>startPos</oberon-param>; otherwise returns <code>FALSE</code>.</summary>
      <p pad-after='yes' no-indent='yes'>Returns <code>TRUE</code> if there is room for the insertion of <oberon-param href='#CanInsertAll.sourceLength'>sourceLength</oberon-param> characters from some string into <oberon-param href='#CanInsertAll.destination'>destination</oberon-param> starting at <oberon-param href='#CanInsertAll.startPos'>startPos</oberon-param>; otherwise returns <code>FALSE</code>.</p>
      <pre-cond pad-after='yes'>
        <p pad-after='no' no-indent='yes'><oberon-param href='#CanInsertAll.sourceLength'>sourceLength</oberon-param> and <oberon-param href='#CanInsertAll.startPos'>startPos</oberon-param> are not negative.</p>
      </pre-cond>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='sourceLength' id='CanInsertAll.sourceLength' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='startPos' id='CanInsertAll.startPos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='destination' id='CanInsertAll.destination' 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>
  <procedure name='CanReplaceAll' id='CanReplaceAll' export='yes'>
    <oberon-doc>
      <summary>Returns <code>TRUE</code> if there is room for the replacement of <oberon-param href='#CanReplaceAll.sourceLength'>sourceLength</oberon-param> characters in <oberon-param href='#CanReplaceAll.destination'>destination</oberon-param> starting at <oberon-param href='#CanReplaceAll.startPos'>startPos</oberon-param>; otherwise returns <code>FALSE</code>.</summary>
      <p pad-after='yes' no-indent='yes'>Returns <code>TRUE</code> if there is room for the replacement of <oberon-param href='#CanReplaceAll.sourceLength'>sourceLength</oberon-param> characters in <oberon-param href='#CanReplaceAll.destination'>destination</oberon-param> starting at <oberon-param href='#CanReplaceAll.startPos'>startPos</oberon-param>; otherwise returns <code>FALSE</code>.</p>
      <pre-cond pad-after='yes'>
        <p pad-after='no' no-indent='yes'><oberon-param href='#CanReplaceAll.sourceLength'>sourceLength</oberon-param> and <oberon-param href='#CanReplaceAll.startPos'>startPos</oberon-param> are not negative.</p>
      </pre-cond>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='sourceLength' id='CanReplaceAll.sourceLength' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='startPos' id='CanReplaceAll.startPos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='destination' id='CanReplaceAll.destination' 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>
  <procedure name='CanAppendAll' id='CanAppendAll' export='yes'>
    <oberon-doc>
      <summary>Returns <code>TRUE</code> if there is sufficient room in <oberon-param href='#CanAppendAll.destination'>destination</oberon-param> to append a string of length <oberon-param href='#CanAppendAll.sourceLength'>sourceLength</oberon-param> to the string in <oberon-param href='#CanAppendAll.destination'>destination</oberon-param>; otherwise returns <code>FALSE</code>.</summary>
      <p pad-after='yes' no-indent='yes'>Returns <code>TRUE</code> if there is sufficient room in <oberon-param href='#CanAppendAll.destination'>destination</oberon-param> to append a string of length <oberon-param href='#CanAppendAll.sourceLength'>sourceLength</oberon-param> to the string in <oberon-param href='#CanAppendAll.destination'>destination</oberon-param>; otherwise returns <code>FALSE</code>.</p>
      <pre-cond pad-after='yes'>
        <p pad-after='no' no-indent='yes'><oberon-param href='#CanAppendAll.sourceLength'>sourceLength</oberon-param> is not negative.</p>
      </pre-cond>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='sourceLength' id='CanAppendAll.sourceLength' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='destination' id='CanAppendAll.destination' 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>
  <procedure name='CanConcatAll' id='CanConcatAll' export='yes'>
    <oberon-doc>
      <summary>Returns <code>TRUE</code> if there is sufficient room in <oberon-param href='#CanConcatAll.destination'>destination</oberon-param> for a two strings of lengths <oberon-param href='#CanConcatAll.source1Length'>source1Length</oberon-param> and <oberon-param href='#CanConcatAll.source2Length'>source2Length</oberon-param>; otherwise returns <code>FALSE</code>.</summary>
      <p pad-after='yes' no-indent='yes'>Returns <code>TRUE</code> if there is sufficient room in <oberon-param href='#CanConcatAll.destination'>destination</oberon-param> for a two strings of lengths <oberon-param href='#CanConcatAll.source1Length'>source1Length</oberon-param> and <oberon-param href='#CanConcatAll.source2Length'>source2Length</oberon-param>; otherwise returns <code>FALSE</code>.</p>
      <pre-cond pad-after='yes'>
        <p pad-after='no' no-indent='yes'><oberon-param href='#CanConcatAll.source1Length'>source1Length</oberon-param> and <oberon-param href='#CanConcatAll.source2Length'>source2Length</oberon-param> are not negative.</p>
      </pre-cond>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='source1Length' id='CanConcatAll.source1Length' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='source2Length' id='CanConcatAll.source2Length' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='destination' id='CanConcatAll.destination' 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>
  <procedure name='Compare' id='Compare' export='yes'>
    <oberon-doc>
      <summary>Returns <oberon-const href='#less'>less</oberon-const>, <oberon-const href='#equal'>equal</oberon-const>, or <oberon-const href='#greater'>greater</oberon-const>, according as <oberon-param href='#Compare.stringVal1'>stringVal1</oberon-param> is lexically less than, equal to, or greater than <oberon-param href='#Compare.stringVal2'>stringVal2</oberon-param>.</summary>
      <p pad-after='yes' no-indent='yes'>Returns <oberon-const href='#less'>less</oberon-const>, <oberon-const href='#equal'>equal</oberon-const>, or <oberon-const href='#greater'>greater</oberon-const>, according as <oberon-param href='#Compare.stringVal1'>stringVal1</oberon-param> is lexically less than, equal to, or greater than <oberon-param href='#Compare.stringVal2'>stringVal2</oberon-param>.  Note that Oberon-2 already contains predefined comparison operators on strings.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='stringVal1' id='Compare.stringVal1' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='stringVal2' id='Compare.stringVal2' 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 module='#predef' name='CompareResults'/>
      </result-type>
    </formal-parameters>
  </procedure>
  <procedure name='Equal' id='Equal' export='yes'>
    <oberon-doc>
      <summary>Returns <samp>stringVal1 = stringVal2</samp>.</summary>
      <p pad-after='yes' no-indent='yes'>Returns <samp>stringVal1 = stringVal2</samp>.  Unlike the predefined operator <samp>=</samp>, this procedure can be assigned to a procedure variable.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='stringVal1' id='Equal.stringVal1' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='stringVal2' id='Equal.stringVal2' 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 module='#predef' name='BOOLEAN'/>
      </result-type>
    </formal-parameters>
  </procedure>
  <procedure name='FindNext' id='FindNext' export='yes'>
    <oberon-doc>
      <summary>Looks forward for next occurrence of <oberon-param href='#FindNext.pattern'>pattern</oberon-param> in <oberon-param href='#FindNext.stringToSearch'>stringToSearch</oberon-param>, starting the search at position <oberon-param href='#FindNext.startPos'>startPos</oberon-param>.</summary>
      <p pad-after='yes' no-indent='yes'>Looks forward for next occurrence of <oberon-param href='#FindNext.pattern'>pattern</oberon-param> in <oberon-param href='#FindNext.stringToSearch'>stringToSearch</oberon-param>, starting the search at position <oberon-param href='#FindNext.startPos'>startPos</oberon-param>.  If <samp>startPos &lt; Length(stringToSearch)</samp> and <oberon-param href='#FindNext.pattern'>pattern</oberon-param> is found, <oberon-param href='#FindNext.patternFound'>patternFound</oberon-param> is returned as <code>TRUE</code>, and <oberon-param href='#FindNext.posOfPattern'>posOfPattern</oberon-param> contains the start position in <oberon-param href='#FindNext.stringToSearch'>stringToSearch</oberon-param> of <oberon-param href='#FindNext.pattern'>pattern</oberon-param>.  The position is a value in the range [startPos..Length(stringToSearch)-1].  Otherwise <oberon-param href='#FindNext.patternFound'>patternFound</oberon-param> is returned as <code>FALSE</code>, and <oberon-param href='#FindNext.posOfPattern'>posOfPattern</oberon-param> is unchanged.  If <samp>startPos &gt; Length(stringToSearch)-Length(Pattern)</samp> then <oberon-param href='#FindNext.patternFound'>patternFound</oberon-param> is returned as <code>FALSE</code>.</p>
      <pre-cond pad-after='yes'>
        <p pad-after='no' no-indent='yes'><oberon-param href='#FindNext.startPos'>startPos</oberon-param> is not negative.</p>
      </pre-cond>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='pattern' id='FindNext.pattern' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='stringToSearch' id='FindNext.stringToSearch' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='startPos' id='FindNext.startPos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='patternFound' id='FindNext.patternFound' export='no' variable-parameter='yes'>
        <type>
          <type-name module='#predef' name='BOOLEAN'/>
        </type>
      </parameter-decl>
      <parameter-decl name='posOfPattern' id='FindNext.posOfPattern' export='no' variable-parameter='yes'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='FindPrev' id='FindPrev' export='yes'>
    <oberon-doc>
      <summary>Looks backward for the previous occurrence of <oberon-param href='#FindPrev.pattern'>pattern</oberon-param> in <oberon-param href='#FindPrev.stringToSearch'>stringToSearch</oberon-param> and returns the position of the first character of the <oberon-param href='#FindPrev.pattern'>pattern</oberon-param> if found.</summary>
      <p pad-after='yes' no-indent='yes'>Looks backward for the previous occurrence of <oberon-param href='#FindPrev.pattern'>pattern</oberon-param> in <oberon-param href='#FindPrev.stringToSearch'>stringToSearch</oberon-param> and returns the position of the first character of the <oberon-param href='#FindPrev.pattern'>pattern</oberon-param> if found.  The search for the pattern begins at <oberon-param href='#FindPrev.startPos'>startPos</oberon-param>.  If <oberon-param href='#FindPrev.pattern'>pattern</oberon-param> is found, <oberon-param href='#FindPrev.patternFound'>patternFound</oberon-param> is returned as <code>TRUE</code>, and <oberon-param href='#FindPrev.posOfPattern'>posOfPattern</oberon-param> contains the start position in <oberon-param href='#FindPrev.stringToSearch'>stringToSearch</oberon-param> of pattern in the range [0..startPos].  Otherwise <oberon-param href='#FindPrev.patternFound'>patternFound</oberon-param> is returned as <code>FALSE</code>, and <oberon-param href='#FindPrev.posOfPattern'>posOfPattern</oberon-param> is unchanged.  The pattern might be found at the given value of <oberon-param href='#FindPrev.startPos'>startPos</oberon-param>.  The search will fail if <oberon-param href='#FindPrev.startPos'>startPos</oberon-param> is negative.  If <samp>startPos &gt; Length(stringToSearch)-Length(pattern)</samp> the whole string value is searched.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='pattern' id='FindPrev.pattern' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='stringToSearch' id='FindPrev.stringToSearch' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='startPos' id='FindPrev.startPos' export='no' variable-parameter='no'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
      <parameter-decl name='patternFound' id='FindPrev.patternFound' export='no' variable-parameter='yes'>
        <type>
          <type-name module='#predef' name='BOOLEAN'/>
        </type>
      </parameter-decl>
      <parameter-decl name='posOfPattern' id='FindPrev.posOfPattern' export='no' variable-parameter='yes'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='FindDiff' id='FindDiff' export='yes'>
    <oberon-doc>
      <summary>Compares the string values in <oberon-param href='#FindDiff.stringVal1'>stringVal1</oberon-param> and <oberon-param href='#FindDiff.stringVal2'>stringVal2</oberon-param> for differences.</summary>
      <p pad-after='yes' no-indent='yes'>Compares the string values in <oberon-param href='#FindDiff.stringVal1'>stringVal1</oberon-param> and <oberon-param href='#FindDiff.stringVal2'>stringVal2</oberon-param> for differences.  If they are equal, <oberon-param href='#FindDiff.differenceFound'>differenceFound</oberon-param> is returned as <code>FALSE</code>, and <code>TRUE</code> otherwise.  If <oberon-param href='#FindDiff.differenceFound'>differenceFound</oberon-param> is <code>TRUE</code>, <oberon-param href='#FindDiff.posOfDifference'>posOfDifference</oberon-param> is set to the position of the first difference; otherwise <oberon-param href='#FindDiff.posOfDifference'>posOfDifference</oberon-param> is unchanged.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='stringVal1' id='FindDiff.stringVal1' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='stringVal2' id='FindDiff.stringVal2' export='no' variable-parameter='no'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
      <parameter-decl name='differenceFound' id='FindDiff.differenceFound' export='no' variable-parameter='yes'>
        <type>
          <type-name module='#predef' name='BOOLEAN'/>
        </type>
      </parameter-decl>
      <parameter-decl name='posOfDifference' id='FindDiff.posOfDifference' export='no' variable-parameter='yes'>
        <type>
          <type-name module='#predef' name='INTEGER'/>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <procedure name='Capitalize' id='Capitalize' export='yes'>
    <oberon-doc>
      <summary>Applies the function <code>CAP</code> to each character of the string value in <oberon-param href='#Capitalize.stringVar'>stringVar</oberon-param>.</summary>
      <p pad-after='yes' no-indent='yes'>Applies the function <code>CAP</code> to each character of the string value in <oberon-param href='#Capitalize.stringVar'>stringVar</oberon-param>.</p>
    </oberon-doc>
    <formal-parameters>
      <parameter-decl name='stringVar' id='Capitalize.stringVar' export='no' variable-parameter='yes'>
        <type>
          <array>
            <element-type>
              <type-name module='#predef' name='CHAR'/>
            </element-type>
          </array>
        </type>
      </parameter-decl>
    </formal-parameters>
  </procedure>
  <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'/>
</interface-description>
