Tvůrce webu je i pro tebe! Postav třeba web. Bez grafika. Bez kodéra. Hned.
wz

Obsah / Utility / CHARSET / CharUTF32LER

Zdrojový kód: INCLUDE\UTIL\CHARSET.INC, UTIL\CHARSET.ASM


CharUTF32LER - Načtení znaku z bufferu ve formátu UTF-32LE

Funkce CharUTF32LER načte znak z bufferu ve formátu UTF-32LE, little endian (tj. formát PC Intel, v paměti je uložen nejdříve nižší bajt dat a poté vyší bajt).


; -----------------------------------------------------------------------------
;            Read character from UTF-32LE (PC, little endian) buffer
; -----------------------------------------------------------------------------
; INPUT:	ECX = remaining bytes
;		EDX = invalid character (in Unicode, 0 = default character)
;		ESI = source buffer
; OUTPUT:	EAX = Unicode character (or invalid character if no data)
;		ECX = next remaining bytes
;		ESI = next source buffer
; -----------------------------------------------------------------------------

Na vstupu funkce obsahuje registr ESI ukazatel na data ve vstupním bufferu, registr ECX počet bajtů ve vstupním bufferu a registr EDX Unicode kód znaku, který se použije v případě neplatných dat v bufferu. Na výstupu z funkce je v registru EAX navrácen Unicode kód načteného znaku (nebo neplatný kód z registru EDX, pokud nejsou k dispozici další data), v registru ESI nový ukazatel na vstupní data a v registru ECX nová velikost vstupních dat.


CharUTF32LER:	sub	ecx,byte 4	; decrease number of bytes
		jc	CharUTF32LER8	; no data
		lodsd			; EAX <- load data
		or	eax,eax		; is character valid?
		js	CharUTF32LER9	; character is not valid
		ret

CharUTF32LER8:	lea	esi,[esi+4+ecx]	; ESI <- correct pointer
		xor	ecx,ecx		; ECX <- no data remain
CharUTF32LER9:	mov	eax,edx		; EAX <- invalid character
		or	eax,eax		; default character?
		jz	short CharUTF16LER84 ; use default character
		ret

Znaky jsou v kódu UTF-32LE uloženy přímo jako DWORD v kódu Unicode, proto jejich načtení je zajištěno prostým načtením z bufferu jako DWORD. V případě nedostatku dat v bufferu je opraven ukazatel čtených dat a funkcí je navrácen implicitní znak z registru EDX.


Obsah / Utility / CHARSET / CharUTF32LER