Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 6fd5939a63d29067c5ab016a476cd3df > files > 40

ocaml-extlib-1.5.1-3mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<link rel="Start" href="index.html">
<link rel="previous" href="Global.html">
<link rel="next" href="OptParse.html">
<link rel="Up" href="index.html">
<link title="Index of types" rel=Appendix href="index_types.html">
<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
<link title="Index of values" rel=Appendix href="index_values.html">
<link title="Index of class methods" rel=Appendix href="index_methods.html">
<link title="Index of classes" rel=Appendix href="index_classes.html">
<link title="Index of modules" rel=Appendix href="index_modules.html">
<link title="Base64" rel="Chapter" href="Base64.html">
<link title="BitSet" rel="Chapter" href="BitSet.html">
<link title="Dllist" rel="Chapter" href="Dllist.html">
<link title="DynArray" rel="Chapter" href="DynArray.html">
<link title="Enum" rel="Chapter" href="Enum.html">
<link title="ExtArray" rel="Chapter" href="ExtArray.html">
<link title="ExtHashtbl" rel="Chapter" href="ExtHashtbl.html">
<link title="ExtList" rel="Chapter" href="ExtList.html">
<link title="ExtString" rel="Chapter" href="ExtString.html">
<link title="Global" rel="Chapter" href="Global.html">
<link title="IO" rel="Chapter" href="IO.html">
<link title="OptParse" rel="Chapter" href="OptParse.html">
<link title="Option" rel="Chapter" href="Option.html">
<link title="PMap" rel="Chapter" href="PMap.html">
<link title="RefList" rel="Chapter" href="RefList.html">
<link title="Std" rel="Chapter" href="Std.html">
<link title="UChar" rel="Chapter" href="UChar.html">
<link title="UTF8" rel="Chapter" href="UTF8.html">
<link title="Unzip" rel="Chapter" href="Unzip.html"><link title="Standard API" rel="Section" href="#6_StandardAPI">
<link title="Creation of IO Inputs/Outputs" rel="Section" href="#6_CreationofIOInputsOutputs">
<link title="Utilities" rel="Section" href="#6_Utilities">
<link title="Binary files API" rel="Section" href="#6_BinaryfilesAPI">
<link title="Bits API" rel="Section" href="#6_BitsAPI">
<link title="Generic IO Object Wrappers" rel="Section" href="#6_GenericIOObjectWrappers">
<title>IO</title>
</head>
<body>
<div class="navbar"><a href="Global.html">Previous</a>
&nbsp;<a href="index.html">Up</a>
&nbsp;<a href="OptParse.html">Next</a>
</div>
<center><h1>Module <a href="type_IO.html">IO</a></h1></center>
<br>
<pre><span class="keyword">module</span> IO: <code class="code">sig</code> <a href="IO.html">..</a> <code class="code">end</code></pre>High-order abstract I/O.
<p>

	IO module simply deals with abstract inputs/outputs. It provides a
	set of methods for working with these IO as well as several
	constructors that enable to write to an underlying channel, buffer,
	or enum.<br>
<hr width="100%">
<pre><span class="keyword">type</span> <a name="TYPEinput"></a><code class="type"></code>input </pre>
<div class="info">
The abstract input type.<br>
</div>

<pre><span class="keyword">type</span> <a name="TYPEoutput"></a><code class="type">'a</code> output </pre>
<div class="info">
The abstract output type, <code class="code">'a</code> is the accumulator data, it is returned
	when the <code class="code">close_out</code> function is called.<br>
</div>

<pre><span class="keyword">exception</span> <a name="EXCEPTIONNo_more_input"></a>No_more_input</pre>
<div class="info">
This exception is raised when reading on an input with the <code class="code">read</code> or
  <code class="code">nread</code> functions while there is no available token to read.<br>
