Introduction
Introduction Statistics Contact Development Disclaimer Help
regaux.c - 9base - revived minimalist port of Plan 9 userland to Unix
git clone git://git.suckless.org/9base
Log
Files
Refs
README
LICENSE
---
regaux.c (2089B)
---
1 #include "lib9.h"
2 #include "regexp9.h"
3 #include "regcomp.h"
4
5
6 /*
7 * save a new match in mp
8 */
9 extern void
10 _renewmatch(Resub *mp, int ms, Resublist *sp)
11 {
12 int i;
13
14 if(mp==0 || ms<=0)
15 return;
16 if(mp[0].s.sp==0 || sp->m[0].s.sp<mp[0].s.sp ||
17 (sp->m[0].s.sp==mp[0].s.sp && sp->m[0].e.ep>mp[0].e.ep)){
18 for(i=0; i<ms && i<NSUBEXP; i++)
19 mp[i] = sp->m[i];
20 for(; i<ms; i++)
21 mp[i].s.sp = mp[i].e.ep = 0;
22 }
23 }
24
25 /*
26 * Note optimization in _renewthread:
27 * *lp must be pending when _renewthread called; if *l has been …
28 * at already, the optimization is a bug.
29 */
30 extern Relist*
31 _renewthread(Relist *lp, /* _relist to add to */
32 Reinst *ip, /* instruction to add */
33 int ms,
34 Resublist *sep) /* pointers to subexpressions */
35 {
36 Relist *p;
37
38 for(p=lp; p->inst; p++){
39 if(p->inst == ip){
40 if(sep->m[0].s.sp < p->se.m[0].s.sp){
41 if(ms > 1)
42 p->se = *sep;
43 else
44 p->se.m[0] = sep->m[0];
45 }
46 return 0;
47 }
48 }
49 p->inst = ip;
50 if(ms > 1)
51 p->se = *sep;
52 else
53 p->se.m[0] = sep->m[0];
54 (++p)->inst = 0;
55 return p;
56 }
57
58 /*
59 * same as renewthread, but called with
60 * initial empty start pointer.
61 */
62 extern Relist*
63 _renewemptythread(Relist *lp, /* _relist to add to */
64 Reinst *ip, /* instruction to add */
65 int ms,
66 char *sp) /* pointers to subexpressions */
67 {
68 Relist *p;
69
70 for(p=lp; p->inst; p++){
71 if(p->inst == ip){
72 if(sp < p->se.m[0].s.sp) {
73 if(ms > 1)
74 memset(&p->se, 0, sizeof(p->se));
75 p->se.m[0].s.sp = sp;
76 }
77 return 0;
78 }
79 }
80 p->inst = ip;
81 if(ms > 1)
82 memset(&p->se, 0, sizeof(p->se));
83 p->se.m[0].s.sp = sp;
84 (++p)->inst = 0;
85 return p;
86 }
87
88 extern Relist*
89 _rrenewemptythread(Relist *lp, /* _relist to add to */
90 Reinst *ip, /* instruction to add */
91 int ms,
92 Rune *rsp) /* pointers to subexpressions */
93 {
94 Relist *p;
95
96 for(p=lp; p->inst; p++){
97 if(p->inst == ip){
98 if(rsp < p->se.m[0].s.rsp) {
99 if(ms > 1)
100 memset(&p->se, 0, sizeof(p->se));
101 p->se.m[0].s.rsp = rsp;
102 }
103 return 0;
104 }
105 }
106 p->inst = ip;
107 if(ms > 1)
108 memset(&p->se, 0, sizeof(p->se));
109 p->se.m[0].s.rsp = rsp;
110 (++p)->inst = 0;
111 return p;
112 }
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.