Element MultiElementEx Vars if Self#.prop.Mode = 0 if Self#.isLink eq 1 Self#.__currentobject dd ? else Self#.ChildVars end if else if Self#.prop.Mode = 1 Self#.__objectlist dd ? Self#.__currentobject dd ? else Self#.__initialized dd ? if Self#.isLink eq 1 Self#.__currentobject dd ? else Self#.ChildVars end if end if LocalProc if (Self#.prop.Mode = 1 & ~ Self#.isLink eq 1) | Self#.isLinkMain eq 1 virtual at ebx context = context+1 dynamic = dynamic+1 Self#.__link dd ? Self#.__parent dd ? Self#.ChildVars Self#.__varsize = $-ebx dynamic = dynamic-1 end virtual end if proc Self#.__initclass locals _data dd ? endl Self#.ChildInit ret endp proc Self#.__destroyclass locals _data dd ? endl Self#.ChildDestroy ret endp proc Self#.__clear push ebx mov ebx,[Self#.__objectlist] .L1:test ebx,ebx jz .L2 push dword [ebx] call Self#.__destroyclass mov eax,ebx call __free pop ebx jmp .L1 .L2:xor eax,eax pop ebx mov [Self#.__objectlist],eax mov [Self#.__currentobject],eax ret endp Create if Self#.prop.Mode = 0 if Self#.isLink eq 1 match LinkMain,Self#.LinkMain \{ mov eax,LinkMain\#.__varsize call __alloc mov [Self#.__currentobject],eax mov dword [eax],0 mov dword [eax+4],ebx mov dword [eax+8],Self#.__eventList mov dword [eax+12],Self#.__dataList mov ebx,eax call LinkMain\#.__initclass \} else call Self#.__initclass end if else if Self#.prop.Mode = 1 xor eax,eax mov [Self#.__objectlist],eax mov [Self#.__currentobject],eax else mov [Self#.__initialized],0 end if Destroy if Self#.prop.Mode = 0 if Self#.isLink eq 1 match LinkMain,Self#.LinkMain \{ push ebx mov ebx,[Self#.__currentobject] call LinkMain\#.__destroyclass pop ebx \} else call Self#.__destroyclass end if else if Self#.prop.Mode = 1 call Self#.__clear else cmp [Self#.__initialized],0 je @f if Self#.isLink eq 1 match LinkMain,Self#.LinkMain \{ push ebx mov ebx,[Self#.__currentobject] call LinkMain\#.__destroyclass pop ebx \} else call Self#.__destroyclass end if @@: end if DPointWork $$add push ebx push data push esi xor edx,edx mov ecx,-1 lea eax,[Self#.__objectlist] call MultiElementEx.Find mov esi,eax if Self#.isLink eq 1 \match LinkMain,Self#.LinkMain \\{ mov eax,LinkMain\\#.__varsize \\} else mov eax,Self#.__varsize end if call __alloc mov [esi],eax mov [Self#.__currentobject],eax pop esi mov dword [eax],0 mov [eax+4],ebx mov ebx,eax if Self#.isLink eq 1 mov dword [eax+8],Self#.__eventList mov dword [eax+12],Self#.__dataList \match LinkMain,Self#.LinkMain \\{ call LinkMain\\#.__initclass \\} else call Self#.__initclass end if pop eax Index#.$$add eax,data.type pop ebx EndPoint DPointWork $$clear call Self#.__clear EndPoint DPointWork $$delete \local res ToInteger res,data,data.type mov ecx,res dec ecx js ..end xor edx,edx lea eax,[Self#.__objectlist] call MultiElementEx.Find mov ecx,[eax] mov [Self#.__currentobject],ecx jcxz ..end mov edx,[ecx] mov [eax],edx push ebx mov ebx,ecx call Self#.__destroyclass mov eax,ebx call __free pop ebx xor eax,eax mov [Self#.__currentobject],eax EndPoint DPointWork $$hdelete \local res ToInteger res,data,data.type mov edx,res mov ecx,-1 lea eax,[Self#.__objectlist] call MultiElementEx.Find mov ecx,[eax] mov [Self#.__currentobject],ecx jcxz ..end mov edx,[ecx] mov [eax],edx push ebx mov ebx,ecx call Self#.__destroyclass mov eax,ebx call __free pop ebx xor eax,eax mov [Self#.__currentobject],eax EndPoint DPointWork $$select \local res push data ToInteger res,data,data.type mov ecx,res dec ecx jns @f pop eax jmp exit @@:xor edx,edx lea eax,[Self#.__objectlist] call MultiElementEx.Find mov ecx,[eax] mov [Self#.__currentobject],ecx pop eax or ecx,ecx jne @f jmp exit @@:push ebx mov ebx,ecx Index#.$$select eax,data.type pop ebx EndPoint DPointWork $$hselect \local res push data ToInteger res,data,data.type mov edx,res mov ecx,-1 lea eax,[Self#.__objectlist] call MultiElementEx.Find mov ecx,[eax] mov [Self#.__currentobject],ecx pop eax or ecx,ecx jne @f jmp exit @@:push ebx mov ebx,ecx Index#.$$hselect eax,data.type pop ebx EndPoint DPointVar $$count,data_int xor edx,edx mov ecx,-1 lea eax,[Self#.__objectlist] call MultiElementEx.Find mov eax,-1 sub eax,ecx result equ eax EndPoint DPointVar $$index,data_int mov edx,[Self#.__currentobject] mov ecx,-1 lea eax,[Self#.__objectlist] call MultiElementEx.Find mov eax,[eax] test eax,eax jz @f xor eax,eax sub eax,ecx @@:result equ eax EndPoint DPointVar $$handle,data_int result equ [Self#.__currentobject] EndPoint DPointWork doWork if Self#.prop.Mode = 1 | (Self#.prop.Mode = 0 & Self#.isLink eq 1) \local null push ebx mov ebx,[Self#.__currentobject] test ebx,ebx jz null Index data,data.type null: pop ebx else if Self#.prop.Mode = 2 cmp [Self#.__initialized],0 if Self#.isLink eq 1 jne @f \match LinkMain,Self#.LinkMain \\{ mov eax,LinkMain\\#.__varsize call __alloc mov [Self#.__currentobject],eax mov dword [eax],0 mov dword [eax+4],ebx mov dword [eax+8],Self#.__eventList mov dword [eax+12],Self#.__dataList mov ebx,eax call LinkMain\\#.__initclass \\} @@:inc [Self#.__initialized] push ebx mov ebx,[Self#.__currentobject] Index data,data.type pop ebx dec [Self#.__initialized] jne @f \match LinkMain,Self#.LinkMain \\{ push ebx mov ebx,[Self#.__currentobject] call LinkMain\\#.__destroyclass pop ebx \\} @@: else jne @f call Self#.__initclass @@:inc [Self#.__initialized] Index data,data.type dec [Self#.__initialized] jne @f call Self#.__destroyclass @@: end if else Index data,data.type,exit end if EndPoint DPointVar Var if Self#.prop.Mode = 1 | (Self#.prop.Mode = 0 & Self#.isLink eq 1) \local null push ebx mov ebx,[Self#.__currentobject] test ebx,ebx jz null Index result,result.type,data,data.type null: pop ebx else if Self#.prop.Mode = 2 cmp [Self#.__initialized],0 if Self#.isLink eq 1 jne @f \match LinkMain,Self#.LinkMain \\{ mov eax,LinkMain\\#.__varsize call __alloc mov [Self#.__currentobject],eax mov dword [eax],0 mov dword [eax+4],ebx mov dword [eax+8],Self#.__eventList mov dword [eax+12],Self#.__dataList mov ebx,eax call LinkMain\\#.__initclass \\} @@:inc [Self#.__initialized] push ebx mov ebx,[Self#.__currentobject] Index result,result.type,data,data.type pop ebx dec [Self#.__initialized] jne @f \match LinkMain,Self#.LinkMain \\{ push ebx mov ebx,[Self#.__currentobject] call LinkMain\\#.__destroyclass pop ebx \\} @@: else jne @f call Self#.__initclass @@:inc [Self#.__initialized] Index result,result.type,data,data.type dec [Self#.__initialized] jne @f call Self#.__destroyclass @@: end if else Index result,result.type,data,data.type end if EndPoint EndElement