[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    AW: AW: SIP translate Union
From:       Marian Thomsen <marian.th () outlook ! de>
Date:       2020-12-04 9:41:18
Message-ID: AM0PR0502MB3764E60171D4ABA9208ED01296F10 () AM0PR0502MB3764 ! eurprd05 ! prod ! outlook ! com
[Download RAW message or body]

Hello,

I wanted to add that an anonymous structs 'foo' located in another struct 'bar' SIP \
can handle when giving 'foo' a type name and initializing them in 'bar'. That means I \
was wrong, when handling a union the anonymity should be taken away too. This \
unfortunately still leaves the problem with the error described in my last mail, when \
a union is located inside a struct.

M.T.
________________________________
Von: Marian Thomsen <marian.th@outlook.de>
Gesendet: Dienstag, 1. Dezember 2020 12:04
An: Phil Thompson <phil@riverbankcomputing.com>
Cc: pyqt@riverbankcomputing.com <pyqt@riverbankcomputing.com>
Betreff: AW: AW: SIP translate Union

Thank you very much, the last example helped me a lot!

I feel like I'm asking too much, but if you have some time I'm  stuck translating an \
(anonymos) union inside a struct. The anonymity does not seem to be the problem (I \
tested by naming it), but the location inside the struct. Another aproach was to use \
the existing struct as a wrapper, but I couldn't get it to work.

Here I tried by wrapping it inside a struct, but get the error message: 'field 'u' \
has incomplete type 'mu'.

test_union.h

struct myType{

    enum {CHAR, INT, DOUBLE} tag;
    union{                        // tested naming it 'mu', no difference
        /* tag = CHAR */
        char char_value;
        /* tag = INT */
        int int_value;
        /* tag = DOUBLE */
        double double_value;
    }u;
    void print_my_type() const;
};


The SIP file:


struct myType{

%TypeHeaderCode
#include <test_union.h>
%End

    enum tag {CHAR, INT, DOUBLE};

    struct mu_wrapper /PyName=mu/
    {

    %TypeHeaderCode
    #include <test_union.h>

    struct mu_wrapper
    {
        union mu u;
    };
    %End

        /* tag = CHAR */
        char char_value {
        %GetCode
            sipPy = PyUnicode_FromString(&(sipCpp->u.char_value));
        %End
        %SetCode
            if (PyUnicode_Check(sipPy))
                sipCpp->u.char_value;
            else
                sipErr = 1;
        %End
        };

        /* tag = INT */
        int int_value {
        %GetCode
            sipPy = PyLong_FromLong(sipCpp->u.int_value);
        %End
        %SetCode
            if (PyLong_Check(sipPy))
                sipCpp->u.int_value;
            else
                sipErr = 1;
        %End
        };

        /* tag = DOUBLE */
        double double_value {
        %GetCode
            sipPy = PyFloat_FromDouble(sipCpp->u.double_value);
        %End
        %SetCode
            if (PyFloat_Check(sipPy))
                sipCpp->u.double_value;
            else
                sipErr = 1;
        %End
        };
    };

    void print_my_type() const;
};


Thank you for your help!

M.T.

________________________________
Von: Phil Thompson <phil@riverbankcomputing.com>
Gesendet: Freitag, 27. November 2020 11:52
An: Marian Thomsen <marian.th@outlook.de>
Cc: pyqt@riverbankcomputing.com <pyqt@riverbankcomputing.com>
Betreff: Re: AW: SIP translate Union

On 26/11/2020 08:08, Marian Thomsen wrote:
> Thank you for the advice!
> 
> Unfortunately I cant get a simple example to work.
> I have a simple union in the header test_union.h
> 
> 
> union {
> int test1;
> int test2;
> } u;
> 
> And this is the best I got so far in the .sip file:
> 
> 
> struct union{
> 
> %TypeHeaderCode
> #include <test_union.h>
> %End
> 
> int *test1 {
> %GetCode
> sipPy = PyLong_FromLongLong(sipCpp->test1)
> if(sipPy == NULL)
> sipPy = NULL;
> %End
> %SetCode
> if (PyLong_Check(sipPy))
> sipCpp->test1;
> else
> sipErr = 1;
> %End
> };
> int *test2 {
> %GetCode
> sipPy = PyLong_FromLongLong(sipCpp->test2);
> if(sipPy == NULL)
> sipPy = NULL;
> %End
> %SetCode
> if (PyLong_Check(sipPy))
> sipCpp->test2;
> else
> sipErr = 1;
> %End
> };
> }u;
> 
> I get a syntax error in the last line and have tried to write it so
> that sip would understand it, but also with something like:
> 
> 
> typedef struct union union;
> union u{ ... };
> 
> I got no luck so far. Am I completly wrong?
> 
> Some advice would be appreciated

First of all, the contents of your test_union.h file is the definition
of a variable, not a type. It should be...

union u {
     int test1;
     int test2;
};

At the moment you can't wrap a union directly. You have to wrap it in a
struct and pretend to Python that the struct is the union. Also there is
a bug in the C code generator which generates invalid code (but the
equivalent C++ code is Ok). So try something like the following...

struct u_wrapper /PyName=u/
{
%TypeHeaderCode
#include<test_union.h>

struct u_wrapper
{
     union u wrapped;
};
%End

     int test1 {
     %GetCode
         sipPy = PyLong_FromLongLong(sipCpp->wrapped.test1);
     %End
     %SetCode
         if (PyLong_Check(sipPy))
             sipCpp->wrapped.test1;
         else
             sipErr = 1;
     %End
     };
};

Phil


[Attachment #3 (text/html)]

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} \
</style> </head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; \
color: rgb(0, 0, 0);"> Hello,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; \
color: rgb(0, 0, 0);"> <br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; \
color: rgb(0, 0, 0);"> I wanted to add that an anonymous structs 'foo' located in \
another struct 'bar' SIP can handle when giving 'foo' a type name and initializing \
them in 'bar'.</div> <div style="font-family: Calibri, Arial, Helvetica, sans-serif; \
font-size: 12pt; color: rgb(0, 0, 0);"> That means I was wrong, when handling a union \
the anonymity should be taken away too. This unfortunately still leaves the problem \
with the error described in my last mail, when a union is located inside a \
struct.</div> <div style="font-family: Calibri, Arial, Helvetica, sans-serif; \
font-size: 12pt; color: rgb(0, 0, 0);"> <br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; \
color: rgb(0, 0, 0);"> M.T.<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" \
style="font-size:11pt" color="#000000"><b>Von:</b> Marian Thomsen \
&lt;marian.th@outlook.de&gt;<br> <b>Gesendet:</b> Dienstag, 1. Dezember 2020 \
12:04<br> <b>An:</b> Phil Thompson &lt;phil@riverbankcomputing.com&gt;<br>
<b>Cc:</b> pyqt@riverbankcomputing.com &lt;pyqt@riverbankcomputing.com&gt;<br>
<b>Betreff:</b> AW: AW: SIP translate Union</font>
<div>&nbsp;</div>
</div>
<style type="text/css" style="display:none">
<!--
p
	{margin-top:0;
	margin-bottom:0}
-->
</style>
<div dir="ltr">
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; \
color:rgb(0,0,0)"> Thank you very much, the last example helped me a lot!</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; \
color:rgb(0,0,0)"> <br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; \
color:rgb(0,0,0)"> I feel like I'm asking too much, but if you have some time \
I'm&nbsp; stuck translating an (anonymos) union inside a struct. The anonymity does \
not seem to be the problem (I tested by naming it), but the location inside the \
struct. Another aproach was to use the  existing struct as a wrapper, but I couldn't \
get it to work.</div> <div style="font-family:Calibri,Arial,Helvetica,sans-serif; \
font-size:12pt; color:rgb(0,0,0)"> <br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; \
color:rgb(0,0,0)"> Here I tried by wrapping it inside a struct, but get the error \
message: 'field 'u' has incomplete type 'mu'.<br> </div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; \
color:rgb(0,0,0)"> <br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; \
color:rgb(0,0,0)"> test_union.h<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; \
color:rgb(0,0,0)"> <pre style="background-color:#ffffff; color:#080808; \
font-family:'JetBrains Mono',monospace; font-size:9.8pt"><span \
style="color:#0033b3">struct </span><span \
style="color:#008080">myType</span>{<br><br>&nbsp; &nbsp; <span \
style="color:#008080">enum </span>{<span style="color:#871094; \
font-style:italic">CHAR</span>, <span style="color:#871094; \
font-style:italic">INT</span>, <span style="color:#871094; \
font-style:italic">DOUBLE</span>} <span style="color:#660e7a">tag</span>;<br>&nbsp; \
&nbsp; <span style="color:#0033b3">union</span>{                        // tested \
naming it 'mu', no difference<br>&nbsp; &nbsp; &nbsp; &nbsp; <span \
style="color:#8c8c8c; font-style:italic">/* tag = CHAR */<br></span><span \
style="color:#8c8c8c; font-style:italic">&nbsp; &nbsp; &nbsp; &nbsp; </span><span \
style="color:#0033b3">char </span><span \
style="color:#660e7a">char_value</span>;<br>&nbsp; &nbsp; &nbsp; &nbsp; <span \
style="color:#8c8c8c; font-style:italic">/* tag = INT */<br></span><span \
style="color:#8c8c8c; font-style:italic">&nbsp; &nbsp; &nbsp; &nbsp; </span><span \
style="color:#0033b3">int </span><span \
style="color:#660e7a">int_value</span>;<br>&nbsp; &nbsp; &nbsp; &nbsp; <span \
style="color:#8c8c8c; font-style:italic">/* tag = DOUBLE */<br></span><span \
style="color:#8c8c8c; font-style:italic">&nbsp; &nbsp; &nbsp; &nbsp; </span><span \
style="color:#0033b3">double </span><span \
style="color:#660e7a">double_value</span>;<br>&nbsp; &nbsp; }<span \
style="color:#660e7a">u</span>;<br>&nbsp; &nbsp; <span style="color:#0033b3">void \
</span><span style="color:#00627a">print_my_type</span>() <span \
style="color:#0033b3">const</span>;<br>};<br><br><br><span \
style="font-family:calibri,arial,helvetica,sans-serif; font-size:12pt; \
color:rgb(0,0,0); background-color:rgb(255,255,255)">The SIP file:</span><br><br><pre \
style="background-color:#ffffff; color:#080808; font-family:'JetBrains \
Mono',monospace; font-size:9.8pt">struct myType{<br><br>%TypeHeaderCode<br>#include \
&lt;test_union.h&gt;<br>%End<br><br>&nbsp; &nbsp; enum tag {CHAR, INT, \
DOUBLE};<br><br>&nbsp; &nbsp; struct mu_wrapper /PyName=mu/<br>&nbsp; &nbsp; \
{<br><br>&nbsp; &nbsp; %TypeHeaderCode<br>&nbsp; &nbsp; #include \
&lt;test_union.h&gt;<br><br>&nbsp; &nbsp; struct mu_wrapper<br>&nbsp; &nbsp; \
{<br>&nbsp; &nbsp; &nbsp; &nbsp; union mu u;<br>&nbsp; &nbsp; };<br>&nbsp; &nbsp; \
%End<br><br>&nbsp; &nbsp; &nbsp; &nbsp; /* tag = CHAR */<br>&nbsp; &nbsp; &nbsp; \
&nbsp; char char_value {<br>&nbsp; &nbsp; &nbsp; &nbsp; %GetCode<br>&nbsp; &nbsp; \
&nbsp; &nbsp; &nbsp; &nbsp; sipPy = \
PyUnicode_FromString(&amp;(sipCpp-&gt;u.char_value));<br>&nbsp; &nbsp; &nbsp; &nbsp; \
%End<br>&nbsp; &nbsp; &nbsp; &nbsp; %SetCode<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp; if (PyUnicode_Check(sipPy))<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp; &nbsp; sipCpp-&gt;u.char_value;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
else<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sipErr = 1;<br>&nbsp; \
&nbsp; &nbsp; &nbsp; %End<br>&nbsp; &nbsp; &nbsp; &nbsp; };<br><br>&nbsp; &nbsp; \
&nbsp; &nbsp; /* tag = INT */<br>&nbsp; &nbsp; &nbsp; &nbsp; int int_value \
{<br>&nbsp; &nbsp; &nbsp; &nbsp; %GetCode<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp; sipPy = PyLong_FromLong(sipCpp-&gt;u.int_value);<br>&nbsp; &nbsp; &nbsp; \
&nbsp; %End<br>&nbsp; &nbsp; &nbsp; &nbsp; %SetCode<br>&nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp; &nbsp; if (PyLong_Check(sipPy))<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp; &nbsp; sipCpp-&gt;u.int_value;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
else<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sipErr = 1;<br>&nbsp; \
&nbsp; &nbsp; &nbsp; %End<br>&nbsp; &nbsp; &nbsp; &nbsp; };<br><br>&nbsp; &nbsp; \
&nbsp; &nbsp; /* tag = DOUBLE */<br>&nbsp; &nbsp; &nbsp; &nbsp; double double_value \
{<br>&nbsp; &nbsp; &nbsp; &nbsp; %GetCode<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp; sipPy = PyFloat_FromDouble(sipCpp-&gt;u.double_value);<br>&nbsp; &nbsp; &nbsp; \
&nbsp; %End<br>&nbsp; &nbsp; &nbsp; &nbsp; %SetCode<br>&nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp; &nbsp; if (PyFloat_Check(sipPy))<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp; &nbsp; sipCpp-&gt;u.double_value;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
else<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sipErr = 1;<br>&nbsp; \
&nbsp; &nbsp; &nbsp; %End<br>&nbsp; &nbsp; &nbsp; &nbsp; };<br>&nbsp; &nbsp; \
};<br><br>&nbsp; &nbsp; void print_my_type() const;<br>};</pre><br></pre> Thank you \
for your help!</div> <div style="font-family:Calibri,Arial,Helvetica,sans-serif; \
font-size:12pt; color:rgb(0,0,0)"> <br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; \
color:rgb(0,0,0)"> M.T.<br>
</div>
<div id="x_appendonsend"></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; \
color:rgb(0,0,0)"> <br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" \
style="font-size:11pt"><b>Von:</b> Phil Thompson \
&lt;phil@riverbankcomputing.com&gt;<br> <b>Gesendet:</b> Freitag, 27. November 2020 \
11:52<br> <b>An:</b> Marian Thomsen &lt;marian.th@outlook.de&gt;<br>
<b>Cc:</b> pyqt@riverbankcomputing.com &lt;pyqt@riverbankcomputing.com&gt;<br>
<b>Betreff:</b> Re: AW: SIP translate Union</font>
<div>&nbsp;</div>
</div>
<div class="x_BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="x_PlainText">On 26/11/2020 08:08, Marian Thomsen wrote:<br>
&gt; Thank you for the advice!<br>
&gt; <br>
&gt; Unfortunately I cant get a simple example to work.<br>
&gt; I have a simple union in the header test_union.h<br>
&gt; <br>
&gt; <br>
&gt; union {<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; int test1;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; int test2;<br>
&gt; } u;<br>
&gt; <br>
&gt; And this is the best I got so far in the .sip file:<br>
&gt; <br>
&gt; <br>
&gt; struct union{<br>
&gt; <br>
&gt; %TypeHeaderCode<br>
&gt; #include &lt;test_union.h&gt;<br>
&gt; %End<br>
&gt; <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; int *test1 {<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; %GetCode<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sipPy = \
PyLong_FromLongLong(sipCpp-&gt;test1)<br> \
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(sipPy == NULL)<br> \
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sipPy = \
NULL;<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp; %End<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; %SetCode<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (PyLong_Check(sipPy))<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
sipCpp-&gt;test1;<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sipErr = \
1;<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp; %End<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; };<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; int *test2 {<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; %GetCode<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sipPy = \
PyLong_FromLongLong(sipCpp-&gt;test2);<br> \
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(sipPy == NULL)<br> \
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sipPy = \
NULL;<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp; %End<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; %SetCode<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (PyLong_Check(sipPy))<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
sipCpp-&gt;test2;<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sipErr = \
1;<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp; %End<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; };<br>
&gt; }u;<br>
&gt; <br>
&gt; I get a syntax error in the last line and have tried to write it so<br>
&gt; that sip would understand it, but also with something like:<br>
&gt; <br>
&gt; <br>
&gt; typedef struct union union;<br>
&gt; union u{ ... };<br>
&gt; <br>
&gt; I got no luck so far. Am I completly wrong?<br>
&gt; <br>
&gt; Some advice would be appreciated<br>
<br>
First of all, the contents of your test_union.h file is the definition <br>
of a variable, not a type. It should be...<br>
<br>
union u {<br>
&nbsp;&nbsp;&nbsp;&nbsp; int test1;<br>
&nbsp;&nbsp;&nbsp;&nbsp; int test2;<br>
};<br>
<br>
At the moment you can't wrap a union directly. You have to wrap it in a <br>
struct and pretend to Python that the struct is the union. Also there is <br>
a bug in the C code generator which generates invalid code (but the <br>
equivalent C++ code is Ok). So try something like the following...<br>
<br>
struct u_wrapper /PyName=u/<br>
{<br>
%TypeHeaderCode<br>
#include&lt;test_union.h&gt;<br>
<br>
struct u_wrapper<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp; union u wrapped;<br>
};<br>
%End<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp; int test1 {<br>
&nbsp;&nbsp;&nbsp;&nbsp; %GetCode<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sipPy = \
PyLong_FromLongLong(sipCpp-&gt;wrapped.test1);<br> &nbsp;&nbsp;&nbsp;&nbsp; %End<br>
&nbsp;&nbsp;&nbsp;&nbsp; %SetCode<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (PyLong_Check(sipPy))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
sipCpp-&gt;wrapped.test1;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
else<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
sipErr = 1;<br> &nbsp;&nbsp;&nbsp;&nbsp; %End<br>
&nbsp;&nbsp;&nbsp;&nbsp; };<br>
};<br>
<br>
Phil<br>
</div>
</span></font></div>
</div>
</body>
</html>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic