Esempio n. 1
0
CELL *
bi_match(CELL * sp)
{
    char *p;
    size_t length;

    if (sp->type != C_RE)
	cast_to_RE(sp);
    if ((--sp)->type < C_STRING)
	cast1_to_s(sp);

    cell_destroy(RSTART);
    cell_destroy(RLENGTH);
    RSTART->type = C_DOUBLE;
    RLENGTH->type = C_DOUBLE;

    p = REmatch(string(sp)->str, string(sp)->len, cast_to_re((sp + 1)->ptr), &length);

    if (p) {
	sp->dval = (double) (p - string(sp)->str + 1);
	RLENGTH->dval = (double) length;
    } else {
	sp->dval = 0.0;
	RLENGTH->dval = -1.0;	/* posix */
    }

    free_STRING(string(sp));
    sp->type = C_DOUBLE;

    RSTART->dval = sp->dval;

    return sp;
}
Esempio n. 2
0
File: find.c Progetto: 8l/FUZIX
PROC
findback(char *pattern, int start, int endp)
/* look for a regular expression backwards */
{
    int ep,i, j;

     while (start > endp) {
	 ep = bseekeol(start);
	 if ((j = REmatch(pattern, ep, start)) <= start)
             {
             i = j;
             while((j=REmatch(pattern, i+1, start)) <= start)
                 {
                 i = j;
                 }
	     return i;
             }
	 start = ep-1;
     }
     return ERR;
 }
Esempio n. 3
0
File: find.c Progetto: 8l/FUZIX
PROC
findfwd(char *pattern, int start, int endp)
/* look for a regular expression forward */
{
    int ep;

     while (start < endp) {
	 ep = fseekeol(start);
	 if ((start = REmatch(pattern, start, ep)) <= ep)
	     return start;
     }
     return ERR;
 }