On Sun, Oct 07, 2012 at 06:13:35PM -0500, Bob Tanner wrote: > On 2012-09-19 17:23:24 +0000, Bob Tanner said: > > > SP_YOU, indicates slot number assigned > > Just want to double check some things. > > On osx (10.8) the "struct you_spacket" is 48 bytes. > > struct you_spacket > { > char type; /* SP_YOU */ > char pnum; /* Guy needs to know this... > char hostile; > char swar; > char armies; > char tractor; > char pad2; > char pad3; > unsigned flags; > LONG damage; > LONG shield; > LONG fuel; > unsigned short etemp; > unsigned short wtemp; > unsigned short whydead; > unsigned short whodead; > }; 48 bytes is wrong. 32 bytes is right. Your compiler might be aligning the structure members for performance. Give a suitable alignment directive to your compiler. We use __attribute__((packed)) in the server code. Check the offset to each member using whatever language facilities are available. In C we can use sizeof() and offsetof(). > > Packet dump after the MOTD stuff looks like this for me. > > 0c100000 00000000 08000000 00000000 00000000 00000000 00000000 > 00000000 18000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 16000000 02000000 03000000 00000000 14000000 12000000 00000000 > 04000000 00000000 00000000 18010000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 16010000 02010000 03010000 00000000 14010000 > 12010000 00000000 Looks correct, there are 32 bytes of SP_YOU in this dump. > > Byte 0x0c (12) is SP_YOU > > #define SP_YOU 12 /* info on you? */ > > The next 48 bytes should fill in the "struct you_spacket" but that > leaves 2 nybles of null bytes before the byte 0x18 (24) SP_PL_LOGIN > is seen > > #define SP_PL_LOGIN 24 /* new player logs in */ > > In my code I replaced the (I assume) autoconf figured out LONG with > long is that right? Um, sure, if your compiler agrees with mine and uses four bytes or 32-bits for it. It isn't a long long. > > I'd look at MacTrek but that's a 32-bit project and I'm attempting > to write my stuff as a 64-bit project. > > Why I'm confused is the MacTrek project has the SP_YOU structure at > 32 bytes, which would even leave more null bytes. I think you miscounted on the dump. There are only 7 columns to it. > > Just trying to figure out why I'm ending up 2 nybles short. > > Thanks. > > -- > Bob Tanner <basic at us.netrek.org> Key fingerprint = 9906 > 320A 8BB6 64AD 96A7 7785 CBFB 10BF 568B F98C > > > _______________________________________________ > netrek-dev mailing list > netrek-dev at us.netrek.org > http://mailman.us.netrek.org/mailman/listinfo/netrek-dev > Also, check against the Gytha format string for the packet, and against this table: http://docs.python.org/library/struct.html#format-characters It tends to be more precise than the C structure definitions, since C structs have long since stopped being portable for network packets. ;-) -- James Cameron http://quozl.linux.org.au/