Element IndexToChanel Vars Self#.tmp dd ? LocalProc local finish1,finish2,finish3,finish4,finish5 proc Self#.proc.data_null idx mov eax,[idx] Self#.CallEvents 0,data_null,finish1 finish1: ret endp irp dt.t,data_int,data_bitmap \{ \local finish proc Self#.proc.\#dt.t data,idx mov eax,[idx] Self#.CallEvents [data],dt.t,finish finish: ret endp \} proc Self#.proc.data_str data,idx locals _str dd ? endl lea edx,[_str] mov eax,[data] call __strdupnoclear mov eax,[idx] Self#.CallEvents [_str],data_str,finish2 finish2: lea edx,[_str] call __strclear ret endp proc Self#.proc.data_data data,idx locals _dt dd ? endl mov [_dt],0 lea edx,[_dt] mov eax,[data] call __datadup mov eax,[idx] Self#.CallEvents [_dt],data_data,finish3 finish3: lea edx,[_dt] call __dataclear ret endp proc Self#.proc.data_real data:qword,idx mov eax,[idx] Self#.CallEvents [data],data_real,finish4 finish4: ret endp proc Self#.proc.data_real_ptr data,idx mov eax,[idx] Self#.CallEvents [data],data_real_ptr,finish5 finish5: ret endp PointWork doEvent \local idx,dt,dt.t,sv.t DataSave data,data.type,[Self#.tmp],sv.t ReadInt idx,[Self#.tmp],data.type,Self#.Index,0 push idx ReadData dt,dt.t,[Self#.tmp],data.type,Self#.Data,0 match =0,dt.t \\{ stdcall Self#.proc.data_null \\} match =1,dt.t \\{ stdcall Self#.proc.data_int,dt \\} match =2,dt.t \\{ stdcall Self#.proc.data_str,dt \\} match =3,dt.t \\{ stdcall Self#.proc.data_data,dt \\} match =7,dt.t \\{ if dt eq 1 sub esp,8 fstp qword [esp] call Self#.proc.data_real else stdcall Self#.proc.data_real_ptr,dt end if \\} match =60,dt.t \\{ sub esp,8 fstp qword [esp] call Self#.proc.data_real \\} match =11,dt.t \\{ stdcall Self#.proc.data_bitmap,dt \\} DataClear [Self#.tmp],sv.t EndPoint DPointEvent onEvent \local next if Self#.onEvent#Index#.use eq 1 cmp eax,Index-1 jne next match =0,data.type \\{ Self#.onEvent#Index 0,data_null \\} match =1,data.type \\{ Self#.onEvent#Index data,data_int \\} match =2,data.type \\{ Self#.onEvent#Index data,data_str \\} match =3,data.type \\{ Self#.onEvent#Index data,data_data \\} match =7,data.type \\{ fld qword data Self#.onEvent#Index 1,data_real_st0 \\} match =data_real_ptr,data.type \\{ mov eax,data fld qword [eax] Self#.onEvent#Index 1,data_real_st0 \\} match =11,data.type \\{ Self#.onEvent#Index data,data_bitmap \\} if exit > next jmp exit end if next: end if EndPoint EndElement