Thank you Kenneth.<br>I never noticed IMPLICIT / AUTOMATIC TAGS clause. :-)<br><br>Thank you many times.<br>Bob<br><br><div class="gmail_quote">2012/12/10 Kenneth Lundin <span dir="ltr"><<a href="mailto:kenneth.lundin@gmail.com" target="_blank">kenneth.lundin@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">See embedded comments below<br><br><div class="gmail_quote"><div class="im">On Mon, Dec 10, 2012 at 11:37 AM, Bohuslav Svancara <span dir="ltr"><<a href="mailto:bsvancara@gmail.com" target="_blank">bsvancara@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello!<br><br>I have some problem with ASN1.<br><br>- I have this ASN1 definition in the Test.asn file:<br><br>Test DEFINITIONS IMPLICIT TAGS ::=<br>


<br>BEGIN<br>EXPORTS Test;<br><br>Test ::= SEQUENCE<br>{<br>   a INTEGER,<br>


   b INTEGER DEFAULT 0<br>}<br> <br>END<br><br>- I am using this comand: <br><br>erl -eval asn1ct:compile(\"Test.asn\").<br></blockquote><div><br></div></div><div>Recommended way to invoke the ASN.1 compiler is</div>


<div>erlc Test.asn # this is equivalent to what you did above.</div><div><br></div><div>This will generate code for BER encoding rules with input/output as a list och integers 0..255</div><div><br></div><div>The most modern and fastest BER backend is invoked like this:</div>


<div>erlc -bber_bin +driver Test.asn </div><div><br></div><div>This will generate code for BER encoding rules with input/output as binaries </div><div class="im"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


It works fine.<br><br>But when I add a "DEFAULT 0" clause to the line "a INTEGER," so it looks like this:<br>


<br>   a INTEGER DEFAULT 0,<br><br>then asn1ct fails:<br><br>1> asn1error:7:'Test':'Test'<br>{asn1,{duplicates_of_the_tags,[{'UNIVERSAL','INTEGER'}]}}<br>1><br><br>Why please?<br><br>




- Release of Erlang 5.9/OTP R15B <br>- Windows 7 Prof 64-bit<br><br>
Sincerely,<br>Bob<br><br>----------------------------------------------------<br>Just for recap: Failing Test.asn looks like this:<br><br>Test DEFINITIONS IMPLICIT TAGS ::=<br><br>BEGIN<br>EXPORTS Test;<br><br>Test ::= SEQUENCE<br>





{<br>   a INTEGER DEFAULT 0,<br>   b INTEGER DEFAULT 0<br>}<br> <br>END<br><br></blockquote><div><br></div></div><div>The DEFAULT property on a component in a  SEQUENCE makes that property</div><div>optional , meaning that it can be omitted by the sender.</div>


<div><br></div><div>Since the BER encoding rules are used and the module default is IMPLICIT TAGS</div><div>the tags for the components in a SEQUENCE must be unique (if there are 2 or more optionals in a row). In this case , since no tags are introduced in the syntax the </div>


<div>tags for both a and b component will be UNIVERSAL, INTEGER and the 2 components can not be distinguished from each other. That's why the compiler reports an error.</div><div><br></div><div>In order to correct this you can either change module default to AUTOMATIC TAGS or</div>


<div>add you own tags into the declaration like this:</div><div><br></div><div>Test ::= SEQUENCE<br>{<br>   a [0] INTEGER DEFAULT 0,<br>   b [1] INTEGER DEFAULT 0<br>}<br> </div><div>Now you have two context specific unique tags 0 and 1 for the components which will make it possible to distinguish as a receiver which component (or both) that are</div>


<div>part of the message.</div><div><br></div><div>This is how ASN.1 works , it is not specific to the ASN.1 compiler in OTP</div><div><br></div><div><br></div><div>/Kenneth, Erlang/OTP, Ericsson</div></div>
</blockquote></div><br>