Added all of the MH sources, including RCS files, in
[mmh] / docs / historical / mh-6.8.5 / sbr / brkstring.c
1 /* brkstring.c - break string into an array of strings */
2
3 #include "../h/mh.h"
4
5
6 static char *broken[MAXARGS+1]; /* array of substring start addresses */
7 static brkany();
8
9 char  **brkstring (strg, brksep, brkterm)
10 register char  *strg;
11 register char  *brksep,
12                *brkterm;
13 {
14     register int    bi;
15     register char   c,
16                    *sp;
17
18     sp = strg;                  /* scan string, replacing separators with
19                                    zeroes */
20
21     for (bi = 0; bi < MAXARGS; bi++) {
22                                 /* and entering start addrs in "broken" */
23         while (brkany (c = *sp, brksep))
24             *sp++ = 0;
25         if (!c || brkany (c, brkterm)) {
26             *sp = 0;
27             broken[bi] = 0;
28             return broken;      /* terminator found, finish up */
29         }
30
31         broken[bi] = sp;        /* set next start addr */
32         while ((c = *++sp) && !brkany (c, brksep) && !brkany (c, brkterm))
33                 continue;
34     }
35     broken[MAXARGS] = 0;        /* reached limit of MAXARGS substrings */
36
37     return broken;
38 }
39
40
41 static  brkany (chr, strg)      /* returns 1 if chr in strg, 0 otherwise  */
42 register char   chr,
43                *strg;
44 {
45     register char  *sp;
46
47     if (strg)
48         for (sp = strg; *sp; sp++)
49             if (chr == *sp)
50                 return 1;
51     return 0;
52 }