Obsah / Utility / TEXT / TextFindCharFirst, TextFindChar
Zdrojový kód: INCLUDE\UTIL\TEXT.INC, UTIL\TEXT.ASM
TextFindCharFirst, TextFindChar - Vyhledání prvního/dalšího znaku v textu
Funkce TextFindCharFirst vyhledá v textu první výskyt daného znaku v kódu UNICODE (1 dvojslovo). Funkce TextFindChar vyhledá první výskyt znaku od dané pozice v textu (včetně).
|
Na vstupu funkce obsahuje registr EAX hodnotu hledaného znaku v kódu UNICODE. 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 znak vyhledáván. V případě funkce TextFindCharFirst je obsah registru EDX nejdříve vynulován, čímž se zajistí nastavení ukazatele na začátek textu.
Je-li znak v textu nalezen, je navrácena v registru EDX pozice (offset) znaku v textu a příznak CF je vynulován. Není-li znak nalezen, je v registru EDX navrácena hodnota -1 a je navrácen příznak chyby CY.
|
Znak bude v textu vyhledáván jako řetězec v kódu UTF-8. Pro UTF-8 platí, že znaky s kódem 0 až 7Fh (tj. 7 bitů) jsou v textu uloženy jako 1 bajt. Další bajty v kódu mají vždy hodnotu 80h a více, takže znak může být v textu vyhledán přímo pomocí funkce TextFindByte.
|
Znaky v rozsahu 80h až 7FFh (tj. 15 bitů) jsou v kódu UTF-8 kódovány pomocí 2 bajtů. První bajt obsahuje vyšších 6 bitů s nastavenými bity 6 a 7, druhý bajt obsahuje nižších 7 bitů s nastaveným bitem 7. Znak je vyhledán jako slovo (2 bajty) pomocí funkce TextFindWord.
|
Znaky v rozsahu 800h a výše budou vyhledávány jako vícebajtové textové řetězce. V zásobníku se vytvoří místo pro pomocnou textovou proměnnou, pro buffer znaku uloženého jako text v kódu UTF-8 a pro záhlaví textového řetězce. Znak je dekódován do bufferu do kódu UTF-8 pomocí funkce CharUTF8Write a do pomocné textové proměnné je uložena délka hledaného řetězce v kódu UTF-8.
|
Do pomocné proměnné v zásobníku je uložen ukazatel na textová data a textový řetězec je vyhledán v textu pomocí funkce TextFind. U hledaného řetězce se ignoruje položka referenčního čítače, která proto není inicializovaná. Po ukončení hledání se obnoví ukazatel zásobníku a registry ze zásobníku.
Obsah / Utility / TEXT / TextFindCharFirst, TextFindChar