</div>
<pre><span class="keyword">exception</span> <a name="EXCEPTIONInput_closed"></a>Input_closed</pre>
<div class="info">
This exception is raised when reading on a closed input.<br>
</div>
<pre><span class="keyword">exception</span> <a name="EXCEPTIONOutput_closed"></a>Output_closed</pre>
<div class="info">
This exception is raised when reading on a closed output.<br>
</div>
<br>
<a name="6_StandardAPI"></a>
<h6>Standard API</h6><br>
<pre><span class="keyword">val</span> <a name="VALread"></a>read : <code class="type"><a href="IO.html#TYPEinput">input</a> -> char</code></pre><div class="info">
Read a single char from an input or raise <code class="code">No_more_input</code> if
  no input available.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALnread"></a>nread : <code class="type"><a href="IO.html#TYPEinput">input</a> -> int -> string</code></pre><div class="info">
<code class="code">nread i n</code> reads a string of size up to <code class="code">n</code> from an input.
  The function will raise <code class="code">No_more_input</code> if no input is available.
  It will raise <code class="code">Invalid_argument</code> if <code class="code">n</code> &lt; 0.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALreally_nread"></a>really_nread : <code class="type"><a href="IO.html#TYPEinput">input</a> -> int -> string</code></pre><div class="info">
<code class="code">really_nread i n</code> reads a string of exactly <code class="code">n</code> characters
  from the input. Raises <code class="code">No_more_input</code> if at least <code class="code">n</code> characters are
  not available. Raises <code class="code">Invalid_argument</code> if <code class="code">n</code> &lt; 0.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALinput"></a>input : <code class="type"><a href="IO.html#TYPEinput">input</a> -> string -> int -> int -> int</code></pre><div class="info">
<code class="code">input i s p l</code> reads up to <code class="code">l</code> characters from the given input, storing
  them in string <code class="code">s</code>, starting at character number <code class="code">p</code>. It returns the actual
  number of characters read or raise <code class="code">No_more_input</code> if no character can be
  read. It will raise <code class="code">Invalid_argument</code> if <code class="code">p</code> and <code class="code">l</code> do not designate a
  valid substring of <code class="code">s</code>.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALreally_input"></a>really_input : <code class="type"><a href="IO.html#TYPEinput">input</a> -> string -> int -> int -> int</code></pre><div class="info">
<code class="code">really_input i s p l</code> reads exactly <code class="code">l</code> characters from the given input,
  storing them in the string <code class="code">s</code>, starting at position <code class="code">p</code>. For consistency with
  <a href="IO.html#VALinput"><code class="code">IO.input</code></a> it returns <code class="code">l</code>. Raises <code class="code">No_more_input</code> if at <code class="code">l</code> characters are
  not available. Raises <code class="code">Invalid_argument</code> if <code class="code">p</code> and <code class="code">l</code> do not designate a
  valid substring of <code class="code">s</code>.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALclose_in"></a>close_in : <code class="type"><a href="IO.html#TYPEinput">input</a> -> unit</code></pre><div class="info">
Close the input. It can no longer be read from.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALwrite"></a>write : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> char -> unit</code></pre><div class="info">
Write a single char to an output.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALnwrite"></a>nwrite : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> string -> unit</code></pre><div class="info">
Write a string to an output.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALoutput"></a>output : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> string -> int -> int -> int</code></pre><div class="info">
<code class="code">output o s p l</code> writes up to <code class="code">l</code> characters from string <code class="code">s</code>, starting at
  offset <code class="code">p</code>. It returns the number of characters written. It will raise
  <code class="code">Invalid_argument</code> if <code class="code">p</code> and <code class="code">l</code> do not designate a valid substring of <code class="code">s</code>.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALreally_output"></a>really_output : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> string -> int -> int -> int</code></pre><div class="info">
<code class="code">really_output o s p l</code> writes exactly <code class="code">l</code> characters from string <code class="code">s</code> onto
  the the output, starting with the character at offset <code class="code">p</code>. For consistency with
  <a href="IO.html#VALoutput"><code class="code">IO.output</code></a> it returns <code class="code">l</code>. Raises <code class="code">Invalid_argument</code> if <code class="code">p</code> and <code class="code">l</code> do not
  designate a valid substring of <code class="code">s</code>.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALflush"></a>flush : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> unit</code></pre><div class="info">
Flush an output.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALclose_out"></a>close_out : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> 'a</code></pre><div class="info">
Close the output and return its accumulator data.
  It can no longer be written.<br>
