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

Obsah / Utility / TEXT / TextLangNear

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


TextLangNear - Vyhledání textu pro nejbližší jazyk

Funkce TextLangNear vyhledá ve vícejazyčném textu text pro nejbližší jazyk.


; -----------------------------------------------------------------------------
;           Find text in multi-language text array in nearest language
; -----------------------------------------------------------------------------
; INPUT:	AX = required language identifier LANG
;		EBX = pointer to multi-language text array LANGTEXT
; OUTPUT:	AX = found language identifier LANG
;		EBX = pointer to text variable TEXT
; -----------------------------------------------------------------------------

Na vstupu funkce obsahuje registr AX identifikátor požadovaného jazyku a pod-jazyku LANG, 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 AX identifikátor jazyku LANG nalezeného textu.


; ------------- Try to find text with language and sub-language

TextLangNear:	call	TextSubLangGet	; find text
		jnc	TextLangNear8	; text has been found

; ------------- Try to find text with language (ignore sub-language)

		call	TextLangGet	; find text
		jnc	TextLangNear8	; text has been found

; ------------- push registers

		push	ecx		; push ECX

; ------------- Try to find similar language

		movzx	ecx,ah		; ECX <- language main identifier
		mov	ah,[LangNear+ecx] ; AH <- near language
		call	TextLangGet	; find text
		jnc	TextLangNear6	; text has been found

; ------------- Try to find english language

		mov	ah,LANG_ENGLISH	; AH <- english language
		call	TextLangGet	; find text
		jnc	TextLangNear6	; text has been found
		
; ------------- Use first language

		mov	ax,[ebx+LANGTEXT_Lang] ; AX <- language identifier

; ------------- pop registers

TextLangNear6:	pop	ecx		; pop ECX
TextLangNear8:	ret

Funkce se pokouší vyhledat text nejdříve s přesným identifikátorem jazyku pomocí funkce TextSubLangGet. Je-li text úspěšně nalezen, funkce se ihned ukončí.

Druhý pokus se provede pomocí funkce TextLangGet, která ignoruje vedlejší identifikátor jazyku. Je-li text úspěšně nalezen, funkce se ihned ukončí.

V případě neúspěchu se z tabulky LangNear připraví hlavní identifikátor alternativního blízkého jazyku a provede se nové hledání pomocí funkce TextLangGet (s ignorováním vedlejšího identifikátoru jazyku). Je-li text úspěšně nalezen, funkce se ihned ukončí.

Poslední pokus spočívá ve vyhledání textu v angličtině, opět pomocí funkce TextLangGet. Pokud ani tento pokus neuspěje, použije se první text pole.


Obsah / Utility / TEXT / TextLangNear