Obsah / Utility / TEXT / TextFindByteLast, TextFindByteRev
Zdrojový kód: INCLUDE\UTIL\TEXT.INC, UTIL\TEXT.ASM
TextFindByteLast, TextFindByteRev - Vyhledání posledního/předešlého bajtu v textu
Funkce TextFindByteLast vyhledá v textu poslední výskyt daného bajtu. Funkce TextFindByteRev vyhledá předešlý výskyt bajtu od dané pozice v textu (včetně).
|
Na vstupu funkce obsahuje registr AL hodnotu vyhledávaného bajtu. 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 bude bajt vyhledáván. V případě funkce TextFindByteLast je obsah registru EDX nejdříve nastaven na dostatečně vysoké číslo TEXTBIGPOS (hodnota 80000000h) představující ukazatel nastavený za konec textu.
Je-li bajt v textu nalezen, je navrácena v registru EDX pozice (offset) bajtu v textu a příznak CF je vynulován. Není-li bajt 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. Přesahuje-li pozice v textu konec textu, omezí se pozice na poslední pozici v textu. Je-li pozice v textu záporná, nebyl bajt v textu nalezen (nebo text měl nulovou délku) 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. Bajt se vyhledá instrukcí scasb s nastaveným směrem hledání dolů. Implicitně je v systému příznak směru nastavený nahoru, proto se ihned po provedení instrukce příznak směru navrátí do implicitního stavu. Pokud nebyl bajt nalezen, funkce se opět ukončí s navrácením příznaku chyby CY a s hodnotou -1 v registru EDX. V případě nalezení se z čítače dat ECX získá offset nalezeného bajtu a funkce se ukončí s vynulovaným příznakem chyby NC.
Obsah / Utility / TEXT / TextFindByteLast, TextFindByteRev