</div>
<br>
<a name="6_CreationofIOInputsOutputs"></a>
<h6>Creation of IO Inputs/Outputs</h6><br>
<pre><span class="keyword">val</span> <a name="VALinput_string"></a>input_string : <code class="type">string -> <a href="IO.html#TYPEinput">input</a></code></pre><div class="info">
Create an input that will read from a string.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALoutput_string"></a>output_string : <code class="type">unit -> string <a href="IO.html#TYPEoutput">output</a></code></pre><div class="info">
Create an output that will write into a string in an efficient way.
  When closed, the output returns all the data written into it.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALinput_channel"></a>input_channel : <code class="type">Pervasives.in_channel -> <a href="IO.html#TYPEinput">input</a></code></pre><div class="info">
Create an input that will read from a channel.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALoutput_channel"></a>output_channel : <code class="type">Pervasives.out_channel -> unit <a href="IO.html#TYPEoutput">output</a></code></pre><div class="info">
Create an output that will write into a channel.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALinput_enum"></a>input_enum : <code class="type">char <a href="Enum.html#TYPEt">Enum.t</a> -> <a href="IO.html#TYPEinput">input</a></code></pre><div class="info">
Create an input that will read from an <code class="code">enum</code>.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALoutput_enum"></a>output_enum : <code class="type">unit -> char <a href="Enum.html#TYPEt">Enum.t</a> <a href="IO.html#TYPEoutput">output</a></code></pre><div class="info">
Create an output that will write into an <code class="code">enum</code>. The 
  final enum is returned when the output is closed.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALcreate_in"></a>create_in : <code class="type">read:(unit -> char) -><br>       input:(string -> int -> int -> int) -> close:(unit -> unit) -> <a href="IO.html#TYPEinput">input</a></code></pre><div class="info">
