Element DataToFile GlobalProc proc DataToFile.ReadStrZ stm locals ch dd ? endl push esi push edi xor edi,edi .loop: mov eax,edi test eax,255 jne .ok add eax,256 mov edx,__rtl_temp_str call __strsetlength mov esi,[__rtl_temp_str] add esi,edi .ok: mov byte [esi],0 comcall [stm],IStream,Read,esi,1 inc edi lodsb or al,al jne .loop pop edi pop esi ret endp proc DataToFile.ReadStr stm locals ch dd ? endl push esi push edi xor edi,edi .loop: mov eax,edi test eax,255 jne .ok add eax,256 mov edx,__rtl_temp_str call __strsetlength mov esi,[__rtl_temp_str] add esi,edi .ok: mov byte [esi],0 comcall [stm],IStream,Read,esi,1 cmp byte [esi],10 je .loop cmp byte [esi],13 jne @f mov byte [esi],0 @@:inc edi lodsb or al,al jne .loop pop edi pop esi ret endp Vars Self#.Buffer dd ?,? PointWork doPut \local stm,res match =0,Self#.prop.Type \\{ ToInteger res,data,data.type mov_ex eax,res mov [Self#.Buffer],eax ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm lea eax,[Self#.Buffer] comcall ecx,IStream,Write,eax,1 \\} match =1,Self#.prop.Type \\{ ToInteger res,data,data.type mov_ex eax,res mov [Self#.Buffer],eax ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm lea eax,[Self#.Buffer] comcall ecx,IStream,Write,eax,2 \\} match =2,Self#.prop.Type \\{ ToInteger res,data,data.type mov_ex eax,res mov [Self#.Buffer],eax ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm lea eax,[Self#.Buffer] comcall ecx,IStream,Write,eax,4 \\} match =3,Self#.prop.Type \\{ ToInteger res,data,data.type mov_ex eax,res mov [Self#.Buffer],eax ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm lea eax,[Self#.Buffer] comcall ecx,IStream,Write,eax,4 \\} match =4,Self#.prop.Type \\{ ToReal res,data,data.type fmov_ex Self#.Buffer,res ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm lea eax,[Self#.Buffer] comcall ecx,IStream,Write,eax,8 \\} match =5,Self#.prop.Type \\{ ToString res,data,data.type mov_ex eax,res lea edx,[Self#.Buffer+4] call __strdupnoclear ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm push ecx mov eax,[Self#.Buffer+4] call __strlen dec eax mov [Self#.Buffer],eax lea eax,[Self#.Buffer] pop ecx push ecx comcall ecx,IStream,Write,eax,2 mov eax,[Self#.Buffer+4] pop ecx comcall ecx,IStream,Write,eax,[Self#.Buffer] lea edx,[Self#.Buffer+4] call __strclear \\} match =6,Self#.prop.Type \\{ ToString res,data,data.type mov_ex eax,res lea edx,[Self#.Buffer+4] call __strdupnoclear mov eax,[Self#.Buffer+4] call __strlen mov [Self#.Buffer],eax ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm comcall ecx,IStream,Write,[Self#.Buffer+4],[Self#.Buffer] lea edx,[Self#.Buffer+4] call __strclear \\} match =7,Self#.prop.Type \\{ ToString res,data,data.type mov_ex eax,res lea edx,[Self#.Buffer+4] call __strdupnoclear mov eax,[Self#.Buffer+4] call __strlen dec eax mov [Self#.Buffer],eax ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm comcall ecx,IStream,Write,[Self#.Buffer+4],[Self#.Buffer] lea edx,[Self#.Buffer+4] call __strclear \\} EndPoint PointWork doGet \local stm,lbl1 match =0,Self#.prop.Type \\{ ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm lea eax,[Self#.Buffer] comcall ecx,IStream,Read,eax,1 mov eax,[Self#.Buffer] and eax,0FFh Self#.onGet eax,data_int,exit \\} match =1,Self#.prop.Type \\{ ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm lea eax,[Self#.Buffer] comcall ecx,IStream,Read,eax,2 mov eax,[Self#.Buffer] and eax,0FFFFh Self#.onGet eax,data_int,exit \\} match =2,Self#.prop.Type \\{ ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm lea eax,[Self#.Buffer] comcall ecx,IStream,Read,eax,4 mov eax,[Self#.Buffer] Self#.onGet eax,data_int,exit \\} match =3,Self#.prop.Type \\{ ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm lea eax,[Self#.Buffer] comcall ecx,IStream,Read,eax,4 mov eax,[Self#.Buffer] Self#.onGet eax,data_int,exit \\} match =4,Self#.prop.Type \\{ ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm lea eax,[Self#.Buffer] comcall ecx,IStream,Read,eax,8 fld qword [Self#.Buffer] Self#.onGet 1,data_real_st0,exit \\} match =5,Self#.prop.Type \\{ ReadStream stm,0,data_null,Self#.Stream,0 mov ecx,stm push ecx lea eax,[Self#.Buffer] mov dword [eax],0 comcall ecx,IStream,Read,eax,2 mov eax,[Self#.Buffer] mov edx,__rtl_temp_str call __strsetlength pop ecx comcall ecx,IStream,Read,[__rtl_temp_str],[Self#.Buffer] mov eax,[__rtl_temp_str] add eax,[Self#.Buffer] mov byte [eax],0 Self#.onGet [__rtl_temp_str],data_str,exit \\} match =6,Self#.prop.Type \\{ ReadStream stm,0,data_null,Self#.Stream,0 stdcall DataToFile.ReadStrZ,stm Self#.onGet [__rtl_temp_str],data_str,exit \\} match =7,Self#.prop.Type \\{ ReadStream stm,0,data_null,Self#.Stream,0 stdcall DataToFile.ReadStr,stm Self#.onGet [__rtl_temp_str],data_str,exit \\} EndPoint PointVar Data,data_int result equ eax EndPoint EndElement