Element Repeat Vars Self#.FStop dd ? Self#.tmpOp1 dd ? PointWork doRepeat \local op1,op1.type,op2,lbl,lbl2,lbl3 \local lblnoint,lblnostr,lblnoreal xor eax,eax mov [Self#.FStop],eax mov [Self#.tmpOp1],eax if Self#.prop.Check eq 0 jmp lbl2 end if lbl: Self#.onRepeat 0,data_null test byte [Self#.FStop],1 jne lbl3 lbl2: ReadData op1,op1.type,data,data.type,Self#.Op1,Self#.prop.Op1 match =1,op1.type \\{ push op1 ReadInt op2,data,data.type,Self#.Op2,Self#.prop.Op2 mov_ex eax,op2 pop edx cmp edx,eax Jcond Self#.prop.Type,lbl \\} match =2,op1.type \\{ mov_ex eax,op1 lea edx,[Self#.tmpOp1] call __strdup ReadStr op2,data,data.type,Self#.Op2,Self#.prop.Op2 mov_ex edx,op2 mov eax,[Self#.tmpOp1] call __strcmp Jcond2 Self#.prop.Type,lbl \\} match =3,op1.type \\{ mov_ex eax,op1 lea edx,[Self#.tmpOp1] call __datadup mov cl,[eax+8] cmp cl,1 jne lblnoint ReadInt op2,data,data.type,Self#.Op2,Self#.prop.Op2 mov_ex eax,op2 mov edx,[Self#.tmpOp1] mov edx,[edx+12] cmp edx,eax Jcond Self#.prop.Type,lbl jmp lbl3 lblnoint: cmp cl,2 jne lblnostr ReadStr op2,data,data.type,Self#.Op2,Self#.prop.Op2 mov_ex edx,op2 mov eax,[Self#.tmpOp1] mov eax,[eax+12] call __strcmp Jcond2 Self#.prop.Type,lbl jmp lbl3 lblnostr: cmp cl,7 jne lblnoreal fld qword [eax+12] ReadReal op2,data,data.type,Self#.Op2,Self#.prop.Op2 if op2 eq 1 fcompp else if op2 eqtype 0 | op2 eqtype eax fcomp qword [op2] else fcomp qword op2 end if end if fstsw ax fwait sahf Jcond2 Self#.prop.Type,lbl jmp lbl3 lblnoreal: jmp lbl3 \\} match =7,op1.type \\{ if ~ op1 eq 1 if op1 eqtype 0 | op1 eqtype eax fld qword [op1] else fld qword op1 end if end if ReadReal op2,data,data.type,Self#.Op2,Self#.prop.Op2 if op2 eq 1 fcompp else if op2 eqtype 0 | op2 eqtype eax fcomp qword [op2] else fcomp qword op2 end if end if fstsw ax fwait sahf Jcond2 Self#.prop.Type,lbl \\} lbl3: match =3,op1.type \\{ lea edx,[Self#.tmpOp1] call __dataclear \\} match =2,op1.type \\{ lea edx,[Self#.tmpOp1] call __strclear \\} EndPoint PointWork doStop or [Self#.FStop],1 EndPoint EndElement