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

Obsah / Utility / TEXT / TextLangGet

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


TextLangGet - Vyhledání textu pro daný jazyk

Funkce TextLangGet vyhledá ve vícejazyčném textu text pro daný jazyk (pod-jazyk je ignorován).


; -----------------------------------------------------------------------------
;         Find text in multi-language text array in given language
; -----------------------------------------------------------------------------
; INPUT:	AH = language main identifier
;		EBX = pointer to multi-language text array LANGTEXT
; OUTPUT:	CY = language not found (AL and EBX not changed)
;		AL = found sub-language identifier (only if NC)
;		EBX = pointer to text variable TEXT (only if NC)
; NOTES:	Function is not sub-language sensitive.
; -----------------------------------------------------------------------------

Na vstupu funkce obsahuje registr AH hlavní identifikátor požadovaného jazyku, registr EBX obsahuje ukazatel na první položku pole vícejazyčných textů LANGTEXT (první položka obsahuje počet položek v poli). Funkce navrátí v registru EBX ukazatel na položku s nalezeným požadovaným identifikátorem jazyku (lze s ní pracovat jako s běžnou textovou proměnnou) a v registru AL vedlejší identifikátor jazyku nalezeného textu. Není-li taková položka v poli nalezena, navrátí funkce příznak chyby CY a obsah registrů EBX a AL zůstane nezměněn.


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

TextLangGet:	push	ecx		; push ECX
		push	ebx		; push EBX

; ------------- Prepare registers

		movzx	ecx,word [ebx+LANGTEXT_Num] ; ECX<-number of languages

; ------------- Find language

TextLangGet2:	cmp	ah,[ebx+LANGTEXT_Lang+LANG_ID] ; check language ident.
		je	TextLangGet4	; language found OK
		add	ebx,byte LANGTEXT_size ; EBX <- next string
		loop	TextLangGet2	; check next language

; ------------- Language not found

		stc			; set error flag
		pop	ebx		; pop EBX
		pop	ecx		; pop ECX
		ret

; ------------- Language has been found (here is NC)

TextLangGet4:	mov	al,[ebx+LANGTEXT_Lang+LANG_SubID] ; AL <- sub-language
		pop	ecx		; destroy EBX
		pop	ecx		; pop ECX
		ret

Po úschově registrů se do registru ECX připraví počet položek v poli vícejazyčných textů. Pole je procházeno po jednotlivých položkách a pokud je nalezen text s hledaným jazykovým identifikátorem (kontroluje se pouze hlavní identifikátor), funkce je ukončena s příznakem NC, registr EBX ukazuje na nalezenou položku a do registru AL se načte vedlejší identifikátor jazyku nalezeného textu. Dosáhne-li funkce konce pole, obnoví se původní registr EBX a funkce se ukončí s příznakem chyby CY.


Obsah / Utility / TEXT / TextLangGet