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

Obsah / Utility / TEXT / TextNew

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


TextNew - Vytvoření nových dat textového řetězce

Funkce TextNew vytvoří nová data textového řetězce. Jedná se o interní funkci, která je volána ostatními funkcemi obsluhy textů. Funkce neodpojuje případná stará data, proto nesmí být k proměnné žádná data připojena nebo mohou být připojena konstantní data (jako například prázdný text).


; -----------------------------------------------------------------------------
;                         Create new text data buffer
; -----------------------------------------------------------------------------
; INPUT:	EAX = required size of text data buffer in bytes (without head)
;		EBX = pointer to TEXT
; OUTPUT:	CY = memory error (content of TEXT not changed)
; -----------------------------------------------------------------------------

Na vstupu funkce obsahuje registr EAX požadovanou velikost textu v datovém bufferu (v bajtech, bez hlavičky dat textového řetězce) a registr EBX obsahuje ukazatel na textovou proměnnou TEXT. V případě chyby nedostatku paměti je navrácen příznak chyby CY, v tom případě není obsah proměnné textového řetězce změněn.


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

TextNew:	push	ecx		; push ECX
		xchg	ecx,eax		; ECX <- save required size of text

; ------------- Allocate text data buffer

		lea	eax,[ecx+TEXTDATA_size] ; EAX <- size of buffer
		TEXTBUFALLOC		; allocate buffer
		jc	TextNew2	; memory error

Funkce si uchová do registru ECX požadovanou velikost textu Do registru EAX připraví velikost datového bufferu, tj. velikost textu včetně hlavičky dat textové proměnné. Pomocí makra TEXTBUFALLOC je alokován nový datový buffer. V případě chyby paměti je funkce ukončena s navrácením chybového příznaku CY.


; ------------- Initialize text data buffer (it exits with NC)

		mov	[ebx],eax	; store address of text data buffer
		mov	dword [eax+TEXT_Ref],1 ; initialize reference counter
		mov	[eax+TEXT_Length],ecx ; store length of text

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

TextNew2:	xchg	eax,ecx		; EAX <- return required size of text
		pop	ecx		; pop ECX
		ret

Adresa nově vytvořeného datového bufferu je uložena do proměnné textového řetězce [EBX]. Je provedena inicializace datového bufferu spočívající v tom, že referenční čítač se nastaví na hodnotu 1 (proměnná je tedy jediným vlastníkem dat textového řetězce) a délka se nastaví podle registru ECX.

Do registru EAX je navrácena pžadovaná délka textu a registr ECX je navrácen ze zásobníku.


Obsah / Utility / TEXT / TextNew