Blob


1 #include "lib9.h"
2 #include "regexp9.h"
4 /* substitute into one string using the matches from the last regexec() */
5 extern void
6 rregsub(Rune *sp, /* source string */
7 Rune *dp, /* destination string */
8 Resub *mp, /* subexpression elements */
9 int ms) /* number of elements pointed to by mp */
10 {
11 Rune *ssp;
12 int i;
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.rsp != 0 && mp!=0 && ms>i)
29 for(ssp = mp[i].s.rsp;
30 ssp < mp[i].e.rep;
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.rsp != 0 && mp!=0 && ms>0)
46 if(mp[0].s.rsp != 0)
47 for(ssp = mp[0].s.rsp;
48 ssp < mp[0].e.rep; ssp++)
49 *dp++ = *ssp;
50 }else
51 *dp++ = *sp;
52 sp++;
53 }
54 *dp = '\0';
55 }