Obsah / Utility / TEXT / TextOffToPos
Zdrojový kód: INCLUDE\UTIL\TEXT.INC, UTIL\TEXT.ASM
TextOffToPos - Přepočet bajtového offsetu znaku na pozici
Funkce TextOffToPos přepočte bajtový offset znaku v textu na pozici znaku (vyjádřenou ve znacích).
|
Na vstupu funkce obsahuje registr EAX bajtový offset znaku v textu, registr EBX ukazatel na textovou proměnnou. Na výstupu obsahuje registr EAX pozici znaku v textu. Pokud ležel offset mimo platný rozsah, je pozice opravena do platných mezí. Znak mající offset za koncem textu bude mít pozici rovnou délce textu ve znacích (tedy ukazující za poslední znak textu).
|
Je-li offset znaku záporný (nebo nula), navrátí funkce ihned pozici nula. Část kódu je společná s funkcí TextPosToOff.
|
Text bude procházen od začátku řetězce, aby se mohly odpočítat platné znaky. Registr EDX bude čítat nalezené znaky a je proto vynulován. Do registru ECX je připraven offset znaku - pokud přesáhl konec textu, je jeho hodnota omezena (je nahrazen délkou textu). Do registru ESI se připraví ukazatel na začátek textu. V případě nulové délky textu bude funkce předčasně ukončena.
|
Při konverzi offsetu na pozici se text prochází od začátku bajt po bajtu a je-li nalezen bajt indikující začátek kódu znaku, zvýší se čítač pozice znaků. Po dosažení požadovaného offsetu znaku je funkce ukončena. Za bajt začátku kódu jsou považovány bajty s hodnotou 0 až 7Fh a 0C0h až 0FDh. Bajty 0FEh a 0FFh jsou synchronizační, v kódu UTF-8 by se neměly vyskytovat a jsou proto přeskakovány. Výsledná pozice znaku se přenese z čítače v registru EDX do výstupního registru EAX..
Obsah / Utility / TEXT / TextOffToPos