| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> |
| <HTML> |
| <head> |
| <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1"> |
| <TITLE>Unoidl syntax description</TITLE> |
| <META NAME="GENERATOR" CONTENT="StarOffice/5.2 (Win32)"> |
| <META NAME="CLASSIFICATION" CONTENT="Unoidl syntax description"> |
| <META NAME="KEYWORDS" CONTENT="UNO,Unoidl,syntax,description"> |
| </head> |
| <body LINK="#444488" VLINK="#444488" BGCOLOR="#eeeeff"> |
| <TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0 STYLE="page-break-before: always"> |
| <COL WIDTH=75> |
| <TR> |
| <TD BGCOLOR="#666699"> |
| <H1 ALIGN=CENTER STYLE="margin-top: 0cm; text-decoration: none"><A HREF="http://www.openoffice.org/"><IMG SRC="../../images/open_office_org_logo.gif" NAME="Grafik1" ALT="OpenOffice" ALIGN=RIGHT WIDTH=109 HEIGHT=54 BORDER=0></A><FONT COLOR="#ffffff"><FONT SIZE=6>Unoidl |
| syntax description</FONT></FONT></H1> |
| </TD> |
| </TR> |
| </TABLE> |
| <HR SIZE=3 noshade> |
| <TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0> |
| <COL WIDTH=61*> <COL WIDTH=162*> <COL WIDTH=32*> |
| <TR> |
| <TD COLSPAN=3 WIDTH=100% BGCOLOR="#666699"> |
| <H3 ALIGN=LEFT STYLE="margin-top: 0cm; text-decoration: none"><FONT COLOR="#ffffff"><FONT SIZE=4>Contents</FONT></FONT></H3> |
| </TD> |
| </TR> |
| <TR> |
| <TD COLSPAN=3 WIDTH=100%> |
| <p><A HREF="#Introduction">Introduction</A><BR> |
| <A HREF="#Keywords">Keywords</A><BR> |
| <A HREF="#Array">Basetypes<br> |
| </A> <A HREF="#Comments">Comments</A> <A HREF="#Array"><br> |
| Array </A><br> |
| <a href="#Union">Union</a> </p> |
| </TD> |
| </TR> |
| <TR> |
| <TD COLSPAN=3 WIDTH=100% BGCOLOR="#666699"> |
| <H3 ALIGN=LEFT STYLE="margin-top: 0cm; text-decoration: none"><A NAME="Introduction"></A> |
| <FONT COLOR="#ffffff"><FONT SIZE=4>Introduction</FONT></FONT></H3> |
| </TD> |
| </TR> |
| <TR> |
| <TD COLSPAN=3 WIDTH=100%> |
| <P>The unoidl is an idl language (interface description language) which is |
| similar to the corba idl. Idl is a language to describe interfaces and |
| types independently of any programming language and hardware platform. An |
| idl description is used by the idl compiler to generate code for these |
| interfaces in a selected target language. The generated code provides the |
| use of the described interfaces in the selected target language. The |
| mapping of the idl description to the target language was defined in an |
| appropriate language binding. </P> |
| <P>All possible idl definitions will be described now. The reader who is |
| intimate in C++ programming will see, that the syntax of the idl is similar |
| to the C++ syntax. Because the lexical conventions of the idl and the |
| structure of the definitions have a large degree with the ANSI standard for |
| C++.</P> |
| </TD> |
| </TR> |
| <TR> |
| <TD COLSPAN=3 WIDTH=100% BGCOLOR="#666699"> |
| <H3><A NAME="Keywords"></A><FONT COLOR="#ffffff">Keywords</FONT></H3> |
| </TD> |
| </TR> |
| <TR> |
| <TD COLSPAN=3 WIDTH=100%> |
| <P>The following table shows all keywords of the unoidl. All the keywords |
| are reserved and cannot be used as an identifier.</P> |
| <TABLE WIDTH=100% BORDER=1 CELLPADDING=4 CELLSPACING=0> |
| <TR VALIGN=TOP> |
| <TD WIDTH=17%><b>any</b></TD> |
| <TD WIDTH=17%><b>attribute</b></TD> |
| <TD WIDTH=17%><b>boolean</b></TD> |
| <TD WIDTH=17%><b>bound</b></TD> |
| <TD WIDTH=17%><b>byte</b></TD> |
| <TD WIDTH=17%><b>case</b></TD> |
| </TR> |
| <TR VALIGN=TOP> |
| <TD WIDTH=17%><b>char</b></TD> |
| <TD WIDTH=17%><b>const</b></TD> |
| <TD WIDTH=17%><b>constants</b></TD> |
| <TD WIDTH=17%><b>constrained</b></TD> |
| <TD WIDTH=17%><b>default</b></TD> |
| <TD WIDTH=17%><b>double</b></TD> |
| </TR> |
| <COL WIDTH=43*> <COL WIDTH=43*> <COL WIDTH=43*> <COL WIDTH=43*> <COL WIDTH=43*> |
| <COL WIDTH=43*> |
| <TR VALIGN=TOP> |
| <TD WIDTH=17%> |
| <P><b>enum</b></P> |
| </TD> |
| <TD WIDTH=17%><b>exception</b></TD> |
| <TD WIDTH=17%><b>float</b></TD> |
| <TD WIDTH=17%> |
| <P><b>hyper</b></P> |
| </TD> |
| <TD WIDTH=17%> |
| <P><b>in</b></P> |
| </TD> |
| <TD WIDTH=17%> |
| <P><b>inout</b></P> |
| </TD> |
| </TR> |
| <TR VALIGN=TOP> |
| <TD WIDTH=17%> |
| <P><b>interface</b></P> |
| </TD> |
| <TD WIDTH=17%> |
| <P><b>long</b></P> |
| </TD> |
| <TD WIDTH=17%> |
| <P ALIGN=LEFT><b>maybeambigious</b></P> |
| </TD> |
| <TD WIDTH=17%> |
| <P ALIGN=LEFT><b>maybedefault</b></P> |
| </TD> |
| <TD WIDTH=17%> |
| <P><b>maybevoid</b></P> |
| </TD> |
| <TD WIDTH=17%> |
| <P><b>module</b></P> |
| </TD> |
| </TR> |
| <tr valign=TOP> |
| <td width=17%> |
| <p><b>needs</b></p> |
| </td> |
| <td width=17%> |
| <p><b>observes</b></p> |
| </td> |
| <td width=17%> |
| <p><b>oneway</b></p> |
| </td> |
| <td width=17%> |
| <p><b>optional</b></p> |
| </td> |
| <td width=17%> |
| <p><b>out</b></p> |
| </td> |
| <td width=17%> |
| <p><b>property</b></p> |
| </td> |
| </tr> |
| <TR VALIGN=TOP> |
| <TD WIDTH=17%><b>raises</b></TD> |
| <TD WIDTH=17%><b>readonly</b></TD> |
| <TD WIDTH=17%><b>removable</b></TD> |
| <TD WIDTH=17%><b>sequence</b></TD> |
| <TD WIDTH=17%><b>service</b></TD> |
| <TD WIDTH=17%><b>short</b></TD> |
| </TR> |
| <TR VALIGN=TOP> |
| <TD WIDTH=17%><b>string</b></TD> |
| <TD WIDTH=17%><b>struct</b></TD> |
| <TD WIDTH=17%><b>switch</b></TD> |
| <TD WIDTH=17%><b>transient</b></TD> |
| <TD WIDTH=17%><b>type</b></TD> |
| <TD WIDTH=17%><b>typedef</b></TD> |
| </TR> |
| <tr valign=TOP> |
| <td width=17%><b>union</b></td> |
| <td width=17%><b>unsigned</b></td> |
| <td width=17%><b>void</b></td> |
| <td width=17%><b>FALSE</b></td> |
| <td width=17%><b>False</b></td> |
| <td width=17%><b>TRUE</b></td> |
| </tr> |
| <TR VALIGN=TOP> |
| <TD WIDTH=17%><b>True</b></TD> |
| <TD WIDTH=17%> </TD> |
| <TD WIDTH=17%> </TD> |
| <TD WIDTH=17%> </TD> |
| <TD WIDTH=17%> </TD> |
| <TD WIDTH=17%> </TD> |
| </TR> |
| </TABLE> |
| <BR> |
| </TD> |
| </TR> |
| <tr> |
| <td colspan=3 width=100% bgcolor="#666699"> |
| <h3><a name="IDL_Specification"></a><font color="#FFFFFF">IDL language specification</font></h3> |
| </td> |
| </tr> |
| <tr> |
| <td colspan=3 width=100%> |
| <p><i>Definition:</i></p> |
| <pre> |
| <b><a name="1"></a><font color="#FF0000">(1)</font> <idl_specification> := <definition>+ |
| |
| <a name="2"></a><font color="#FF0000">(2)</font> <definition> := <type_decl> ";" |
| | <module_decl> ";" |
| | <constant_decl> ";" |
| | <exception_decl> ";" |
| | <constants_decl> ";" |
| | <service_decl> ";" |
| |
| <font color="#FF0000"><a name="3"></a>(3)</font> <type_decl> := <interface> |
| | <struct_decl> |
| | <enum_decl> |
| | <union_decl> |
| | "typedef" <type_spec> <declarator> {"," <declarator> }* |
| |
| <a name="4"></a><font color="#FF0000">(4)</font> <interface> := <interface_decl> |
| | <forward_decl> |
| |
| <font color="#FF0000"><a name="5"></a>(5)</font> <forward_decl> := "interface" <identifier> |
| |
| <font color="#FF0000"><a name="6"></a>(6)</font> <interface_decl> := <interface_header> "{" <interface_body> "}" |
| |
| <font color="#FF0000"><a name="7"></a>(7)</font> <interface_header> := "interface" <identifier> [ <interface_inheritance> ] |
| |
| <font color="#FF0000"><a name="8"></a>(8)</font> <interface_inheritance> := ":" <interface_name> |
| |
| <font color="#FF0000"><a name="9"></a>(9)</font> <interface_name> := <scoped_name> |
| |
| <font color="#FF0000"><a name="10"></a>(10)</font> <scoped_name> := <identifier> |
| | "::" <scoped_name> |
| | <scoped_name> "::" <identifier> |
| |
| <font color="#FF0000"><a name="11"></a>(11)</font> <interface_body> := <export>+ |
| |
| <font color="#FF0000"><a name="12"></a>(12)</font> <export> := <attribute_decl> ";" |
| | <operation_decl> ";" |
| |
| <font color="#FF0000"><a name="13"></a>(13)</font> <attribute_decl> := <attribute_head> <type_spec> <declarator> { "," <declarator> }* |
| |
| <font color="#FF0000"><a name="14"></a>(14)</font> <attribute_head> := "[" ["readonly" ","] "attribute" "]" |
| | "[" "attribute" ["," "readonly"] "]" |
| |
| |
| <font color="#FF0000"><a name="15"></a>(15)</font> <declarator> := <identifier> |
| | <array_declarator> |
| |
| <font color="#FF0000"><a name="16"></a>(16)</font> <array_declarator> := <identifier> <array_size>+ |
| |
| <font color="#FF0000"><a name="17"></a>(17)</font> <array_size> := "[" <positive_int> "]" |
| |
| <font color="#FF0000"><a name="18"></a>(18)</font> <positive_int> := <const_expr> |
| |
| <font color="#FF0000"><a name="19"></a>(19)</font> <type_spec> := <simple_type_spec> |
| | constr_type_spec> |
| |
| <font color="#FF0000"><a name="20"></a>(20)</font> <simple_type_spec> := <base_type_spec> |
| | <template_type_spec> |
| | <scoped_name> |
| |
| <font color="#FF0000"><a name="21"></a>(21)</font> <base_type_spec> := <integer_type> |
| | <floating_point_type> |
| | <char_type> |
| | <byte_type> |
| | <boolean_type> |
| | <string_type> |
| | <any_type> |
| | <type_type> |
| |
| <font color="#FF0000"><a name="22"></a>(22)</font> <template_type> := <sequence_type> |
| | <array_type> |
| |
| <font color="#FF0000"><a name="23"></a>(23)</font> <sequence_type> := "sequence" "<" <type_spec> ">" |
| |
| <font color="#FF0000"><a name="24"></a>(24)</font> <array_type> := <type_spec> <array_size>+ |
| |
| <font color="#FF0000"><a name="25"></a>(25)</font> <floating_point_type> := "float" |
| | "double" |
| |
| <font color="#FF0000"><a name="26"></a>(26)</font> <integer_type> := <signed_int> |
| | <unsinged_int> |
| |
| <font color="#FF0000"><a name="27"></a>(27)</font> <signed_int> := "short" |
| | "long" |
| | "hyper" |
| |
| |
| <font color="#FF0000"><a name="28"></a>(28)</font> <unsigned_int> := "unsigned" "short" |
| | "unsigned" "long" |
| | "unsigned" "hyper" |
| |
| <font color="#FF0000"><a name="29"></a>(29)</font> <char_type> := "char" |
| |
| <font color="#FF0000"><a name="30"></a>(30)</font> <type_type> := "type" |
| |
| <font color="#FF0000"><a name="31"></a>(31)</font> <string_type> := "string" |
| |
| <font color="#FF0000"><a name="32"></a>(32)</font> <byte_type> := "byte" |
| |
| <font color="#FF0000"><a name="33"></a>(33)</font> <any_type" := "any" |
| |
| <font color="#FF0000"><a name="34"></a>(34)</font> <boolean_type> := "boolean" |
| |
| <font color="#FF0000"><a name="35"></a>(35)</font> <constr_type_spec> := <struct_type> |
| | <enum_type> |
| | <union_type> |
| |
| <font color="#FF0000"><a name="36"></a>(36)</font> <struct_type> := "struct" <identifier> [ <struct_inheritance> ] "{" <member>+ "}" |
| |
| <font color="#FF0000"><a name="37"></a>(37)</font> <struct_inheritance> := ":" <scoped_name> |
| |
| <font color="#FF0000"><a name="38"></a>(38)</font> <member> := <type_spec> <declarator> { "," <declarator> }* |
| |
| <font color="#FF0000"><a name="39"></a>(39)</font> enum_type> := enum <identifier> "{" <enumerator> { "," <enumerator> }* "}" |
| |
| <font color="#FF0000"><a name="40"></a>(40)</font> <enumerator> := <identifier> [ "=" <positive_int> ] |
| |
| <font color="#FF0000"><a name="41"></a>(41)</font> <union_type> := "union" <identifier> "switch" "(" <switch_type_spec> ")" |
| "{" <switch_body> "}" |
| |
| <font color="#FF0000"><a name="42"></a>(42)</font> <switch_type_spec> := <integer_type> |
| | <enum_type> |
| | <scoped_name> |
| |
| <font color="#FF0000"><a name="43"></a>(43)</font> <switch_body> := <case>+ |
| |
| <font color="#FF0000"><a name="44"></a>(44)</font> <case> := <case_label> <element_spec> ";" |
| |
| <font color="#FF0000"><a name="45"></a>(45)</font> <case_label> := "case" <const_expr> ":" |
| | "default" ":"; |
| |
| <font color="#FF0000"><a name="46"></a>(46)</font> <element_spec> := <type_spec> <declarator> |
| |
| <font color="#FF0000"><a name="47"></a>(47)</font> <exception_decl> := "exception" <identifier> [ <exception_inheritance> ] "{" <member>* "}" |
| |
| <font color="#FF0000"><a name="48"></a>(48)</font> <exception_inheritance> := ":" <scoped_name> |
| |
| <font color="#FF0000"><a name="49"></a>(49)</font> <module_decl> := "module" <identifier> "{" <definition>+ "}" |
| |
| <font color="#FF0000"><a name="50"></a>(50)</font> <constant_decl> := "const" <const_type> <identifier> "=" <const_expr> |
| |
| <font color="#FF0000"><a name="51"></a>(51)</font> <const_type> := <integer_type> |
| | <char_type> |
| | <boolean_type> |
| | <floating_point_type> |
| | <string_type> |
| | <scoped_name> |
| |
| <font color="#FF0000"><a name="52"></a>(52)</font> <const_expr> := <or_expr> |
| |
| <font color="#FF0000"><a name="53"></a>(53)</font> <or_expr> := <xor_expr> |
| | <or_expr> "|" <xor_expr> |
| |
| <font color="#FF0000"><a name="54"></a>(54)</font> <xor_expr> := <and_expr><br> | <xor_expr> "^" <and_expr> |
| |
| <font color="#FF0000"><a name="55"></a>(55)</font> <and_expr> := <shift_expr> |
| | <and_expr> "&" <shift_expr> |
| |
| <font color="#FF0000"><a name="56"></a>(56)</font> <shift_expr> := <add_Expr> |
| | <shift_expr ">>" <add_expr> |
| | <shift_expr "<<" <add_expr> |
| |
| <font color="#FF0000"><a name="57"></a>(57)</font> <add_expr> := <mult_expr> |
| | <add_expr> "+" <mult_expr> |
| | <add_expr> "-" <mult_expr> |
| |
| <font color="#FF0000"><a name="58"></a>(58)</font> <mult_Expr> := <unary_expr> |
| | <mult_expr> "*" <unary_expr> |
| | <mult_expr> "/" <unary_expr> |
| | <mult_expr> "%" <unary_expr> |
| |
| <font color="#FF0000"><a name="59"></a>(59)</font> <unary_expr> := <unary_operator><primary_expr> |
| | <primary_expr> |
| |
| <font color="#FF0000"><a name="60"></a>(60)</font> <unary_operator> := "-" | "+" | "~" |
| |
| <font color="#FF0000"><a name="61"></a>(61)</font> <primary_expr> := <scoped_name> |
| | <literal> |
| | "(" <const_expr> ")" |
| |
| <font color="#FF0000"><a name="62"></a>(62)</font> <literal> := <integer_literal> |
| | <string_literal> |
| | <character_literal> |
| | <floating_point_literal> |
| | <boolean_literal> |
| |
| <font color="#FF0000"><a name="63"></a>(63)</font> <boolean_literal> := "TRUE" |
| | "True" |
| | "FALSE" |
| | "False" |
| <font color="#FF0000"><a name="64"></a>(64)</font> <service_decl> := "service" <identifier> "{" <service_member>+ "}" |
| |
| <font color="#FF0000"><a name="65"></a>(65)</font> <service_member> := <property_decl> ";" |
| | <support_decl> ";" |
| | <export_decl> ";" |
| | <observe_decl> ";" |
| | <needs_decl> ";" |
| |
| <font color="#FF0000"><a name="66"></a>(66)</font> <property_decl> := <property_head> <type_spec> <declarator> { "," <declarator> }* |
| |
| <font color="#FF0000"><a name="67"></a>(67)</font> <property_head> := "[" {<property_flags> ","}* "property" "]" |
| | "[" "property" {"," <property_flags>}* "]" |
| |
| <font color="#FF0000"><a name="68"></a>(68)</font> <property_flags> := "readonly" |
| | "bound |
| | "constrained" |
| | "maybeambigious" |
| | "maybedefault" |
| | "maybevoid" |
| | "optional" |
| | "removable" |
| | "transient" |
| |
| <font color="#FF0000"><a name="69"></a>(69)</font> <support_decl> := "interface" <declarator> { "," <declarator> }* |
| |
| <font color="#FF0000"><a name="70"></a>(70)</font> <export_decl> := "service" <declarator> { "," <declarator> }* |
| |
| <font color="#FF0000"><a name="71"></a>(71)</font> <observe_decl> := "observe" <declarator> { "," <declarator> }* |
| |
| <font color="#FF0000"><a name="72"></a>(72)</font> <needs_decl> := "needs" <declarator> { "," <declarator> }* |
| |
| <font color="#FF0000"><a name="73"></a>(73)</font> <constants_decl> := "constants" <identifier> "{" <constant_decl>+ "}" |
| | </b></pre> |
| </td> |
| </tr> |
| <TR> |
| <TD COLSPAN=3 WIDTH=100% BGCOLOR="#666699"> |
| <H3><A NAME="Basetypes"></A><FONT COLOR="#ffffff">Basetypes</FONT></H3> |
| </TD> |
| </TR> |
| <TR> |
| <TD COLSPAN=3 WIDTH=100%> |
| <P>The unoidl supports the following basetypes:</P> |
| <table width="100%" border="1"> |
| <tr> |
| <td><b>any</b></td> |
| <td><b>boolean</b></td> |
| <td><b>byte</b></td> |
| <td><b>char</b></td> |
| <td><b>double</b></td> |
| <td><b>float</b></td> |
| <td><b>hyper</b></td> |
| <td><b>long</b></td> |
| </tr> |
| <tr> |
| <td><b>short</b></td> |
| <td><b>string</b></td> |
| <td><b>type</b></td> |
| <td><b>void</b></td> |
| <td><b>unsigned hyper</b></td> |
| <td><b>unsigned long</b></td> |
| <td><b>unsigned short</b></td> |
| <td> </td> |
| </tr> |
| </table> |
| <P>The values <b>TRUE</b> and <b>FALSE</b> (<b>True</b> and <b>False</b>) |
| are defined for the <B><I>boolean</I></B> type. The type |
| <B><I>byte</I></B> is a 1 byte type and represents a type which is not |
| modified by the transport to another computer. The representation of the |
| type <B><I>char</I></B> can be different on a computer which |
| hardware/software architecture is different. It depends on the |
| representation of the used charset. The type <b>any</b> is a type which |
| can represent all possible idl types. The type <b>type</b> is a metatype |
| which describes other types defined in IDL.</P> |
| </TD> |
| </TR> |
| <TR> |
| <TD COLSPAN=3 WIDTH=100% BGCOLOR="#666699"> |
| <H3><A NAME="Comments"></A><FONT COLOR="#ffffff">Comments</FONT></H3> |
| </TD> |
| </TR> |
| <TR> |
| <TD COLSPAN=3 WIDTH=100%> |
| <P>Comments are used to describe the source code. If the comment support |
| a special convention, it can be used for automatically generation of |
| documentation. The unoidl support 4 kinds of comments:</P> |
| <UL> |
| <LI> |
| <p><b>/* comment */</b></p> |
| <p>All characters between /* and */ are ignored by the idl compiler. |
| The characters /* are also ignored, so encapsulated comments are not |
| allowed.</P> |
| <LI> |
| <p><b>// comment end_of_line</b></p> |
| <p>With the characters // starts a comment which ends automatic at |
| the end of the line. All characters after // up to the end_ of_ line |
| character are ignored.</p> |
| <LI> |
| <p><b>/** comment */</b></p> |
| <p>The characters /** shows that a special comment for automatic |
| documentation generation begins. This kind of comment will be saved |
| as a special documentation string by the compiler for the idl |
| definition which follow this comment.</p> |
| <LI> |
| <p><b>/// comment</b></p> |
| <p>The characters /// shows that a special comment for automatic |
| documentation generation begins. All characters after /// up to the |
| end_ of_ line character are saved as a special documentation string |
| for the next valid idl definition.</p> |
| </UL> |
| </TD> |
| </TR> |
| <tr> |
| <td colspan=3 width=100% bgcolor="#666699"> |
| <h3><a name="Array"></a><font color="#FFFFFF">Array (not final, arrays can |
| not be used in UNO at this time)</font></h3> |
| </td> |
| </tr> |
| <tr> |
| <td colspan=3 width=100%> |
| <p>Arrays are not final specified in the UNO IDL and can not be used with |
| UNO at this time!!!</p> |
| </td> |
| </tr> |
| <tr> |
| <td colspan=3 width=100% bgcolor="#666699"> |
| <h3><a name="Union"></a><font color="#FFFFFF">Union (not final, unions can |
| not be used in UNO at this time)</font></h3> |
| </td> |
| </tr> |
| <tr> |
| <td colspan=3 width=100%> |
| <p>Unions are not final specified in the UNO IDL and can not be used with |
| UNO at this time!!!</p> |
| </td> |
| </tr> |
| <TR> |
| <TD COLSPAN=3 WIDTH=100%> |
| <HR SIZE=1 noshade> |
| </TD> |
| </TR> |
| <TR> |
| <TD WIDTH=50% BGCOLOR="#666699"> |
| <P ALIGN=LEFT><FONT COLOR="#ffffff"> Author: <A HREF="mailto:juergen.schmidt@germany.sun.com"><FONT COLOR="#ffffff">Jürgen |
| Schmidt</FONT></A> ($Date: 2004/10/29 06:35:09 $)<BR> |
| <I>Copyright 2001 Sun Microsystems, Inc., 901 San Antonio Road, Palo Alto, CA 94303 USA.</I></FONT> |
| </P> |
| </TD> |
| <TR> |
| <TD COLSPAN=3 WIDTH=100%> |
| <HR SIZE=1 noshade> |
| </TD> |
| </TR> |
| </TABLE> |
| </body> |
| </HTML> |