Obsah / Utility / TEXT / TextFirst, TextNext
Zdrojový kód: INCLUDE\UTIL\TEXT.INC, UTIL\TEXT.ASM
TextFirst - Posun ukazatele textu na první znak textu
Funkce TextFirst posune ukazatel v textu na první znak textu. Ukazatelem nemusí být vždy offset 0, pokud začátek textu obsahuje detekční bajty.
|
Na vstupu funkce obsahuje registr EBX ukazatel na textovou proměnnou, ve které se ukazatel pozice nastavuje. Na výstupu funkce obsahuje registr EDX offset prvního znaku v textu. Pokud je text prázdný (nebo obsahuje pouze detekční bajty), navrátí funkce nastavený příznak chyby CY a registr EDX ukazuje na konec textu.
Funkce přednastaví obsah registru na hodnotu -1 a pokračuje funkcí TextNext, která ukazatel posune na první znak v textu.
TextNext - Posun ukazatele textu na další znak textu
Funkce TextNext posune ukazatel v textu na další znak textu.
|
Na vstupu funkce obsahuje registr EBX ukazatel na textovou proměnnou, ve které se ukazatel pozice nastavuje. Registr EDX obsahuje vstupní ukazatel pozice (offset v textu), ukazatel může být mimo platný rozsah znaků. Na výstupu funkce obsahuje registr EDX offset dalšího znaku v textu. Pokud není k dispozici žádný další znak, navrátí funkce nastavený příznak chyby CY a registr EDX ukazuje na konec textu.
|
Do registru ESI se připraví ukazatel na datový buffer textu a do registru ECX délka textu. Porovnáním délky se zadanou výchozí pozicí se ověří, zda zadaná výchozí pozice leží mimo platný rozsah.
|
V případě platného ukazatele pozice se ukazatel pozice v registru EDX zvýší o 1. Pokud bylo dosaženo konce textu, funkce se ukončí s navrácením chybového příznaku CY. Jinak načte do registru AL bajt textu z dané pozice. Pokud má hodnotu 0FEh nebo 0FFh, jedná se o detekční bajt, který bude přeskočen, funkce pokračuje posunem na další pozici v textu. Jedná-li se o bajt, jehož nejvyšší 2 bity mají hodnotu 80h, jsou to vnitřní datové bajty znaku a funkce také pokračuje posunem na další znak. Jinak byl nalezen začátek dalšího platného znaku a funkce se úspěšně ukončí.
|
Pokud byla pozice textu na začátku funkce neplatná, pokračuje se rozlišením, zda ukazatel ukazuje za konec textu nebo před začátek textu. Pokud ukazuje za konec textu, nastaví se ukazatel na konec textu (tj. délku textu) a funkce se ukončí s nastaveným příznakem chyby CY. Pokud ukazuje ukazatel textu před začátek textu, nastaví se výchozí pozice textu na nulu a funkce pokračuje testem platnosti znaku na offsetu 0.
Obsah / Utility / TEXT / TextFirst, TextNext