Un outil pour savoir si une commande est posix - retour accueil
git clone git://bebou.netlib.re/isposix
Log | Files | Refs | README |
cksum.html (19758B)
1 <!-- Copyright 2001-2024 IEEE and The Open Group, All Rights Reserved --> 2 <!DOCTYPE HTML> 3 <html lang="en"> 4 <head> 5 <meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.8.0"> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 7 <link type="text/css" rel="stylesheet" href="style.css"><!-- Generated by The Open Group rhtm tool v1.2.4 --> 8 <!-- Copyright (c) 2001-2024 The Open Group, All Rights Reserved --> 9 <title>cksum</title> 10 </head> 11 <body bgcolor="white"> 12 <div class="NAVHEADER"> 13 <table summary="Header navigation table" class="nav" width="100%" border="0" cellpadding="0" cellspacing="0"> 14 <tr class="nav"> 15 <td class="nav" width="15%" align="left" valign="bottom"><a href="../utilities/chown.html" accesskey="P"><<< 16 Previous</a></td> 17 <td class="nav" width="70%" align="center" valign="bottom"><a href="contents.html">Home</a></td> 18 <td class="nav" width="15%" align="right" valign="bottom"><a href="../utilities/cmp.html" accesskey="N">Next >>></a></td> 19 </tr> 20 </table> 21 <hr align="left" width="100%"></div> 22 <script language="JavaScript" src="../jscript/codes.js"></script><basefont size="3"> 23 <center><font size="2">The Open Group Base Specifications Issue 8<br> 24 IEEE Std 1003.1-2024<br> 25 Copyright © 2001-2024 The IEEE and The Open Group</font></center> 26 <hr size="2" noshade> 27 <a name="top" id="top"></a> <a name="cksum" id="cksum"></a> <a name="tag_20_19" id="tag_20_19"></a><!-- cksum --> 28 <h4 class="mansect"><a name="tag_20_19_01" id="tag_20_19_01"></a>NAME</h4> 29 <blockquote>cksum — write file checksums and sizes</blockquote> 30 <h4 class="mansect"><a name="tag_20_19_02" id="tag_20_19_02"></a>SYNOPSIS</h4> 31 <blockquote class="synopsis"> 32 <p><code><tt>cksum</tt> <b>[</b><i>file</i><tt>...</tt><b>]</b></code></p> 33 </blockquote> 34 <h4 class="mansect"><a name="tag_20_19_03" id="tag_20_19_03"></a>DESCRIPTION</h4> 35 <blockquote> 36 <p>The <i>cksum</i> utility shall calculate and write to standard output a cyclic redundancy check (CRC) for each input file, and 37 also write to standard output the number of octets in each file. The CRC used is based on the polynomial used for CRC error 38 checking in the ISO/IEC 8802-3:1996 standard (Ethernet).</p> 39 <p>The encoding for the CRC checksum is defined by the generating polynomial:</p> 40 <pre> 41 <i>G</i><tt>(</tt><i>x</i><tt>)=</tt><i>x</i><tt><sup><small>32</small></sup>+</tt><i>x</i><tt><sup><small>26</small></sup>+</tt><i>x</i><tt><sup><small>23</small></sup>+</tt><i>x</i><tt><sup><small>22</small></sup>+</tt><i>x</i><tt><sup><small>16</small></sup>+</tt><i>x</i><tt><sup><small>12</small></sup>+</tt><i>x</i><tt><sup><small>11</small></sup>+</tt><i>x</i><tt><sup><small>10</small></sup>+</tt><i>x</i><tt><sup><small>8</small></sup>+</tt><i>x</i><tt><sup><small>7</small></sup>+</tt><i>x</i><tt><sup><small>5</small></sup>+</tt><i>x</i><tt><sup><small>4</small></sup>+</tt><i>x</i><tt><sup><small>2</small></sup>+</tt><i>x</i><tt>+1 42 </tt></pre> 43 <p>Mathematically, the CRC value corresponding to a given file shall be defined by the following procedure:</p> 44 <ol> 45 <li> 46 <p>The <i>n</i> bits to be evaluated are considered to be the coefficients of a mod 2 polynomial <i>M</i>(<i>x</i>) of degree 47 <i>n</i>-1. These <i>n</i> bits are the bits from the file, with the most significant bit being the most significant bit of the 48 first octet of the file and the last bit being the least significant bit of the last octet, padded with zero bits (if necessary) to 49 achieve an integral number of octets, followed by one or more octets representing the length of the file as a binary value, least 50 significant octet first. The smallest number of octets capable of representing this integer shall be used.</p> 51 </li> 52 <li> 53 <p><i>M</i>(<i>x</i>) is multiplied by <i>x</i><sup><small>32</small></sup> (that is, shifted left 32 bits) and divided by 54 <i>G</i>(<i>x</i>) using mod 2 division, producing a remainder <i>R</i>(<i>x</i>) of degree <= 31.</p> 55 </li> 56 <li> 57 <p>The coefficients of <i>R</i>(<i>x</i>) are considered to be a 32-bit sequence.</p> 58 </li> 59 <li> 60 <p>The bit sequence is complemented and the result is the CRC.</p> 61 </li> 62 </ol> 63 </blockquote> 64 <h4 class="mansect"><a name="tag_20_19_04" id="tag_20_19_04"></a>OPTIONS</h4> 65 <blockquote> 66 <p>None.</p> 67 </blockquote> 68 <h4 class="mansect"><a name="tag_20_19_05" id="tag_20_19_05"></a>OPERANDS</h4> 69 <blockquote> 70 <p>The following operand shall be supported:</p> 71 <dl compact> 72 <dd></dd> 73 <dt><i>file</i></dt> 74 <dd>A pathname of a file to be checked. If no <i>file</i> operands are specified, the standard input shall be used.</dd> 75 </dl> 76 </blockquote> 77 <h4 class="mansect"><a name="tag_20_19_06" id="tag_20_19_06"></a>STDIN</h4> 78 <blockquote> 79 <p>The standard input shall be used if no <i>file</i> operands are specified, and shall be used if a <i>file</i> operand is 80 <tt>'-'</tt> and the implementation treats the <tt>'-'</tt> as meaning standard input. Otherwise, the standard input shall not be 81 used. See the INPUT FILES section.</p> 82 </blockquote> 83 <h4 class="mansect"><a name="tag_20_19_07" id="tag_20_19_07"></a>INPUT FILES</h4> 84 <blockquote> 85 <p>The input files can be any file type.</p> 86 </blockquote> 87 <h4 class="mansect"><a name="tag_20_19_08" id="tag_20_19_08"></a>ENVIRONMENT VARIABLES</h4> 88 <blockquote> 89 <p>The following environment variables shall affect the execution of <i>cksum</i>:</p> 90 <dl compact> 91 <dd></dd> 92 <dt><i>LANG</i></dt> 93 <dd>Provide a default value for the internationalization variables that are unset or null. (See XBD <a href= 94 "../basedefs/V1_chap08.html#tag_08_02"><i>8.2 Internationalization Variables</i></a> for the precedence of internationalization 95 variables used to determine the values of locale categories.)</dd> 96 <dt><i>LC_ALL</i></dt> 97 <dd>If set to a non-empty string value, override the values of all the other internationalization variables.</dd> 98 <dt><i>LC_CTYPE</i></dt> 99 <dd>Determine the locale for the interpretation of sequences of bytes of text data as characters (for example, single-byte as 100 opposed to multi-byte characters in arguments).</dd> 101 <dt><i>LC_MESSAGES</i></dt> 102 <dd><br> 103 Determine the locale that should be used to affect the format and contents of diagnostic messages written to standard error.</dd> 104 <dt><i>NLSPATH</i></dt> 105 <dd><sup>[<a href="javascript:open_code('XSI')">XSI</a>]</sup> <img src="../images/opt-start.gif" alt="[Option Start]" border="0"> 106 Determine the location of messages objects and message catalogs. <img src="../images/opt-end.gif" alt="[Option End]" border= 107 "0"></dd> 108 </dl> 109 </blockquote> 110 <h4 class="mansect"><a name="tag_20_19_09" id="tag_20_19_09"></a>ASYNCHRONOUS EVENTS</h4> 111 <blockquote> 112 <p>Default.</p> 113 </blockquote> 114 <h4 class="mansect"><a name="tag_20_19_10" id="tag_20_19_10"></a>STDOUT</h4> 115 <blockquote> 116 <p>For each file processed successfully, the <i>cksum</i> utility shall write in the following format:</p> 117 <pre> 118 <tt>"%u %d %s\n", <</tt><i>checksum</i><tt>>, <</tt><i># of octets</i><tt>>, <</tt><i>pathname</i><tt>> 119 </tt></pre> 120 <p>If no <i>file</i> operand was specified, the pathname and its leading <space> shall be omitted.</p> 121 </blockquote> 122 <h4 class="mansect"><a name="tag_20_19_11" id="tag_20_19_11"></a>STDERR</h4> 123 <blockquote> 124 <p>The standard error shall be used only for diagnostic messages.</p> 125 </blockquote> 126 <h4 class="mansect"><a name="tag_20_19_12" id="tag_20_19_12"></a>OUTPUT FILES</h4> 127 <blockquote> 128 <p>None.</p> 129 </blockquote> 130 <h4 class="mansect"><a name="tag_20_19_13" id="tag_20_19_13"></a>EXTENDED DESCRIPTION</h4> 131 <blockquote> 132 <p>None.</p> 133 </blockquote> 134 <h4 class="mansect"><a name="tag_20_19_14" id="tag_20_19_14"></a>EXIT STATUS</h4> 135 <blockquote> 136 <p>The following exit values shall be returned:</p> 137 <dl compact> 138 <dd></dd> 139 <dt> 0</dt> 140 <dd>All files were processed successfully.</dd> 141 <dt>>0</dt> 142 <dd>An error occurred.</dd> 143 </dl> 144 </blockquote> 145 <h4 class="mansect"><a name="tag_20_19_15" id="tag_20_19_15"></a>CONSEQUENCES OF ERRORS</h4> 146 <blockquote> 147 <p>Default.</p> 148 </blockquote> 149 <hr> 150 <div class="box"><em>The following sections are informative.</em></div> 151 <h4 class="mansect"><a name="tag_20_19_16" id="tag_20_19_16"></a>APPLICATION USAGE</h4> 152 <blockquote> 153 <p>The <i>cksum</i> utility is typically used to quickly compare a suspect file against a trusted version of the same, such as to 154 ensure that files transmitted over noisy media arrive intact. However, this comparison cannot be considered cryptographically 155 secure. This utility should be avoided whenever non-trivial requirements (including safety and security) have to be fulfilled.</p> 156 <p>Although input files to <i>cksum</i> can be any type, the results need not be what would be expected on character special device 157 files or on file types not described by the System Interfaces volume of POSIX.1-2024. Since this volume of POSIX.1-2024 does not 158 specify the block size used when doing input, checksums of character special files need not process all of the data in those 159 files.</p> 160 <p>The algorithm is expressed in terms of a bitstream divided into octets. If a file is transmitted between two systems and 161 undergoes any data transformation (such as changing little-endian byte ordering to big-endian), identical CRC values cannot be 162 expected. Implementations performing such transformations may extend <i>cksum</i> to handle such situations.</p> 163 </blockquote> 164 <h4 class="mansect"><a name="tag_20_19_17" id="tag_20_19_17"></a>EXAMPLES</h4> 165 <blockquote> 166 <p>None.</p> 167 </blockquote> 168 <h4 class="mansect"><a name="tag_20_19_18" id="tag_20_19_18"></a>RATIONALE</h4> 169 <blockquote> 170 <p>The <i>cksum</i> utility is included in this standard for reasons of portability but is not suitable for uses where non-trivial 171 requirements (including safety and security) have to be fulfilled. Implementations are encouraged to provide utilities that 172 implement hash and integrity checksum algorithms of higher security and to keep up to date with developments in this area.</p> 173 <p>The following C-language program can be used as a model to describe the algorithm. It assumes that a <b>char</b> is one octet. 174 It also assumes that the entire file is available for one pass through the function. This was done for simplicity in demonstrating 175 the algorithm, rather than as an implementation model.</p> 176 <pre> 177 <tt>static unsigned long crctab[] = { 178 0x00000000, 179 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 180 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 181 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 182 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 183 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, 184 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 185 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 186 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 187 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 188 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe, 189 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, 190 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 191 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, 192 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 193 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 194 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 195 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 196 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 197 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, 198 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 199 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 200 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 201 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 202 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f, 203 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 204 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 205 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 206 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 207 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, 208 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 209 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 210 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 211 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 212 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 213 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, 214 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 215 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, 216 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 217 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 218 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 219 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 220 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087, 221 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, 222 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 223 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 224 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 225 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 226 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09, 227 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 228 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 229 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 230 }; 231 <br> 232 unsigned long memcrc(const unsigned char *b, size_t n) 233 { 234 /* Input arguments: 235 * const unsigned char* b == byte sequence to checksum 236 * size_t n == length of sequence 237 */ 238 <br> 239 register size_t i; 240 register unsigned c, s = 0; 241 <br> 242 for (i = n; i > 0; --i) { 243 c = *b++; 244 s = (s << 8) ^ crctab[(s >> 24) ^ c]; 245 } 246 <br> 247 /* Extend with the length of the string. */ 248 while (n != 0) { 249 c = n & 0377; 250 n >>= 8; 251 s = (s << 8) ^ crctab[(s >> 24) ^ c]; 252 } 253 <br> 254 return ~s; 255 } 256 </tt></pre> 257 <p>The historical practice of writing the number of "blocks" has been changed to writing the number of octets, since the latter 258 is not only more useful, but also since historical implementations have not been consistent in defining what a "block" meant.</p> 259 <p>The algorithm used was selected to increase the operational robustness of <i>cksum</i>. Neither the System V nor BSD <i>sum</i> 260 algorithm was selected. Since each of these was different and each was the default behavior on those systems, no realistic 261 compromise was available if either were selected—some set of historical applications would break. Therefore, the name was changed 262 to <i>cksum</i>. Although the historical <i>sum</i> commands will probably continue to be provided for many years, programs 263 designed for portability across systems should use the new name.</p> 264 <p>The algorithm selected is based on that used by the ISO/IEC 8802-3:1996 standard (Ethernet) for the frame check sequence 265 field. The algorithm used does not match the technical definition of a <i>checksum</i>; the term is used for historical reasons. 266 The length of the file is included in the CRC calculation because this parallels inclusion of a length field by Ethernet in its 267 CRC, but also because it guards against inadvertent collisions between files that begin with different series of zero octets. The 268 chance that two different files produce identical CRCs is much greater when their lengths are not considered. Keeping the length 269 and the checksum of the file itself separate would yield a slightly more robust algorithm, but historical usage has always been 270 that a single number (the checksum as printed) represents the signature of the file. It was decided that historical usage was the 271 more important consideration.</p> 272 <p>Early proposals contained modifications to the Ethernet algorithm that involved extracting table values whenever an intermediate 273 result became zero. This was demonstrated to be less robust than the current method and mathematically difficult to describe or 274 justify.</p> 275 <p>The calculation used is identical to that given in pseudo-code in the referenced Sarwate article. The pseudo-code rendition 276 is:</p> 277 <pre> 278 <tt>X <- 0; Y <- 0; 279 for i <- m -1 step -1 until 0 do 280 begin 281 T <- X(1) ^ A[i]; 282 X(1) <- X(0); X(0) <- Y(1); Y(1) <- Y(0); Y(0) <- 0; 283 comment: f[T] and f'[T] denote the T-th words in the 284 table f and f' ; 285 X <- X ^ f[T]; Y <- Y ^ f'[T]; 286 end 287 </tt></pre> 288 <p>The pseudo-code is reproduced exactly as given; however, note that in the case of <i>cksum</i>, <b>A[i]</b> represents a byte of 289 the file, the words <b>X</b> and <b>Y</b> are treated as a single 32-bit value, and the tables <b>f</b> and <b>f'</b> are a single 290 table containing 32-bit values.</p> 291 <p>The referenced Sarwate article also discusses generating the table.</p> 292 </blockquote> 293 <h4 class="mansect"><a name="tag_20_19_19" id="tag_20_19_19"></a>FUTURE DIRECTIONS</h4> 294 <blockquote> 295 <p>If this utility is directed to display a pathname that contains any bytes that have the encoded value of a <newline> 296 character when <newline> is a terminator or separator in the output format being used, implementations are encouraged to 297 treat this as an error. A future version of this standard may require implementations to treat this as an error.</p> 298 </blockquote> 299 <h4 class="mansect"><a name="tag_20_19_20" id="tag_20_19_20"></a>SEE ALSO</h4> 300 <blockquote> 301 <p>XBD <a href="../basedefs/V1_chap08.html#tag_08"><i>8. Environment Variables</i></a></p> 302 </blockquote> 303 <h4 class="mansect"><a name="tag_20_19_21" id="tag_20_19_21"></a>CHANGE HISTORY</h4> 304 <blockquote> 305 <p>First released in Issue 4.</p> 306 </blockquote> 307 <h4 class="mansect"><a name="tag_20_19_22" id="tag_20_19_22"></a>Issue 7</h4> 308 <blockquote> 309 <p>Austin Group Interpretation 1003.1-2001 #092 is applied.</p> 310 <p>SD5-XCU-ERN-97 is applied, updating the SYNOPSIS.</p> 311 <p>POSIX.1-2008, Technical Corrigendum 1, XCU/TC1-2008/0081 [446] is applied.</p> 312 </blockquote> 313 <h4 class="mansect"><a name="tag_20_19_23" id="tag_20_19_23"></a>Issue 8</h4> 314 <blockquote> 315 <p>Austin Group Defect 251 is applied, encouraging implementations to report an error if a utility is directed to display a 316 pathname that contains any bytes that have the encoded value of a <newline> character when <newline> is a terminator or 317 separator in the output format being used.</p> 318 <p>Austin Group Defect 1041 is applied, changing the APPLICATION USAGE and RATIONALE sections.</p> 319 <p>Austin Group Defect 1122 is applied, changing the description of <i>NLSPATH .</i></p> 320 </blockquote> 321 <div class="box"><em>End of informative text.</em></div> 322 <hr> 323 <p> </p> 324 <a href="#top"><span class="topOfPage">return to top of page</span></a><br> 325 <hr size="2" noshade> 326 <center><font size="2">UNIX® is a registered Trademark of The Open Group.<br> 327 POSIX™ is a Trademark of The IEEE.<br> 328 Copyright © 2001-2024 The IEEE and The Open Group, All Rights Reserved<br> 329 [ <a href="../mindex.html">Main Index</a> | <a href="../basedefs/contents.html">XBD</a> | <a href= 330 "../functions/contents.html">XSH</a> | <a href="../utilities/contents.html">XCU</a> | <a href="../xrat/contents.html">XRAT</a> 331 ]</font></center> 332 <hr size="2" noshade> 333 <div class="NAVHEADER"> 334 <table summary="Header navigation table" class="nav" width="100%" border="0" cellpadding="0" cellspacing="0"> 335 <tr class="nav"> 336 <td class="nav" width="15%" align="left" valign="bottom"><a href="../utilities/chown.html" accesskey="P"><<< 337 Previous</a></td> 338 <td class="nav" width="70%" align="center" valign="bottom"><a href="contents.html">Home</a></td> 339 <td class="nav" width="15%" align="right" valign="bottom"><a href="../utilities/cmp.html" accesskey="N">Next >>></a></td> 340 </tr> 341 </table> 342 <hr align="left" width="100%"></div> 343 </body> 344 </html>