Obsah / Utility / TEXT / TextFindWordLast, TextFindWordRev
Zdrojový kód: INCLUDE\UTIL\TEXT.INC, UTIL\TEXT.ASM
TextFindWordLast, TextFindWordRev - Vyhledání posledního/předešlého slova v textu
Funkce TextFindWordLast vyhledá v textu poslední výskyt daného slova (2 bajtů). Funkce TextFindWordRev vyhledá předešlý výskyt slova (2 bajtů) od dané pozice v textu (včetně).
|
Na vstupu funkce obsahuje registr AL hodnotu prvního bajtu a registr AH hodnotu druhého bajtu k vyhledání. Registr EBX obsahuje ukazatel na textovou proměnnou s textem k prohledání. Registr EDX obsahuje počáteční offset v textu, od kterého budou bajty vyhledávány. V případě funkce TextFindWordLast je obsah registru EDX nejdříve nastaven na dostatečně vysoké číslo TEXTBIGPOS (hodnota 80000000h) představující ukazatel nastavený za konec textu.
Jsou-li bajty v textu nalezeny, je navrácena v registru EDX pozice (offset) bajtů v textu a příznak CF je vynulován. Nejsou-li bajty nalezen, je v registru EDX navrácena hodnota -1 a je navrácen příznak chyby CY.
|
Po úschově registrů bude omezen maximální počáteční offset v textu (aby neukazoval za konec textu). Do registru ECX se připraví délka textu (v bajtech) snížená o 1 bajt (což je rezerva pro druhý hledaný bajt). Přesahuje-li pozice v textu konec textu, omezí se pozice na poslední pozici v textu. Je-li pozice v textu záporná, nebyly bajty v textu nalezeny (nebo text měl délku 1 nebo menší) a funkce se ukončí s navrácením příznaku chyby CY a s hodnotou -1 v registru EDX. Část kódu pro obsluhu chyby je společná s funkcí TextFindWord. Při platném offsetu v textu se do registru EDI připraví ukazatel na první prohledávaný bajt textu.
|
Do registru ECX se připraví počet bajtů k prohledání - hledá se směrem zpět, proto počet bajtů odpovídá offsetu bajtu zvýšenému o 1. První bajt se vyhledá instrukcí scasb s nastaveným směrem hledání dolů. Pokud nebyl bajt nalezen, funkce se opět ukončí s navrácením příznaku chyby CY a s hodnotou -1 v registru EDX (a současně se nastaví implicitní směr nahoru). Pokud byl první bajt nalezen, otestuje se druhý bajt. Jestliže druhý bajt nesouhlasí, pokračuje se vyhledáváním prvního bajtu od další pozice v textu. Jsou-li oba bajty v textu nalezeny, z čítače dat ECX se získá offset nalezeného bajtu a funkce se ukončí s vynulovaným příznakem chyby NC.
Obsah / Utility / TEXT / TextFindWordLast, TextFindWordRev