[fpc-pascal] How to translate this union ?
ik
idokan at gmail.com
Thu May 5 16:14:40 CEST 2011
On Thu, May 5, 2011 at 17:05, Ludo Brands <ludo.brands at free.fr> wrote:
> OK . You have avoided using macros but are loosing the access to "pseudo"
> members su_len,su_family,su_port and su_scope_id. The DOCUMENTATION_ONLY
> suggests that these members are documented parts of the interface. Also it
> will be up to the user to figure out where to get su_len according to
> SU_HAVE_SOCKADDR_SA_LEN.
>
I can not find them in the preprocessor code (the define and the "document
only" members), that's why I avoided them at this point. but if I'll find
them required, I'll invest more time to add them.
>
>
> -----Message d'origine-----
> *De :* fpc-pascal-bounces at lists.freepascal.org [mailto:
> fpc-pascal-bounces at lists.freepascal.org] *De la part de* ik
> *Envoyé :* jeudi 5 mai 2011 15:19
>
> *À :* FPC-Pascal users discussions
> *Objet :* Re: RE : RE : RE : [fpc-pascal] How to translate this union ?
>
>
> I've done the following at the moment:
>
> {$IFDEF SU_HAVE_SOCKADDR_SA_LEN}
> // #define su_len su_sa.sa_len <- unsupported for
> now
> {$ELSE}
> // #define su_len su_array[0] <- unsupported for now
> {$ENDIF}
> // #define su_family su_sa.sa_family <- unsupported for
> now
> // #define su_port su_sin.sin_port <- unsupported for
> now
> // #define su_scope_id su_array32[6] <- unsupported for
> now
>
> su_sockaddr_u = record
> case Byte of
> 0 : (su_dummy : cshort); //<
> Dummy member to initialize
> 1 : (su_array : array[0..31] of char); //
> Presented as chars
> 2 : (su_array16 : array[0..15] of cuint16); //
> Presented as 16-bit ints
> 3 : (su_array32 : array[0..8] of cuint32); //
> Presented as 32-bit ints
> 4 : (su_sa : sockaddr); //
> Address in struct sockaddr format
> 5 : (su_sin : sockaddr_in); //
> Address in IPv4 format
> {$IFDEF SU_HAVE_IN6}
> 6 : (su_sin6 : sockaddr_in6); //
> Address in IPv6 format
> {$ENDIF}
> end;
>
>
> As I understood by you and C developers that I talked to, the macro create
> a shortcut to be used.
>
> Thanks,
>
> Ido
>
> On Sat, Apr 30, 2011 at 11:53, Ludo Brands <ludo.brands at free.fr> wrote:
>
>> Using macros, the translation looks like
>>
>> {$MACRO ON}
>> {$ifndef DOCUMENTATION_ONLY}
>> {$if SU_HAVE_SOCKADDR_SA_LEN <>0}
>> {$define su_len:=su_sa.sa_len}
>> {$else}
>> {$define su_len:=su_array[0]}
>> {$endif}
>> {$define su_family:=su_sa.sa_family}
>> {$define su_port:=su_sin.sin_port}
>> {$define su_scope_id:=su_array32[6]}
>> {$endif}
>> type
>> su_sockaddr_u = record
>> case longint of
>> {$ifdef DOCUMENTATION_ONLY}
>> 0 : ( su_len : byte );
>> 1 : ( su_family : byte );
>> 2 : ( su_port : word );
>> {$else}
>> 3 : ( su_dummy : smallint );
>> {$endif}
>> 4 : ( su_array : array[0..31] of char );
>> 5 : ( su_array16 : array[0..15] of word );
>> 6 : ( su_array32 : array[0..7] of longword );
>> 7 : ( su_sa : sockaddr );
>> 8 : ( su_sin : sockaddr_in );
>> {$if SU_HAVE_IN6 <>0}
>> 9 : ( su_sin6 : sockaddr_in6 );
>> {$endif}
>> {$ifdef DOCUMENTATION_ONLY}
>> 10 : ( su_scope_id : longword );
>> {$endif}
>> end;
>>
>> -----Message d'origine-----
>> *De :* fpc-pascal-bounces at lists.freepascal.org [mailto:
>> fpc-pascal-bounces at lists.freepascal.org] *De la part de* Ludo Brands
>> *Envoyé :* samedi 30 avril 2011 10:29
>>
>> *À :* 'FPC-Pascal users discussions'
>> *Objet :* RE : RE : [fpc-pascal] How to translate this union ?
>>
>> Forget my previous reply. I found the original header file on
>> sourceforge.
>>
>> I have alse a better understanding now of what the code is supposed to do:
>> in case DOCUMENTATION_ONLY is not defined, a reference to, for example,
>> su_sockaddr_u.su_family will be subsstituted by
>> su_sockaddr_u.susa.sa_family.
>> You could use macros and do a {$define su_family:=susa.sa_family} with the
>> following limitations:
>> - if you have variables or other record members named su_family, not part
>> of the su_sockaddr_u record, they will be renamed also.
>> - it works only for the units that include your .inc file.
>>
>>
>> -----Message d'origine-----
>> *De :* fpc-pascal-bounces at lists.freepascal.org [mailto:
>> fpc-pascal-bounces at lists.freepascal.org] *De la part de* Ludo Brands
>> *Envoyé :* samedi 30 avril 2011 09:18
>> *À :* 'FPC-Pascal users discussions'
>> *Objet :* RE : [fpc-pascal] How to translate this union ?
>>
>> Can you post the original c code? You point to a file that seems to be a
>> reworked output from h2pas. As it is now, it indeed doesn't make any sense.
>> I would think the su_len,su_family,su_port should make up a record but they
>> aren't.
>>
>> I suggest you move the #defines inside the union declaration to somewhere
>> before the union declaration. It'll double up the ifdef's but make the code
>> so much more readable.
>>
>>
>> -----Message d'origine-----
>> *De :* fpc-pascal-bounces at lists.freepascal.org [mailto:
>> fpc-pascal-bounces at lists.freepascal.org] *De la part de* ik
>> *Envoyé :* vendredi 29 avril 2011 22:15
>> *À :* FPC-Pascal users discussions
>> *Objet :* [fpc-pascal] How to translate this union ?
>>
>> Hello list,
>>
>> I'm trying to translate the following union<https://github.com/ik5/sofia-sip/blob/master/src/lib/sui.inc#L199>to Pascal, but I do not understand it, and so does h2pas.
>> How to translate it ?
>>
>> Thanks,
>>
>> Ido
>>
>>
>> LINESIP - Opening the source for communication
>> http://www.linesip.com
>> http://www.linesip.co.il
>>
>>
>>
>> _______________________________________________
>> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
>> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>>
>
>
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20110505/207cdd9c/attachment.html>
More information about the fpc-pascal
mailing list