[fpc-pascal] How to translate this union ?

Sven Barth pascaldragon at googlemail.com
Sun May 1 00:19:23 CEST 2011


Question:

In case of DOCUMENTATION_ONLY not defined, does

su_sockaddr_u = record
(...)
   1 : ( su_sa.sa_family : byte )
(...)
end;

really compile?
(From what I know about Pascal I would say: no)

Regards,
Sven

On 30.04.2011 10:53, Ludo Brands 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




More information about the fpc-pascal mailing list