+ node->nodeData.loop.currentInstance->nrow++;
+ node->nodeData.loop.currentInstance->rowValues =
+ GListPush( node->nodeData.loop.currentInstance->rowValues, rowData );
+
+ return TVAR_OK;
+}
+
+int
+addTemplateNestedLoop( Template tmpl, char * key) {
+ TemplateNode *pnode, node;
+ char *lkey = strlower(mcstrdup(tmpl->templateContext, key));
+ GListCell *cell;
+
+ pnode = SFSFindData(&tmpl->variables, lkey, 0);
+ mcfree(lkey);
+
+ if ( pnode == NULL )
+ return TVAR_NOTFOUND;
+
+ node = *pnode;
+
+ if ( node->type != LoopNode || node->nodeData.loop.selfNode == 0 )
+ return TVAR_FORBIDDEN;
+
+ if ( GLIST_LENGTH(node->nodeData.loop.listInstance) == 0 || node->nodeData.loop.lastRow == NULL )
+ return TVAR_NOROW;
+
+ GListForeach( cell, node->nodeData.loop.childrenLoop )
+ ((TemplateNode)GLCELL_DATA(cell))->nodeData.loop.lastRow = NULL;
+
+ node->nodeData.loop.lastRow->nestedInstance =
+ mc0alloc(tmpl->templateContext, sizeof(LoopInstanceData) );
+ node->nodeData.loop.lastRow->nestedInstance->upperInstance =
+ node->nodeData.loop.currentInstance;
+ node->nodeData.loop.currentInstance =
+ node->nodeData.loop.lastRow->nestedInstance;
+ node->nodeData.loop.lastRow = NULL;
+
+ return TVAR_OK;
+}
+
+int
+returnTemplateNestedLoop( Template tmpl, char * key) {
+ TemplateNode *pnode, node;
+ char *lkey = strlower(mcstrdup(tmpl->templateContext, key));
+ GListCell *cell;
+
+ pnode = SFSFindData(&tmpl->variables, lkey, 0);
+ mcfree(lkey);
+
+ if ( pnode == NULL )
+ return TVAR_NOTFOUND;