On Thu, May 5, 2011 at 17:05, Ludo Brands <ludo.bra...@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-boun...@lists.freepascal.org [mailto: > fpc-pascal-boun...@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.bra...@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-boun...@lists.freepascal.org [mailto: >> fpc-pascal-boun...@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-boun...@lists.freepascal.org [mailto: >> fpc-pascal-boun...@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-boun...@lists.freepascal.org [mailto: >> fpc-pascal-boun...@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@lists.freepascal.org >> http://lists.freepascal.org/mailman/listinfo/fpc-pascal >> > > > _______________________________________________ > fpc-pascal maillist - fpc-pascal@lists.freepascal.org > http://lists.freepascal.org/mailman/listinfo/fpc-pascal >
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal