|
|
1.1 ! root 1: #include "mk.h" ! 2: ! 3: #define NMATCH 10 ! 4: ! 5: gen(buf) ! 6: char *buf; ! 7: { ! 8: char buf1[BIGBLOCK]; ! 9: register char *src, *dest; ! 10: register char *s1, *s2, *s3, *s4; ! 11: regexp *prog; ! 12: regsubexp match[NMATCH]; ! 13: char c; ! 14: ! 15: if((s1 = strchr(buf, '@')) == 0) ! 16: return; ! 17: patrule = 0; ! 18: src = buf; ! 19: dest = buf1; ! 20: do { ! 21: while(src != s1) ! 22: *dest++ = *src++; ! 23: if((s2 = strchr(s1+1, '@')) && (s3 = strchr(s2+1, '@')) ! 24: && (s4 = strchr(s3+1, '@'))) ! 25: ; ! 26: else { ! 27: SYNERR(-1); Fprint(2, "expected four @\n"); ! 28: break; ! 29: } ! 30: src = s4+1; ! 31: *s2++ = *s3++ = *s4 = 0; ! 32: prog = regcomp(s2); ! 33: for(s2 = ++s1; ; s2 = s1){ ! 34: while((*s2 == ' ')||(*s2 == '\t')) ! 35: s2++; ! 36: if(s1 != s2) *dest++ = ' '; ! 37: if(*s2 == 0) break; ! 38: for(s1 = s2+1; *s1 && (*s1 != ' ') && (*s1 != '\t');) ! 39: s1++; ! 40: c = *s1; ! 41: *s1 = 0; ! 42: if(regexec(prog, s2, match, NMATCH)){ ! 43: regsub(s3, dest, match, NMATCH); ! 44: while(*dest) dest++; ! 45: } else ! 46: while(*dest = *s2++) ! 47: dest++; ! 48: *s1 = c; ! 49: } ! 50: } while(s1 = strchr(src, '@')); ! 51: while(*dest++ = *src++) ! 52: ; ! 53: memcpy(buf, buf1, (int)(dest-buf1)); ! 54: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.