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

Obsah / Utility / TEXTFORM / FormAbsDateTime

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

Související:

Formátovací řetězec funkce FormDateTime
FormAbsDateTimeN   Délka formátovaného textu absolutního času
FormDateTime   Zformátování data a času do bufferu

FormAbsDateTime - Zformátování absolutního času do bufferu

Funkce FormAbsDateTime zformátuje do bufferu text data a času podle formátovacího řetězce, časový údaj je přitom zadán v absolutním tvaru.


; -----------------------------------------------------------------------------
;                    Format absolute time into text buffer
; -----------------------------------------------------------------------------
; INPUT:	EDX:EAX = absolute time (100-nanosec from 1/1/1 BCE 0:00)
;		EBX = size of source text (with date-time format descriptor)
;		ECX = pointer to nationality descriptor NATIONAL (NULL=default)
;		ESI = remaining free space in destination buffer
;		EDI = destination buffer
;		EBP = source text (with date-time format descriptor)
; OUTPUT:	ESI = next remaining free space in buffer
;		EDI = next destination buffer
; -----------------------------------------------------------------------------

Na vstupu funkce obsahuje registrový pár EDX:EAX absolutní čas v násobcích 100 nanosekund od začátku našeho letopočtu. Registr EBX obsahuje délku zdrojového textu v bajtech. Registr ECX obsahuje ukazatel na popisovač národnostních informací NATIONAL. Je-li obsah registru ECX nulový, použije se implicitní popisovač národnostních informací. Registr ESI obsahuje čítač zbylého místa v cílovém bufferu a registr EDI ukazatel do cílového bufferu.Registr EBP obsahuje ukazatel na zdrojový text ke zformátování. Zdrojový text je v kódu UTF-8. Na výstupu ukazují registry ESI a EDI na novou ukládací pozici.


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

FormAbsDateTime:push	eax		; push EAX
		push	ebx		; push EBX (size of source text)
		push	ecx		; push ECX
		push	edx		; push EDX
		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

; ------------- Default nationality

		or	ecx,ecx		; default nationality?
		jnz	FormAbsDateTim2	; not default nationality
		DEFAULT_NAT ecx		; ECX <- get default nationality

; ------------- Format date/time into text buffer

FormAbsDateTim2:xchg	eax,ebx		; EAX <- date-time structure
		mov	ebx,[esp+DATETIME_size+8] ; EBX <- size of source text
		mov	edx,ebp		; EDX <- source text
		call	FormDateTime	; format date/time

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

		add	esp,DATETIME_size ; destroy local buffer
		pop	edx		; pop EDX
		pop	ecx		; pop ECX
		pop	ebx		; pop EBX
		pop	eax		; pop EAX
		ret

Na začátku funkce jsou uschovány registry do zásobníku a v zásobníku je připraven buffer pro strukturu DATETIME. Absolutní datum a čas je funkcí AbsToDateTimeExt zkonvertováno na jednotlivé položky ve struktuře DATETIME. Je-li ukazatel na národnostní informace v registru ECX nulový, vyhledá se implicitní popisovač pomocí makra DEFAULT_NAT. Datum a čas ze struktury v zásobníku se zkonvertuje do výstupního bufferu funkcí FormDateTime.


Obsah / Utility / TEXTFORM / FormAbsDateTime