Lo que hace esta función es extraer un string de otro string defectuoso, puede usarse por ejemplo, para guardar muchas listas defectuosas(en un TStringList claro esta) e ir limpiandolas.
Como explicaba esto es uno de los tantos usos que se le pueda dar, hace no mucho hice una función parecida... aquí la pueden encontrar: http://foro.elhacker.net/programacion_general/funcion_extractstring_pascal-t388927.0.html , solo que esta trabaja más a bajo nivel y con muchas mas rapidez y rendimiento.
Les dejo el código
Código
program ExtractMemString; {$APPTYPE CONSOLE} uses SysUtils, Classes; {/*******************************************\} { ExtractMemString @Por WARZ0N3 } { Explicacion: } { Extrae una palabra de un string defectuoso, } { muy util en programacion con Sockets. } { Pascal+ASM ejecuta el codigo mas optimo y } { mucho mas rapido... } {/*******************************************\} { Uso: } { __ExtractMemString( } { 'Desde_char_a_remover', variable_defectuosa,} { 'Hasta_char_a_remover', Lista_strings); } {\*******************************************/} { Ejemplo: } { __ExtractMemString('!', '&%!PALABRA-$@', '-', TStringList);} { devuelve: PALABRA } {/*******************************************\} function __ExtractMemString(from_s:Char; Param:pChar; to_s:Char; TsStrMem:TStringList):pChar; var tos, fms:integer; lnStr:integer; StrMem:pchar; CpyStrMem:pchar; allocStrMem:pchar; lenStr:integer; Delim:integer; sPos:integer; begin StrNew(@StrMem); StrMem:=Param; { palabra defectuosa } lenStr:=StrLen(pChar(StrMem)); Delim:= LastDelimiter(from_s, StrMem); { desde } sPos:=Pos(to_s, StrMem); { hasta } asm @@startup: XOR EAX, EAX MOV EAX, sPos PUSH EAX POP tos DEC tos CMP EAX, 00000000h JZ @plSum JMP @pSum @plSum: ADD tos, EAX @pSum: XOR EBX, EBX MOV EBX, lenStr MOV lnStr, EBX XOR ECX, ECX MOV ECX, delim MOV fms, ECX SUB tos, ECX end; allocStrMem:=StrAlloc(lnStr); StrLCopy(allocStrMem, fms+StrMem, tos); //-$00000003 TsStrMem.Add(allocStrMem); StrDispose(allocStrMem); end; var TsStrMem:TStringList; begin TsStrMem:= TStringList.Create; {*** Llamada a la funcion ***} __ExtractMemString('!', '**-!PALABRA?**', '?', TsStrMem); { devuelve PALABRA } WriteLn(TsStrMem[0]); TsStrMem.Free; sleep(3500); end.