If we have a program, and modify it, we can use diff to see the changes made. For example, adding "0b..." as a binary constant to the CS 429 assembler can be:

```354a355,356
>         case 2:
>             if (('0' <= c) && (c <= '1')) return(TRUE);
369a372,373
>         case 2:
>             if (('0' <= c) && (c <= '1')) return(c-'0');
407a412,417
>                 }
>             else if (input_buffer[token_index] == 'b')
>                 {
>                     /* 0b...  -- binary */
>                     token_index += 1;
>                     base = 2;
```
If we use "diff -DBINARY", we can merge the two, controlled by "#define BINARY":
```        case 8:
if (('0' <= c) && (c <= '7')) return(TRUE);
#ifdef BINARY
case 2:
if (('0' <= c) && (c <= '1')) return(TRUE);
#endif /* BINARY */
}
```
Trying to see the context for the changes makes the diff a bit less fragile to other changes (diff -C3):
```***************
*** 352,357 ****
--- 352,359 ----
if (('8' <= c) && (c <= '9')) return(TRUE);
case 8:
if (('0' <= c) && (c <= '7')) return(TRUE);
+         case 2:
+             if (('0' <= c) && (c <= '1')) return(TRUE);
}
return(FALSE);
}
***************
*** 367,372 ****
--- 369,376 ----
if (('8' <= c) && (c <= '9')) return(c-'0');
case 8:
if (('0' <= c) && (c <= '7')) return(c-'0');
+         case 2:
+             if (('0' <= c) && (c <= '1')) return(c-'0');
}
return(-1);
}
***************
*** 406,411 ****
--- 410,421 ----
token_index += 1;
base = 16;
}
+             else if (input_buffer[token_index] == 'b')
+                 {
+                     /* 0b...  -- binary */
+                     token_index += 1;
+                     base = 2;
+                 }
}

/* read number (in the defined base) */
```