Fully create an input by giving all the needed functions.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALcreate_out"></a>create_out : <code class="type">write:(char -> unit) -><br>       output:(string -> int -> int -> int) -><br>       flush:(unit -> unit) -> close:(unit -> 'a) -> 'a <a href="IO.html#TYPEoutput">output</a></code></pre><div class="info">
Fully create an output by giving all the needed functions.<br>
</div>
<br>
<a name="6_Utilities"></a>
<h6>Utilities</h6><br>
<pre><span class="keyword">val</span> <a name="VALprintf"></a>printf : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> ('b, unit, string, unit) Pervasives.format4 -> 'b</code></pre><div class="info">
The printf function works for any output.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALread_all"></a>read_all : <code class="type"><a href="IO.html#TYPEinput">input</a> -> string</code></pre><div class="info">
read all the contents of the input until <code class="code">No_more_input</code> is raised.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALpipe"></a>pipe : <code class="type">unit -> <a href="IO.html#TYPEinput">input</a> * unit <a href="IO.html#TYPEoutput">output</a></code></pre><div class="info">
Create a pipe between an input and an ouput. Data written from
  the output can be read from the input.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALpos_in"></a>pos_in : <code class="type"><a href="IO.html#TYPEinput">input</a> -> <a href="IO.html#TYPEinput">input</a> * (unit -> int)</code></pre><div class="info">
Create an input that provide a count function of the number of bytes
  read from it.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALpos_out"></a>pos_out : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> 'a <a href="IO.html#TYPEoutput">output</a> * (unit -> int)</code></pre><div class="info">
Create an output that provide a count function of the number of bytes
  written through it.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALcast_output"></a>cast_output : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> unit <a href="IO.html#TYPEoutput">output</a></code></pre><div class="info">
You can safely transform any output to an unit output in a safe way 
  by using this function.<br>
</div>
<br>
<a name="6_BinaryfilesAPI"></a>
<h6>Binary files API</h6>
<p>

	Here is some API useful for working with binary files, in particular
	binary files generated by C applications. By default, encoding of
	multibyte integers is low-endian. The BigEndian module provide multibyte
	operations with other encoding.<br>
<pre><span class="keyword">exception</span> <a name="EXCEPTIONOverflow"></a>Overflow <span class="keyword">of</span> <code class="type">string</code></pre>
<div class="info">
Exception raised when a read or write operation cannot be completed.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALread_byte"></a>read_byte : <code class="type"><a href="IO.html#TYPEinput">input</a> -> int</code></pre><div class="info">
Read an unsigned 8-bit integer.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALread_signed_byte"></a>read_signed_byte : <code class="type"><a href="IO.html#TYPEinput">input</a> -> int</code></pre><div class="info">
Read an signed 8-bit integer.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALread_ui16"></a>read_ui16 : <code class="type"><a href="IO.html#TYPEinput">input</a> -> int</code></pre><div class="info">
Read an unsigned 16-bit word.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALread_i16"></a>read_i16 : <code class="type"><a href="IO.html#TYPEinput">input</a> -> int</code></pre><div class="info">
Read a signed 16-bit word.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALread_i32"></a>read_i32 : <code class="type"><a href="IO.html#TYPEinput">input</a> -> int</code></pre><div class="info">
Read a signed 32-bit integer. Raise <code class="code">Overflow</code> if the
  read integer cannot be represented as a Caml 31-bit integer.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALread_real_i32"></a>read_real_i32 : <code class="type"><a href="IO.html#TYPEinput">input</a> -> int32</code></pre><div class="info">
Read a signed 32-bit integer as an OCaml int32.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALread_i64"></a>read_i64 : <code class="type"><a href="IO.html#TYPEinput">input</a> -> int64</code></pre><div class="info">
Read a signed 64-bit integer as an OCaml int64.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALread_double"></a>read_double : <code class="type"><a href="IO.html#TYPEinput">input</a> -> float</code></pre><div class="info">
Read an IEEE double precision floating point value.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALread_string"></a>read_string : <code class="type"><a href="IO.html#TYPEinput">input</a> -> string</code></pre><div class="info">
Read a null-terminated string.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALread_line"></a>read_line : <code class="type"><a href="IO.html#TYPEinput">input</a> -> string</code></pre><div class="info">
Read a LF or CRLF terminated string.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALwrite_byte"></a>write_byte : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> int -> unit</code></pre><div class="info">
Write an unsigned 8-bit byte.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALwrite_ui16"></a>write_ui16 : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> int -> unit</code></pre><div class="info">
Write an unsigned 16-bit word.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALwrite_i16"></a>write_i16 : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> int -> unit</code></pre><div class="info">
Write a signed 16-bit word.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALwrite_i32"></a>write_i32 : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> int -> unit</code></pre><div class="info">
Write a signed 32-bit integer.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALwrite_real_i32"></a>write_real_i32 : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> int32 -> unit</code></pre><div class="info">
Write an OCaml int32.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALwrite_i64"></a>write_i64 : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> int64 -> unit</code></pre><div class="info">
Write an OCaml int64.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALwrite_double"></a>write_double : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> float -> unit</code></pre><div class="info">
Write an IEEE double precision floating point value.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALwrite_string"></a>write_string : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> string -> unit</code></pre><div class="info">
Write a string and append an null character.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALwrite_line"></a>write_line : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> string -> unit</code></pre><div class="info">
Write a line and append a LF (it might be converted
	to CRLF on some systems depending on the underlying IO).<br>
</div>
<pre><span class="keyword">module</span> <a href="IO.BigEndian.html">BigEndian</a>: <code class="code">sig</code> <a href="IO.BigEndian.html">..</a> <code class="code">end</code></pre><div class="info">
Same as operations above, but use big-endian encoding
</div>
<br>
<a name="6_BitsAPI"></a>
<h6>Bits API</h6>
<p>

	This enable you to read and write from an IO bit-by-bit or several bits
	at the same time.<br>
<pre><span class="keyword">type</span> <a name="TYPEin_bits"></a><code class="type"></code>in_bits </pre>

<pre><span class="keyword">type</span> <a name="TYPEout_bits"></a><code class="type"></code>out_bits </pre>

<pre><span class="keyword">exception</span> <a name="EXCEPTIONBits_error"></a>Bits_error</pre>
<pre><span class="keyword">val</span> <a name="VALinput_bits"></a>input_bits : <code class="type"><a href="IO.html#TYPEinput">input</a> -> <a href="IO.html#TYPEin_bits">in_bits</a></code></pre><div class="info">
Read bits from an input<br>
</div>
<pre><span class="keyword">val</span> <a name="VALoutput_bits"></a>output_bits : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> <a href="IO.html#TYPEout_bits">out_bits</a></code></pre><div class="info">
Write bits to an output<br>
</div>
<pre><span class="keyword">val</span> <a name="VALread_bits"></a>read_bits : <code class="type"><a href="IO.html#TYPEin_bits">in_bits</a> -> int -> int</code></pre><div class="info">
Read up to 31 bits, raise Bits_error if n &lt; 0 or n &gt; 31<br>
</div>
<pre><span class="keyword">val</span> <a name="VALwrite_bits"></a>write_bits : <code class="type"><a href="IO.html#TYPEout_bits">out_bits</a> -> nbits:int -> int -> unit</code></pre><div class="info">
Write up to 31 bits represented as a value, raise Bits_error if nbits &lt; 0
 or nbits &gt; 31 or the value representation excess nbits.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALflush_bits"></a>flush_bits : <code class="type"><a href="IO.html#TYPEout_bits">out_bits</a> -> unit</code></pre><div class="info">
Flush remaining unwritten bits, adding up to 7 bits which values 0.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALdrop_bits"></a>drop_bits : <code class="type"><a href="IO.html#TYPEin_bits">in_bits</a> -> unit</code></pre><div class="info">
Drop up to 7 buffered bits and restart to next input character.<br>
</div>
<br>
<a name="6_GenericIOObjectWrappers"></a>
<h6>Generic IO Object Wrappers</h6>
<p>

	Theses OO Wrappers have been written to provide easy support of ExtLib
	IO by external librairies. If you want your library to support ExtLib
	IO without actually requiring ExtLib to compile, you can should implement
	the classes <code class="code">in_channel</code>, <code class="code">out_channel</code>, <code class="code">poly_in_channel</code> and/or
	<code class="code">poly_out_channel</code> which are the common IO specifications established
	for ExtLib, OCamlNet and Camomile.
<p>

	(see http://www.ocaml-programming.de/tmp/IO-Classes.html for more details).<br>
<pre><span class="keyword">class</span> <a name="TYPEin_channel"></a><a href="IO.in_channel.html">in_channel</a> : <code class="type"><a href="IO.html#TYPEinput">input</a> -> </code><code class="code">object</code> <a href="IO.in_channel.html">..</a> <code class="code">end</code></pre><pre><span class="keyword">class</span> <a name="TYPEout_channel"></a><a href="IO.out_channel.html">out_channel</a> : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> </code><code class="code">object</code> <a href="IO.out_channel.html">..</a> <code class="code">end</code></pre><pre><span class="keyword">class</span> <a name="TYPEin_chars"></a><a href="IO.in_chars.html">in_chars</a> : <code class="type"><a href="IO.html#TYPEinput">input</a> -> </code><code class="code">object</code> <a href="IO.in_chars.html">..</a> <code class="code">end</code></pre><pre><span class="keyword">class</span> <a name="TYPEout_chars"></a><a href="IO.out_chars.html">out_chars</a> : <code class="type">'a <a href="IO.html#TYPEoutput">output</a> -> </code><code class="code">object</code> <a href="IO.out_chars.html">..</a> <code class="code">end</code></pre><pre><span class="keyword">val</span> <a name="VALfrom_in_channel"></a>from_in_channel : <code class="type">#<a href="IO.in_channel.html">in_channel</a> -> <a href="IO.html#TYPEinput">input</a></code></pre><pre><span class="keyword">val</span> <a name="VALfrom_out_channel"></a>from_out_channel : <code class="type">#<a href="IO.out_channel.html">out_channel</a> -> unit <a href="IO.html#TYPEoutput">output</a></code></pre><pre><span class="keyword">val</span> <a name="VALfrom_in_chars"></a>from_in_chars : <code class="type">#<a href="IO.in_chars.html">in_chars</a> -> <a href="IO.html#TYPEinput">input</a></code></pre><pre><span class="keyword">val</span> <a name="VALfrom_out_chars"></a>from_out_chars : <code class="type">#<a href="IO.out_chars.html">out_chars</a> -> unit <a href="IO.html#TYPEoutput">output</a></code></pre></body></html>