[comp.lang.c] Binary Escapes

mike@relgyro.stanford.edu (Mike Macgirvin) (11/22/89)

	Following are context diffs to allow binary escapes under
gcc-1.35. You must define BINARY_STUFF in config.h for this stuff
to work.
	Disclaimer:
	Applying these patches will make gcc non-ANSI compliant. Any
code you develop using the binary escapes will be non-portable. Whether
or not the ANSI standard 'C' should use similiar constructs is irrelevant,
and the author does not wish to debate the subject, nor encourage the
practice of writing non-ANSI compliant code.
The author assumes no responsibility for any use of this code.
Use at your own risk. I do not guarantee that these patches are bug-free.
They have been tested on a Sun 3/260 running SunOS 3.5.

	Summary:
	Allows the C compiler to generate code for binary escape
sequences. These may be of two forms:
	0[bB]{some binary number}
	i.e.  int x = 0B01000001;
	or as a string escape:
	"\B{some binary number}"
	i.e. printf("\B01000001\n");

	(The string escape cannot be lower case because it would 
	interfere with the ANSI backspace sequence '\b').


*** c-parse.y	Tue Nov 21 11:32:21 1989
--- c-parse.y.orig	Tue Nov 21 10:27:50 1989
***************
*** 1790,1824 ****
  
    switch (c)
      {
- #ifdef BINARY_STUFF
-     case 'B':
-       code = 0;
-       count = 0;
-       while (1)
- 	{
- 	  c = getc (finput);
- 	  if(! ((c == '0') || (c == '1')))
- 	    {
- 	      ungetc (c, finput);
- 	      break;
- 	    }
- 	  code *= 2;
- 	  if(c == '1')
- 	    code += c - '0';
- 	  if(count == 0)
- 	    firstdig = code;
- 	  count ++;
- 	}
-       if (count == 0)
- 	error ("\\B used with no following binary digits");
-       if ((count - 1) >= TYPE_PRECISION (integer_type_node)
- 	  || ((1 << (TYPE_PRECISION (integer_type_node) - (count - 1)))
- 	      <= firstdig))
- 	warning ("binary escape out of range");
-       return code;
- 
- #endif /* BINARY_STUFF */
- 
      case 'x':
        code = 0;
        count = 0;
--- 1790,1795 ----
***************
*** 2111,2123 ****
  		base = 16;
  		*p++ = (c = getc (finput));
  	      }
- #ifdef BINARY_STUFF
- 	    else if ((c == 'b') || (c == 'B'))
- 	      {
- 		base = 2;
- 		*p++ = (c = getc (finput));
- 	      }
- #endif /* BINARY_STUFF */
  	    else
  	      {
  		base = 8;
--- 2082,2087 ----
*** cexp.y	Tue Nov 21 10:42:22 1989
--- cexp.y.orig	Tue Nov 21 11:42:41 1989
***************
*** 188,201 ****
      base = 16;
      len -= 2;
    }
- #ifdef BINARY_STUFF
-   else
-     if (len >= 3 && (!strncmp (p, "0b", 2) || !strncmp (p, "0B", 2))) {
-     p += 2;
-     base = 2;
-     len -= 2;
-   }
- #endif /* BINARY_STUFF */
    else if (*p == '0')
      base = 8;
    
--- 188,193 ----
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+  Mike Macgirvin              Relativity Gyroscope Experiment (GP-B)    +
+  mike@relgyro.stanford.edu   (36.64.0.50)                              +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++