indent(1) support for gcc(1) 0b prefix

Lukasz Jaroszewski sigtrm at gmail.com
Mon Apr 28 13:22:50 UTC 2008


>On Apr 26, 2008, at 5:01 PM, Max Laier wrote:

>>* On Saturday 26 April 2008 23:35:57 Romain Tartière wrote:
*>>>* Hello FreeBSD hackers!
*>>>*
*>>>* I'm using avr-gcc from the ports and relying on the 0b prefix
*>>>* notation
*>>>* for binary constants, that is:
*>>>*
*>>>* 	foo = 0b00101010;
*>>>*
*>>>* Thanks to /usr/ports/devel/avr-gcc/files/patch-0b-constants this is
*>>>* possible :-)
*>>>*
*>>>* But I would like to use indent(1) to reformat contributed code
*>>>* automatically. Unfortunately, the 0b notation is not supported by
*>>>* that
*>>>* program, and the resulting code looks like this:
*>>>*
*>>>* 	foo = 0 b00101010;
*>>>*
*>>>* ... then compilation fails, bla bla bla...
*>>*
*>>* I can't think of a case (outside of "0x...." context) where "...0b..."
*>>* would be valid C code, let alone better formated as "...0 b...".
*>>* Hence I
*>>* see no harm in adding your patch to the base indent(1).
*>>*
*>>* Does anyone have an example where "...0 b..." is valid C code?
*>
>Well, if b... is a preprocessor define then you can easily
>come up with valid C:
>
>#define b...	*2
>
>then:		...0 b...
>becomes:	...0 *2
>
>That's a valid expression in the right context...
>
>FYI,
>
>--
>Marcel Moolenaar
>xcllnt at mac.com <http://lists.freebsd.org/mailman/listinfo/freebsd-hackers>

>From c-faq.com( by Bill Finke ):

#define Ob(x)  ((unsigned)Ob_(0 ## x ## uL))
#define Ob_(x) (x & 1 | x >> 2 & 2 | x >> 4 & 4 | x >> 6 & 8 |		\
	x >> 8 & 16 | x >> 10 & 32 | x >> 12 & 64 | x >> 14 & 128)
---
#define PORT_SYSCTLA  0x092         /* PS2 system control port A         */
#define SYSCTLA_DSK   Ob(10000000)  /* lights the fixed dsk activity led */
#define SYSCTLA_DSK0  Ob(01000000)  /* also lights fixed disk actvty led */
#define SYSCTLA_TMOT  Ob(00010000)  /* watchdog timer has timed-out      */
#define SYSCTLA_LOCK  Ob(00001000)  /* CMOS password area is locked      */
#define SYSCTLA_A20   Ob(00000010)  /* alternate address line 20 gating  */
#define SYSCTLA_RST   Ob(00000001)  /* alternate hot reset               */

regards
LJ776-RIPE


More information about the freebsd-hackers mailing list