If you're curious how I implemented the sprintbit code you can download it at ftp://ftp.cs.jhu.edu/pub/CircleMUD/incoming/. the files are called: src_c3p8+bitfields.tar.gz and change_bitfields.tar.gz Of course I didn't use if statements for each field, I acces the bits the way they are stored in memory, by bit number instead of by name. I hope the bitfield code is portable, I checked 2 systems myself (Apollo DN3000 and SGI IRIX 5.3) and received no bug reports yet so it probebly is. The code you ask for is pretty small so I will include it here. /* * the function is invoked with: * sprintfield((char*)&rm->room_flags, room_bits, buf2); * ( you need to put (char*)& in front of the bitfield structure name ) */ char *sprintfield(char *field, char *names[], char *result) { int nr; unsigned char bitmask; extern unsigned char bit0; *result = '\0'; for (nr = 0; *names[nr] != '\n'; nr++) { bitmask = (bit0==1 ? bit0<<(nr%8) : bit0>>(nr%8)); if (field[nr/8] & bitmask) { strcat(result, names[nr]); strcat(result, " "); } } if (!*result) strcat(result, "none"); return result; } Jaco (jaco@elektron.et.tudelft.nl) > This is to the person who said that they imp'd a working bitfield system, > or anyone else who wishes to respond. ;-) > How have you dealt with the sprintbit() function in a bitfield system? > At first thought, it seems that you would need an 'if' statement for > each field, which could lead to an unwieldy sprintbit() function... > As far as I can tell, there is no way to access the members of the structure > except by name. > > Anyone have any ideas? > > Pink >
This archive was generated by hypermail 2b30 : 12/07/00 PST