
This makes regcomp() take `\|', `\(' and `\)' instead of `|', `(' or `)'
As soon as I can be bothered to rewrite all the existing regexps this will
be used.

[ Actually this probably won't ever be used, but it seems pointless
  to throw it out.. ]

--- regexp/regexp.c.old Sat Mar 19 11:02:13 1994
+++ regexp/regexp.c	Thu Mar 24 18:19:02 1994
@@ -345,8 +345,8 @@
     if (!(flags & HASWIDTH))
	*flagp &= ~HASWIDTH;
     *flagp |= flags & SPSTART;
-    while (*regparse == '|') {
-	regparse++;
+    while ((*regparse == '\\') && (regparse[1] == '|')) {
+	regparse += 2;
	br = regbranch(&flags);
	if (br == NULL)
	    return (NULL);
@@ -365,10 +365,10 @@
	regoptail(br, ender);

     /* Check for proper termination. */
-    if (paren && *regparse++ != ')') {
+    if (paren && ((*regparse++ != '\\') || (*regparse++ != ')'))) {
	FAIL("unmatched ()");
     } else if (!paren && *regparse != '\0') {
-	if (*regparse == ')') {
+	if ((*regparse++ == '\\') && (*regparse == ')')) {
	    FAIL("unmatched ()");
	} else
	    FAIL("junk on end");/* "Can't happen". */
@@ -395,7 +395,7 @@

     ret = regnode(BRANCH);
     chain = NULL;
-    while (*regparse != '\0' && *regparse != '|' && *regparse != ')') {
+    while (*regparse != '\0' && (*regparse != '\\' || (regparse[1] != '|' && regparse[1] != ')'))) {
	latest = regpiece(&flags);
	if (latest == NULL)
	    return (NULL);
@@ -539,15 +539,7 @@
	    *flagp |= HASWIDTH | SIMPLE;
	}
	break;
-    case '(':
-	ret = reg(1, &flags);
-	if (ret == NULL)
-	    return (NULL);
-	*flagp |= flags & (HASWIDTH | SPSTART);
-	break;
     case '\0':
-    case '|':
-    case ')':
	FAIL("internal urp");   /* Supposed to be caught earlier. */
	break;
     case '?':
@@ -556,12 +548,29 @@
	FAIL("?+* follows nothing");
	break;
     case '\\':
-	if (*regparse == '\0')
+	switch(*regparse)
+	{
+	case '\0':
	    FAIL("trailing \\");
-	ret = regnode(EXACTLY);
-	regc(*regparse++);
-	regc('\0');
-	*flagp |= HASWIDTH | SIMPLE;
+	    break;
+	case '|':
+	case ')':
+	    FAIL("internal urp");   /* Supposed to be caught earlier. */
+	    break;
+	case '(':
+	    regparse++;
+	    ret = reg(1, &flags);
+	    if (ret == NULL)
+		return (NULL);
+	    *flagp |= flags & (HASWIDTH | SPSTART);
+	    break;
+	default:
+	    ret = regnode(EXACTLY);
+	    regc(*regparse++);
+	    regc('\0');
+	    *flagp |= HASWIDTH | SIMPLE;
+	    break;
+	}
	break;
     default:{
	    register int    len;
