9 - regprint - print a regexp for debugging
10 == void regprint(regex_t *r, FILE *d);
17 register struct re_guts *g = r->re_g;
23 fprintf(d, "%ld states, %d categories", (long)g->nstates,
25 fprintf(d, ", first %ld last %ld", (long)g->firststate,
28 fprintf(d, ", USEBOL");
30 fprintf(d, ", USEEOL");
34 fprintf(d, ", nsub=%ld", (long)g->nsub);
36 fprintf(d, ", must(%ld) `%*s'", (long)g->mlen, (int)g->mlen,
39 fprintf(d, ", backrefs");
41 fprintf(d, ", nplus %ld", (long)g->nplus);
44 for (i = 0; i < g->ncategories; i++) {
46 for (c = CHAR_MIN; c <= CHAR_MAX; c++)
47 if (g->categories[c] == i)
50 fprintf(d, "cc0#%d", nincat[0]);
51 for (i = 1; i < g->ncategories; i++)
53 for (c = CHAR_MIN; c <= CHAR_MAX; c++)
54 if (g->categories[c] == i)
56 fprintf(d, ", %d=%s", i, regchar(c));
59 for (i = 1; i < g->ncategories; i++)
61 fprintf(d, "cc%d\t", i);
63 for (c = CHAR_MIN; c <= CHAR_MAX+1; c++) /* +1 does flush */
64 if (c <= CHAR_MAX && g->categories[c] == i) {
66 fprintf(d, "%s", regchar(c));
82 - s_print - print the strip for debugging
83 == static void s_print(register struct re_guts *g, FILE *d);
87 register struct re_guts *g;
93 register int done = 0;
97 register sopno offset = 2;
98 # define GAP() { if (offset % 5 == 0) { \
100 fprintf(d, "\n\t"); \
111 if (OP(g->strip[0]) != OEND)
112 fprintf(d, "missing initial OEND!\n");
113 for (s = &g->strip[1]; !done; s++) {
121 if (strchr("\\|()^$.[+*?{}!<> ", (char)opnd) != NULL)
122 fprintf(d, "\\%c", (char)opnd);
124 fprintf(d, "%s", regchar((char)opnd));
142 fprintf(d, "[(%ld)", (long)opnd);
145 for (i = 0; i < g->csetsize+1; i++) /* +1 flushes */
146 if (CHIN(cs, i) && i < g->csetsize) {
148 fprintf(d, "%s", regchar(i));
162 fprintf(d, "(\\<%ld>", (long)opnd);
165 fprintf(d, "<%ld>\\)", (long)opnd);
169 if (OP(*(s+opnd)) != O_PLUS)
170 fprintf(d, "<%ld>", (long)opnd);
173 if (OP(*(s-opnd)) != OPLUS_)
174 fprintf(d, "<%ld>", (long)opnd);
179 if (OP(*(s+opnd)) != O_QUEST)
180 fprintf(d, "<%ld>", (long)opnd);
183 if (OP(*(s-opnd)) != OQUEST_)
184 fprintf(d, "<%ld>", (long)opnd);
188 fprintf(d, "((<%ld>", (long)opnd);
191 fprintf(d, "<%ld>))", (long)opnd);
195 if (OP(*(s+opnd)) != OOR2)
196 fprintf(d, "<%ld>", (long)opnd);
199 if (OP(*(s-opnd)) != OOR1 && OP(*(s-opnd)) != OCH_)
200 fprintf(d, "<%ld>", (long)opnd);
205 if (OP(*(s+opnd)) != OOR2 && OP(*(s+opnd)) != O_CH)
206 fprintf(d, "<%ld>", (long)opnd);
209 if (OP(*(s-opnd)) != OOR1)
210 fprintf(d, "<%ld>", (long)opnd);
214 fprintf(d, "!%d(%d)!", OP(*s), opnd);
223 - regchar - make a character printable
224 == static char *regchar(int ch);
226 static char * /* -> representation */
232 if (isprint(ch) || ch == ' ')
233 snprintf(buf, SIZEOF(buf), "%c", ch);
235 snprintf(buf, SIZEOF(buf), "\\%o", ch);