version 1.7, 2001/05/03 13:41:13 |
version 1.8, 2001/05/07 22:59:33 |
|
|
Boolean err UNUSED; |
Boolean err UNUSED; |
int endc; |
int endc; |
{ |
{ |
static VarPattern pattern; |
VarPattern *pattern; |
const char *cp, *cp2; |
const char *cp, *cp2; |
int cnt = 0; |
int cnt = 0; |
char startc = endc == ')' ? '(' : '}'; |
char startc = endc == ')' ? '(' : '}'; |
|
|
} |
} |
} |
} |
|
|
pattern.lhs = interval_dup(*p, cp); |
pattern = (VarPattern *)emalloc(sizeof(VarPattern)); |
pattern.leftLen = cp - *p; |
pattern->lbuffer = pattern->lhs = interval_dup(*p, cp); |
pattern.rhs = interval_dup(cp+1, cp2); |
pattern->leftLen = cp - *p; |
pattern.rightLen = cp2 - (cp+1); |
pattern->rhs = interval_dup(cp+1, cp2); |
pattern.flags = 0; |
pattern->rightLen = cp2 - (cp+1); |
|
pattern->flags = 0; |
*p = cp2; |
*p = cp2; |
return &pattern; |
return pattern; |
} |
} |
|
|
|
|
|
|
Boolean err; |
Boolean err; |
int endc; |
int endc; |
{ |
{ |
static VarPattern pattern; /* just one for the whole system */ |
VarPattern *pattern; |
char delim; |
char delim; |
const char *s; |
const char *s; |
|
|
|
pattern = (VarPattern *)emalloc(sizeof(VarPattern)); |
|
pattern->flags = 0; |
s = *p; |
s = *p; |
|
|
pattern.flags = 0; |
|
delim = s[1]; |
delim = s[1]; |
if (delim == '\0') |
if (delim == '\0') |
return NULL; |
return NULL; |
s += 2; |
s += 2; |
|
|
pattern.rhs = NULL; |
pattern->rhs = NULL; |
pattern.lhs = VarGetPattern(ctxt, err, &s, delim, delim, |
pattern->lhs = VarGetPattern(ctxt, err, &s, delim, delim, |
&pattern.leftLen, NULL); |
&pattern->leftLen, NULL); |
pattern.lbuffer = pattern.lhs; |
pattern->lbuffer = pattern->lhs; |
if (pattern.lhs != NULL) { |
if (pattern->lhs != NULL) { |
pattern.rhs = VarGetPattern(ctxt, err, &s, delim, delim, |
pattern->rhs = VarGetPattern(ctxt, err, &s, delim, delim, |
&pattern.rightLen, &pattern); |
&pattern->rightLen, pattern); |
if (pattern.rhs != NULL) { |
if (pattern->rhs != NULL) { |
/* Check for global substitution. If 'g' after the final |
/* Check for global substitution. If 'g' after the final |
* delimiter, substitution is global and is marked that |
* delimiter, substitution is global and is marked that |
* way. */ |
* way. */ |
for (;; s++) { |
for (;; s++) { |
switch (*s) { |
switch (*s) { |
case 'g': |
case 'g': |
pattern.flags |= VAR_SUB_GLOBAL; |
pattern->flags |= VAR_SUB_GLOBAL; |
continue; |
continue; |
case '1': |
case '1': |
pattern.flags |= VAR_SUB_ONE; |
pattern->flags |= VAR_SUB_ONE; |
continue; |
continue; |
} |
} |
break; |
break; |
} |
} |
if (*s == endc || *s == ':') { |
if (*s == endc || *s == ':') { |
*p = s; |
*p = s; |
return &pattern; |
return pattern; |
} |
} |
} |
} |
} |
} |
free_patternarg(&pattern); |
free_patternarg(pattern); |
return NULL; |
return NULL; |
} |
} |
|
|
|
|
Boolean err; |
Boolean err; |
int endc; |
int endc; |
{ |
{ |
static VarPattern pattern; |
VarPattern *pattern; |
const char *s; |
const char *s; |
|
|
|
pattern = (VarPattern *)emalloc(sizeof(VarPattern)); |
s = *p + 1; |
s = *p + 1; |
pattern.rhs = NULL; |
pattern->rhs = NULL; |
pattern.lbuffer = VarGetPattern(ctxt, err, &s, ':', endc, |
pattern->lbuffer = VarGetPattern(ctxt, err, &s, ':', endc, |
&pattern.leftLen, NULL); |
&pattern->leftLen, NULL); |
if (s[-1] == endc || s[-1] == ':') { |
if (s[-1] == endc || s[-1] == ':') { |
*p = s-1; |
*p = s-1; |
return &pattern; |
return pattern; |
} |
} |
free_patternarg(&pattern); |
free_patternarg(pattern); |
return NULL; |
return NULL; |
} |
} |
|
|
|
|
Boolean err; |
Boolean err; |
int endc UNUSED; |
int endc UNUSED; |
{ |
{ |
static VarPattern pattern; |
VarPattern *pattern; |
const char *s; |
const char *s; |
|
|
|
pattern = (VarPattern *)emalloc(sizeof(VarPattern)); |
s = *p + 1; |
s = *p + 1; |
pattern.rhs = NULL; |
pattern->rhs = NULL; |
pattern.lbuffer = VarGetPattern(ctxt, err, &s, '!', '!', |
pattern->lbuffer = VarGetPattern(ctxt, err, &s, '!', '!', |
&pattern.leftLen, NULL); |
&pattern->leftLen, NULL); |
if (s[-1] == '!') { |
if (s[-1] == '!') { |
*p = s-1; |
*p = s-1; |
return &pattern; |
return pattern; |
} |
} |
free_patternarg(&pattern); |
free_patternarg(pattern); |
return NULL; |
return NULL; |
} |
} |
|
|
|
|
void *p; |
void *p; |
{ |
{ |
VarPattern *vp = (VarPattern *)p; |
VarPattern *vp = (VarPattern *)p; |
|
|
free(vp->lbuffer); |
free(vp->lbuffer); |
free(vp->rhs); |
free(vp->rhs); |
|
free(vp); |
} |
} |
|
|
#ifndef MAKE_BOOTSTRAP |
#ifndef MAKE_BOOTSTRAP |