<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html><body style='font-family: Verdana,Geneva,sans-serif'>
<p>Flávio Etrusco schreef op 12 mrt '13:</p>
<blockquote type="cite" style="padding-left:5px; border-left:#1010ff 2px solid; margin-left:5px; width:100%"><!-- html ignored --><!-- head ignored --><!-- meta ignored -->
<pre>On 3/11/13, Darius Blaszyk <<a href="mailto:dhkblaszyk@zeelandnet.nl">dhkblaszyk@zeelandnet.nl</a>> wrote:</pre>
<blockquote type="cite" style="padding-left:5px; border-left:#1010ff 2px solid; margin-left:5px; width:100%">I'm stuck porting a macro from C. Below is the original define. The part I'm struggeling with is the right most part after the - sign. #define GETNEXT(x) ((LList *)(((char *) x) - ((char *) & (((LList *)0)^.next)))) Does anyone know what is meant with the define? Obviously LList is a linked list struct that has a prev and next variable. But what does the & and 0 mean? Appreciate any help. Regards, Darius</blockquote>
<pre>AFAICS they mean "address" and "nil", respectively, so that part will
return the offset of "next" inside and item of LList.

-Flávio
</pre>
</blockquote>
<p>So here is what I made based on your and Henry's mail. However still it does not seem to work, although other ported code might be at fault of course :)<br /><br />//#define GETNEXT(x) ((LList *)(((char *) x) - ((char *) & (((LList *)0)->.next))))<br />function GETNEXT(x: pLList): pLList; inline;<br />begin<br />  exit(pLList(pchar(x) - pchar(pLList(nil)^.next)));<br />end;  <br /><br />And let LList be declared as:<br /><br />LList = record<br /> len: integer;<br /> next, prev: pLList;<br /> name: PChar;<br /> nextname: PChar;<br /> flag: integer;<br />end;              <br /><br />Then I still don't understand what this does: <br />  if list^.next <> nil then<br />                  list^.nextname := GETNEXT(list^.next)^.name;<br /><br /><br />Regards, Darius</p>
</body></html>