+void RegisterControlNS(const char *NSName,
+ long len,
+ int nMinArgs,
+ int nMaxArgs,
+ WCHandlerFunc HandlerFunc,
+ int ControlContextRequired)
+{
+ HashHandler *NewHandler;
+
+ NewHandler = (HashHandler*) malloc(sizeof(HashHandler));
+ NewHandler->Filter.nMinArgs = nMinArgs;
+ NewHandler->Filter.nMaxArgs = nMaxArgs;
+ NewHandler->Filter.ContextType = CTX_NONE;
+ NewHandler->Filter.ControlContextType = ControlContextRequired;
+ NewHandler->HandlerFunc = HandlerFunc;
+ Put(GlobalNS, NSName, len, NewHandler, NULL);
+}
+
+
+
+int CheckContext(StrBuf *Target, ContextFilter *Need, WCTemplputParams *TP, const char *ErrType)
+{
+ if ((Need->ContextType != CTX_NONE) &&
+ (Need->ContextType != TP->Filter.ContextType)) {
+ LogTemplateError(
+ Target, ErrType, ERR_PARM1, TP,
+ " WARNING: requires Context: [%s], have [%s]!",
+ CtxNames[Need->ContextType],
+ CtxNames[TP->Filter.ContextType]);
+ return 0;
+ }
+
+ if ((Need->ControlContextType != CTX_NONE) &&
+ (Need->ControlContextType != TP->Filter.ControlContextType)) {
+ LogTemplateError(
+ Target, ErrType, ERR_PARM1, TP,
+ " WARNING: requires Control Context: [%s], have [%s]!",
+ CtxNames[Need->ControlContextType],
+ CtxNames[TP->Filter.ControlContextType]);
+ return 0;
+ }
+
+ if (TP->Tokens->nParameters < Need->nMinArgs) {
+ LogTemplateError(Target, ErrType, ERR_NAME, TP,
+ "needs at least %ld params, have %ld",
+ Need->nMinArgs,
+ TP->Tokens->nParameters);
+ return 0;
+
+ }
+ else if (TP->Tokens->nParameters > Need->nMaxArgs) {
+ LogTemplateError(Target, ErrType, ERR_NAME, TP,
+ "just needs %ld params, you gave %ld",
+ TP->Tokens->nParameters,
+ Need->nMaxArgs);
+ return 0;
+
+ }
+ return 1;
+}
+