Parm->lvalue = *PVal;
}
- else
+ else if (strchr(Parm->Start, '|') != NULL)
{
+ const char *Pos;
+ StrBuf *pToken;
+ StrBuf *Match;
+
+ Parm->MaskBy = eOR;
+ pToken = NewStrBufPlain (Parm->Start, Parm->len);
+ Match = NewStrBufPlain (NULL, Parm->len);
+ Pos = ChrPtr(pToken);
+
+ while ((Pos != NULL) && (Pos != StrBufNOTNULL))
+ {
+ StrBufExtract_NextToken(Match, pToken, &Pos, '|');
+ StrBufTrim(Match);
+ if (StrLength (Match) > 0)
+ {
+ if (GetHash(Defines, SKEY(Match), &vPVal) &&
+ (vPVal != NULL))
+ {
+ long *PVal;
+ PVal = (long*) vPVal;
+
+ Parm->lvalue |= *PVal;
+ }
+ else {
+ LogTemplateError(NULL, "Define",
+ Tokens->nParameters,
+ TP,
+ "%s isn't known!!",
+ ChrPtr(Match));
+
+ }
+ }
+ }
+ }
+ else if (strchr(Parm->Start, '&') != NULL)
+ {
+ const char *Pos;
+ StrBuf *pToken;
+ StrBuf *Match;
+
+ Parm->MaskBy = eAND;
+ pToken = NewStrBufPlain (Parm->Start, Parm->len);
+ Match = NewStrBufPlain (NULL, Parm->len);
+ Pos = ChrPtr(pToken);
+
+ while ((Pos != NULL) && (Pos != StrBufNOTNULL))
+ {
+ StrBufExtract_NextToken(Match, pToken, &Pos, '&');
+ StrBufTrim(Match);
+ if (StrLength (Match) > 0)
+ {
+ if (GetHash(Defines, SKEY(Match), &vPVal) &&
+ (vPVal != NULL))
+ {
+ long *PVal;
+ PVal = (long*) vPVal;
+
+ Parm->lvalue |= *PVal;
+ }
+ else {
+ LogTemplateError(NULL, "Define",
+ Tokens->nParameters,
+ TP,
+ "%s isn't known!!",
+ ChrPtr(Match));
+
+ }
+ }
+ }
+ }
+ else {
+
+
LogTemplateError(NULL, "Define",
Tokens->nParameters,
TP,
WCTemplputParams *TP;
void *vTmpl;
void *vIt;
+ HashIterator *It;
memset(&TPP, 0, sizeof(WCTemplputParams));
TP = &TPP;
"referenced here doesn't exist");
}
Token->Preeval2 = vIt;
+ It = (HashIterator *) vIt;
+
+ if (TP->Tokens->nParameters < It->AdditionalParams + 2) {
+ LogTemplateError(
+ NULL, "Iterator", ERR_PARM1, TP,
+ "doesn't work with %d params",
+ TP->Tokens->nParameters);
+ }
+
+
return 1;
}
LogTemplateError(
Target, "Iterator", ERR_PARM1, TP,
"doesn't work with %d params",
- TP->Tokens->nParameters);
+ TP->Tokens->nParameters - 1);
return;
}
RegisterNamespace("SORT:ORDER", 1, 2, tmplput_SORT_ORDER, NULL, CTX_NONE);
RegisterNamespace("SORT:NEXT", 1, 2, tmplput_SORT_NEXT, NULL, CTX_NONE);
RegisterNamespace("CONTEXTSTR", 0, 1, tmplput_ContextString, NULL, CTX_STRBUF);
- RegisterNamespace("CONTEXTSTRARR", 1, 2, tmplput_ContextStringArray, NULL, CTX_STRBUF);
+ RegisterNamespace("CONTEXTSTRARR", 1, 2, tmplput_ContextStringArray, NULL, CTX_STRBUFARR);
RegisterNamespace("ITERATE", 2, 100, tmpl_iterate_subtmpl, preeval_iterate, CTX_NONE);
RegisterNamespace("DOBOXED", 1, 2, tmpl_do_boxed, NULL, CTX_NONE);
RegisterNamespace("DOTABBED", 2, 100, tmpl_do_tabbed, preeval_do_tabbed, CTX_NONE);
RegisterConditional(HKEY("COND:CONTEXTSTRARR"), 4, ConditionalContextStrinArray, CTX_STRBUFARR);
RegisterConditional(HKEY("COND:LONGVECTOR"), 4, ConditionalLongVector, CTX_LONGVECTOR);
+
RegisterControlConditional(HKEY("COND:ITERATE:ISGROUPCHANGE"), 2,
conditional_ITERATE_ISGROUPCHANGE,
CTX_ITERATE);