1 #include <lib9.h> 2 #include "regexp.h" 3 4 /* substitute into one string using the matches from the last regexec() */ 5 extern void 6 regsub(char *sp, /* source string */ 7 char *dp, /* destination string */ 8 Resub *mp, /* subexpression elements */ 9 int ms) /* number of elements pointed to by mp */ 10 { 11 char *ssp; 12 int i; 13 14 while(*sp != '\0'){ 15 if(*sp == '\\'){ 16 switch(*++sp){ 17 case '0': 18 case '1': 19 case '2': 20 case '3': 21 case '4': 22 case '5': 23 case '6': 24 case '7': 25 case '8': 26 case '9': 27 i = *sp-'0'; 28 if(mp[i].s.sp != 0 && mp!=0 && ms>i) 29 for(ssp = mp[i].s.sp; 30 ssp < mp[i].e.ep; 31 ssp++) 32 *dp++ = *ssp; 33 break; 34 case '\\': 35 *dp++ = '\\'; 36 break; 37 case '\0': 38 sp--; 39 break; 40 default: 41 *dp++ = *sp; 42 break; 43 } 44 }else if(*sp == '&'){ 45 if(mp[0].s.sp != 0 && mp!=0 && ms>0) 46 if(mp[0].s.sp != 0) 47 for(ssp = mp[0].s.sp; 48 ssp < mp[0].e.ep; ssp++) 49 *dp++ = *ssp; 50 }else 51 *dp++ = *sp; 52 sp++; 53 } 54 *dp = '\0'; 55 } 56