- if (HAVE_PARAM(2)) {
- StartAt = GetTemplateTokenNumber(Target, TP, 2, 0);
- }
- if (HAVE_PARAM(3)) {
- StepWidth = GetTemplateTokenNumber(Target, TP, 3, 0);
- }
- if (HAVE_PARAM(4)) {
- StopAt = GetTemplateTokenNumber(Target, TP, 4, -1);
- }
- it = GetNewHashPos(List, StepWidth);
- if (StopAt < 0) {
- StopAt = GetCount(List);
- }
- while (GetNextHashPos(List, it, &Status.KeyLen, &Status.Key, &vContext)) {
- if ((Status.n >= StartAt) && (Status.n <= StopAt)) {
- if (DetectGroupChange && Status.n > 0) {
- Status.GroupChange = SortBy->GroupChange(vContext, vLastContext);
+ if (HAVE_PARAM(2)) {
+ StartAt = GetTemplateTokenNumber(Target, TP, 2, 0);
+ }
+ if (HAVE_PARAM(3)) {
+ StepWidth = GetTemplateTokenNumber(Target, TP, 3, 0);
+ }
+ if (HAVE_PARAM(4)) {
+ StopAt = GetTemplateTokenNumber(Target, TP, 4, -1);
+ }
+ it = GetNewHashPos(List, StepWidth);
+ if (StopAt < 0) {
+ StopAt = GetCount(List);
+ }
+ while (GetNextHashPos(List, it, &Status.KeyLen, &Status.Key, &vContext)) {
+ if ((Status.n >= StartAt) && (Status.n <= StopAt)) {
+
+ if ((It->Filter != NULL) &&
+ It->Filter(Status.Key, Status.KeyLen, vContext, Target, TP))
+ {
+ continue;
+ }
+
+ if (DetectGroupChange && Status.n > 0) {
+ Status.GroupChange = SortBy->GroupChange(vContext, vLastContext);
+ }
+ Status.LastN = (Status.n + 1) == nMembersUsed;
+ StackContext(&IterateTP, &SubTP, vContext, It->ContextType, 0, NULL);
+ {
+ if (It->DoSubTemplate != NULL)
+ It->DoSubTemplate(SubBuf, &SubTP);
+ DoTemplate(TKEY(1), SubBuf, &SubTP);
+
+ StrBufAppendBuf(Target, SubBuf, 0);
+ FlushStrBuf(SubBuf);
+ }
+ UnStackContext(&SubTP);
+ Status.oddeven = ! Status.oddeven;
+ vLastContext = vContext;