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

Obsah / Utility / TEXTFORM / FormAbsDateTimeN

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

Související:

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

FormAbsDateTimeN - Délka formátovaného textu absolutního času

Funkce FormAbsDateTimeN zjistí délku textu formátovaného data a času, časový údaj je přitom zadán v absolutním tvaru.


; -----------------------------------------------------------------------------
;            Format absolute time into text buffer - get text length
; -----------------------------------------------------------------------------
; 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)
;		EBP = source text (with date-time format descriptor)
; OUTPUT:	ESI = text length
; -----------------------------------------------------------------------------

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 EBP obsahuje ukazatel na zdrojový text ke zformátování. Zdrojový text je v kódu UTF-8. Na výstupu obsahuje registr ESI délku textu.


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

FormAbsDateTimeN:
		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	FormAbsDateTmN2	; not default nationality
		DEFAULT_NAT ecx		; ECX <- get default nationality

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

FormAbsDateTmN2: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	FormDateTimeN	; 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. Délka textu data a času ze struktury v zásobníku se zjistí funkcí FormDateTimeN.


Obsah / Utility / TEXTFORM / FormAbsDateTimeN