Annotation of researchv8dc/libc/gen/regsub.c, revision 1.1.1.1

1.1       root        1: #include "regprog.h"
                      2: #define NULL 0
                      3: 
                      4: /* substitute into one string using the matches from the last regexec() */
                      5: extern void
                      6: regsub (progp, sp, dp)
                      7:        Prog *progp;    /* context of substitution */
                      8:        char *sp;       /* source string */
                      9:        char *dp;       /* destination string */
                     10: {
                     11:        char *ssp;
                     12: 
                     13:        while (*sp != '\0') {
                     14:                if (*sp == '\\') {
                     15:                        switch (*++sp) {
                     16:                        case '0':
                     17:                        case '1':
                     18:                        case '2':
                     19:                        case '3':
                     20:                        case '4':
                     21:                        case '5':
                     22:                        case '6':
                     23:                        case '7':
                     24:                        case '8':
                     25:                        case '9':
                     26:                                if (progp->se.startp[*sp-'0'] != NULL)
                     27:                                        for (ssp = progp->se.startp[*sp-'0'];
                     28:                                             ssp < progp->se.endp[*sp-'0'];
                     29:                                             ssp++)
                     30:                                                *dp++ = *ssp;
                     31:                                break;
                     32:                        case '\\':
                     33:                                *dp++ = '\\';
                     34:                                break;
                     35:                        case '\0':
                     36:                                sp--;
                     37:                                break;
                     38:                        default:
                     39:                                *dp++ = *sp;
                     40:                                break;
                     41:                        }
                     42:                } else if (*sp == '&') {                                
                     43:                        if (progp->se.startp[0] != NULL)
                     44:                                for (ssp = progp->se.startp[0];
                     45:                                     ssp < progp->se.endp[0]; ssp++)
                     46:                                        *dp++ = *ssp;
                     47:                } else
                     48:                        *dp++ = *sp;
                     49:                sp++;
                     50:        }
                     51:        *dp = '\0';
                     52: }
                     53: 
                     54: #ifdef DEBUG
                     55: regdump(subp)
                     56:        Subexp *subp;
                     57: {
                     58:        int i;
                     59:        char *cp;
                     60: 
                     61:        printf ("matches are:\n");
                     62:        for (i = 0; i < NSUBEXP; i++) {
                     63:                if (subp->startp[i] != NULL) {
                     64:                        printf("\t(%d) ", i);
                     65:                        for (cp = subp->startp[i]; cp < subp->endp[i]; cp++)
                     66:                                putchar(*cp);
                     67:                        putchar('\n');
                     68:                }
                     69:        }
                     70: }
                     71: #endif DEBUG

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.