StrBuf_ServGetln(Line);
StrBufExtract_NextToken(Token, Line, &Pos, '|');
PutTo = GetTokenDefine(SKEY(Token), -1);
- if ((PutTo > 0) && (PutTo < maxRoomNetCfg))
+ if ((PutTo > 0) &&
+ (PutTo < maxRoomNetCfg) &&
+ (Pos != StrBufNOTNULL))
{
int n;
+ HashList *SubH;
if (WCC->CurRoom.IgnetCfgs[PutTo] == NULL)
WCC->CurRoom.IgnetCfgs[PutTo] = NewHash(1, NULL);
- Content = NewStrBuf();
- StrBufExtract_NextToken(Content, Line, &Pos, '|');
+ SubH = NewHash(1, NULL);
n = GetCount(WCC->CurRoom.IgnetCfgs[PutTo]) + 1;
Put(WCC->CurRoom.IgnetCfgs[PutTo],
IKEY(n),
- Content,
- HFreeStrBuf);
+ SubH,
+ HDeleteHash);
+ while (Pos != StrBufNOTNULL) {
+ Content = NewStrBuf();
+ StrBufExtract_NextToken(Content, Line, &Pos, '|');
+ Put(SubH,
+ IKEY(n),
+ Content,
+ HFreeStrBuf);
+ }
}
}
else if (State == 550)
RegisterConditional(HKEY("COND:FLOOR:ISSUBROOM"), 0, ConditionalFloorIsSUBROOM, CTX_FLOORS);
RegisterConditional(HKEY("COND:ROOM:REST:ISSUBFLOOR"), 0, ConditionalFloorIsRESTSubFloor, CTX_FLOORS);
- RegisterIterator("ITERATE:THISROOM:GNET", 1, NULL, GetNetConfigHash, NULL, NULL, CTX_STRBUF, CTX_NONE, IT_NOFLAG);
+ RegisterIterator("ITERATE:THISROOM:GNET", 1, NULL, GetNetConfigHash, NULL, NULL, CTX_STRBUFARR, CTX_NONE, IT_NOFLAG);
RegisterIterator("LFLR", 0, NULL, GetFloorListHash, NULL, NULL, CTX_FLOORS, CTX_NONE, IT_FLAG_DETECT_GROUPCHANGE);
"Context MIME_ATACH",
"Context FILELIST",
"Context STRBUF",
+ "Context STRBUFARR",
"Context LONGVECTOR",
"Context ROOMS",
"Context FLOORS",
return strcmp(ChrPtr(TokenText), CompareToken) == 0;
}
+void tmplput_ContextStringArray(StrBuf *Target, WCTemplputParams *TP)
+{
+ HashList *Arr = (HashList*) CTX;
+ void *pV;
+ int val;
+
+ val = GetTemplateTokenNumber(Target, TP, 0, 0);
+ if (GetHash(Arr, IKEY(val), &pV) &&
+ (pV != NULL)) {
+ StrBufAppendTemplate(Target, TP, (StrBuf*)pV, 1);
+ }
+}
+int ConditionalContextStrinArray(StrBuf *Target, WCTemplputParams *TP)
+{
+ HashList *Arr = (HashList*) CTX;
+ void *pV;
+ int val;
+ const char *CompareToken;
+ long len;
+
+ GetTemplateTokenString(Target, TP, 2, &CompareToken, &len);
+ val = GetTemplateTokenNumber(Target, TP, 0, 0);
+ if (GetHash(Arr, IKEY(val), &pV) &&
+ (pV != NULL)) {
+ return strcmp(ChrPtr((StrBuf*)pV), CompareToken) == 0;
+ }
+ else
+ return 0;
+}
+
/*-----------------------------------------------------------------------------
* Boxed-API
*/
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", 0, 1, tmplput_ContextStringArray, NULL, CTX_STRBUF);
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);
RegisterNamespace("LONGVECTOR", 1, 1, tmplput_long_vector, NULL, CTX_LONGVECTOR);
+
+
RegisterConditional(HKEY("COND:SUBST"), 3, ConditionalVar, CTX_NONE);
RegisterConditional(HKEY("COND:CONTEXTSTR"), 3, ConditionalContextStr, CTX_STRBUF);
+ RegisterConditional(HKEY("COND:CONTEXTSTR"), 4, ConditionalContextStrinArray, CTX_STRBUFARR);
RegisterConditional(HKEY("COND:LONGVECTOR"), 4, ConditionalLongVector, CTX_LONGVECTOR);
RegisterControlConditional(HKEY("COND:ITERATE:ISGROUPCHANGE"), 2,