From: Jay Lepreau Date: Mon, 16 Feb 1987 08:16:43 +0000 (-0800) Subject: date and time created 87/02/15 16:16:43 by lepreau X-Git-Tag: BSD-4_3-Snapshot-Development~74 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/1843f4c62f8dd5c82988ba66b78e81c7b6390c5d?hp=82bd445e09fe5e20f72a2655106545058e517dc7 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 --- 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; +}