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

Obsah / Utility / TEXT / TextDetach, TextTerm

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


TextDetach, TextTerm - Odpojení dat textového řetězce od proměnné textového řetězce, destrukce proměnné textového řetězce

Funkce TextDetach odpojí data textového řetězce od proměnné textového řetězce. Funkce TextTerm slouží k destrukci proměnné textového řetězce. Jedná se o totožné funkce, ale v budoucnu mohou být funkce odděleny.


; -----------------------------------------------------------------------------
;                  Detach text string data from text string
; -----------------------------------------------------------------------------
; INPUT:	EBX = pointer to TEXT
; NOTES:	It must be paired with TextAttach.
; -----------------------------------------------------------------------------

Na vstupu funkce obsahuje registr EBX ukazatel na textovou proměnnou TEXT. Funkce pro připojení a odpojení dat (TextAttach a TextDetach) musí být spárovány, tj. počet připojení musí odpovídat počtu odpojení.


TextTerm:				; destroy text string
TextDetach:	push	eax		; push EAX
		mov	eax,[ebx]	; EAX <- pointer to TEXTDATA
		cmp	byte [eax+TEXT_Ref+3],CTEXTREFHIGH ; read-only?
		je	TextDetach2	; text string is read only
		LOCKSMP			; CPU instruction lock
		dec	dword [eax+TEXT_Ref] ; decrease reference counter
		jnz	TextDetach2	; counter does not reached zero
		TEXTBUFFREE		; free TEXTDATA
TextDetach2:	pop	eax		; pop EAX
		ret

Funkce načte z proměnné textového řetězce EBX ukazatel na data textového řetězce do registru EAX. Kontrolou referenčního čítače se rozliší, zda jsou data textového řetězce konstantní. Pokud se jedná o konstantní text (nejvyšší bajt referenčního čítače má hodnotu 80h), referenční čítač nebude měněn a funkce se ukončí. Nejedná-li se o konstantní text, dekrementuje se referenční čítač dat textového řetězce. Dekrementace se provede s uzamknutím sběrnice procesoru instrukcí LOCK, čímž je ošetřena možnost souběhu více procesorů. Pokud referenční čítač dosáhl nuly, žádný další vlastník data textového řetězce již nevlastní a proto jsou zrušena pomocí makra TEXTBUFFREE.


Obsah / Utility / TEXT / TextDetach, TextTerm