<!--
     Licensed to the Apache Software Foundation (ASF) under one or more
     contributor license agreements.  See the NOTICE file distributed with
     this work for additional information regarding copyright ownership.
     The ASF licenses this file to You under the Apache License, Version 2.0
     (the "License"); you may not use this file except in compliance with
     the License.  You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "hcodep://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Documentation Conventions</title>
<link rel=Stylesheet type="text/css" media=all href=drl.css>


<body>
<p class="title"><a name="Notation_Conventions"></a>Documentation Conventions</p>
<P> The DRL (Dynamic Runtime Layer) documentation set uses the following conventions: </P>
<table border=1 width="100%">
 <tr>
 <td class="TableHeading">Convention </td>
 <td class="TableHeading"> Explanation&nbsp;</td>
 <td class="TableHeading">Example</td>
 </tr>
 <tr>
 <td rowspan="5"><code>monospace</code> </td>
 <td class="TableCell"> Filenames</td>
 <td><code> ippsapi.h</code></td></tr>
 <tr>
 <td class="TableCell"> Directory names and pathnames </td>
 <td><code> \alt\include</code></td>
 </tr>
 <tr>
 <td class="TableCell"> Commands and command-line options</td> <td><code> ecl 
	-O2</code></td>
 </tr>
 <tr>
 <td class="TableCell"> Function names, methods, classes, data structures in 
	running text </td>
 <td class="TableCell">Use the <code> okCreateObjs </code> function to ...</td>
 </tr>
 <tr>
 <td class="TableCell"> Parameters or other placeholders &nbsp;</td>
    <td><code>ippiMalloc(int widthPixels, ...)<br>
      int* pStepBytes</code></td>
 </tr>
 <tr>
 <td class="TableCell"><code><b> monospace bold&nbsp; </b></code></td>
 <td class="TableCell"> User input </td>
 <td class="TableCell"><code> [c:] <b> dir</b></code></td>
 </tr>
 <tr>
 <td class="TableCell"><i>italics </i></td>
 <td class="TableCell"> Emphasis; introducing or defining terms</td>
 <td class="TableCell"> The term <i> access</i> takes as its subject ... </td>
 </tr>
 <tr>
 <td class="TableCell"> [ ]</td>
 <td class="TableCell"> Optional items</td>
 <td class="TableCell"><code> -Fa[c]</code> Indicates these command-line 
	options: <code> -Fa</code> and <code> -Fac</code></td>
 </tr>
 <tr>
 <td class="TableCell"> { | }  </td>
 <td class="TableCell"> Choice of one item from a selection of two or more 
	items</td>
 <td class="TableCell"><code> -aX{K | W | P}</code> Indicates these command-line 
	options: <code><br> -aXK <br> -aXW <br> -aXP</code></tr></table>
</body>

</html>
