Obsah / Utility / TEXT / TextInitChar
Zdrojový kód:
INCLUDE\UTIL\TEXT.INC, UTIL\TEXT.ASM
TextInitChar -
Inicializace textového řetězce jedním znakem
Funkce TextInitChar
inicializuje textovou proměnnou jedním znakem.
; -----------------------------------------------------------------------------
; Initialize text string with one character
; -----------------------------------------------------------------------------
; INPUT: EAX = Unicode character
; EBX = pointer to TEXT
; OUTPUT: CY = memory error (text becomes empty)
; -----------------------------------------------------------------------------
|
Funkce TextInitChar inicializuje novou
textovou proměnnou, na niž ukazuje ukazatel v registru EBX,
jedním znakem v ködu Unicode. Kód znaku je v registru EAX.
Pokud dojde k chybě paměti, funkce navrátí příznak chyby CY
a textová proměnná bude inicializována na prázdný text.
; ------------- Push registers
TextInitChar: push eax ; push EAX
push edi ; push EDI
push ebp ; push EBP
; ------------- Prepare length of character (-> EAX, push character -> EBP)
xor edi,edi ; EDI <- 0, character length counter
mov ebp,eax ; EBP <- push EAX (character)
call CharUTF8Size ; get character size
xchg eax,edi ; EAX <- text length
|
Po úschově registrů je pomocí funkce
CharUTF8Size zjištěna velikost nového znaku v bajtech. Délka
textu je uložena do registru EAX.
; ------------- Create new text buffer
mov dword [ebx],EmptyTextData ; set pointer to empty text
call TextNew ; create new text buffer
jc TextInitChar2 ; memory error
|
Pomocí funkce TextNew je alokován nový
datový buffer o délce textu EAX. Pokud nastane chyba paměti,
funkce se ukončí s chybovým kódem CY. Pro tento případ je
proměnná nejdříve inicializována na prázdný text
EmptyTextData.
; ------------- Store character into buffer
xchg eax,ebp ; EBP <- size of buffer, EAX <- char
mov edi,[ebx] ; EDI <- new text data
add edi,TEXT_Text ; EDI <- start of buffer
call CharUTF8Write ; write character into buffer
; ------------- Pop registers
clc ; clear error flag
TextInitChar2: pop ebp ; pop EBP
pop edi ; pop EDI
pop eax ; pop EAX
ret
|
Znak je uložen do datového bufferu
pomocí funkce CharUTF8Write. Ukládací adresa je zjištěna z
ukazatele na data textové proměnné (načteného z textové
proměnné [EBX]) posunutého na začátek textu v datech
textového řetězce.
Obsah / Utility / TEXT / TextInitChar