1*3e12c5d1SDavid du Colombier #include <stdlib.h> 2*3e12c5d1SDavid du Colombier #include <stdio.h> 3*3e12c5d1SDavid du Colombier #include "regexp.h" 4*3e12c5d1SDavid du Colombier #include "regcomp.h" 5*3e12c5d1SDavid du Colombier 6*3e12c5d1SDavid du Colombier /* 7*3e12c5d1SDavid du Colombier * Machine state 8*3e12c5d1SDavid du Colombier */ 9*3e12c5d1SDavid du Colombier Relist* _relist[2]; 10*3e12c5d1SDavid du Colombier Relist* _reliste[2]; 11*3e12c5d1SDavid du Colombier int _relistsize = LISTINCREMENT; 12*3e12c5d1SDavid du Colombier 13*3e12c5d1SDavid du Colombier /* 14*3e12c5d1SDavid du Colombier * save a new match in mp 15*3e12c5d1SDavid du Colombier */ 16*3e12c5d1SDavid du Colombier extern void _renewmatch(Resub * mp,int ms,Resublist * sp)17*3e12c5d1SDavid du Colombier_renewmatch(Resub *mp, int ms, Resublist *sp) 18*3e12c5d1SDavid du Colombier { 19*3e12c5d1SDavid du Colombier int i; 20*3e12c5d1SDavid du Colombier 21*3e12c5d1SDavid du Colombier if(mp==0 || ms<=0) 22*3e12c5d1SDavid du Colombier return; 23*3e12c5d1SDavid du Colombier if(mp[0].s.sp==0 || sp->m[0].s.sp<mp[0].s.sp || 24*3e12c5d1SDavid du Colombier (sp->m[0].s.sp==mp[0].s.sp && sp->m[0].e.ep>mp[0].e.ep)){ 25*3e12c5d1SDavid du Colombier for(i=0; i<ms && i<NSUBEXP; i++) 26*3e12c5d1SDavid du Colombier mp[i] = sp->m[i]; 27*3e12c5d1SDavid du Colombier for(; i<ms; i++) 28*3e12c5d1SDavid du Colombier mp[i].s.sp = mp[i].e.ep = 0; 29*3e12c5d1SDavid du Colombier } 30*3e12c5d1SDavid du Colombier } 31*3e12c5d1SDavid du Colombier 32*3e12c5d1SDavid du Colombier /* 33*3e12c5d1SDavid du Colombier * Note optimization in _renewthread: 34*3e12c5d1SDavid du Colombier * *lp must be pending when _renewthread called; if *l has been looked 35*3e12c5d1SDavid du Colombier * at already, the optimization is a bug. 36*3e12c5d1SDavid du Colombier */ 37*3e12c5d1SDavid du Colombier extern Relist* _renewthread(Relist * lp,Reinst * ip,Resublist * sep)38*3e12c5d1SDavid du Colombier_renewthread(Relist *lp, /* _relist to add to */ 39*3e12c5d1SDavid du Colombier Reinst *ip, /* instruction to add */ 40*3e12c5d1SDavid du Colombier Resublist *sep) /* pointers to subexpressions */ 41*3e12c5d1SDavid du Colombier { 42*3e12c5d1SDavid du Colombier Relist *p; 43*3e12c5d1SDavid du Colombier 44*3e12c5d1SDavid du Colombier for(p=lp; p->inst; p++){ 45*3e12c5d1SDavid du Colombier if(p->inst == ip){ 46*3e12c5d1SDavid du Colombier if((sep)->m[0].s.sp < p->se.m[0].s.sp) 47*3e12c5d1SDavid du Colombier p->se = *sep; 48*3e12c5d1SDavid du Colombier return 0; 49*3e12c5d1SDavid du Colombier } 50*3e12c5d1SDavid du Colombier } 51*3e12c5d1SDavid du Colombier p->inst = ip; 52*3e12c5d1SDavid du Colombier p->se = *sep; 53*3e12c5d1SDavid du Colombier (++p)->inst = 0; 54*3e12c5d1SDavid du Colombier return p; 55*3e12c5d1SDavid du Colombier } 56*3e12c5d1SDavid du Colombier 57