version 1.18, 1999/12/06 22:28:44 |
version 1.19, 1999/12/09 18:18:24 |
|
|
(void)VarAdd(name, val, ctxt); |
(void)VarAdd(name, val, ctxt); |
} else { |
} else { |
Buf_Discard(v->val, Buf_Size(v->val)); |
Buf_Discard(v->val, Buf_Size(v->val)); |
Buf_AddChars(v->val, strlen(val), val); |
Buf_AddString(v->val, val); |
|
|
if (DEBUG(VAR)) { |
if (DEBUG(VAR)) { |
printf("%s:%s = %s\n", ctxt->name, name, val); |
printf("%s:%s = %s\n", ctxt->name, name, val); |
|
|
if (v == (Var *) NIL) { |
if (v == (Var *) NIL) { |
(void)VarAdd(name, val, ctxt); |
(void)VarAdd(name, val, ctxt); |
} else { |
} else { |
Buf_AddChar(v->val, ' '); |
Buf_AddSpace(v->val); |
Buf_AddChars(v->val, strlen(val), val); |
Buf_AddString(v->val, val); |
|
|
if (DEBUG(VAR)) { |
if (DEBUG(VAR)) { |
printf("%s:%s = %s\n", ctxt->name, name, |
printf("%s:%s = %s\n", ctxt->name, name, |
|
|
{ |
{ |
size_t len = strlen(word); |
size_t len = strlen(word); |
|
|
if (addSpace) { |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
} |
while (len--) |
|
|
while (len--) { |
|
Buf_AddChar(buf, toupper(*word++)); |
Buf_AddChar(buf, toupper(*word++)); |
} |
|
return (TRUE); |
return (TRUE); |
} |
} |
|
|
|
|
{ |
{ |
size_t len = strlen(word); |
size_t len = strlen(word); |
|
|
if (addSpace) { |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
} |
while (len--) |
|
|
while (len--) { |
|
Buf_AddChar(buf, tolower(*word++)); |
Buf_AddChar(buf, tolower(*word++)); |
} |
|
return (TRUE); |
return (TRUE); |
} |
} |
|
|
|
|
{ |
{ |
register char *slash; |
register char *slash; |
|
|
slash = strrchr (word, '/'); |
slash = strrchr(word, '/'); |
if (slash != (char *)NULL) { |
if (slash != NULL) { |
if (addSpace) { |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
} |
Buf_AddInterval(buf, word, slash); |
*slash = '\0'; |
|
Buf_AddChars(buf, strlen(word), word); |
|
*slash = '/'; |
|
return (TRUE); |
return (TRUE); |
} else { |
} else { |
/* |
/* If no directory part, give . (q.v. the POSIX standard) */ |
* If no directory part, give . (q.v. the POSIX standard) |
if (addSpace) |
*/ |
Buf_AddString(buf, " ."); |
if (addSpace) { |
else |
Buf_AddChars(buf, 2, " ."); |
|
} else { |
|
Buf_AddChar(buf, '.'); |
Buf_AddChar(buf, '.'); |
} |
|
} |
} |
return(dummy ? TRUE : TRUE); |
return(dummy ? TRUE : TRUE); |
} |
} |
|
|
{ |
{ |
register char *slash; |
register char *slash; |
|
|
if (addSpace) { |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
} |
slash = strrchr(word, '/'); |
|
if (slash != NULL) |
slash = strrchr (word, '/'); |
Buf_AddString(buf, slash+1); |
if (slash != (char *)NULL) { |
else |
*slash++ = '\0'; |
Buf_AddString(buf, word); |
Buf_AddChars(buf, strlen(slash), slash); |
|
slash[-1] = '/'; |
|
} else { |
|
Buf_AddChars(buf, strlen(word), word); |
|
} |
|
return (dummy ? TRUE : TRUE); |
return (dummy ? TRUE : TRUE); |
} |
} |
|
|
|
|
Buffer buf; /* Buffer in which to store it */ |
Buffer buf; /* Buffer in which to store it */ |
ClientData dummy; |
ClientData dummy; |
{ |
{ |
register char *dot; |
char *dot; |
|
|
dot = strrchr (word, '.'); |
dot = strrchr(word, '.'); |
if (dot != (char *)NULL) { |
if (dot != NULL) { |
if (addSpace) { |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
} |
Buf_AddString(buf, dot+1); |
*dot++ = '\0'; |
|
Buf_AddChars(buf, strlen(dot), dot); |
|
dot[-1] = '.'; |
|
addSpace = TRUE; |
addSpace = TRUE; |
} |
} |
return (dummy ? addSpace : addSpace); |
return (dummy ? addSpace : addSpace); |
|
|
Buffer buf; /* Buffer in which to store it */ |
Buffer buf; /* Buffer in which to store it */ |
ClientData dummy; |
ClientData dummy; |
{ |
{ |
register char *dot; |
char *dot; |
|
|
if (addSpace) { |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
} |
|
|
|
dot = strrchr (word, '.'); |
dot = strrchr(word, '.'); |
if (dot != (char *)NULL) { |
if (dot != NULL) |
*dot = '\0'; |
Buf_AddInterval(buf, word, dot); |
Buf_AddChars(buf, strlen(word), word); |
else |
*dot = '.'; |
Buf_AddString(buf, word); |
} else { |
|
Buf_AddChars(buf, strlen(word), word); |
|
} |
|
return (dummy ? TRUE : TRUE); |
return (dummy ? TRUE : TRUE); |
} |
} |
|
|
|
|
ClientData pattern; /* Pattern the word must match */ |
ClientData pattern; /* Pattern the word must match */ |
{ |
{ |
if (Str_Match(word, (char *) pattern)) { |
if (Str_Match(word, (char *) pattern)) { |
if (addSpace) { |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
} |
|
addSpace = TRUE; |
addSpace = TRUE; |
Buf_AddChars(buf, strlen(word), word); |
Buf_AddString(buf, word); |
} |
} |
return(addSpace); |
return(addSpace); |
} |
} |
|
|
|
|
if (*word) { |
if (*word) { |
if (addSpace) |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
|
|
addSpace = TRUE; |
addSpace = TRUE; |
|
|
if ((ptr = Str_SYSVMatch(word, pat->lhs, &len)) != NULL) |
if ((ptr = Str_SYSVMatch(word, pat->lhs, &len)) != NULL) |
Str_SYSVSubst(buf, pat->rhs, ptr, len); |
Str_SYSVSubst(buf, pat->rhs, ptr, len); |
else |
else |
Buf_AddChars(buf, strlen(word), word); |
Buf_AddString(buf, word); |
} |
} |
return(addSpace); |
return(addSpace); |
} |
} |
|
|
ClientData pattern; /* Pattern the word must match */ |
ClientData pattern; /* Pattern the word must match */ |
{ |
{ |
if (!Str_Match(word, (char *) pattern)) { |
if (!Str_Match(word, (char *) pattern)) { |
if (addSpace) { |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
} |
|
addSpace = TRUE; |
addSpace = TRUE; |
Buf_AddChars(buf, strlen(word), word); |
Buf_AddString(buf, word); |
} |
} |
return(addSpace); |
return(addSpace); |
} |
} |
|
|
* if rhs is non-null. |
* if rhs is non-null. |
*/ |
*/ |
if (pattern->rightLen != 0) { |
if (pattern->rightLen != 0) { |
if (addSpace) { |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
} |
|
addSpace = TRUE; |
addSpace = TRUE; |
Buf_AddChars(buf, pattern->rightLen, pattern->rhs); |
Buf_AddChars(buf, pattern->rightLen, pattern->rhs); |
} |
} |
|
|
* Matches at start but need to copy in trailing characters |
* Matches at start but need to copy in trailing characters |
*/ |
*/ |
if ((pattern->rightLen + wordLen - pattern->leftLen) != 0){ |
if ((pattern->rightLen + wordLen - pattern->leftLen) != 0){ |
if (addSpace) { |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
} |
|
addSpace = TRUE; |
addSpace = TRUE; |
} |
} |
Buf_AddChars(buf, pattern->rightLen, pattern->rhs); |
Buf_AddChars(buf, pattern->rightLen, pattern->rhs); |
|
|
* by the right-hand-side. |
* by the right-hand-side. |
*/ |
*/ |
if (((cp - word) + pattern->rightLen) != 0) { |
if (((cp - word) + pattern->rightLen) != 0) { |
if (addSpace) { |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
} |
|
addSpace = TRUE; |
addSpace = TRUE; |
} |
} |
Buf_AddChars(buf, cp - word, word); |
Buf_AddInterval(buf, word, cp); |
Buf_AddChars(buf, pattern->rightLen, pattern->rhs); |
Buf_AddChars(buf, pattern->rightLen, pattern->rhs); |
pattern->flags |= VAR_SUB_MATCHED; |
pattern->flags |= VAR_SUB_MATCHED; |
} else { |
} else { |
|
|
cp = strstr(word, pattern->lhs); |
cp = strstr(word, pattern->lhs); |
if (cp != (char *)NULL) { |
if (cp != (char *)NULL) { |
if (addSpace && (((cp - word) + pattern->rightLen) != 0)){ |
if (addSpace && (((cp - word) + pattern->rightLen) != 0)){ |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
addSpace = FALSE; |
addSpace = FALSE; |
} |
} |
Buf_AddChars(buf, cp-word, word); |
Buf_AddInterval(buf, word, cp); |
Buf_AddChars(buf, pattern->rightLen, pattern->rhs); |
Buf_AddChars(buf, pattern->rightLen, pattern->rhs); |
wordLen -= (cp - word) + pattern->leftLen; |
wordLen -= (cp - word) + pattern->leftLen; |
word = cp + pattern->leftLen; |
word = cp + pattern->leftLen; |
|
|
} |
} |
} |
} |
if (wordLen != 0) { |
if (wordLen != 0) { |
if (addSpace) { |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
} |
|
Buf_AddChars(buf, wordLen, word); |
Buf_AddChars(buf, wordLen, word); |
} |
} |
/* |
/* |
|
|
return (addSpace); |
return (addSpace); |
} |
} |
nosub: |
nosub: |
if (addSpace) { |
if (addSpace) |
Buf_AddChar(buf, ' '); |
Buf_AddSpace(buf); |
} |
|
Buf_AddChars(buf, wordLen, word); |
Buf_AddChars(buf, wordLen, word); |
return(TRUE); |
return(TRUE); |
} |
} |
|
|
|
|
#define MAYBE_ADD_SPACE() \ |
#define MAYBE_ADD_SPACE() \ |
if (addSpace && !added) \ |
if (addSpace && !added) \ |
Buf_AddChar(buf, ' '); \ |
Buf_AddSpace(buf); \ |
added = 1 |
added = 1 |
|
|
added = 0; |
added = 0; |
|
|
* substitution and recurse. |
* substitution and recurse. |
*/ |
*/ |
cp2 = Var_Parse(cp, ctxt, err, &len, &freeIt); |
cp2 = Var_Parse(cp, ctxt, err, &len, &freeIt); |
Buf_AddChars(buf, strlen(cp2), cp2); |
Buf_AddString(buf, cp2); |
if (freeIt) |
if (freeIt) |
free(cp2); |
free(cp2); |
cp += len - 1; |
cp += len - 1; |
|
|
|
|
for (cp = str++; *str != '$' && *str != '\0'; str++) |
for (cp = str++; *str != '$' && *str != '\0'; str++) |
continue; |
continue; |
Buf_AddChars(buf, str - cp, cp); |
Buf_AddInterval(buf, cp, str); |
} else { |
} else { |
if (var != NULL) { |
if (var != NULL) { |
int expand; |
int expand; |
|
|
* the nested one |
* the nested one |
*/ |
*/ |
if (*p == '$') { |
if (*p == '$') { |
Buf_AddChars(buf, p - str, str); |
Buf_AddInterval(buf, str, p); |
str = p; |
str = p; |
continue; |
continue; |
} |
} |
|
|
*/ |
*/ |
for (;*p != '$' && *p != '\0'; p++) |
for (;*p != '$' && *p != '\0'; p++) |
continue; |
continue; |
Buf_AddChars(buf, p - str, str); |
Buf_AddInterval(buf, str, p); |
str = p; |
str = p; |
expand = FALSE; |
expand = FALSE; |
} |
} |
|
|
* Copy all the characters from the variable value straight |
* Copy all the characters from the variable value straight |
* into the new string. |
* into the new string. |
*/ |
*/ |
Buf_AddChars(buf, strlen(val), val); |
Buf_AddString(buf, val); |
if (doFree) { |
if (doFree) { |
free ((Address)val); |
free ((Address)val); |
} |
} |