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

Obsah / Utility / TEXT / TextAddAbsTime

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


TextAddAbsTime - Přidání absolutního času na konec textu

Funkce TextAddAbsTime přidá formátovaný datum/čas na konec textu, na rozdíl od funkce TextAddDateTime je však datum/čas zadáno v absolutním času v registrovém páru EDX:EAX (tj. počet stovek nanosekund od 1.1. roku 1).


; -----------------------------------------------------------------------------
;                       Add absolute time to end of text
; -----------------------------------------------------------------------------
; INPUT:	EDX:EAX = absolute time (100-nanosec from 1/1/1 BCE 0:00)
;		EBX = pointer to destination TEXT variable
;		ECX = pointer to nationality descriptor NATIONAL (NULL=default)
;		ESI = pointer to source TEXT variable
; OUTPUT:	CY = memory error (text not changed)
; -----------------------------------------------------------------------------
; Local variables (ebp+N are read-only variables):

%define		TFATDst		ebp+8	; (4) destination TEXT

Na vstupu funkce obsahuje registrový pár EDX:EAX absolutní čas, tj, počet stovek nanosekund od 1.1. roku 1. Registr EBX obsahuje ukazatel na cílovou proměnnou, do které se zformátovaný text uloží. Registr ECX obsahuje ukazatel na popisovač národnostních informací NATIONAL. Je-li ukazatel nulový (tj. obsahuje NULL), použije se implicitní popisovač národnostních informací. Registr ESI obsahuje ukazatel na textovou proměnnou obsahující formátovací řetězec. V případě chyby paměti je navrácen chybový příznak CY a obsah cílové textové proměnné se nezmění.

Funkce používá lokální proměnnou TFATDst, což je ukazatel na cílovou textovou proměnnou.


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

TextAddAbsTime:	push	ebx		; push EBX (destination TEXT)
		push	edx		; push EDX
		push	ebp		; push EBP
		mov	ebp,esp		; EBP <- push ESP
		sub	esp,DATETIME_size ; ESP <- local buffer

; ------------- Decode absolute time into date-time structure

		mov	ebx,esp		; EBX <- local buffer
		call	AbsToDateTimeExt ; convert absolute time into DATETIME

Po úschově registrů je v zásobníku vytvořen buffer pro pomocnou strukturu DATETIME a do této struktury je zkonvertován absolutní čas pomocí funkce AbsToDateTimeExt.


; ------------- Convert date/time to text

		mov	edx,ebx		; EDX <- DATETIME structure
		mov	ebx,[TFATDst]	; EBX <- destination TEXT
		xchg	eax,esi		; EAX <- pointer to source TEXT
		call	TextAddDateTime	; convert date/time to text
		xchg	eax,esi		; return ESI

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

		mov	esp,ebp		; pop ESP
		pop	ebp		; pop EBP
		pop	edx		; pop EDX
		pop	ebx		; pop EBX
		ret

Voláním funkce TextAddDateTime je datum a čas ze struktury DATETIME přidán na konec cílového textu a registry jsou obnoveny ze zásobníku.


Obsah / Utility / TEXT / TextAddAbsTime