version 1.10, 1999/12/16 16:58:15 |
version 1.11, 1999/12/16 17:02:45 |
|
|
Boolean parens; /* TRUE if arg should be bounded by parens */ |
Boolean parens; /* TRUE if arg should be bounded by parens */ |
{ |
{ |
register char *cp; |
register char *cp; |
register Buffer buf; |
BUFFER buf; |
|
|
cp = *linePtr; |
cp = *linePtr; |
if (parens) { |
if (parens) { |
|
|
* Create a buffer for the argument and start it out at 16 characters |
* Create a buffer for the argument and start it out at 16 characters |
* long. Why 16? Why not? |
* long. Why 16? Why not? |
*/ |
*/ |
buf = Buf_Init(16); |
Buf_Init(&buf, 16); |
|
|
while ((strchr(" \t)&|", *cp) == (char *)NULL) && (*cp != '\0')) { |
while ((strchr(" \t)&|", *cp) == (char *)NULL) && (*cp != '\0')) { |
if (*cp == '$') { |
if (*cp == '$') { |
|
|
|
|
cp2 = Var_Parse(cp, VAR_CMD, TRUE, &len, &doFree); |
cp2 = Var_Parse(cp, VAR_CMD, TRUE, &len, &doFree); |
|
|
Buf_AddString(buf, cp2); |
Buf_AddString(&buf, cp2); |
if (doFree) { |
if (doFree) { |
free(cp2); |
free(cp2); |
} |
} |
cp += len; |
cp += len; |
} else { |
} else { |
Buf_AddChar(buf, *cp); |
Buf_AddChar(&buf, *cp); |
cp++; |
cp++; |
} |
} |
} |
} |
|
|
*argPtr = Buf_Retrieve(buf); |
*argPtr = Buf_Retrieve(&buf); |
*argLen = Buf_Size(buf); |
*argLen = Buf_Size(&buf); |
Buf_Destroy(buf, FALSE); |
|
|
|
while (*cp == ' ' || *cp == '\t') { |
while (*cp == ' ' || *cp == '\t') { |
cp++; |
cp++; |
|
|
|
|
if (!isspace((unsigned char) *condExpr) && |
if (!isspace((unsigned char) *condExpr) && |
strchr("!=><", *condExpr) == NULL) { |
strchr("!=><", *condExpr) == NULL) { |
Buffer buf; |
BUFFER buf; |
|
|
buf = Buf_Init(0); |
Buf_Init(&buf, 0); |
|
|
Buf_AddString(buf, lhs); |
Buf_AddString(&buf, lhs); |
|
|
if (doFree) |
if (doFree) |
free(lhs); |
free(lhs); |
|
|
for (;*condExpr && !isspace((unsigned char) *condExpr); |
for (;*condExpr && !isspace((unsigned char) *condExpr); |
condExpr++) |
condExpr++) |
Buf_AddChar(buf, *condExpr); |
Buf_AddChar(&buf, *condExpr); |
|
|
lhs = Buf_Retrieve(buf); |
lhs = Buf_Retrieve(&buf); |
Buf_Destroy(buf, FALSE); |
|
|
|
doFree = TRUE; |
doFree = TRUE; |
} |
} |
|
|
char *string; |
char *string; |
char *cp, *cp2; |
char *cp, *cp2; |
int qt; |
int qt; |
Buffer buf; |
BUFFER buf; |
|
|
do_string_compare: |
do_string_compare: |
if (((*op != '!') && (*op != '=')) || (op[1] != '=')) { |
if (((*op != '!') && (*op != '=')) || (op[1] != '=')) { |
|
|
goto error; |
goto error; |
} |
} |
|
|
buf = Buf_Init(0); |
Buf_Init(&buf, 0); |
qt = *rhs == '"' ? 1 : 0; |
qt = *rhs == '"' ? 1 : 0; |
|
|
for (cp = &rhs[qt]; |
for (cp = &rhs[qt]; |
|
|
* character, if it exists. |
* character, if it exists. |
*/ |
*/ |
cp++; |
cp++; |
Buf_AddChar(buf, *cp); |
Buf_AddChar(&buf, *cp); |
} else if (*cp == '$') { |
} else if (*cp == '$') { |
int len; |
int len; |
Boolean freeIt; |
Boolean freeIt; |
|
|
cp2 = Var_Parse(cp, VAR_CMD, doEval,&len, &freeIt); |
cp2 = Var_Parse(cp, VAR_CMD, doEval,&len, &freeIt); |
if (cp2 != var_Error) { |
if (cp2 != var_Error) { |
Buf_AddString(buf, cp2); |
Buf_AddString(&buf, cp2); |
if (freeIt) { |
if (freeIt) { |
free(cp2); |
free(cp2); |
} |
} |
cp += len - 1; |
cp += len - 1; |
} else { |
} else { |
Buf_AddChar(buf, *cp); |
Buf_AddChar(&buf, *cp); |
} |
} |
} else { |
} else { |
Buf_AddChar(buf, *cp); |
Buf_AddChar(&buf, *cp); |
} |
} |
} |
} |
|
|
string = Buf_Retrieve(buf); |
string = Buf_Retrieve(&buf); |
Buf_Destroy(buf, FALSE); |
|
|
|
if (DEBUG(COND)) { |
if (DEBUG(COND)) { |
printf("lhs = \"%s\", rhs = \"%s\", op = %.2s\n", |
printf("lhs = \"%s\", rhs = \"%s\", op = %.2s\n", |