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

Obsah / Utility / TEXT / TextAddByte

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


TextAddByte - Přidání jednobajtového ASCII znaku na konec textového řetězce

Funkce TextAddByte přidá jednobajtový znak v kódu Unicode na konec textového řetězce. Jedná se o znak, který má v kódu UTF-8 délku 1 bajt, tedy znak v rozsahu 0 až 7Fh. Funkce se používá k rychlejším a efektivnějšímu uložení znaku než umožňuje funkce TextAddChar.


; -----------------------------------------------------------------------------
;                 Add one-byte ASCII character to end of text
; -----------------------------------------------------------------------------
; INPUT:	AL = byte (it must be in range 0 to 7fh)
;		EBX = pointer to TEXT
; OUTPUT:	CY = memory error or invalid number (text not changed)
; -----------------------------------------------------------------------------

Na vstupu funkce obsahuje registr AL kód přidávaného jednobajtového znaku (musí to být znak v rozsahu 0 až 7Fh). Registr EBX obsahuje ukazatel na textovou proměnnou, ke které se má znak přidat. V případě chyby paměti je navrácen chybový příznak CY a obsah textové proměnné se nezmění.


; ------------- Push registers

TextAddByte:	push	eax		; push EAX
		push	ecx		; push ECX
		xchg	eax,ecx		; CL <- character

; ------------- Copy text on write

		call	TextCopyWrite	; copy text on write
		jc	TextAddByte2	; memory error

Před modifikací obsahu textového řetězce je nejdříve provedena duplikace textu funkcí TextCopyWrite v případě, že textová proměnná není jediným vlastníkem dat textového řetězce (nebo jedná-li se o konstantní text). V případě chyby paměti je funkce ukončena s chybovým příznakem CY.


; ------------- Resize data buffer

		mov	eax,[ebx]	; EAX <- data buffer
		mov	eax,[eax+TEXT_Length] ; EAX <- length of data buffer
		inc	eax		; EAX <- new size of data buffer
		call	TextResize	; resize data buffer
		jc	TextAddDig2	; memory error

Funkcí TextResize se realokuje velikost datového bufferu. Délka textu se zvýší o 1 bajt. V případě chyby paměti je funkce ukončena s chybou a obsah textu zůstane nezměněn.


; ------------- Store character (it exits with NC)

		add	eax,[ebx]	; EAX <- end of data buffer
		mov	[eax+TEXT_Text-1],cl ; store character into buffer

; ------------- Pop registers

TextAddByte2:	pop	ecx		; pop ECX
		pop	eax		; pop EAX
		ret

Znak z registru CL je uložen na konec textu v bufferu.


Obsah / Utility / TEXT / TextAddByte