From 1843f4c62f8dd5c82988ba66b78e81c7b6390c5d Mon Sep 17 00:00:00 2001 From: Jay Lepreau Date: Mon, 16 Feb 1987 00:16:43 -0800 Subject: [PATCH 1/1] date and time created 87/02/15 16:16:43 by lepreau SCCS-vsn: local/sccscmds/sccscmds.2/util/bal.c 1.1 SCCS-vsn: local/sccscmds/sccscmds.ok/util/bal.c 1.1 --- usr/src/local/sccscmds/sccscmds.2/util/bal.c | 34 +++++++++++++++++++ usr/src/local/sccscmds/sccscmds.ok/util/bal.c | 34 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 usr/src/local/sccscmds/sccscmds.2/util/bal.c create mode 100644 usr/src/local/sccscmds/sccscmds.ok/util/bal.c diff --git a/usr/src/local/sccscmds/sccscmds.2/util/bal.c b/usr/src/local/sccscmds/sccscmds.2/util/bal.c new file mode 100644 index 0000000000..9a3fd6b9fb --- /dev/null +++ b/usr/src/local/sccscmds/sccscmds.2/util/bal.c @@ -0,0 +1,34 @@ +static char Sccsid[] "@(#)bal 2.1"; +# +/* + Function to find the position, in str, of the first of the char- + acters in end occurring outside a balanced string. A balanced string + contains matched occurrences of any character in open and the corres- + ponding character in clos. Balanced strings may be nested. The null + at the end of str is considered to belong to end. Unmatched members + of open or clos result in an error return. +*/ + +#define ifany(x) for (p=x; *p; p++) if (c == *p) +#define matching_clos clos[p-open] +#define error -1 +#define position s-str-1 + +balbrk(str,open,clos,end) +char *str,*open,*clos,*end; +{ + register char *p, *s, c; + char opp[2]; + opp[1] = '\0'; + for (s = str; c = *s++; ) { + ifany(end) return position; + ifany(clos) return error; + ifany(open) { + opp[0] = matching_clos; + s =+ balbrk(s,open,clos,opp); + if (*s++ != matching_clos) return error; + break; + } + } + return position; +} diff --git a/usr/src/local/sccscmds/sccscmds.ok/util/bal.c b/usr/src/local/sccscmds/sccscmds.ok/util/bal.c new file mode 100644 index 0000000000..9a3fd6b9fb --- /dev/null +++ b/usr/src/local/sccscmds/sccscmds.ok/util/bal.c @@ -0,0 +1,34 @@ +static char Sccsid[] "@(#)bal 2.1"; +# +/* + Function to find the position, in str, of the first of the char- + acters in end occurring outside a balanced string. A balanced string + contains matched occurrences of any character in open and the corres- + ponding character in clos. Balanced strings may be nested. The null + at the end of str is considered to belong to end. Unmatched members + of open or clos result in an error return. +*/ + +#define ifany(x) for (p=x; *p; p++) if (c == *p) +#define matching_clos clos[p-open] +#define error -1 +#define position s-str-1 + +balbrk(str,open,clos,end) +char *str,*open,*clos,*end; +{ + register char *p, *s, c; + char opp[2]; + opp[1] = '\0'; + for (s = str; c = *s++; ) { + ifany(end) return position; + ifany(clos) return error; + ifany(open) { + opp[0] = matching_clos; + s =+ balbrk(s,open,clos,opp); + if (*s++ != matching_clos) return error; + break; + } + } + return position; +} -- 2.20.1